Klaus R. wrote:
> ...und denk dran: du kommst trotz alledem nicht drumherum, die uhr zu> eichen! das quarz ist nicht genau, nur (halbwegs) stabil!
Eichen darf nur eine Eichbehörde anhand eines entsprechenden Normals.
Der Anwender an sich kann höchstens Kalibrieren.
Hallo,
11059200 / 1024 (Vorteiler) = 10800
10800 / 100 (für 10ms IRQ) = 108 -> 107 für OCR-Wert bei CTC.
Reicht sogar ein 8Bit-Timer.
Gruß aus Berlin
Michael
Hallo,
stimmt, Timer 0 kann damit auch keinen CTC-Mode. evtl. Timer 2 nehmen?
overflow hat den Nachteil, daß Du selbst nachladen mußt, bei Vorteiler
1024 ist das aber keine Problem. Der Vorteiler läuft ja weiter, solange
also innerhalb der 1024 Takte nach auftreten des Overflow-IRQ der
Counterwert wieder gesetzt wird, geht nichts falsch.
Gruß aus Berlin
Michael
vor allem wurde das wohl nie ausprobiert.
tmpl wird hochgezählt, bei 100 wird die ausgabe aufgerufen.
aber tmpl wird nie auf 0 zurückgesetzt.
wenn die ausgabe aufgerufen wird kann minuten schon auf 60 stehen, die
sekunden sind immer 0. aber die sollen ja ausgegeben werden.
rufe die uhrzeit() routine am ende von if(tmpl==100) auf und setze tmpl
wieder zurück.
Vielen Dank fuer eure Hilfe!
Ich hab jetzt mal
TCCR2 = (1<<CS02 | 1<<CS00);
OCR2 = 107;
TIMSK |=(1<<OCIE2);
ISR(TIMER2_COMPA_vect)
{}
Hab ich irgendwas vergessen? da zuckt sich garnichts mehr?
Hallo,
> Aber der Zaehlt die Sekunden viel zu schnell>> TCCR2 = (1<<CS02 | 1<<CS00); // vorteiler 1024
Mein Datenblatt sagt: CS22, CS21, CS20 auf 1 für 1024...
CS00 und CS02 gehören zu Timer 0, ich habe nicht nachgeschaut, wo da die
Bits liegen...
Weiter sagt mein Datenblatt noch: WGM21 auf 1 in TCCR2 für CTC-Mode.
> OCR2 = 107;> TIMSK |= (1 << OCIE2);> TIFR = 1<<OCF2;
...
> uhrzeit();
Außerdem weiß ich nicht, was uhrzeit() macht, man macht
Interruptroutinen so kurz wie möglich, falls es die Ausgabe ist: die
gehört ins Hauptprogramm.
Gruß aus Berlin
Michael
Tatsache das funzt langsammer :-)
Danke!
Nur wenn ich das raus nehme aus dem ISR.
da brauche ich irgend was anderes was mir in gewissen zeitabstaenden das
LCD aktualisiert.
ich koennte jetzt:
a) ein weiteren timer verwenden?
-> was passiert wenn der interrupt gleichzeitig kommt mit dem anderen
der
die Uhrzeit zaehlt.
b) eine variable aufzaehlen und dann aktuallisieren.
oder gibt noch was anderes?
Danke fuer die Hilfe!
@ Simon (Gast)
>da brauche ich irgend was anderes was mir in gewissen zeitabstaenden das>LCD aktualisiert.
Das macht man per Flag im Hauptpogramm.
Siehe Interrupt.
MFG
Falk
Das ist ne idee :-)
Ich zaehle ja auch tmp1 hoch bis 100 um 0.01s in sekunden um zu wandeln
kann man da auch im haupt programm abfragen wann tmp1 == 0 ist?
So wuerde ich jede sekunde einmal aktualisieren.
Ne vergisst es, das geht nicht.
da ja tmp1 ne ganze weile 0 ist bis das naechste Interrupt ausloest.
Funzt richtig gut jetzt, und recht genau gehts auch.
Vielen Dank an alle!
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.