Hi hab mir jetzt mal das neue winavr drauf gemacht und jetzt hab ich ein ganz komisches Prob. . Immer wenn der Controller an den Punkt sei(); kommt hängt er sich da auf. Das war aber noch nicht mit der älteren Version so denke ich. Gibts da jetzt was zu beachten? Solltet ihr den Prog. code brauchen sagt bescheid (ist auf einem anderen PC). Je später ich sei(); im Prog setzt desto weiter komm ich im code. MFG Daniel
Dir ist schon bewusst, was sei() macht? Dann müsste Dir auch in den Sinn gekommen sein, dass der Fehler nicht am sei()-Befehl liegt, sondern in einem anderen Programmbereich. Nur mal so als Tipp: Checke Deine Interrupt-Routinen durch. Gruß Thomas
Also wenn ich das Richtig verstanden habe macht sei(); nichts anderes als den globalen Interrupt zu aktivieren. Ich poste mal mein kleinen Text vielleicht fällt da ja jemanden was auf. #include <stdlib.h> #include <lcd.h> #include <lcd.c> #include <avr/interrupt.h> int stat = 0; unsigned long int temp = 50; unsigned long int time = 10; // char buffer[20]; //buffer ISR(TIMER1_CAPT_vect) { temp = 100; temp = ICR1; } void lcd(void) { itoa( time , buffer, 10); //wandle integer in string lcd_gotoxy(0,1); // gehe zu LCD Position X Y lcd_puts(buffer); //schreibe auf den LCD den Inhalt von Var buffer } int main(void) { TIMSK |= (1<<TICIE1) | (1<<TOIE1); // Input Capture Interrupt aktiviert; Timer 1 Overflow Interrupt aktiviert TCCR1B |= (1<<CS10) | (0<<CS11) | (0<<CS12); // Timer CPU-Takt / sei(); lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_init(LCD_DISP_ON); lcd_puts("Impulsdauer:\n"); for(;;) { time = temp; lcd(); } } Soll das jetzt heißen der hängt in der input capture interrupt fest? Aber der wird doch nicht dauern ausgelöst hab das teil ja schonmal an Masse angeschlossen damit da ja kein Signal anliegt. Vielleicht sieht ja jemand was was ich falsch mache sitze schon wieder so lange dadran das es wieder so einfach ist das ich es nicht sehe. MFG Daniel
> TIMSK |= (1<<TICIE1) | (1<<TOIE1); // Input Capture Interrupt > aktiviert; Timer 1 Overflow Interrupt aktiviert Wo ist ISR(TIMER1_OVF_vect)? Grüße, Freakazoid
> ...den globalen Interrupt zu aktivieren...
Wer ist denn "der globale Interrupt"? Eher wird das globale
Interrupt-Enable-Bit gesetzt, wodurch Interrupt-Bearbeitung global
freigegeben wird.
Ansonsten hat André völlig recht. Ein Interrupt ohne Handler führt
i.d.R. zu einem Reset, wenn er auftritt.
@andré hmm ja was soll ich sagen hab es immer und immer wieder überlesen. Danke für die Hilfe bin echt ein schussel. Prog funzt aber ich glaub den Fehler mach ich so schnell nicht wieder. Hab lange dran rumgedockter @johnny Danke für die korrektur hast natürlich recht. Werde es mir merken. Also Problem behoben!!!!!.
Hi,
>TCCR1B |= (1<<CS10) | (0<<CS11) | (0<<CS12); // Timer CPU-Takt /
Das (0<<CS11) und (0<<CS12) klappt, aber so nicht moechtest du Bits
loeschen TCCR1B &= ~(1<<CS11) & ~(1<<CS12). In deinem Fall ist es aber
voellig egal.
Gruß,
Dirk
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.