Was für ein Ergebnis erwartest du?
- - - Aktualisiert - - -
Um dir die Sache leichter zu machen.
Du schreibst in deiner while-Schleife so schnell ins Display das du das clear aus der ISR bestenfalls als flimmern wahrnimmst.
Hallo,
ich bin ein Neueinsteiger und möchte erste Versuche mit einem Timer Interrupt machen.
Ich benutze ein STK 500 mit einem ATmega168.
Leider funktioniert die Interrupt Routine anscheinend nicht, da kein Ergebnis am Display zu sehen ist.Code:#include <avr/io.h> #include "lcd-routines.h" #include <stdlib.h> #include <avr/interrupt.h> volatile int i; int main(void) { DDRB = 0x00; //PortB als Eingang PORTB = 0xFF; //Port B auf 0xFF setzen lcd_init(); //LCD Initialsieren TCCR0B = (1<<CS02); //TIMER definieren TIMSK0 |= (1<<TOIE0); sei(); //Interrupt aktivieren while(1) { { char Buffer[20]; itoa( i, Buffer, 10 ); lcd_string( Buffer ); //Ausgabe LCD lcd_setcursor( 0, 2 ); lcd_string("uSiemens"); //Ausgabe LCD } } } ISR (TIMER0_OVF_vect) //Interrupt {lcd_clear();} //Display löschen
Geändert von PloechingerD (12.11.2013 um 10:18 Uhr)
Was für ein Ergebnis erwartest du?
- - - Aktualisiert - - -
Um dir die Sache leichter zu machen.
Du schreibst in deiner while-Schleife so schnell ins Display das du das clear aus der ISR bestenfalls als flimmern wahrnimmst.
Mein Ziel wäre es hauptsächlich, das die Interrupt Routine funktioniert.
Habe auch schon versucht die angezeigt Variable i im Interrupt zu inkrementieren.
Und dadurch zählen zu lassen.
Doch das funktioniert leider auch nicht.
Einen Breakpoint in den Interrupthandler setzen und schauen, ob er kommt.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Beim Hochzählen einer Variable in der ISR muss man an das VOLATILE bei der Deklaration denken. Der Compiler optimiert sonst ggf. den Zugriff weg und man sieht nichts.
Der einfachste Weg zur Fehlersuche wäre wohl der Simulation im AVRstudio.
Die Ausgabe auf das LCD gehört leider auch noch zu den langsamen Funktionen. Im Normalfall sollte man das in der ISR Vermeiden. Es kann hier auch noch das Problem geben wenn die LCD Ausgabe aus dem Hauptprogramm von einer anderen LCD Funktion in der ISR unterbrochen wird.
Habe eine Lösung für das Problem gefunden.
Lag irgendwie an der zweiten Ausgabe lcd_string()
Danke für die Hilfe
Lesezeichen