Forum: Mikrocontroller und Digitale Elektronik mega8 powermodes


von mike (Gast)


Lesenswert?

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?

von Patrick (Gast)


Lesenswert?

Mike,

ein beliebter Fehler ist es, auf die Flanke zu triggern. Wenn die power
down ist wird der Interrupt aber nicht erkannt

von mike (Gast)


Lesenswert?

Hallo Patrick,
ich triggere auf rising edge, laut Datenblatt ist das doch möglich?

von Patrick (Gast)


Lesenswert?

Mike,
das ist möglich, solange die Clock läuft, aber nicht mehr im
Powerdownmode

von mike (Gast)


Lesenswert?

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???

von Patrick (Gast)


Lesenswert?

Trigger deinen Interrupt mal auf low level. Und wenn das auch nicht
funktioniert könnte du vielleicht deinen code hier rein stellen

von mike (Gast)


Lesenswert?

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?

von mike (Gast)


Lesenswert?

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!

von Patrick (Gast)


Lesenswert?

Hey Mike,

freut mich zu hören :-)
Gute Frage warum der Eingang high bleibt... da werde ich auch mal ein
wenig rum lesen

von mike (Gast)


Lesenswert?

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.

von mike (Gast)


Lesenswert?

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.

von TravelRec. (Gast)


Lesenswert?

Ü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.

von mike (Gast)


Lesenswert?

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.

von Markus S. (schmidle)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von mike (Gast)


Lesenswert?

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.

...

von Hannes L. (hannes)


Lesenswert?

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