Zeitfunktion mit Atmega8

OP #2679278
Lesenswert?

Hallo Leute,

ich beschäftige mich seit Kurzem mit Mikrocontrollern. Dementsprechend 
habe ich auch nur geringe Kenntnisse. Nun zu meinem eigentlichen 
Problem: Ich möchte einen Atmega8 als Art "Zeitschaltuhr" programmieren. 
Diese soll alle 12 Stunden eine Aktion ausführen. Da ein Delay nur für 
kürzere Verzögerungszeiten funktioniert, brauch ich nun Eure Hilfe....
#2679284
Lesenswert?

Delay ist sowieso der falsche Ansatz
(abgesehen davon, dass wenn man 20 mal 1 Sekunde wartet, man in Summe ja 
auch 20 Sekunden gewartet hat. Wie die Arithmetik einer Uhr 
funktioniert, weißt du? 60 Sekunde sind 1 Minute. 60 Minuten sind 1 
Stunde. Du willst 12 Stunden warten.)

Was du brauchst ist: Der Einsatz eines Timers.
http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC
Gast #2680162
Lesenswert?

was soll das while hier machen?
1
while(1)               
2
 
3
  TCCR1B = (1<<WGM12) | (1<<CS10);                     
4
  OCR1A = XTAL / DEBOUNCE - 1;          
5
  TCNT1 = 0;                            
6
  second = 0;
7
  prescaler = (uchar)DEBOUNCE;          
8
  TIMSK = 1<<OCIE1A;                 
9
 ...
#2680307
Lesenswert?

Ich würd sicherheitshalber mal mit dem Taschenrechner die sich daraus 
ergebenden Zahlen nachrechnen, ob sie sich noch so einigermassen im 
Rahmen bewegen.

Allerdings:
Ohne Quarz mit einer halbwegs genau definierten Frequenz, wirst du mit 
deiner Uhr nicht viel Freude haben. Wenn die je nach Tagestemperatur 
unterschiedliche Abweichungen hat, wird sie dir schnell aus dem Ruder 
laufen. Da könnte man sich diesen ganzen Aufwand auch sparen und das 
Schätzeisen tatsächlich auch gleich mit delay_ms betreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren