Forum: Mikrocontroller und Digitale Elektronik LED OCR1A hochzählen funktioniert nicht


von Katharina (Gast)


Lesenswert?

Hallo Forum,

ich möchte eine LED einfaden lassen und wollte dazu den Vergleichswert 
hoch bzw. runterfahren lassen. Leider funktioniert das Ganze nicht so, 
wie ich es mir vorstelle.

Die LED flackert.

Im Debugmodus zählt der TCNT1 nur bis 0x01FF. Sprich das High Bit ist 
und bleibt 0x01 obwohl ich es 3F gesetzt habe.

Habt ihr vielleicht eine Idee?

Gruß,

Katharina

P.S.
Hier der Code:

#include <avr/io.h>

int main(void)

{
  DDRD = (1<<PD5);

  TCCR1A = (1<<COM1A1)|(1<<WGM11);
  TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);

  ICR1 = 0x6FFF;
  OCR1A= 0x3FFF;

  while(1);
  OCR1A++;

}

von Justus S. (jussa)


Lesenswert?

mal abgesehen von allem anderen: wann glaubst du, kommt der µC zu dieser 
Zeile:
> OCR1A++;
?

von Karl H. (kbuchegg)


Lesenswert?

Katharina schrieb:

> Im Debugmodus zählt der TCNT1 nur bis 0x01FF. Sprich das High Bit ist
> und bleibt 0x01 obwohl ich es 3F gesetzt habe.
Wo?


>   while(1);
>   OCR1A++;

Nö.
Dieses OCR1A++ wird nie erreicht, weil das Programm aus der unmittelbar 
davor stehenden Endlosschleife nicht mehr herauskommt.

von Katharina (Gast)


Lesenswert?

Bin da wohl ein wenig durcheinander gekommen. Hier nochmal der 
"richtige" Code. Problem nach wie vor: OCR1A = 0x01FF

#include <avr/io.h>

volatile char i;

int main(void)
{
  DDRD = (1<<PD5);

  TCCR1A = (1<<COM1A1)|(1<<WGM11);
  TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);

  ICR1 = 0x6FFF;
  OCR1A= 0x3FFF;

  while(1)
  i++;

}

von Karl H. (kbuchegg)


Lesenswert?

Katharina schrieb:
> Bin da wohl ein wenig durcheinander gekommen. Hier nochmal der
> "richtige" Code. Problem nach wie vor: OCR1A = 0x01FF

Datenblatt lesen.
Der Update von OCR1A erfolgt erst wenn der Timer wieder seinen BOTTOM 
Wert erreicht hat.

Moral von der Geschichte:
Erst den Timer und alle Hilfsregister einstellen
und erst dann den Timer durch Setzen eines Vorteilers starten.

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.