Hi, ich habe an den µC einen Taster mit 10k Pullup angeschlossen. In der main aktiviere ich den Interrupt outp((1<<INT0), GIMSK); //int0 einschalten outp((1<<ISC01), MCUCR); //falling edges sei(); Wenn der Interrupt aufgerufen wird schalte ich den Interrupt aus und warte erst 120ms @ 4MHz. Dann wird eine Funktion aufgerufen, die ~8s dauert. Danach darf wieder auf Tastendruck reagiert werden, also aktiviere ich den Interrupt wieder. Das Problem ist nun, dass beim aktivieren des Interrupts der Interrupt gleich wieder ausgelöst wird. Ich erhalte also Pro tastendruck meistens 2 (nie mehr) aufrufe der funktion doSTH(). Hat jemand ne Ahnung wieso? SIGNAL(SIG_INTERRUPT0) { outp(0x00, GIMSK); //Int0 ausschalten u08 i, j, k; //warte 120ms zum entprellen for(k = 0; k < 7; k++){ for(j = 0; j < 255; j++){ for(i = 0; i < 255; i++){ asm volatile("nop"); } } } sei(); //interrupts wieder anschalten (werden für doSTH() benötigt) doSTH(); //Funktion die ca 8s dauert outp((1<<INT0), GIMSK); //Int0 wieder anschalten } cu MB
Hallo M, der Taster prellt, d.h. er schliesst und öffnet ganz kurz hintereinander ein paar mal. Je nachdem wie schnell Deine Erkennungsroutine ist, bekommst Du 2 oder mehr "Erkennungen". Lösung ist möglich, indem eine Zeitverzögerung nach dem ersten erkennen einprogrammiert wird, und der Interrupt so lange gesperrt wird. HTH, Klaus Infos zu AVR und 8051 unter: http://home.t-online.de/home/k.leidinger
Hi! Ich habe jetzt zwar nicht alles genau verfolgt, aber lösche doch vor der INT0-Freigabe mal das INT0-Flag. Ich vermute mal es wird dann gehen. Gruss Uwe
Hi, Ich hab leider 2 mal submit gedrückt. Hier der andere Thread. http://www.mikrocontroller.net/forum/read-1-7902.html Obwohl das Problem dank Elko gelöst ist, werde ich das mit dem INT0-Flag noch probieren. mfg MB
Hi, normal löscht man das INT0-flag ja so: sbr GIFR, 6 Beim AT90S1200 geht das aber nicht. Es gibt dort kein INT0. weis jemand eine Lösung für diesen µC? mfg MB
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.