Hallo zusammen,
habe es nun mit dem Timer0 probiert. So sieht mein Code aus:
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?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--; } } }
lg,
blitzgeist





Zitieren

Lesezeichen