hallo Forum probier jetzt schon eine geraume Zeit rum, den Timer1 meines AT90S2313 zum laufen zu bringen. mein Ziel ist es einen Sekundentakt mit Hilfe des Timers zu erzeugen. Dazu habe ich micheigentlich schon mit reichlich Beispielcode aus diesem Forum versorgt, aber dummerweise funktioniert das ganze immer noch nicht richtig. Hier der eigentlich recht simple Code: #define XTAL 4000000L #define DEBOUNCE 200L unsigned char second; SIGNAL (SIG_OUTPUT_COMPARE1A) { static char prescaler; /***************************** 1 second time base *********************/ if( --prescaler == 0 ){ prescaler = DEBOUNCE; second++; // exact one second over PORTD = ~PORTD; } } int main( void ) { DDRD = 0xFF; PORTD |= (1<<0); TCCR1B = 1<<CTC1^1<<CS10; // divide by 1 // clear on compare OCR1A = XTAL / DEBOUNCE; // timer = 5msec sei(); for(;;){ } } Wie gesagt ich habe den Code größtenteils aus diesem Forum - der Wiedererkennungswert dürfte deshalb bei dem einen oder anderen recht hoch sein. Mein Problem mit dem Programm: Die Interruptroutine wird anscheinend nie ausgeführt. Weder in der Simulation (AVRStudio) noch auf meinem AVR wird die Variable second hochgezählt und an Port D blinkt es auch nicht. Wär nett wenn ihr mir auf die Sprünge helfen könntet vielen Dank Jürgen
mal wieder ein fal von RTFM (sorry kleiner insider witz konnt ich mier nicht verkneifen) da fehlt noch mindestens der eintrag im TIMSK (Timer Interrupt Mask) register. weis jetzt nich ob noch mehr fehler drin sind aber es ist spät und ich seh keine mehr:-) gruss sven
Hi, hier zum Vergleich (Funktioniert): // Output pins disconnected, normal operation TCCR1A = 0; // Teiler /8 => 1µs, Compare-Mode 4 (CTC) TCCR1B |= _BV(WGM12)|_BV(CS11); TCCR1C = 0; // 1000µs = 1ms (Timer) OCR1A = 1000; // Startinitialisierung TCNT1 = 0; // Flag löschen TIFR |= _BV(OCF1A); // output-Compare 1A - INT enabled TIMSK |= _BV(OCIE1A); // Globalen Interrupt freigeben SREG |= _BV(SREG_I);
Danke euch, Sven hatte schon recht - der Fehler lag wie so oft zwischen den Kopfhören - wieviel ein Bit manchmal ausmachen kann - jetzt läuft die Schaltung Danke Jürgen
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.