Atmega 32 Timer1 output compare B match

OP #2388892
Lesenswert?

Hallo zusammen,

könnt ihr mir bitte sagen was ich an dem 16 bit timer noch nicht 
verstanden habe?

Mein Ziel ist es einfach nach einem Compare Match event eine LED an 
PORTC toggeln zu lassen.

Ich habe habe dazu Com B verwendet, einfach so.

hier ist mein Code, es tut sich an der LED leider nichts.

Herzlichsten Dank und viele Grüße,

Matthias.



#include <avr/io.h>
#include <avr/interrupt.h>

uint16_t result;

ISR(TIMER1_COMPB_vect)
{
PORTC^=(1<<PC0);
}



int main(void)
{
DDRC=0xff;
PORTC=0x00;

 DDRD = 0xff;              // PORT D ist Ausgang
  PORTD = 0x00;



TCCR1B |= (1<<CS12) | (1<<CS10);  //precaler auf 1024 = 15 
overflows/Sekunde
TIMSK |= (1<<OCIE1B);  //timer1 output compare B Match Interrupt enable 
OCF1B flag in TIFR must set
TIFR |= (1<<OCF1B);    // output compare B Match flag is set

OCR1B=60000; //Vergleichswert



TCCR1B |= (1<<WGM12);  //CTC modus

sei();   //Gobale Interruptbehandlung ein
while(1)

return 0;


}
OP #2391198
Lesenswert?

spess53 schrieb:
> Hi
>
> Du hast CTC mit OCR1A als Top eingestellt. D.h. der Timer läuft bis zu
> dem Wert von OCR1A und fängt dann von Null wieder an. Und jetzt überlege
> mal.
>
> MfG Spess


Hallo Spess,

vielen Dank für Deinen Tipp.

HAbe CTC auf

  TCCR1B =  (1<<CS10)  //  no Prescaling 16ms bei 4MHZ   30.000 vom 
65.536 = 1/2.2 Teil vom   16ms  -->7,32ms
          | (1<<WGM12)
        | (1<<WGM13); //12 und 13 für CTC compare B


gestellt.

TIMSK |= (1<<OCIE1B);    //Timer Output compare B Match interrupt enable


  ICR1=30000; //legt den Top Wert für Comp B fest nicht  //OCR1B 
=30000;


jetzt läuft es.

Ein schönes Wochenende wünsche ich.

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