Forum: Mikrocontroller und Digitale Elektronik CTC-Mode Atmega8 OCR2 kleiner 1?


von Flori (Gast)


Lesenswert?

Hallo Leute,

ich versuche seit Tagen mein Atmega8-Timer mit 3646800Qarz in Gang zu 
bekommen, teilweise auch mit Erfolg allerdings scheiterts an Dingen, die 
ich einfach nicht im Datenlatt sehe, oder übersehe. Vielleicht kann mir 
jemand von euch helfen?
Also mein Problem ist, dass ich eine variable Rechteckspannung benötige. 
Nun habe ich den CTC-Modus erfolgreich aktiviert und habe mir folgendes 
errechnet: Interrupts = 3686400/(2*256*1024) = 7,03125Hz
7,03125*255/Rechteckfreq = OCR2
Ist das so korrekt?
was mache ich nun, wenn der berechnete Wert für OCR2 kleiner 1 wird, 
also double??? Was bedeutet das dann konkret?
Leider finde ich dazu keine Angaben im Datenblatt oder überlese sie 
chronisch und geschickt :-(
ich muss einen Frequenzbereich von ca 2k-20kHz abdecken...

Danke und Lieben Gruss
Flori

von Johannes M. (johnny-m)


Lesenswert?

OCR2 kann mit einem Gleitkommawert nichts anfangen. Generell sollte eine 
solche Berechnung auch ohne Gleitkomma gehen und auch so implementiert 
werden (siehe Festkommaarithmetik).

In Deiner Berechnung oben fehlt aber noch die Tatsache, dass ein 
Compare-Ereignis erst jeweils einen Timertakt nach dem Feststellen der 
Gleichheit der Werte im OCR und im TCNT stattfindet (sprich, das Flag 
wird erst im OCR2+1en Takt gesetzt). Deshalb ist ein Wert von 0 im OCR 
auch kein Problem. Wenn im OCR eine 0 steht, dann wird nach jeweils 
einem Takt das Compare-Flag gesetzt und (im CTC-Modus) der Timer 
zurückgesetzt.

von Flori (Gast)


Lesenswert?

Vielen Dank für deine Hilfe, allerdings passt bei mir irgendwas nicht, 
ich kann mit meinen Berechnungen keine Werte bis 20khz erzeugen, oder?

von Johannes M. (johnny-m)


Lesenswert?

Flori wrote:
> Vielen Dank für deine Hilfe, allerdings passt bei mir irgendwas nicht,
> ich kann mit meinen Berechnungen keine Werte bis 20khz erzeugen, oder?
Mit einem Prescaler von 1024 kannst Du maximal
 erzeugen. Dass das keine 20 kHz geben kann, sollte klar sein. Dafür 
bräuchtest Du einen Quarz mit mehr als 40 MHz.

von Flori (Gast)


Lesenswert?

Vielen Dank für die Antwort Johannes,

teile ich meine Quarzfrequenz nicht nochmal durch 256 für den 8bitTimer?
gruss Flo

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.