Forum: Compiler & IDEs Timer1 mit CTC läuft nicht


von spongebrot (Gast)


Lesenswert?

Ich versuche zur Zeit Timer1 mit 1Sek laufen zu lassen.
1
OCR1A = 0x3D08;
2
  TCCR1B = (1<<WGM12);
3
  TIMSK1 = 1<<OCIE1A;
4
  TCCR1B |= (1<<CS12) | (1<<CS10);
5
sei();
6
7
ISR(TIMER1_COMPA_vect)
8
{
9
  Program::_instance->updateTimer();
10
}

Taktfrequens ist 16 MHz, aber ich komm kein einziges mal in die ISR..

von spongebrot (Gast)


Lesenswert?

verwende einen atmega328p btw..

von g457 (Gast)


Lesenswert?

> Taktfrequens ist 16 MHz, aber ich komm kein einziges mal in die ISR..

Wartest Du auch brav 16 ∗hüstel∗ Sekunden? Und woher weisst Du, dass er 
die ISR nie betritt?

von Werner P. (Gast)


Lesenswert?

Die Initialisierung des Timers ist aber schon in der main vor der main 
loop?

von spongebrot (Gast)


Lesenswert?

wie kommst du auf 16 sek?

16 Hz frequenz / 1024 prescale -> ~1.6hz mit ocr auf ~16.000 sollte das 
doch eine sekunde sein?

Initialisiert wird das ganze vor der mainloop (zeig zuerst für 5 sek ein 
bild an, und dann initialisiere ich den timer im konstruktor von meiner 
klasse.

Ich weiß dass sie nicht ausgeführt wird, weil ich eine variable auf 1 
setze, die ich in der mainloop abfrage und eine ausgabe damit mache 
(z.B. blinklicht..)

von g457 (Gast)


Lesenswert?

> wie kommst du auf 16 sek?

Wegen des gefühlt häufigsten Fehlers: Falscher Takt. Standard beim 328p 
ist 1MHz -> 16 Sekunden statt nur einer.

> Ich weiß dass sie nicht ausgeführt wird, weil ich eine variable auf 1
> setze, die ich in der mainloop abfrage und eine ausgabe damit mache
> (z.B. blinklicht..)

Wie ist selbige deklariert? (oder ums kurz zu machen: zeig mal das 
zugehörige volatile her)

HTH

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.