Touchpanel und Touchscreen (mit PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


5. Demonstrationsbeispiel 1 (Touchpanel)

Das folgende Beispiel dient nur zur Demonstration. Es zeigt eine mögliche Einbindung der zuvor beschriebenen Unterprogramme. Bei diesem Demonstrationsbeispiel soll das Touchpanel in vier Bereiche aufgeteilt werden. Diese vier Bereiche sind virtuelle Tasten. Der Zustand dieser vier virtuellen Tasten wird mit je einer grünen 5mm Leuchtdiode angezeigt. Ein Druck auf diese virtuelle Taste soll die dazugehörige Leuchtdiode ein bzw. ausschalten. Jede dieser vier Tasten ist unabhängig von den anderen.

Die Abbildung 6 zeigt ein Foto von diesem Demonstrationsbeispiel.

Demonstrationsbeispiel 1 (Foto)

Die Abbildung 7 zeigt die Koordinaten der vier virtuellen Tasten am Touchpanel.

Demonstrationsbeispiel 1 (Koordinaten der virtuellen Tasten)
nach oben

5.1. Schaltung (Hardware)

Die Abbildung 8 zeigt die sehr einfache Schaltung für das erste Demonstrationsbeispiel.

Demonstrationsbeispiel 1 (Touchpanel, Schaltung)

Die Schaltung besteht im Wesentlichen aus dem resistiven Touchpanel (TP1), der im Abschnitt 3 (Hardware) besprochenen Schaltung zur Ansteuerung des Touchpanels, dem Mikrocontroller (IC1), vier Leuchtdioden (D1 bis D4) mit den dazugehörigen Vorwiderständen (R11 bis R14) und einer einfachen Spannungsversorgung mit einem 5-V-Fixspannungsregler (IC2) vom Typ 7805.

Als Mikrocontroller (IC1) dient hier ein PIC16F88. Auffällig beim Mikrocontroller ist die fehlende Oszillatorschaltung sowie die fehlende Resetschaltung. Die Oszillatorschaltung ist hier auch nicht notwendig, da diese Anwendung nicht zeitkritisch ist und daher der interne 4-MHz-Oszillator verwendet werden kann.

Wichtig:
Bei der Konfiguration des Mikrocontrollers müssen die entsprechenden Bits für die Verwendung des internen Oszillators und des internen Reset gesetzt werden! Siehe Anmerkungen zur Software.

Der Kondensator C3 dient zur Entkoppelung der Betriebsspannung für den Mikrocontroller IC1. Für diesen Koppelkondensator sollte ein Keramiktyp verwendet werden. Dieser muss möglichst nahe beim Mikrocontroller angebracht werden.

Die Leuchtdioden D1 bis D4 mit den Vorwiderständen R11 bis R13 zeigen den Zustand der vier virtuellen Tasten am Touchpanel an.

Die Stromversorgung besteht hier aus einer sehr einfachen Standardlösung. Ein Festspannungsregler (IC2) vom Typ 7805 übernimmt mit den Kondensatoren C4 bis C7 die Spannungsregelung. Die Diode D5 dient hier als Verpolungsschutz, und die Leuchtdiode D6 dient zusammen mit dem Strombegrenzungswiderstand R15 als Spannungskontrolle.

nach oben

5.2. Stückliste

Demonstrationsbeispiel 1 (Touchpanel, Stückliste)
nach oben

5.3. Layout und Bestückungsplan

Das Layout für dieses Demonstrationsbeispiel befindet sich im Download-Bereich auf dieser Seite, der Bestückungsplan ist in Abbildung 10 zu sehen. Der Nachbau sollte keine Probleme bereiten. Bei der Bestückung beginnt man üblicherweise mit den niedrigen Bauteilen.

Demonstrationsbeispiel 1 (Touchpanel, Bestückungsplan)
nach oben

5.4. Anmerkungen zur Software

Die Software zum Demonstrationsbeispiel befindet sich im Download-Bereich auf dieser Seite.

Der Quellcode für dieses erste Demonstrationsbeispiel wurde in C mit der freien Demoversion des mikroC-Compilers erstellt.

Die Software besteht im Wesentlichen aus den folgenden Programmteilen:

Interrupt-Service-Routine (kurz: ISR):
Die ISR (in der Datei TouchPanel_Demo.c, Zeilen 110 bis 120) wird alle 8,2ms aufgerufen und besitzt hier nur die Aufgabe eine 100-ms-Zeitbasis zu erzeugen, indem sie ein Botschaftsflag für das Hauptprogramm erzeugt. Das Hauptprogramm reagiert auf dieses Botschaftsflag, indem es das Unterprogramm zur Ermittlung, ob eine virtuelle Taste am Touchpanel gedrückt wurde aufruft. Durch diesen Mechanismus wird dieses Unterprogramm zyklisch, alle 100ms aufgerufen.
Damit eine Zeit von ca. 100ms entsteht, muss die ISR 12-mal aufgerufen werden (12 x 8,2ms = ca. 98ms also ca. 100ms). Bei jedem ISR-Aufruf muss also ein Zählregister um 1 vermindert werden. Besitzt es danach den Wert 0, so sind 100ms (genauer: 98ms) vergangen. Nun wird das Botschaftsflag FlagZeitbasis100ms im Register FlagISRHP gesetzt, und das Zählregister muss mit dem Wert 12 neu geladen werden. Der Wert 12 wird hier durch die Konstante KONSTZEITBASIS100MS ersetzt.
Die Zeit von 8,2ms ergibt sich, weil als Takt der interne 4-MHz-Takt verwendet wird (Register OSCCON, Zeile 182) und weil der Vorteiler (VT) im Register OPTION_REG mit dem Wert 1:32 geladen wird (Zeile 154).

Hauptprogramm:
Das Hauptprogramm (main, Datei: TouchPanel_Demo.c, Zeilen 507 bis 524) befindet sich nach der Initialisierung (mit dem Unterprogramm Init) in einer Endlosschleife. Diese Schleife besitzt nur die Aufgabe ständig das Botschaftsflag FlagZeitbasis100ms zu prüfen. Ist dieses Botschaftsflag gesetzt, so muss vom Hauptprogramm eine bestimmte Aufgabe ausgeführt werden. Diese Aufgaben sind in Form von Unterprogrammen vorhanden. Hier hat es die Aufgabe das Unterprogramm zur Abfrage des Touchpanels aufzurufen (Zeile 518). Wichtig ist, dass das Botschaftsflag wieder gelöscht werden muss (Zeile 521).

Unterprogramm Init:
Das Unterprogramm Init (Datei: TouchPanel_Demo.c, Zeilen 150 bis 329) dient zur Initialisierung des Mikrocontrollers. Hier werden unter anderem die Ports konfiguriert (Port dient als Eingang oder als Ausgang), der oder die Timer eingestellt usw. Dieses Unterprogramm ist vom Controllertyp abhängig und je nach Anwendung mehr oder weniger umfangreich.
In diesem Unterprogramm werden auch die globalen Register initialisiert. Hier, bei diesem Demonstrationsbeispiel das Zählregister für die 100-ms-Zeitbasis (Zeile 299).

Unterprogramm TouchPanelTastenRoutine:
Das Unterprogramm TouchPanelTastenRoutine (Datei: TouchPanel_Demo.c, Zeilen 391 bis 496) ist das wesentliche Unterprogramm für dieses Demonstrationsbeispiel. Es überprüft regelmäßig, ob am Touchpanel eine der vier "virtuellen" Tasten gedrückt wurde. Dazu muss es zunächst die X- und die Y-Koordinate mit den im Abschnitt Software beschriebenen Unterprogrammen TP_GetX und TP_GetY ermitteln (Zeilen 398 und 399). Danach wird überprüft, ob diese Koordinaten im Bereich der ersten "virtuellen" Taste liegen (Zeile 402). Nur wenn diese Koordinaten im Bereich der ersten Taste liegen, und wenn diese Taste vor dem Aufruf des Unterprogramms noch nicht gedrückt wurde (Zeile 404) so erfolgt nun das Toggeln des Tastenzustandes und der Leuchtdiode (Zeilen 408 bis 417). Beachte: Damit bei einem "längeren" Drücken auf das Touchpanel der Tastenzustand und die Leuchtdiode nicht ständig toggeln ist ein Hilfsbit notwendig. Dieses Hilfsbit wird gesetzt, sobald die Taste gedückt wurde (Zeilen 404 und 406), und wird wieder gelöscht, wenn die Koordinaten außerhalb dieser Taste sind (Zeile 422).
Dieser Vorgang muss nun für die weiteren drei "virtuellen" Tasten wiederholt werden.

Wichtig:
Dieses Unterprogramm muss im Hauptprogramm regelmäßig (zyklisch) aufgerufen werden (Siehe Hauptprogramm, Datei: TouchPanel_Demo.c, Zeile 518).

Unterprogramme TP_GetX und TP_GetY:
Diese beiden Unterprogramme wurden bereits im Abschnitt Software sehr ausführlich behandelt, so dass sie hier nicht mehr näher erläutert werden müssen.

Wichtig:
In der Datei TOUCHPANEL.H müssen die Portpins und die analogen Kanäle gemäß der Demonstrationsschaltung nach Abbildung 8 definiert werden, Zeilen 19, 20, 24 und 25.

Unterprogramm ADC8:
Das Unterprogramm ADC8 (Datei: myPIC_ADC.C, Zeilen 47 bis 59) dient zur Analog-Digital-Wandlung mit dem PIC-internen-Hardwaremodul und entspricht der Vorgabe im Datenblatt zum PIC16F88 [5].

Sonstiges:
Am Beginn des Quellcodes (in der Datei TouchPanel_Demo.c) befinden sich die folgenden Definitionen und Einstellungen:

Ein kleiner Nachteil beim mikroC-Compiler ist, dass die Konfigurationsbits für den PIC-Mikrocontroller in der IDE gesetzt werden müssen. Ich persönlich würde diese lieber im Quellcode mit einer geeigneten Anweisung setzen.

Hier sind die notwendigen Einstellungen für den PIC16F88 für dieses Demonstrationsbeispiel:

nach oben


zurück zu Elektronik, Homepage

Autor: Stefan Buchgeher
Erstellt: 22. September 2009
Letzte Änderung: