Forum: Compiler & IDEs sleep - Timer2 soll aufwecken


von Jens-Erwin (Gast)


Lesenswert?

Folgendes funktioniert nicht richtig, der AVR wacht nicht auf ...

Im Simulator geht alles - die Led schaltet sich nach dem Aufwachen aus, 
sie müsste also kurz aufleuchten. Real - geht es aber nicht -- bitte um 
Hilfe

Auch wenn ich noch eine kleine while-Schleife nach dem Starten des 
Timers anbringe (um das Loslaufen des Timers abzusichern), so dass sleep 
erst bei TCNT2 = 10 z.B. ausgeführt wird, klappt es nicht. Es kommt nie 
zur while-Schleife. Muss ich was entsprechendes in die IR-Routine 
schreiben?

Strom geht nach unten, also sleep funktioniert ...
1
....
2
3
ISR(TIMER2_OVF_vect)
4
{  
5
  asm("nop");
6
}
7
8
....
9
10
ASSR |= (1<<AS2);  //asynchron, 8MHz Quarz hängt dran
11
12
TCCR2 = 7;   //Timer einschalten mit Teiler
13
14
MCUCR |= (1<<SE);
15
MCUCR |= (3<<SM0);    // Power Save
16
17
sei();
18
19
LedOn;  //Makro
20
21
TCNT2 = 0;     // zurück setzen
22
TIMSK |= (1<<TOIE2);  // Interrupt ein
23
    
24
asm ("sleep");
25
26
while(1) LedOff;

von Falk B. (falk)


Lesenswert?

Sleep Mode

Der asynchrone Timer muss erst anlaufen.

MFG
Falk

von holger (Gast)


Lesenswert?

>ASSR |= (1<<AS2);  //asynchron, 8MHz Quarz hängt dran

Hab ich das jetzt im Datenblatt falsch gelesen, oder
möchte der wirklich nur mit 32kHz Uhrenquarz laufen ?

von Falk B. (falk)


Lesenswert?

@ holger (Gast)

>Hab ich das jetzt im Datenblatt falsch gelesen, oder
>möchte der wirklich nur mit 32kHz Uhrenquarz laufen ?

Nur 32 kHz Uhrenquarz.

MFG
Falk

von holger (Gast)


Lesenswert?

>>ASSR |= (1<<AS2);  //asynchron, 8MHz Quarz hängt dran
>Nur 32 kHz Uhrenquarz.

Dann haben wir sein Problem ja gefunden ;)

von Jens-Erwin (Gast)


Lesenswert?

Kann sein, obwohl der im normalen synchronen Modus doch auch mit hohen 
Frequenzen läuft - ist das wirklich der Grund?

von Rolf Magnus (Gast)


Lesenswert?

Daran liegt's bestimmt nicht, sondern eher daran, daß es keinen Timer2 
gibt.


PS: Damit will ich sagen, daß es evtl. auch davon abhängt, um welchen 
AVR es überhaupt geht.

von Jens-Erwin (Gast)


Lesenswert?

Ihr habt recht - Danke

The CPU main clock frequency must be more than four times the Oscillator
frequency.

Er muss nicht 32kHz haben aber eben 4 mal so langsam sein, wie die 
Hauptfrequenz.

Schade, dann kann man den Weckdienst nur verwenden, wenn der interne 
Takt aktiviert ist, was bei USART-Geschichten zu ungenau wäre.

von Falk B. (falk)


Lesenswert?

@ Jens-Erwin (Gast)

>The CPU main clock frequency must be more than four times the Oscillator
>frequency.

Wo steht das ? In welchem Zusammenhang?

>Schade, dann kann man den Weckdienst nur verwenden, wenn der interne
>Takt aktiviert ist, was bei USART-Geschichten zu ungenau wäre.

Lies den Artikel Sleep Mode!

MfG
Falk

von Rolf Magnus (Gast)


Lesenswert?

> Wo steht das ?

Seite 42.

> In welchem Zusammenhang?

Butterbrot.

PS: Damit will ich sagen, daß es evtl. auch davon abhängt, um welchen
AVR es überhaupt geht.

von Jens-Erwin (Gast)


Lesenswert?

CPU ist ATMega8

Es steht unter

Asynchronous Operation of Timer/Counter2

S.118

ich habe jetzt den halben Tag gebraucht um alles auszuprobieren, 
funktioniert alles sehr gut.


UND NOCH WAS INTERESSANTES -- wen es interessiert,


ich habe mittels Fön und Eiswürfel den ATMega in die Sauna geschickt und 
siehe da, bei internem RC-Osci und einer Baudrate von 38.400 gibt es 
keine Probleme. Mittels interner Osc-Kalibrierung hin und her getestet, 
gibt es sogar noch etwas Spielraum. Also ca. 0° - 60° --- kann man 
riskieren!

Taktfrequenz schwankt zwischen 7.9 und 8.2 MHz bei 8Mhz interner 
Frequenz

von Falk B. (falk)


Lesenswert?

@ Jens-Erwin (Gast)

>ich habe mittels Fön und Eiswürfel den ATMega in die Sauna geschickt und

Weil man ja mit Eiswürfeln auch sooo gut ICs kühlen kann . . .

>Taktfrequenz schwankt zwischen 7.9 und 8.2 MHz bei 8Mhz interner
>Frequenz

Das sind +/- 1,25%. Würde ich ungern riskieren. Zumal deine Messung 
Schrott ist, zumindes in den Minusgraden.

MFG
Falk

von Jens-Erwin (Gast)


Lesenswert?

Ich habe die Schaltung in den Kühlschrank gelegt - selbe Ergebnis ---

außerdem ist es laut Datenblättern von -20 (kann ich nicht testen)  bis 
+ 60° ein Bereich von 0,4 MHz

Um z.B. Midi-Daten zu übertragen, im Innenbereich - reicht es aus ..

bis +- 3,6% genau, klappt es mit dem Sampeln

und was ich getestet und gemessen habe sind ca. 2,5%.


OSCCAL ließ sich +- 9 vom signierten ausgelesenen Wert verstellen bei 
20°, ohne Fehler -- wenn es heiß oder kalt wurde verschob sich die 
"Mitte" auf immerhin noch +- 3 vom ursprünglichen Wert.

aber wenn's nichts für Falk ist, war ja nur ein kleines für mich sehr, 
sehr sinnvolles Arbeitsergebnis --- für Geräte in normalen Umgebungen 
sicher ausreichend - werde das in der Praxis testen. Ich arbeite 
schließlich beruflich damit .... die Dinger müssen funktionieren ...


Danke - trotzdem

von Falk B. (falk)


Lesenswert?

@ Jens-Erwin (Gast)

>schließlich beruflich damit .... die Dinger müssen funktionieren ...

Und da lässt du es auf einen popeligen 20 Cent Qaurz ankommen. Naja, 
viel Erfolg noch mit deinen Entwicklungen . . .

MFG
Falk

von Jens-Erwin (Gast)


Lesenswert?

Sag mal Falk, was hast Du denn gegen meinen Beitrag? Lies doch mal 
durch, um was es eigentlich geht .... hier noch mal extra für Dich ...

Ich muss anstelle des (wie du meinst) popeligen 20 Cent Quarzes für die 
CPU einen kleineren vielleicht auch 20 Cent-billigen-Quarz anschließen, 
um den Timer2

------ unabhängig -------

von der CPU laufen lassen zu können, damit diese selbst eben von Timer2 
nach Intervallkurzschlaf (wie ich ihn gerade selbst heute Nacht mache, 
es ist 4:32) aufwachen kann. Die CPU selbst hat ja beim Schlafen die Uhr 
ausgeschaltet und der Wecker (Timer2) muss ticken .....

Da ich am ATMega8 keine 2 Quarze anschließen kann (für CPU und Timer2), 
muss also die CPU mit internem RC-Takt laufen, was heißt, nicht mehr 
ganz so genau. Deshalb die Tests mit USART-Frequenz ..... usw.

.... ... ENDE!

von Falk B. (falk)


Lesenswert?

@  Jens-Erwin (Gast)

>Sag mal Falk, was hast Du denn gegen meinen Beitrag?

Weil er suggeriert, dass eine UART Kommunikation mit internem 
RC-Oszillator ganz easy ist. Das ist nicht der Fall. Es kann laufen. Man 
kann auch mit gewissen Aufwand (Kalibrierung, zyklische Rekalibrierung) 
das hinbekommen. Aber man sollte das hier nicht so rumtönen, weil dann 
wieder Horden von Schlaumeiern genau das machen (aber eben ohne 
Kalibrierung) und dann rumjammern wenn der UART nicht geht. Das Forum 
ist voll mit solchen "wertvollen Beiträgen".

MFG
Falk

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.