Hallo, Ich habe das folgende Problem. Der timer lauft immer ungefaehr 20000 schritte und loest einen interrupt, leider auch wenn ich timer1 mit einem niedrigeren wert initialisiere.Das aussergewöhnliche daran ist dass das Programm im Avr studio Simulator problemlos funtioniert. Also wenn ich Starttimer1(255) angebe lauft das program genau 45 sekunden und wenn ich starttimer1(20) angebe lauft kuerzer und loest einen interrupt aus. Nur wenn ich das Programm zum STK5000 schicke dann lauft egal wie nur 19 sekunden (also 20000 schritte) MAche ich was falsch ? danke im voraus. Ferhat Clock= 3.69Mhz Prescaler CLK/1024 Compiler: AVR GNU C ver 3.0.8 SIGNAL(SIG_OVERFLOW1) /* signal handler overflow */ { outp((0<<CS12) |(0<<CS11) |(0<<CS10), TCCR1B); outp(255, TCNT1L); outp(0, TCNT1H); Timer1overflow=1; } void StartTimer1(unsigned char bitti) { unsigned char tmp; if (Timer1overflow==2) { tmp=255-bitti; outp(255, TCNT1L); /* reset Counter1 Low Byte */ outp(tmp, TCNT1H); /* reset Counter1 High Byte */ outp((1<<CS12) |(0<<CS11) |(1<<CS10), TCCR1B); Timer1overflow=0; } } int main(void) { Timer1overflow=2; stState=99; uart_init(); sei(); /* enable interrupts */ for (;;) { if (stState==99) { StartTimer1(255); if (Timer1Overflow==1) {stState=0;Timer1Overflow=2;}; } uart_send("test",4); }
Also ich denke DU machst den folgenden fehler, aber ich bin mir nicht ganz sicher. Beim ATmega16 muss man zum Beispiel muss man bei allen 16 bit timer registern erst das High byte schreiben, dann das low byte. vielleicht ist das auch bei Dir so! BSP: ldi r16, $00 ldi r17, $00 out TNCT1H, r17 out TNCT1L, r16
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.