Hallo ich verwende einen ATMEGA32 und habe an dem Pin PD3 ein ca. 3m langes Kabel angeschlossen. Vorher hatte ich zu testzwecken den Interupt immer durch einen unmittelbar an der Platine angeschlossenen Taster ausgelöst. Nun habe ich das Problem das der Interupt durch andere Geräte ausgelöst wird. z.B. durch das Einschalten oder Abschalten des Lötkolbens. Das Kabel ist extra schon geschirmt... Kann ich den Fehler irgendwie durch eine Zeile Code ausbügeln ?! Bin ziehmlicher Programmieranfänger. Bisher hatte ich als Code: SIGNAL(SIG_INTERRUPT0) { alarm = 1; } Vielen Dank schonmal !
Ich habe zunächst an folgenden Code gedacht... SIGNAL(SIG_INTERRUPT0) { timer_wait(1000); if(PD2==0) alarm = 1; } da der Kontakt am anderen ende des Kabels ohnehin mehrere sec. geschlossen wird. Aber das dann bekomm ich komischerweise gar keinen Interupt mehr?
1 | SIGNAL(SIG_INTERRUPT0) |
2 | {
|
3 | timer_wait(1000); |
Mit einem Interrupt hat man schnellstmöglich fertig zu sein. Irgendwelche Sleeps und Waits haben da nichts zu suchen. Du hast auf der Hardwareseite ein Problem. Willst du jetzt rumwürgen und das mit Software glattbügeln? Mach den Eingang niederohmig und ein RC-Glied davor, dann brauchst du das Softwaregebastel nicht.
>Du hast auf der Hardwareseite ein Problem Falsch. Das Problem ist hier die Software, bzw. dessen Konzept. >angeschlossenen Taster >SIGNAL(SIG_INTERRUPT0) Das ist Murks. Ein Taster selbs, fragt man nie als externen Interrupt ab! Das macht man in einem Timerinterrupt. DOrt muss dann eine Entprellroutine ablaufen. Siehe COdesammlung: http://www.mikrocontroller.net/forum/codesammlung?filter=Taste+entprellen
Das Hauptprogramm macht zu der Zeit eh nichts anders als den Taster abzufragen...aber das wird wohl trotzdemd die beste Lösung sein. Aber woher weiß ich die Dimensionierung von RC? weiß ja nicht aus welchen Frequenzen die Störung besteht?
@Matthias Warum macht man sowas nicht über einen externen Interrupt...? Das ganze schickt bei Tastendruck eine SMS raus....dann kann ich den Taster doch über einen externen Interrupt abfragen? ...aber ich könnte doch von diesem Interrupt auf eine Entprellfunktion übergeben oder?
Warum man das nicht so macht, hast du doch eben gemerkt... Taster fragt man regelmäßig alle 1 oder 10 Millisekunden ab, wird der dabei als gedrückt erkannt, so wird eine Varaible erhöht. Ist der Taster nicht gedrückt, so wird die Variable genullt. Wenn die Varaible einen Grenzwert überschreitet (also eine Zeit x permanent gedrückt ist), dann wird ein Flag (bei dir alarm=1) gesetzt und in main irgendwas damit gemacht. Siehe die von mir geposteten Links. Dort gibts weitere Erklärungen
> Falsch. Das Problem ist hier die Software, bzw. dessen Konzept. Irgendwie hört sich die Hardware für mich trotzdem auch falsch an: >> habe an dem Pin PD3 ein ca. 3m langes Kabel angeschlossen ;-) > Aber woher weiß ich die Dimensionierung von RC? > weiß ja nicht aus welchen Frequenzen die Störung besteht? Irgendwas ist besser als gar nichts. Geh davon aus, dass die Störung aus allem bestehen kann, und schirm dich so gut es geht dagegen ab.
1 | +5V +5V |
2 | o o |
3 | | | |
4 | .----o---. .-. |
5 | | | | | |
6 | | uC | | | 1k |
7 | | | '-' |
8 | | | | |
9 | | | | ___ |
10 | | In o-------o----|___|-----------------------------------. |
11 | | | | 47R | |
12 | | | | o |
13 | | | --- '\ |
14 | '----o---' --- 100n lange Leitung \ |
15 | | | o \ |
16 | | | | |
17 | o-----------o--------------------------------------------' |
18 | | |
19 | --- |
so habe das Problem jetzt auf eine andere art und weise gelöst: und zwar mit einer einfachen Diode. nun kann ich beispielsweise den nebenstehenden Lötkolben so oft an und ausschalten wie ich will und es passiert nichts. +5V o | .----o---. | | | uC | | | | | | | | | ||. | | In o-------o-------.|-----------------------------------. | | ||. | | | | | | o | | '\ '----o---' lange Leitung \ | o \ | | o--------------------------------------------------------' | ---
Die Lösung ist trotzdem nicht sauber. Aber lass es ruhig so (mit Interupt). Irgendwann wirst du es verstehen.
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.