Forum: Mikrocontroller und Digitale Elektronik Atmega 32 Timer1 output compare B match


von Matthias H. (maethes26)


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;


}

von spess53 (Gast)


Lesenswert?

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

von Matthias H. (maethes26)


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.

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
Noch kein Account? Hier anmelden.