www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik mega8 powermodes


Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mike,

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

Autor: mike (Gast)
Datum:

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

Autor: Patrick (Gast)
Datum:

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

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Patrick (Gast)
Datum:

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

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Mike,

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

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus S. (schmidle)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.