mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uhr programmieren - Ein paar Fragen - Asynchrone Abläufe & Power-Save-Mode


Autor: Marc Brexner (drakenfly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Community,

Ich sitze derzeit an dem Quellcode für meine Uhr, und habe ein paar 
Fragen.
kurzer Hinweis am Rande: Ich habe die Hardware dazu noch nicht, aber ich 
bin im Moment schon drauf und dran, den Code dafür zu schreiben, damit 
ich die Uhr gleich nach dem Zusammenbauen in Betrieb nehmen kann.

Also, nun zu meinen Fragen:
Problemstellung:
Dank mehrerer Hinweise arbeite ich mit einem ATmega8820PA-20AU, und zwar 
läuft der AVR auf internem RC (1MHz), und an TOSC1 und TOSC2 hängt ein 
Uhrenquarz mit 32,768kHz.

Nun hängen auf dieser Uhr zwei Druckschalter, zum Einschalten der 
Anzeige der Uhr, und zum einstellen der Uhr.
Die Uhr soll angehen, wenn einer der beiden Schalter kurz gedrückt wird, 
und wieder ausgehen, wenn wieder einer gedrückt wird. Wird keiner mehr 
gedrückt, geht sie nach 60 Sekunden wieder von selbst aus.
Wird der obere Taster 3 Sekunden gedrückt, kann man die Uhr einstellen. 
Die Stundenanzeige beginnt zu blinken, und mit dem unteren Taster kann 
man die Stunden verstellen. Drückt man wieder den oberen, kann man die 
Minuten verstellen, usw.

Macht der ATmega gerade nichts, außer die Zeit zu zählen, geht er 
zwischendruch immer in den Power-Save-Mode.

Nun habe ich mich des Codes zur Entprellung und zum Repeaten von Tastern 
von Peter Danegger bedient, und habe folgenden Gedanken:
Wird ein Taster gedrückt (Pin Change Interrupt, aktivieren tu ich es so:
// PIN CHANGE INTERRUPT AN PIN PD5 (PCINT21) UND PD6 (PCINT22)
// AKTIVIEREN
//
PCICR |= (1<<PCIE2);
PCMSK2 |= (1<<PCINT22);
PCMSK2 |= (1<<PCINT21);
), wird der Timer0 aktiviert, um die Tasterabfrage zu starten.

Im Timer0 bei der Tastenabfrage wird dann registriert, wann das letze 
mal etwas gedrückt war, und ist die Differenz des letzten Tastendrucks 
und der aktuellen Zeit > 60s, dann wird Timer0 wieder deaktiviert (und 
die LEDs ausgeschalten, s.o.! sollte eine Taster nur kurz gedrückt 
werden, wird auch schon < 60 s ausgeschalten.).
Im Grunde ist Timer0 immer dann aktiv, wenn die LEDs zur Anzeige der 
Uhrzeit an sind. Also, nach dem aktivieren, und während dem einschalten.

Meine Frage: funktioniert das? Laut Datenblatt funktionieren 
Pin-Change-Interrupts ja noch, wenn der Power-Save-Mode an ist. Und, 
liegt ein Change-Interrupt vor, dann wird der Power-Save-Mode solange 
nicht aktiviert, solange Timer0 aktiv ist. Dann kann Timer0 neben Timer2 
doch einwandfrei laufen, oder?

Vielen Dank, falls ihr euch bei meinem Aufsatz bis hierher durchgekämpft 
habt.
Vielen Dank im Vorraus für alle Antworten!

Lg Marc

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc Brexner schrieb:
> Macht der ATmega gerade nichts, außer die Zeit zu zählen, geht er
> zwischendruch immer in den Power-Save-Mode.

Warum, ist das Gerät batteriebetrieben?

Man sollte auch bei der Programmierung in kleinen Schritten vorgehen.

Also erstmal alle Funktionen zum Laufen bringen.
Das Stromsparen kommt dann ganz zum Schluß, wenn alles schon läuft.


Peter

Autor: Marc Brexner (drakenfly)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Marc Brexner schrieb:
>> Macht der ATmega gerade nichts, außer die Zeit zu zählen, geht er
>> zwischendruch immer in den Power-Save-Mode.
>
> Warum, ist das Gerät batteriebetrieben?
>

Ja, ist es.


> Man sollte auch bei der Programmierung in kleinen Schritten vorgehen.
>
> Also erstmal alle Funktionen zum Laufen bringen.
> Das Stromsparen kommt dann ganz zum Schluß, wenn alles schon läuft.
>

Hm, da hast du vermutlich recht. Ich poste hier dann einfach nochmal, 
wenn ich so weit bin... ;)

Lg Marc

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc Brexner schrieb:
> Meine Frage: funktioniert das? Laut Datenblatt funktionieren
> Pin-Change-Interrupts ja noch, wenn der Power-Save-Mode an ist. Und,
> liegt ein Change-Interrupt vor, dann wird der Power-Save-Mode solange
> nicht aktiviert, solange Timer0 aktiv ist. Dann kann Timer0 neben Timer2
> doch einwandfrei laufen, oder?

Das funktioniert. PinChange wird asynchron, also ohne laufenden 
CPU-Takt, erkannt. Alle Timer funktionieren unabhängig voneinander. Alle 
Timer ausser Timer2 laufen nur mit CPU-Takt.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marc Brexner schrieb:
> Meine Frage: funktioniert das? Laut Datenblatt funktionieren
>
> Pin-Change-Interrupts ja noch, wenn der Power-Save-Mode an ist. Und,
>
> liegt ein Change-Interrupt vor, dann wird der Power-Save-Mode solange
>
> nicht aktiviert, solange Timer0 aktiv ist. Dann kann Timer0 neben Timer2
>
> doch einwandfrei laufen, oder?

Nein!

Poste mal deine main() in der sleep aufgerufen wird.

Den Sleepmode interessiert das nicht, ob irgendein Timer läuft. Der 
schaltet einfach den Takt ab und dann läuft nur noch Timer2 mit 
Uhrenquarz und sofern aktiviert der Watchdogtimer.

mfg.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Eckmann schrieb:
> Nein!

Doch!

Lies mal bitte genauer, was Marc geschrieben hat.

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.