Forum: Mikrocontroller und Digitale Elektronik Timer OCR1A überschreiben


von Interrupts (Gast)


Lesenswert?

Hallo allerseits,

ist es in einem laufenden Programm erlaubt, mehrmals die 
interrupt-Initialisierung für den 16Bit Timer durchzuführen, um 
unterschiedliche Werte in die OCR1A Register zu schreiben?

Konkret einmal die init-Funktion so durchlaufen, wie hier angegeben, und 
danach nochmal das gleiche mit einem anderen Wert für OCR1A, oder muss 
der Timer dafür erst abgeschaltet werden?

void timer1_init(void)
{
  TCCR1A &= ~(1<<WGM10);   // CTC Modus
  TCCR1A &= ~(1<<WGM11);  //
  TCCR1B |=  (1<<WGM12);  //
  TCCR1B &= ~(1<<WGM13);   // CTC-Modus 4 with

  TCCR1B &=~ (1<<CS10);   // Prescaler 8    Bits: CS12, CS11,   TCCR1B 
|= (1<<CS11);
  TCCR1B &=~ (1<<CS12);

  // ((4000000/8)/1000) = 500
   OCR1A = (500-1);

   TIMSK |= (1<<OCIE1A);
}

mfg

von Oliver (Gast)


Lesenswert?

Du kannst einen neuen Wert nach OCR1A schreiben, wann immer du willst. 
Was dann genau passiert, steht im Datenblatt.

Die init-routine muß dafür nicht erneut aufgerufen werden. Es schadet 
aber auch nicht, da init() halt nur die Bits nochmals setzt oder 
rücksetzt, die im ersten Durchlauf auch so gesetzt wurden.

Oliver

von Chris (Gast)


Lesenswert?

Verboten ist das nicht, aber warum änderst Du - nach dem Du schon alles 
initialisiert hast und nur OCR1A ändern möchtest - nicht nur einfach 
OCR1A? Oder habe ich Dich falsch verstanden?

Beim Ändern von OCR1A im CTC-Modus kann natürlich folgendes passieren:
If the new value written to OCR1A or ICR1 is lower than the current 
value of
TCNT1, the counter will miss the compare match. The counter will then 
have to count to its maximum
value (0xFFFF) and wrap around starting at 0x0000 before the compare 
match can occur.

siehe 16.9.2 - Clear Timer on Compare Match (CTC) Mode
http://www.atmel.com/dyn/resources/prod_documents/doc8271.pdf
Seite 127f

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.