200ms, Timer1 Problem, Prescaler 256

Gast #2529892
Lesenswert?

Hallo, ich schreib gerade mein erstes Programm für meinen ATmega1284p. 
Ich wollte mit einem Timer ein Zeitsignal von 200ms erzeugen. Ich hab 
mir ausgerechnet, dass beim CTC Modus des Timers 1, dieser Wert auf 
15624 gestellt werden müsste, mit einem Tool bin ich dann auf den Wert 
0x3D08 gekommen, was ja doch relativ nahe dran liegt :-)

Leider stimmt die Zeit aber kein bisschen, daher hab ich wohl irgendwas 
falsch gemacht. Hier sind meine bescheidenen Anfänge :-(

1
TCCR1A = (1<<WGM01); // CTC Modus
2
TCCR1B |= (1<<CS12); // Prescaler 256
3
TCCR1B &= ~ (1<<CS10) | (1<<CS10);
4
OCR1A = 0x3D08;
5

6
TIMSK1 |= (1<<OCIE1A);


1
ISR (TIMER1_COMPA_vect)            //5)Führe diese ISR aus wenn TCNT2==OCR2
2
{
3
    wdt_reset();
4
    sekunde++;
5
    uart_puti(sekunde);
6
}


Grüße Toni
Gast #2529894
Lesenswert?

> Leider stimmt die Zeit aber kein bisschen, daher hab ich wohl irgendwas
> falsch gemacht. Hier sind meine bescheidenen Anfänge :-(

Was bekommst du denn für eine Zeit heraus? Wie groß ist denn die 
Abweichung vom gewünschten?
Gast #2539967
Lesenswert?

ich steh jetzt vor nem ähnlichen Problem.
1
TCCR1B |=  (1<<CS12) | (1<<WGM12) ;
2
TCCR1B &= ~  (1<<CS11  ) | (1<<CS10);
3
OCR1A = 15624-1;
4

5
TIMSK1 |= (1<<OCIE1A);


Ich brauch einen 200ms Takt, laut Datenblatt meines mega644p befindet 
sich WGM12 im TCCR1B register.

CS12 muss gesetzt sein, CS11 und CS10 sind auf 0 zu setzen


Ich bekomme einen Takt von etwa 800ms, anstatt 200ms.


Habt ihr eine Idee was falsch ist?
Gast #2540016
Lesenswert?

> TCCR1B |=  (1<<CS12) | (1<<WGM12) ;
> OCR1A = 15624-1;
> 200ms erwartet

Mode 4, CTC + Prescaler 256 + 15625 steps

=> Ist deine F_CPU und deine externe Taktquelle 20 MHz?
=> Stehen die Fuses auf Ext. Taktquelle?
=> Ist CKDIV8 unprogrammiert (entgegen Werkseinstellung)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren