iIh verzweifel grade daran meinen atmega64 mit einem flankengesteuerten ext. int (egal welche flanke und auch egal welcher int.) aufzuwecken. Ich versteh auch nich ganz was die Zahl nach dem Doppelpunkt bei "Only INT3:0 or level interrupt INT7:4." heißen soll. Könnte mir jemand ein kleines beispiel geben wie ich einen ext.int initliseren muss der es schafft einen atmega64 aus dem sleep mode wecken kann! Wenn möglich auch aus einem "tieferen" schlaf als dem idle mode. besten dank, karl
Aus den tiefen Idle-Modes kannst du nur mit LEVEL Interrupt aufwecken. Da kein Takt erzeugt wird, kann er auch keine Flanke erkennen. Du kannst da INT0 und INT1 nehmen, allerdings musst du auf LEVEL-Interrupt einstellen.
Hallo! Ich muss aber leider einen Int. verwenden, der durch eien Flanek ausgelöst wird - wobei die Flanke eben egal ist, kann also einstellen welche kommen soll. Um flankengesteuerte Interrupts zu verwenden, muss doch nru die "Main Clock" laufen ... und die ist abgesehen von Power-Down udn Pwer-Save eh überall eingeschalten. Das Problem ist aber wirklich, dass ich nicht ganz verstehe welche Interrupts ich nun verwenden kann ... und vorallem wie ich diese initilisiere ... hab nur Beispiele für den atmega8 gefunden und im Datenblatt finde ich leider wirklich keine Erklärung aus der ich schlau werde. karl
Ich kenne den ATmega64 jetzt nicht, aber die Bezeichnung "INT7:4" bedeutet meist "Interrupt 7 bis Interrupt 4". Der Doppelpunkt hat also die gleiche Funktion wie der Bindestrich im Deutschen... Müsste eigentlich so sein. Ich weiß halt nicht, wieviele Interrupt-Quellen der ATMEga64 hat. Sind damit vielleicht auch die internen wie Timer etc gemeint? Gruß Rahul
Hab mir gerade das Datenblatt angeguckt: Es sind insgesamt 8 externe Interrupt-Quellen, wobei die oberen 4 (INT7:4) Level getriggert sind und die unteren 4 scheinbar flankengetriggert. Gruß Rahul
Danke erstmal für eure zahlreiche und schnelle Hilfe. Laut Datenblatt (Table 18, Seite 46) kann ich doch die Ints 7:0 für JEDEN Sleep-Modus verwenden, oder ? Wenn ich das jetzt richtig verstanden habe, kann ich ja eh Int 7:0 (also 7 - 0 g) verwenden. Und 3:0 sind ja auch flankengetriggert - also muss ich einfach einen von diesen verwenden um ihn aufzuwecken? Werde das ganze mal so versuchen , wenn mir jemand von euch sein "ok" gibt - ein kleines Beispiel wie manbeim atmega64 einen solchen interrupt init. wär natürlich auch parktisch. Timer, etc hab ich schon alles zusammengebracht .. abe rbei den ext. int scheiters irgendwie! freundliche Grüße karl
Die Int0 - Int3 können aus Powerdown mit Flanken (>=50ns) aufgeweckt werden. Hier ein Beispiel für Int1: EIMSK &= ~2; // Int1 zuerst sperren EICRA |= 0xc; // positive flanke einstellen EIFR = 2; // flag loeschen EIMSK |= 2; // und Int1 Interrupt freigeben Zum Schlafenlegen wird benötigt: MCUCR = 0x30; // Stoppmodus waehlen __sleep(); // und stoppen Das Aufwachen dauert ein paar Millisekunden, bis der Oszillator+Logik betriebsbereit sind.
Besten Dank!! Funktioniert einwandfrei ... mit freundlichen grüßen karl
Stimmt, ich hab im falaschen Datenblatt geschaut, war Mega32, da geht nur Level-Interrupt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.