PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tiny2313: Hilfe bei Initialisierung von Timer1



Bumbum
22.02.2013, 08:06
Guten Morgen,

ich stehe gerade auf dem Schlauch. Ich möchte Timer1 von einem Tiny2313 initialisieren, es klappt aber nicht. Ich benötige alle 444µS einen IRQ. Dazu möchte ich den CTC-Modus des Timers nutzen und habe dazu folgendes versucht:



//F_CPU = 3686400

#define TimeFirstBit 444 //µs
#define PreScaler 8
#define FirstBit_OCR (((F_CPU / PreScaler) * TimeFirstBit) / 1000000)

ISR (TIMER0_COMPA_vect)
{
//...
}

ISR (TIMER1_COMPA_vect)
{
//...
}

int Main
{
//...
TCCR1A = 0;
TCCR1B = (1<WGM12) | (1<<CS11);
OCR1A = FirstBit_OCR;
TIMSK = (1<<OCIE0A) | (1<<OCIE1A)

sei ();
//...
}


Der Wert für FirstBit_OCR müsste passen. Ich habe ihn mir via RS232 senden lassen und er ist 204.

Wo ist mein Fehler? Ich habe gerade ewig das Datenblatt studiert und alle Register noch mal genau überprüft. Ich sehe den Wald vor lauter Bäumen nicht mehr.

Normalerweise habe ich keine Probleme mit den Timern. Ich verwende im gleichen Programm auch den Timer0 für einen 10kHz Timer. Dieser ist ebenfalls mit CTC konfiguriert und läuft einwandfrei. Nur Timer1 wird geschätzt alle 2-3 Sekunden aufgerufen, auch egal welchen Wert ich für OCR1A setze. (Ich habe 0x1 und 0xFFF0 probiert). "Gefühlt" kommen die gleichen Zeiten dabei raus.

Um eine Beeinflußung von Timer0 auszuschließen habe ich diesen schon testweise deaktiviert. Leider war dies ohne Änderung des Verhaltens von Timer1.

Viele Grüße
Andreas

Searcher
22.02.2013, 08:38
int Main
{
//...
TCCR1A = 0;
TCCR1B = (1<WGM12) | (1<<CS11);
OCR1A = FirstBit_OCR;
TIMSK = (1<<OCIE0A) | (1<<OCIE1A)

sei ();
//...



???

Gruß
Searcher

Bumbum
22.02.2013, 11:19
Danke Searcher! Das war der Wald zwischen den ganzen Bäumen. Nun läuft es.