www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega48: Timer2 async + häufiger sleep-mode -> gerät ausser Takt?


Autor: Paul H. (powl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe da ein merkwürdiges Problem. Bin grade dabei eine Binär-Uhr mit 
meinem ATmega48 zu bauen. Sobald der Akku leer ist soll das Ding in den 
Low-Bat Modus gehen. Das soll so aussehen, dass es nur noch sehr wenig 
Strom verbraucht und die 17 LEDs (6 für Sekunden, 6 für Minuten, 5 für 
Stunden) der Reihe nach kurz aufblitzen. Die LEDs sind per 
Charlieplexing angeschlossen, der Prozessor muss also die ganze Zeit 
währenddessen mit den internen 8Mhz laufen (selbst wenn ich nur eine 
einzelne LED an hab. Da diese viel zu hell werden würde, müsste ich sie 
per pwm dimmen). Am Timer2 ist asynchron ein Uhrenquarz angeschlossen 
und erzeugt 16 Interrupts die Sekunde.

Bei der sechzehnten bzw. nullten Timer2-OVF ISR in einer jeden Sekunde 
wird die aufblitzen zu lassende LED aktiviert, bei der nächsten, also 
der ersten OVF-ISR wird sie wieder abgeschaltet und das Flag gesetzt, 
das der Main-Function signalisiert dass sie jetzt in den Power-Save Mode 
gehen darf. D.h. der µC läuft jede Sekunde 1/16 dieser Zeit voll durch, 
die übrigen 15/16 schläft er (abgesehen von den übrigen Timer-OVFs die 
nur die Teilervariable um eins hochzählen).

Auf jeden Fall scheint mein µC das nicht mitzumachen. Er gerät ausser 
Takt. Eine normale Sekunde scheint dann nur noch 375ms zu dauern, der 
Timer2 muss offensichtlich wesentlich schneller schwingen, aber warum? 
Verkraftet der µC den ständigen Sprung in den Sleep-Mode nicht? Brauch 
ich einen externen Taktgenerator für den Uhrenquarz der unabhängig und 
stabil arbeitet?

Ich hab das Programm mal auf das wesentliche reduziert und angehängt. 
Wenn ich nicht in den Sleep-Modus geh läuft alles normal. Ansonsten 
zirka 3 mal so schnell.

lg PoWl

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe nochmal einen Nachtrag. Bei der Messung mit dem Oszi am X2 pin 
stellte sich raus, dass die Frequenz des Quarzes stabil bleibt. Jedoch 
ändert sich die Amplitude wenn ich im Power Save bin, sie wird etwas 
kleiner aber auch nicht sonderlich viel. Normalerweise beträgt sie 
ziemlich genau 1,1V, im Power Save Modus ungefär 0,8V. Die Frequenz 
bleibt absolut stabil. Ich habe keine Ahnung warum der Controller auf 
einmal 3..4 mal so schnell läuft

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Ich habe mir das bei dir nicht genau angesehen, aber wenn der 
Sleep-Mode von irgendwas abhängig ist, das in einem Interrupt gesteuert 
wird, dann ist es meist ungünstig, wenn das Ereignis genau zwischen dem 
Test und der Aktivierung des Sleep-Modes auslöst.

Zu lösen ist das, indem man den Test bei abgeschalteten Interrupts macht 
und die Interrupts erst unmmitelbar vor dem Sleep freigibt. Sieht Doku 
von avr/sleep.h.

2) Nach einem Interrupt durch den asynchronen Timer darf man nicht 
sofort wieder einpennen, sondern muss irgendwas abwarten. Im Datasheet 
stehen 1,5 Seiten darüber was man wann wie tun oder nicht tun darf.

Autor: Paul H. (powl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thx, hab die Seite nicht genaug genug gelesen.
    cli();
    sleep_enable();
    while(status.sleep)
    {
      sei();
      sleep_cpu();
      _delay_ms(1);
    }
    sleep_disable();
    sei();

das _delay_ms(1); hat Abhilfe geschafft. Danke!

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.