Forum: Mikrocontroller und Digitale Elektronik Timer 1 Problem im CTC-Modus bei Mega32 (Anfänger)


von Tom (Gast)


Lesenswert?

Abend!
Kann sein (ist sehr wahrscheinlich), dass ich einfach überarbeitet bin 
und irgendwas wichtiges übersehe, aber ich komme mit dem Timer1 nicht 
ganz zurecht.

Mein Code:
1
#include <avr/interrupt.h>
2
...
3
TCCR1A = 0x00;
4
TCCR1B = (1<<WGM12) | (1<<CS11)  | (1<<CS10);
5
TCNT1H = 0;
6
TCNT1L = 0;
7
8
OCR1AH = ((1250 & 0xFF00) >> 8);
9
OCR1AL =  (1250 & 0x00FF);
10
11
TIMSK = (1<<OCIE1A);
12
13
sei();
14
...
15
ISR(TIMER1_COMPA_vect)
16
{
17
    ...
18
}

bei 8 Mhz Taktfrequenz sollte das alle 10 ms die ISR aufrufen, tut es 
aber anscheinend nicht. was mache ich falsch?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wenn du Prescaler 64 hast und tatsächlich 8 MHz (AVR Fuses) und den 
CTC-Modus sollte das ungefähr klappen. Damit es genau klappt, musst du 1 
vom OCR1A-Wert abziehen.

Leider geht aus deinem Codefetzen nicht hervor, wie du denkst die 10ms 
kontrollieren zu können. Vielleicht steckt da noch ein Fehler drin?

von Spezi (Gast)


Lesenswert?

Bitte genauer: Was geht nicht ??

BTW: Die Initialisierung sieht soweit korrekt aus ...

von Tom (Gast)


Lesenswert?

anscheinend wird die ISR nicht aufgerufen.

von Spezi (Gast)


Lesenswert?

> anscheinend wird die ISR nicht aufgerufen.

Wie kommst Du darauf? Hast Du z.B. in der ISR einen Ausgangspin 
getoggelt? Und ihn mit einem Scope / Frequenzzähler kontrolliert?
(Mit dem Toggeln eines Pins kann man auch gut die Frequenz 
kontrollieren.)

von Tom (Gast)


Lesenswert?

ja, habe ihn bei jedem aufruf einen pin mit einer led toggeln lassen 
(bei 100ms), es ist aber nichts passiert

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Zufällig auf einem der Pins für JTAG und JTAG nicht per AVR Fuse 
abgeschaltet?

von Tom (Gast)


Lesenswert?

leider nein...
Es hat schonmal funktioniert, aber leider ist das programm "nicht mehr 
auffindbar" nach einem systemcrash heute.

von Tom (Gast)


Lesenswert?

OK, kleines Update: hab das ganze mal durch den Simlulator laufen lassen 
und anscheinent wird OCIE1A in TIMSK nicht gesetzt... wenn ich aber den 
ganzen Code 1:1 in ein neues Projekt kopiere, läuft es ohne Probleme...
Wie kann das sein?

Aber wenigstens läuft es jetzt, danke für eure Hilfe!

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.