Forum: Mikrocontroller und Digitale Elektronik ATmega88 - Timer0 CTC Mode - Echte Milisekunde


von Stephan W. (stipo)


Lesenswert?

Nabend zusammen,

ich beschäftige mich gerade mit dem 8-bit Timer/Counter0 with PWM im CTC 
Mode.

Ziel ist es das ich eine genaue Millisekunde als Flag hin bekomme.
Ich habe mal ein bisschen Code dazu geschrieben.
1
void InitialTimer(void)
2
{
3
  // Timer 0 initialisieren
4
  TCCR0A = (1<<WGM01); // CTC-Mode
5
  TCCR0B = ((1<<CS00)|(1<<CS02)); // Prescaler 1024
6
  OCR0A = 6.8125; // 1ms
7
  TIMSK0 |= (1<<OCIE0A); // Interrupt setzen
8
}
Frage an die Experten. Wird der Interrupt in genauen Millisekunden 
aufgerufen wenn der ATmega mit 8Mhz Takt läuft.

Rein optisch sieht mir das nach 1 Sekunde aus, wenn ich da eine LED mit 
einem Zähler für die Millisekunden blinken lasse.
Ich hab nur keine Idee im moment wie ich das nun verifizieren kann.

Grüße
Stephan

PS: Ich hab zwar ein Osziloskop, muss aber gestehen, das ich zu lange 
nicht mehr damit gearbeitet habe als das ich nun zuverlässig damit das 
verifizieren kann. Muss mich ins Osziloskopieren selbst erst wieder 
einarbeiten.

von Eumel (Gast)


Lesenswert?

Stephan W. schrieb:
> OCR0A = 6.8125

Das geht nicht.

von Mike (Gast)


Lesenswert?

6.8125 als Wert für das OCR-Register wird nicht funktionieren (das kann 
nur ganze Werte zählen).

Versuch es mal mit Vorteiler auf 64 und 125 für OCR.

von Mike (Gast)


Lesenswert?

Mike schrieb:
> Versuch es mal mit Vorteiler auf 64 und 125 für OCR.

Mist, die -1 vergessen ;). 124 ist der richtige Wert für OCR.

von Stephan W. (stipo)


Lesenswert?

Danke euch beiden.

Habe das gerade mit dem Prescaler 64 und OCR 124 gerechnet.
Damit bekomme ich exakte Werte hin.

Genau bei dem OCR Wert von 6,8125 habe ich selbst bedenken gehabt.
Ich konnte nur nirgends herausfinden welchen Datentyp da zulässig ist.

Also danke für die Hilfe.
Ich weiß nun, das ich da ein bisschen mehr mit den verschiedenen Werten 
spielen muss, bis man das gewünschte ergebnis bekommt.

von Paul B. (paul_baumann)


Lesenswert?

Stipo schrob:
>Ich konnte nur nirgends herausfinden welchen Datentyp da zulässig ist.

Das ist ein 8-Bit Register, da geht nur 0-255 rein.

mfG Paul

von Eumel (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR_-_Die_genaue_Sekunde_/_RTC

Schau mal hier, vielleicht hilft dir das auch weiter :)

von Thomas E. (thomase)


Lesenswert?

Stephan W. schrieb:
> Ich weiß nun, das ich da ein bisschen mehr mit den verschiedenen Werten
> spielen muss, bis man das gewünschte ergebnis bekommt.
Nicht spielen. Ausrechnen. Guck dir das im Datenblatt genau an. Bis du 
weisst, warum da 64 und 124 reinkommen. Sonst stehst du beim nächsten 
Mal wieder vor dem gleichen Problem.

mfg.

von Stephan W. (stipo)


Lesenswert?

Thomas Eckmann schrieb:
> Stephan W. schrieb:
>> Ich weiß nun, das ich da ein bisschen mehr mit den verschiedenen Werten
>> spielen muss, bis man das gewünschte ergebnis bekommt.
> Nicht spielen. Ausrechnen. Guck dir das im Datenblatt genau an. Bis du
> weisst, warum da 64 und 124 reinkommen. Sonst stehst du beim nächsten
> Mal wieder vor dem gleichen Problem.
>
> mfg.

Welche Seite/Abschnitt des Datenblatt meinst Du damit?
Klar hab ich mir das Datenblatt schon zu rate gezogen, aber ich weiß 
nicht worauf du hinaus willst.

Ich habe auch die Formel im Datenblatt gefunden. Und genau da meine ich 
das mit dem Satz das ich verschiedene Werte probieren muss um auf das 
gewünschte ergebnis zu kommen.

von Karl H. (kbuchegg)


Lesenswert?

Stephan W. schrieb:

> Ich habe auch die Formel im Datenblatt gefunden. Und genau da meine ich
> das mit dem Satz das ich verschiedene Werte probieren muss um auf das
> gewünschte ergebnis zu kommen.

Ja.
Aber gezielt probieren!

Lies dir mal das durch. Das kommt aus einem etwas praxisbezogeneren 
Ansatz. Da ergeben sich die Formeln durch Nachdenken darüber, wie das 
eigentlich alles funktioniert. Und danach brauchst du keine Formeln aus 
dem Datenblatt mehr, weil sich die Werte aus der gewünschten 
Funktionalität und Dreisatz ganz von alleine ergeben.

FAQ: Timer


> Genau bei dem OCR Wert von 6,8125 habe ich selbst bedenken gehabt.
Ich sach mal so.
Wenn du Schäfchen zählen musst, die über den Zaun springen, dann kannst 
du 6 Schafe zählen oder du kannst 7 Schafen zählen. Aber 6.3 Schafe 
können nicht über den Zaun springen.

von Stephan W. (stipo)


Lesenswert?

Karl Heinz Buchegger schrieb:
>> Genau bei dem OCR Wert von 6,8125 habe ich selbst bedenken gehabt.
>
> Ich sach mal so,
> Wenn du Schäfchen zählen musst, die über den Zaun springen, dann kannst
> du 6 Schafe zählen oder du kannst 7 Schafen zählen. Aber 6.3 Schafe
> können nicht über den Zaun springen.

Ich hab es verstanden :-)

von Paul B. (paul_baumann)


Lesenswert?

Karl_Heinz schrob:
>Aber 6.3 Schafe können nicht über den Zaun springen.

Wenn es aber ein Stacheldrahtzaun ist.....

schnell fort
;-)
MfG Paul

von Stephan W. (stipo)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Lies dir mal das durch. Das kommt aus einem etwas praxisbezogeneren
> Ansatz. Da ergeben sich die Formeln durch Nachdenken darüber, wie das
> eigentlich alles funktioniert. Und danach brauchst du keine Formeln aus
> dem Datenblatt mehr, weil sich die Werte aus der gewünschten
> Funktionalität und Dreisatz ganz von alleine ergeben.
>
> FAQ: Timer
Karl Heinz, das ist super beschrieben darin. Das hat doch noch ein paar 
Gedanken zurechtgerückt. Ich werde die Seite mal ganz nach oben in meine 
Favoriten setzen, denn bis sich das mal 100% gefestigt hat darf man ja 
gerne nochmal nachlesen und spicken ;-)

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.