Hallo zusammen,
habe es nun mit dem Timer0 probiert. So sieht mein Code aus:
Code:
void ServiceTimer0(void)
{
static byte timer_state = 0;
if(timer_state == 0)
{
OpenTimer0(TIMER_INT_OFF &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_1);
timer_state++;
}
else if(timer_state == 1)
{
if((unsigned char) ReadTimer0() > 25)
{
mTaktausgang = 1;
WriteTimer0(0);
timer_state++;
}
}
else if(timer_state == 2)
{
if((unsigned char) ReadTimer0() > 25)
{
mTaktausgang = 0;
WriteTimer0(0);
timer_state--;
}
}
}
Mein Timer0 ist getaktet mit Fosc=20Mhz /5 prescaler = 1 =>5Mhz. Also alle 200ns erhöt sich mein Wert im Timer0 Reg. Wenn ich nun z.B. 100kHz erzeugen möchte: halbe Taktdauer sind 5us, also 5us/200ns => 25. Ist somit der Wert 25 im Timer0 Reg erreicht, wird mein Taktazsgang entsprechend gesetzt. Eigendlich müsste if((unsigned char) ReadTimer0() = 25) stehen, aber das ist sehr zeitkritisch, deshalb erst mal > 25. Aber das ganze funktioniert nicht. Egal wie ich meinen Wert (25) setze habe immer einen Takt von 25kHz am Pin anliegen. Was ist daran falsch?
lg,
blitzgeist
Lesezeichen