PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : asuro Sleep() Funktion



betheg
07.05.2005, 15:26
Hi,
ich habe eine Verständiniss Frage zur Sleep() Funktion.
Register OCR2 hat ja einen Wert von 110 was eine Frequenz von ca 36kHz bedeutet. Jedesmal wenn TCNT2 == OCR2 löst er einen Interrupt aus, der die Variable count72khz um eins erhöht, wie kommt es dann das die Sleep() Funktion mit einer Frequenz von 72kHz läuft.

Vieleich kann mir einer Erklären wo mein Denkfehler liegt.

Gruß

pebisoft
07.05.2005, 15:40
sleep läuft nicht mit 72khz. die routine "sleep" legt fest, das ab diesem punkt die interuptroutine neu gestartet wird, wenn der interruptzeitpunkt gekommen ist, so lange wird hier gewartet.
mfg pebisoft

betheg
07.05.2005, 16:10
Hi,
ich habe mich dumm ausgedrückt.
In der Docu steht das z.B. Sleep(216) etwa 3ms dauert da 216/72 =3 aber eigentlich müssten es doch 6ms sein da 216/36 =6
Oder??
gruß

Arexx-Henk
07.05.2005, 20:47
Hallo,

Ich dachte es geht folgendes:

Timer2 register TCCR2: CS22 = 0, CS21=0, CS20=1
dass heisst 'No Prescaling'
Damit ist die taktfrequenz von Timer2 8MHz

OCR2 = 0x6E = 110
Dass heisst: Timer2 zahlt hoch von 0 bis zum 110 (sind 111 stufen zusammen)

8MHz / 111 = 72072 Hz
Dass heisst: die Sleep() function variabele 'count72kHz' wird mit eimen frequenz von 72KHz erhoht und nicht mit 36KHz. Darum soll man 216/72 berechnen und nicht 216/36.

Die InfraRot ausgang wirdt mit diesen selben 72KHz ge-'toggled' damit ein frequenz von 36KHz entsteht.

gruss

Henk

betheg
08.05.2005, 10:46
Hi,
danke so ist's logischer.
Gruß