Hallo, ich habe eine IR-Hinderniserkennung nach folgender Anleitung gebaut: http://www.societyofrobots.com/member_tutorials/files/TSOP2.pdf Dabei wird mit einem ATMega8/8MHz mit dem Timer2 ein 36KHz-Signal erzeugt. TCCR2=0b00001010 bedeutet, das ein Prescaler von 8 und der CTC Modus verwendet wird. Also zählt der Timer2 in einer Sekunde 1 Mio Schritte. Demzufolge dauert ein Schritt 1 Mikrosekunde. Bei Zählerstand=OCR2 wird ein Interrupt ausgelöst und die Zählung beginnt wieder bei 0. Bei einer Frequenz von 36kHz muß der Ausgangspin aller 13,9 Mikrosekunden toggeln -> 1/(36000*2) OCR2 sollte doch dann den Wert 13 erhalten, oder? Der Timer2 zählt von 0 bis 13 => 14 Schritte a 1 Mikrosekunde = 14 Mikrosekunden. Warum ist in dem Code der zehnfache Wert? Seltsam ist, dass die Schaltung mit OCR2=139 funktioniert und mit OCR2=13 nicht? Kann mir jemand erklären, ob ich hier einen Denkfehler habe. Danke.
...schon mal mit dem Oszi gemessen?
Silk7, die Formel für die Timer2-CTC-Interruptfrequenz als Funktion vom OCR2 findest Du auf Seite 109 des Manuals. Bei MC-Takt = 8MHz, Vorteiler = 8 einer gewünschten Frequenz von 2*36kHz bekomme ich da einen Wert von OCR2 = 6 heraus. Ich würde auch die Fuses nochmal kontrollieren. Mir ist es schon vorgekommen, dass ich meinte, der MC liefe auf dem externen Quarz - tatsächlich war's aber der interne RC-Taktgenerator und mit einer ganz anderen Frequenz. TCCR2=0b00001010 bedeutet auch, dass das Signal an Pin PORTB3 nicht ausgegeben wird. Nix Oskar. Ciao, mare_crisium
Hi >die Formel für die Timer2-CTC-Interruptfrequenz als Funktion vom OCR2 >findest Du auf Seite 109 des Manuals. Bei MC-Takt = 8MHz, Vorteiler = 8 >einer gewünschten Frequenz von 2*36kHz bekomme ich da einen Wert von >OCR2 = 6 heraus. Nein. Mit VT=8 und 8MHz ist ein OC-Wert von 13 notwendig. Bei VT=1 ergibt sich ein Wert von 110. Beides Mit Oszi überprüft. Der Wert 139 aus dem Link passt maximal für VT=1 und einen stark verstimmten internen Oszillator. >TCCR2=0b00001010 bedeutet auch, dass das Signal an Pin PORTB3 nicht >ausgegeben wird. Nix Oskar. Wieso? >// timer 2 interrupt routine >ISR(TIMER2_COMP_vect) >{PORTC=PORTC^(flag); // if bit 3 of “flag” is set, PORTC3 Geht auch in Software. Doch Oskar. Allerdings ist unklar, warum es beim TO nicht funktioniert. MfG Spess
Spess53 schrieb: > Mit VT=8 und 8MHz ist ein OC-Wert von 13 notwendig. damit hättest Du recht, wenn Silk eine Interruptfrequenz von 36kHz erzeugen wollte. Aber: Silk7 schrieb: > Bei einer Frequenz von 36kHz muß der Ausgangspin aller 13,9 > Mikrosekunden toggeln -> 1/(36000*2) Damit der Ausgangspin mit 36kHz zwischen 0 und 1 wechselt, muss Silk ihn mit einer Interruptfrequenz von 72kHz togglen. Und für 72kHz muss er OCR2 = 6 nehmen. Klar? Silk7 schrieb: > TCCR2=0b00001010 Die Funktion des OCR2-Pins wird von COM20 (Bit4) und COM21 (Bit5) im TCCR2 bestimmt. Laut Tabelle 43 auf Seite 116 im Datenblatt: COM20 = 0 und COM21 = 0 bedeutet: Normal port operation, OC2 disconnected. Ich hätte erwartet, dass Silk COM20 = 0 COM21 = 1 (Toggle OC2 on Compare Match) nähme. Es kann natürlich sein, dass er einen anderen Pin per Software toggeln will. Der ist dann wieder was für den Oskar. Ciao, mare_crisium
Harald M. schrieb: > Ich würde auch die Fuses nochmal kontrollieren. Mir ist es schon > vorgekommen, dass ich meinte, der MC liefe auf dem externen Quarz - > tatsächlich war's aber der interne RC-Taktgenerator und mit einer ganz > anderen Frequenz. ...genau hier lag das Problem. Der MC lief nicht mit dem externen Takt. Jetzt habe ich die Einstellungen auf einen externen Takt von 16MHz eingestellt (was auch angeschlossen ist). Mit einem kleinen Testprogramm kontrolliert -> LED blinkt im 1 Sekunden-Rhytmus. OCR2=28 / Prescaler=8 (ca. 36kHz) war für den TSOP zu empfindlich. Bei OCR2=30 (ca. 33kHz) und den entspr. Pausen funktioniert es super. Danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.