PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastenabfrage mit PIC16f84a



Frank Murmann
25.06.2011, 22:45
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?

PICture
26.06.2011, 00:07
Hallo Frank Murmann!

Ich würde während jedem Durchlauf der Warteschleife die gewünschte vier Taster abfragen. ;)

Frank Murmann
26.06.2011, 01:53
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 ...

PICture
26.06.2011, 13:36
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.

Frank Murmann
26.06.2011, 13:49
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 ...

PICture
26.06.2011, 13:53
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.

Frank Murmann
26.06.2011, 14:39
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.

PICture
26.06.2011, 14:46
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.