CTC-Interrupt Atmega8 funktioniert nicht

Gast #2730264
Lesenswert?

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
#2730273
Lesenswert?

> '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.
Gast #2730459
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren