Forum: Mikrocontroller und Digitale Elektronik atmega64 mit ext. int. aufwecken ?


von karl (Gast)


Lesenswert?

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

von Fritz Ganter (Gast)


Lesenswert?

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.

von karl (Gast)


Lesenswert?

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

von Fritz Ganter (Gast)


Lesenswert?

Flanke geht nur mit sleepmode Idle.

von Rahul (Gast)


Lesenswert?

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

von Rahul (Gast)


Lesenswert?

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

von karl (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von karl (Gast)


Lesenswert?

Besten Dank!!

Funktioniert einwandfrei ...

mit freundlichen grüßen
karl

von Fritz Ganter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.