Forum: Mikrocontroller und Digitale Elektronik atmega8, timer 0 & 1, geht/geht nicht


von Tino K. (blumengiesser)


Lesenswert?

folgende beiden kleinen funktionen habe ich mir laut dem tutorial 
gebastelt:

void initTimer0 (void)// TIMER_0 8bit, overflow
{
   TCCR0 = (1<<CS02)|(1<<CS00);
   TIMSK |= 1<<TOIE0;
}

void initTimer1 (void)  //TIMER_1 16bit
{
   TCCR1B = (1<<WGM12); // CTC Modus
   TCCR1B |= (1 << CS11) | (1 << CS10);
   OCR1A = 125-1;
   TIMSK = (1<<OCIE1A);
}

rufe ich initTimer0 vor initTimer1 auf, geht der timer0 nicht, umgekehrt 
schon. Warum?

von Anton (Gast)


Lesenswert?

Schau mal wie du TIMKS lädst!
Siehst du die Veroderung das eine mal, das andere mal nicht!

von spess53 (Gast)


Lesenswert?

Hi

>rufe ich initTimer0 vor initTimer1 auf, geht der timer0 nicht, umgekehrt
>schon. Warum?

Geht nicht:
   TIMSK |= 1<<TOIE0;
   TIMSK = (1<<OCIE1A);

Geht:
   TIMSK = (1<<OCIE1A);
   TIMSK |= 1<<TOIE0;

Fällt dir etwas auf?

MfG Spess

von Tino K. (blumengiesser)


Lesenswert?

immer diese kleinen tippfehler. warum funktioniert eigentlich TCCR1B = 
(1<<WGM12); und TCCR1B |= (1<<WGM12); kann man das auch anders 
schreiben?

von Karl H. (kbuchegg)


Lesenswert?

Weil das eine das ganze Register einfach nur beschreibt, während das 
andere das Register ausliest, mittels oder das 1 Bit setzt und dann das 
Ergebnis wieder ins Register zurückschreibt.

Völlig analog dazu, wie man 1 Bit an einem Ausgangsport setzt.

von Tino K. (blumengiesser)


Lesenswert?

ich habe alles auf |= gesetzt und es scheint zu funktionierenn... 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
Noch kein Account? Hier anmelden.