Kann mir mal jemand unter die Arme greifen? Ich wollte mal auf dem Experimentierbrett den CTC-Modus von Timer 1 des Atmega8 ausprobieren, aber meine LED blinkt nicht und ich sehe nicht warum. Den Ausgang OC1B kann ich nicht nehmen -ich wollte deswegen die LED an einem anderen Pin jede Sekunde toggeln lassen, so daß 0,5 Hz aus Portc.5 kommen. Der Quelltext ist Teil eines größeren Programmes, ich habe nur diese Sache separat testen wollen. Habe ich alle Register, die damit zu tun haben erwischt oder was habe ich übersehen? $regfile = "M8def.dat" $crystal = 16000000 Dim Timer1_interrupt_zähler As Word Led Alias Portc.5 : Config Led = Output : Led = 1 '### Timer1 - Zeittakt 1ms ##################################################### Tccr1b = &B00001011 'CTC-Modus,Prescaler=64 (WGM12 und 13 CTC Modus, CS10-12 Teilerfaktor) Ocr1b = 250 'Vergleichswert bei dem Interrupt ausgelöst wird Timsk.ocie1b = 1 'Output_Compare_Match_Interrupt_erlauben Enable Interrupts Enable Timer1 On Oc1b Isr_timer1 'Bei Gleichstand Interrupt auslösen '####################################################################### ######## Do Nop Loop End Isr_timer1: Incr Timer1_interrupt_zähler 'Die Interrupts zählen If Timer1_interrupt_zähler = 1000 Then 'nach Tausend Interrupts LED umschalten d.h. 1Hz Timer1_interrupt_zähler = 0 Toggle Led End If Return MfG Paul
Hi >Habe ich alle Register, die damit zu tun haben erwischt oder was habe >ich übersehen? Du hast das Register für den Topwert, ICR1 vergessen. MfG Spess
> Ocr1b = 250
Laut Tabelle 39, auf Seite 97 vom Datasheet, steht der Vergleichswert
aber im OCR1A
> 'Vergleichswert bei dem Interrupt ausgelöst wird > Timsk.ocie1b = 1 > 'Output_Compare_Match_Interrupt_erlauben > > Enable Interrupts > Enable Timer1 > On Oc1b Isr_timer1 Hä? Was versuchst du da? Du benutzt Modus 4 > Tccr1b = &B00001011 (deinen Kommentar darunter kannst du dir in die Haare schmieren. WGM13 wird nicht gesetzt, also ist das Modus 4). Das ist: CTC mit einem Top Wert in OCR1A Und bei einer 0 in OCR1A hast du dann halt dauernd einen Compare Match mit Timer Reset. Wenn du dir besagte Tabelle im Datanblatt ansiehst, fällt eines auf: Es gibt keinen einzigen Spezialmodus, bei dem das OCR1B Register eine spezielle Rolle spielen würde! Immer nur OCR1A bzw. ICR1 bzw. fixe Werte.
Hi
>Du hast das Register für den Topwert, ICR1 vergessen.
Mist. OCR1A
MfG Spess
Karl Heinz schrob: >Du benutzt Modus 4 > Tccr1b = &B00001011 >(deinen Kommentar darunter kannst du dir in die Haare schmieren. WGM13 >wird nicht gesetzt, also ist das Modus 4). Ja, den Kommentar habe ich mir jetzt in die Haare geschmiert. Sieht im Spiegel etwas komisch aus... >Das ist: CTC mit einem Top Wert in OCR1A Nachdem ich nun statt OCR1B OCR1A mit 250 "beschickt" habe, funktioniert es auch richtig. Ich habe das nicht gesehen, daß ich B statt A drin hatte. Das kommt davon, wenn man mit der Brechstange ein Programm fertig bringen will.... Ich danke Euch für die Hilfe und die Ratschläge. MfG Paul
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.