Hallo leute,
habe gestern versucht eine Interrupt Routine zu Programmieren, doch sie Funktioniert weder im Simulator noch mit dem richtigen Chip. Ich weiß einfach nicht an was es liegt.
Hier mein Code:
Die GICR Maske ist gesetzt, die MCUCR Bits sind aktiviert und das I Flag ist aktiv, dass müsste doch dann eigentlich Funktionieren wenn der Port D2 (Int0) dann von Low auf high gesetzt wird oder? In meinem Datenblatt vom AtMega32 steht, dass der Interrupt auch funktioniert wenn der Port auf output steht, also hab ich ihn auf low gestellt.Code:.include "m32def.inc" .def temp1 = r16 .org 0x000 rjmp main .org 0x002 rjmp int0_handler ;IRQ0 Handle int0_handler: ldi temp1, 0b00010000 ;PortC5 HIGH, rest LOW out PortC, temp1 reti main: ldi temp1, 0xFF ;Port D auf Ausgang out DDRD, temp1 ldi temp1, 0x00 ;Port D auf LOW out PORTD, temp1 ldi temp1, 0xFF ; PortC auf Ausgang out DDRC, temp1 ldi temp1, 0b00000000 ;PortC LOW out PortC, temp1 in temp1, GICR ori temp1, 0b01000000 ;INT0 = 1 andi temp1, 0b11111101 ;IVSEL = 0 out GICR, temp1 in temp1, MCUCR ;INT0 Aktivieren ori temp1, 0b00000011 ; rising Edge out MCUCR, temp1 sei ende: rjmp ende
Wäre nett wenn ihr mir helfen könntet.
LG
Jason07
Geändert von Searcher (21.03.2013 um 10:06 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Es geschieht extern, ich entneme dem Board die 5V Versorgungspannung, habe dann eine Spannungsteiler mit 2 Widerständen 470 Ohm und 1kOhm und geh dann wieder an den Ground vom Board. Parallel zu dem 1k Widerstand liegt ein Taster, der dann mit dem Port D2 Verbunden ist. Aber wenn ich gerade so überlge bleibt die Spannung ja dann trotzdem auf low am Port D2 oder? Durch das schließen des Tasters dürfte doch die Gesamte Spannung am 470 Ohm Widerstandbfallen ?! Lieg ich da richtig?
Also ich verstehe, daß ein 1k Widerstand von VCC (+5V) nach PD2 geschaltet ist. Von PD2 ein 470 Ohm dann nach GND.
Parallel zum 1k liegt der Taster. Wenn der Taster geschlossen wird, wird VCC auf den PD2 geschaltet.
Das ist nicht gut!!! Dann fließt ein hoher Strom von VCC über den Taster nach PD2 und innerhalb vom µC nach GND (PD2 ist Ausgang und low). Der 470 Ohm Widerstand macht nichts, da über den PD2 nach GND überbrückt/kurzgeschlossen.
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Zwischen Vcc und PD 2 ist ja der 470 Ohm Widerstand, es dürften also ca. 10 mA fließen. Es kommt erst der 470 Ohm Widerstand, dann parallel der Taster und der 1k Widerstand. Der Taster ende am PD2 und der 1k Widerstand am Gnd. Somit fließt ein Strom über PD 2 der nicht bedenklich ist, da der Controller an dem Pin 20 mA verträgt. Jedoch erhöht sich wie ich in meine letzen Beitrag die Spannung nicht oder? Sie fällt durch das schliessen des Tasters dann Komplett am 470 Ohm Widerstand ab und der Pin ist immer noch auf Low und somit dann auch kein Interrupt oder? Also müsste ich den pin auf eingang schalten mit Pullup auf Gnd oder? Aber wie funktionier dann ein Interrupt wenn der Port auf Ausgang steht? Er hat ja immer einen Wert, High oder Low.
Ich blick immer noch nicht durch die Beschaltung durch. Mach besser eine Skizze.
Also wenn Du PD2 nie direkt nach VCC mit dem Taster schaltest, sondern immer mindestens den 470 Ohm Widerstand zwischen VCC und PD2 hast, geht schon mal nichts kaputt.
Du wirst aber den PD2 nicht auf high ziehen können, da der ja praktisch mit GND verbunden ist (weil ja Ausgang und auf low geschaltet)
Die Funktion mit Auslösen des INT, wenn der Pin auf Ausgang geschaltet ist, ist wohl eher für andere Zwecke gedacht:
zB könnte ich mir vorstellen, daß über den Ausgang eine Zeitmeßhardware eingeschaltet wird. Intern wird durch die Pegeländerung am Pin der Interrupt ausgelöst. In der ISR wird die Zeitmessung im µC SW-mäßig gestartet ... oder so etwas.
Für Deine Anwendung sollte der PD2 als Input geschaltet sein.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Also irgendwas stimmt da garnicht, mir fällt gerade auf der Taster bewirkt garnichts weil ja von dem 470 Ohm Widerstand direkt ein Kabel geht, also fließt einfach immer ein Strom über den Port. Jedoch habe ich grade gemessen und es besteht zwischen PD2 und VCC keine Spannung das kann ja nicht sein wenn der Port als ausgang auf Low geschaltet ist. Ampermeter zeigt auch 0 A. Ich muss nachher nochmal die Schaltung überabreiten is is was völlig verquer, aber warum funktioniert es im AVR Studio im Simulator nicht? Wenn ich dort das Bit von High auf Low schalte müsster er ja eigentlich in die Interrupt Routine springen oder?
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Ähm ich meine ja von Low auf High sry verschrieben ^^. Aber der Code ist deiner Ansicht nach richtig? Ich hab nen Schaltplan nur auf nem anderen Pc muss aber jetzt erst mal weg ich lad ihn nachher hoch und werd danach nochmal was umbauen.
Danke schonmal für deine Hilfe
Gerne. Hast Du meinen Post von hier https://www.roboternetz.de/community...l=1#post574353 schon gelesen
Dein Code sieht für mich nicht falsch aus. Kann ich aber nicht nachtesten
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Weg zu einigen meiner Konstruktionen
Lesezeichen