Hallo,
zum Einen hast Du zur Berchnung 40000 benutzt, das entspricht 20000 Hertz bei Toggle, zum Anderen berücksichtigst Du nicht, daß für das Sprigen in die ISR, das Pushen der Register und bis zum Abschluss des Beschreibens des Timers insgesamt über 40 Prozessortakte vergehen.
Bei 4 MHz Prozessortakt und Timer0 wirst Du auf diese Art keine genauen 40kHz erreichen können. Timer1 und ein höherer Prozessortakt wären notwendig.
Grüße
Henrik
Edit und PS:
Zur Vervollständigung:
Unter diesen Voraussetzungen komme ich z.B. auf recht genaue 50kHz.
Die 50kHz deshalb um Dir etwas Reserven nach oben zu lassen.
(siehe Oszilloskopschnappschuss im Anhang)
Code:$regfile = "m32def.dat" $crystal = 7372800 ... Config Timer1 = Timer , Prescale = 8 On Timer1 Timer_irq Nosave ... ... Config Timer1 = Timer , Prescale = 1 Timervorgabe = 65462 + 32 'für 100kHz bzw. 50kHz bei Toggle '------------ händisches Registerretten -------- Timer_irq: $asm push R24 push R25 push R26 push R27 push XH push XL in R24, SREG push R24 $end Asm Timer1 = Timervorgabe Toggle Portb.0 $asm pop R24 Out Sreg , R24 pop XL pop XH pop R27 pop R26 pop R25 pop R24 $end Asm Return







Zitieren

Lesezeichen