Hallo, ich habe mal eine Frage,...hoffe das mir einer weiter hilft. Ich verwende einen Atmega32. Über den Pin PD2 wird über den Interrupt ständig ein Taster abgefragt. Wird dieser betätigt setze ich alarm auf 1 bisher: SIGNAL(SIG_INTERRUPT0) { alarm = 1; } Nun habe ich aber Probleme mit der EMV bekommen da der Taster an einem längeren Kabel angeschlossen ist, Deswegen möchte ich den Taster gerne entprellen. Da die main methode im Ruhezustand keine anderen Aufgaben hat außer den Schalter zu überwachen kann ich mir einen etwas längeren interupt leisten. habe es mit folgendem Code versucht: SIGNAL(SIG_INTERRUPT0) { alarm = 1; timer_wait(500); if (0<<PD2) alarm = 1; } JEdoch kann ich jetzt den Alarm nicht mehr auslösen. Kann mir einer sagen was ich falsch mache ... oder wie man den Pin richtig abfragt. Würde mich auf eine Antwort freuen! Vielen Dank Stefan
sorry ein alarm = 1 ist unten zu viel es muss natürlich heißen: SIGNAL(SIG_INTERRUPT0) { timer_wait(500); if (0<<PD2) alarm = 1; }
liegt es vielleicht daran das die abfrage: if (0<<PD2) nicht korrekt ist?
Tasten im Interrupt ?? Pfui Den ext Interrupt sollte man tunlichst lassen. Ich hoffe es ist der Timer gemeint. http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten
Stefan wrote: > Nun habe ich aber Probleme mit der EMV bekommen da der Taster an einem > längeren Kabel angeschlossen ist, Deswegen möchte ich den Taster gerne > entprellen. Dazu hat sich bei mir die 4-fach Abtastung bewährt. Ein Zustandswechsel wird nur dann übernommen, wenn 4-mal hintereinander der entgegengesetzte Zustand erkannt wird. Als Abtastintervall hat sich 10ms bewährt. Die 40ms Verzögerung sind bei manueller Betätigung unmerkbar. > Da die main methode im Ruhezustand keine anderen Aufgaben > hat außer den Schalter zu überwachen kann ich mir einen etwas längeren > interupt leisten. Kann man machen. Also bei jedem Programm von neuem anfangen zu überlegen, welche umständliche Entprellmethode man sich denn nun leisten kann. Und wenn das Programm wächst, sich ärgern, daß man es sich plötzlich nicht mehr leisten kann und von neuem anfangen nachzudenken. Ich bevorzuge allerdings die eine für alles Entprellmethode. Da muß man nie wieder nachdenken. Einfach ins neue Programm einfügen und vergessen. Ich hab sie deshalb bulletproof genannt. Peter
Vielen Dank für die Antworten,.... @ Stefan Henning: warum sollte man so was immer vermeiden? warum wird es denn dann hardwareseitig unterstützt. das ist ja ein alarm gerät was nur über einen taster ausgelöst werden kann.
habe es gerade mit folgendem Code probiert: SIGNAL(SIG_INTERRUPT0) { timer_wait(500); if ( !(PIND & (1<<PIND2)) ) alarm = 1; } Jetzt passiert gar nichts...bekomme den alarm einfach nicht auf 1 ???
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.