-
-
Neuer Benutzer
Öfters hier
asuro Sleep() Funktion
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ß
-
Erfahrener Benutzer
Robotik Einstein
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
-
Neuer Benutzer
Öfters hier
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ß
-
Erfahrener Benutzer
Roboter Experte
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
-
Neuer Benutzer
Öfters hier
Hi,
danke so ist's logischer.
Gruß
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen