Hallo brauche Hilfe, mein mega8 läßt sich in den Powerdownmode fahren, läßt sich aber nicht mit den externen interupts (Tasten aufwecken) aufwecken. Wer weiß Rat?
Mike, ein beliebter Fehler ist es, auf die Flanke zu triggern. Wenn die power down ist wird der Interrupt aber nicht erkannt
Hallo Patrick, ich triggere auf rising edge, laut Datenblatt ist das doch möglich?
Mike, das ist möglich, solange die Clock läuft, aber nicht mehr im Powerdownmode
Und wie kann ich Ihn dann aus dem Mode wieder rausholen hatte es schon mit anderen Modes probiert z.B.: idle wo die clock noch läuft auch da reagiert er nicht mehr???
Trigger deinen Interrupt mal auf low level. Und wenn das auch nicht funktioniert könnte du vielleicht deinen code hier rein stellen
Jo hab ich auch schom drangedacht, muss ich aber erst umlöten (Zuhause). Melde mich dann morgen wieder (FH). Bleibt eigentlich ein high level im powerdownmode auf high oder fällt der auf low ich würde annehmen der fällt auf low?
Hallo Patrick, der Tip war gut es funktioniert. Warum schreiben die das nicht in das Datenblatt. Auch die anderen Modes werden nur mit Low Level Interrupt beendet. Aus diesem Grund war ich davon ausgegengen, dass mein Programm nicht funktioniert. Irreführend ist auch das Datenblatt von wegen Triggern des Interrupt Eingangs. Ich hab noch nie gehört dass man mit Low Level was triggern kann. Im Datenblatt meint man aber wahrscheinlichh den Umstand, dass es Tristate Eingänge sind die man auf High Level halten muss um dann auf Low Level zu "triggern". Jedenfalls funktioniert es jetzt beim kleinen Demoprogramm und ich hoffe auch beim großen. also Patrik, vielen Dank nochmal für die schnelle Hilfe. Was ich auch merkwürdig finde ist, dass ein high geschalteter Eingang im Powerdownmode high bleibt und nicht auf low fällt. Aber dass ist ja nicht so tragisch!
Hey Mike, freut mich zu hören :-) Gute Frage warum der Eingang high bleibt... da werde ich auch mal ein wenig rum lesen
Hallo Patrick, ich denk, dass ist auch ganz sinnvoll, falls irgendetwas eingeschaltet bleiben soll und man nicht an den Tarnsistoren oder was sonst noch so dranhängt rumlöten will, hätte aber echt gedacht der würde automatisch auf low fallen. Bis dann. Bin jetzt weg.
Ich bins doch nochmal, ich meinte natürlich ein high geschalteter Ausgang bleibt high (nicht Eingang). Sorry. Die bits machen mich ganz wirr ;-) Bis dann.
Übrigens steht dieser Sonderfall im Datenblatt, daß der Prozi bei stehender Clock nur den Low-Level detektieren kann und dieser muß dann auch für eine gewisse Zeit anliegen.
Hallo TravelRec, Sonderfall ist schon klar aber bei anderen modes wo die clock egal ob extern oder intern läuft (z.B.: idle) kommt er auch nicht mehr aus den powermodes (hier dann idle) raus. Es funktioniert immer nur mit low level. Aus dem idle mode z.B. müßte er alleine schon bei einem Intterrupt eines timers rauskommen tut er aber definitiv nicht. Das war sicher nicht im Sinne des Erfinders.
Hallo mike, "Aus dem idle mode z.B. müßte er alleine schon bei einem Intterrupt eines timers rauskommen tut er aber definitiv nicht." Aus dem Idle mode kommt er bei einem Interrupt des Timers 2 raus und das tut er definitiv ;-) Schau dir mal die Tabelle 14 im Datenblatt des Mega8 an. Ich finde da ist alles auf einen Blick dargestellt. Gruß Markus
Jede Interruptquelle kann den Mega8 aus dem Sleep-Mode "IDLE" aufwecken. Wäre das nicht so, dann würde keines meiner Programme (Assembler) funktionieren. Denn ich benutze grundsätzlich einen Timer-Interrupt für die Steuerung des Programmablaufs (mal Timer0-OVF, mal Timer1-Comp) und schicke den AVR in den Sleepmode, sobald alle Jobs der Mainloop abgearbeitet sind. ...
Hallo Leute, bin Anfänger! und benutze den CodeVision Compiler evaluation version. Habe im Programm auch den timercompare interrupt drin.Kommt definitiv im idle mode nicht wieder hoch, obwohl ja dann die clock laüft und der timer permanent weiter zählen soolte und dann seinen interrupt auslöst der ja den mega8 wecken sollte. Auch läuft das Programm jetzt ganz gut nur wenn ich über die interruptgesteuerte serielle schnittstelle daten sende und direkt danach in den sleepmode gehe sendet er nicht das ganze array oder den bufferinhalt sondern verschluckt ein paar zeichen. Die sendet er dann wenn ich ihn mit extint Taste wieder wecke? Liegt das an der priorität der interrupts? Man kann beim codevision unter c nur folgende routinen benutzen: sleep_enbable(); powerdown(); oder idle() usw. Parameter kann man da nicht eingeben!Routine is void und parameter is void. ...
Die Sleepmodes stellt man ein, indem man die entsprechenden Bits im Steuerregister MCUCR setzt bzw. löscht (siehe Datenblatt des Mega8). Dein Compiler kann da auch nix anderes machen, es geht halt nur so. So ein AVR kann nämlich weder C noch BASCOM, er kann nur Maschinencode und mit Maschinencode (bzw. der 1:1 Umsetzung namens Assembler) geht es definitiv! Wenn es bei dir nicht geht, machst du sicherlich etwas falsch. Oder aber dein Compiler taugt nix, was ich aber kaum glauben kann. ...
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.