Hallo Frank Murmann!
Ich würde während jedem Durchlauf der Warteschleife die gewünschte vier Taster abfragen.![]()
Hallo zusammen,
ich habe gerade ein kleines Programmierproblem und finde irgendwie dafür keinen richtigen Ansatz. Ich habe an einem PIC 4 Taster an PORT B und an PORT A hängen drei Relais. Bei drücken der Taste eins soll das Relais 1 anziehen, mit der Taste 2 das Relais 2 usw. dann soll der Prozessor eine Warteschleife durchlaufen und dann das entsprechende Relais wieder abschalten. Soweit auch kein Problem. Ich möchte aber jetzt, daß der Prozessor ein eingeschaltetes Relais sofort wieder abschaltet, falls während der Wartezeit einer der vier Taster betätigt wird. Hat jemand nen Tipp für eine elegante Lösung für das Problem?
Hallo Frank Murmann!
Ich würde während jedem Durchlauf der Warteschleife die gewünschte vier Taster abfragen.![]()
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Das hat zwei Nachteile:
- Wenn eine Taste gedrückt wird und der Prozessor bearbeitet gerade eine andere Anweisung als die Abfrage, wird der Tastendruck nicht registriert.
- Es ist nicht sehr elegant.
Da es sich um eine sicherheitsrelevante Anwendung handelt, stört mich insbesondere der erste Punkt. Ich dachte mehr so an einen Interrupt oder so ...
Sorry, ich kenne dein ganzes System nicht und das nur mein spontaner Vorschlag war.
Ich kann leider auch bei erstem Beitrag nicht erkennen, was für eine Antwort erwartet ist, da "eleggante Lösung" immer relativ. ist.
Geändert von PICture (26.06.2011 um 13:45 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Null Problemo. Jeder Tip ist besser als gar kein Tip. Ich bin gerade dabei zu versuchen, den RA0 als INT-Eingang zu verwenden. Die vier Taster werden per OR-Gatter auf den RA0 gelegt. Den kann ich flankengesteuert abfragen. Also werde ich, GIE nur während der Warteschleifen einschalten. Ich hoffe, das funktioniert dann ...
Dein PIC hat "on change interrupts" auf vier Eingängen vom Port B (B4 bis B7). Dann könntest du es in ISR ohne zusätzlicher Hardware lösen.
Geändert von PICture (26.06.2011 um 14:31 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Das war meine erste Idee. Das Problem dabei ist, daß dieser Interrupt auf beide Flanken reagiert. Daß heißt, beim Drücken der Taste springt der PIC in die Routine, die das Relais schaltet und beim Loslassen greift schon der Interrupt und das Relais wird wieder abgeschaltet.
Nach jeder Flanke kannst du aber alle B4 bis B7 Pins mit nötiger für Entprellung Verzögerung (um 10 ms) in ISR prüfen und entsprechend reagieren.
Es ist auch möglich bei jedem "on change interrupt" nur ein Flag setzen und den momentanen Zustand der Pins danach im Hautprogramm bearbeiten. Selbstverständlich muss das Hautprogramm das Flag ständig überwachen.
Geändert von PICture (26.06.2011 um 15:15 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Lesezeichen