Touchpanel und Touchscreen mit PIC

Transcrição

Touchpanel und Touchscreen mit PIC
Touchpanel und Touchscreen
mit PIC-Mikrocontroller
Stefan Buchgeher
14. September 2009
www.stefan-buchgeher.info
[email protected]
Großambergstraße 106/3, A-4040 Linz (Österreich)
++43/699/11 29 63 38
INHALTSVERZEICHNIS
1
Inhaltsverzeichnis
1 Einleitung
1
2 Grundlagen zum Touchpanel
2
3 Hardware
2
4 Software
4.1 Portdefinition . . . . . . . . . . . . . . . . . . . . . .
4.2 X-Koordinate ermitteln (Unterprogramm TP GetX) .
4.3 Y-Koordinate ermitteln (Unterprogramm TP GetY) .
4.4 Unterprogramm zur Analog-Digital-Wandlung (ADC8)
4.5 Koordinatenursprung . . . . . . . . . . . . . . . . . .
.
.
.
.
.
3
3
4
5
5
6
5 Demonstrationsbeispiel 1 (Touchpanel)
5.1 Schaltung (Hardware) . . . . . . . . .
5.2 Stückliste . . . . . . . . . . . . . . . .
5.3 Layout und Bestückungsplan . . . . . .
5.4 Software . . . . . . . . . . . . . . . . .
5.5 Anmerkungen zur Software . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
7
8
8
10
21
6 Demonstrationsbeispiel 2 (Touchscreen)
6.1 Schaltung (Hardware) . . . . . . . . . .
6.2 Stückliste . . . . . . . . . . . . . . . . .
6.3 Layout und Bestückungsplan . . . . . . .
6.4 Software . . . . . . . . . . . . . . . . . .
6.5 Anmerkungen zur Software . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
24
25
26
26
28
35
1
Einleitung
Beim Durchblättern der Elektronik-Monatszeitschrift Elektor [1] entdeckte ich einen Werbeartikel von der Firma mikroElektronika [2] zur Realisierung eines einfachen Touchscreen
mit einem resistiven Touchpanel. Das brachte mich auf die Idee mich mit den Themen
Touchpanel und Touchscreen zu beschäftigen.
Ein geeignetes Touchpanel und ein dazu passendes Grafikdisplay sind sehr günstig bei
Tigal [3] erhältlich.
Die Software ist hier in der Programmiersprache C verfasst. Als C-Compiler wird hier mikroC von mikroElektronika [4] verwendet. Für das erste Demonstrationsbeispiel (ab Seite
6) ist die kostenlose Demoversion ausreichend. Das zweite Demonstrationsbeispiel (ab Seite 24) ist, bedingt durch das Grafik-Display, für die Demoversion des C-Compilers leider
schon zu umfangreich, so dass für das zweite Demonstrationsbeispiel die kostenpflichtige
Vollversion des C-Cpmpilers notwendig ist.
2 GRUNDLAGEN ZUM TOUCHPANEL
2
2
Grundlagen zum Touchpanel
Eine sehr gute Erklärung über das hier verwendete Touchpanel ist in [2] zu finden.
Ein Touchpanel ist ein dünnes, transparentes und selbstklebendes Tastenfeld. Es ist sehr
druckempfindlich, so dass bereits ein leichter Druck eine Änderung des Ausgangssignals
bewirkt. Es gibt verschiedene Touchpanel-Typen. Am einfachsten und am preiswertesten sind analoge, resistive Touchpanels (Widerstands-Touchpanel). Dieses wird auch hier
verwendet.
Ein Widerstands-Touchpanel besteht aus zwei übereinander liegenden, steifen und leitfähigen Schichten (Indiumzinnoxid, engl. indium tin oxide, ITO), deren Innenseiten mit einer
Widerstandsschicht überzogen sind. Die beiden Schichten sind durch zahlreiche isolierte
Abstandshalter, so genannte Spacer-Dots“ voneinander getrennt. Die gegenüberliegenden
”
Seiten der Schichten sind mit Kontakten versehen (siehe Abbildung 1).
Abbildung 1: Touchpanel-Struktur
Beim Berühren des Touchpanels entsteht beim Druckpunkt ein Kontakt zwischen den
beiden Schichten.
Die Aufgabe besteht nun darin die Koordinaten des Druckpunktes zu bestimmen. Dazu
werden zwei gegenüberliegende Kontakte mit fixen, aber unterschiedliche Spannungen (z.B
+5V und 0V) verbunden. Dadurch ergibt sich ein Spannungsteiler, deren Widerstände
von der Position des Druckpunktes abhängen. Diese Spannung ist direkt proportional
zur Position des Druckpunktes und kann daher mit einem Analog-Digital-Wandler (kurz:
ADC) in einen digitalen Wert umgewandelt werden.
Um den Schaltungsaufwand gering zu halten sollte für die Ansteuerung eines resistiven Touchpanels ein Mikrocontroller verwendet werden, der zumindest zwei ADC-Kanäle
beinhaltet.
3
Hardware
In [2] wird die Schaltung nach Abbildung 2 vorgeschlagen, die auch bei mir einwandfrei
funktioniert.
Die Aufgabe dieser Schaltung ist die vier Anschlüsse des Touchpanels (Oben, Unten, Links
und Rechts) so mit Masse und mit der Spannungsversorgung (hier +5V ) zu verbinden, das
4 SOFTWARE
3
Abbildung 2: Schaltung (Touchpanel)
am Druckpunkt ein Spannungsteiler für die X-Koordinate entsteht, diese Spannung kann
dann vom Mikrocontroller digitalisiert werden, und gibt die X-Koordinate des Druckpunktes an. Das gleiche gilt für die Y-Koordinate.
Für die Ansteuerung der Transistorschaltung kann ein beliebiger Mikrocontroller verwendet werden, er muss nur 2 digitale Ausgänge und 2 analoge Eingänge besitzen.
4
Software
Die Aufgabe der Software ist es also, ständig (regelmäßig) die X-Koordinate und die YKoordinate zu bestimmen. Was mit dieser Information dann geschehen soll hängt von der
jeweiligen Aufgabenstellung ab. Meist wird ein Touchpanel zur Wert- und Dateneingabe
verwendet. Doch dass soll uns hier noch nicht kümmern. Hier geht es nur um die Erfassung
der X- und der Y-Koordinate. Der Quellcode welcher diese Aufgabe erfüllt befindet sich
in den Dateien TOUCHPANEL.H und TOUCHPANEL.C
4.1
Portdefinition
Im Allgemeinen wird bei jeder Anwendung das Touchpanel an anderen Portpins angeschlossen. Damit diese in den Unterprogrammen, die mit dem Touchpanel kommunizieren, nicht ständig geändert werden muss, befindet sich in der Software eine Portdefinition
für das Touchpanel. Diese besteht hier aus den zwei digitalen Ausgangspins und den zwei
analogen Eingangskanälen. Listing 1 zeigt eine mögliche Portdefinition für einen PICMikrocontroller aus der PIC16xx-Familie.
17
18
19
20
21
22
23
24
25
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ P o r t b e l e g u n g ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP PORT DRIVEA
PORTA. F1
#define TP PORT DRIVEB
PORTA. F0
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Analoge Kanaele ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP CHAN READX
3
#define TP CHAN READY
2
Listing 1: Portdefinitionen für das Touchpanel (Auszug aus TOUCHPANEL.H)
4 SOFTWARE
4
Achtung:
Beim Initialisieren des PIC-Mikrocontroller (bei mir im Unterprogramm Init)
müssen diese Portpins als Ausgänge bzw. Eingänge konfiguriert werden. Siehe
Demonstrationsbeispiele.
4.2
X-Koordinate ermitteln (Unterprogramm TP GetX)
Zur Bestimmung der X-Koordinate muss DRIVEA mit V cc (hier: +5V ) und DRIVEB mit
V ss (hier: 0V ) verbunden werden. Nach einer kurzen Warteteit (hier: 5ms) kann die
X-Koordinate gelesen werden. Der Wertebereich für die X-Koordinate liegt zwischen 0
(ganz links) und 255 (ganz rechts). Listing 2 zeigt dieses sehr einfache Unterprogramm
zur Bestimmung der X-Koordinate. Abbildung 3 zeigt den Zustand der Schalttransistoren
der Hardware für das Lesen der X-Koordinate.
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
char TP GetX ( void )
{
char x K o o r d i n a t e ;
// P o r t p i n DRIVEA = 1 und P o r t p i n DRIVEB = 0 ( Rechts : +Vcc , L i n k s : Vss ,
// Oben : hochohmig , Unten : x−K o o r d i n a te )
TP PORT DRIVEA = 1 ;
TP PORT DRIVEB = 0 ;
// 5ms warten
Delay ms ( 5 ) ;
// x−Wert ( Unten ) l e s e n
x K o o r d i n a t e = ADC8(TP CHAN READX) ;
return ( x K o o r d i n a t e ) ;
}
Listing 2: X-Koordinate lesen (Auszug aus TOUCHPANEL.C)
Abbildung 3: X-Koordinate lesen (Zustand der Schalttransistoren)
4 SOFTWARE
4.3
5
Y-Koordinate ermitteln (Unterprogramm TP GetY)
Für die Bestimmung der Y-Koordinate müssen an DRIVEA und DRIVEB die gegenteiligen
Zustände wie für die Bestimmung der X-Koordinate angelegt werden. An DRIVEA daher
V ss (hier: 0V ) und an DRIVEB V cc (hier: +5V ). Nach 5ms kann die Y-Koordinate gelesen
werden. Der Wertebereich für die Y-Koordinate liegt zwischen 0 (ganz unten) und 255
(ganz oben). Listing 3 zeigt dieses sehr einfache Unterprogramm zur Bestimmung der
Y-Koordinate. Abbildung 4 zeigt den Zustand der Schalttransistoren der Hardware für
das Lesen der Y-Koordinate.
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
char TP GetY ( void )
{
char y K o o r d i n a t e ;
// P o r t p i n DRIVEA = 0 und P o r t p i n DRIVEB = 1 ( Oben : +Vcc , Unten : Vss ,
// Rechts : hochohmig , L i n k s : y−K o o r d i n a te )
TP PORT DRIVEA = 0 ;
TP PORT DRIVEB = 1 ;
// 5ms warten
Delay ms ( 5 ) ;
// y−Wert ( L i n k s ) l e s e n
y K o o r d i n a t e = ADC8(TP CHAN READY) ;
return ( y K o o r d i n a t e ) ;
}
Listing 3: Y-Koordinate lesen (Auszug aus TOUCHPANEL.C)
Abbildung 4: Y-Koordinate lesen (Zustand der Schalttransistoren)
4.4
Unterprogramm zur Analog-Digital-Wandlung (ADC8)
Die Analog-Digital-Wandlung erfolgt mit einem eigenen kurzen Unterprogramm. Dieses
Unterprogramm befindet sich in der Datei myPIC ADC.C.
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
4.5
6
Koordinatenursprung
Aufgrund der gewählten Hardware und der Software ergibt sich für den Koordinatenursprung des Touchpanel die linke untere Ecke, so wie es auch in der Mathematik üblich
ist. Der Wertebereich ist für beide Achsen von 0 bis 255 (also jeweils 8 Bit, Abbildung 5).
Abbildung 5: Koordinatenursprung des Touchpanel
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 (Siehe auch Titelbild).
Abbildung 6: Demonstrationsbeispiel 1 (Foto)
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
7
Die Abbildung 7 zeigt die Koordinaten der vier virtuellen Tasten am Touchpanel.
Abbildung 7: Demonstrationsbeispiel 1 (Koordinaten der virtuellen Tasten)
5.1
Schaltung (Hardware)
Die Abbildung 8 zeigt die sehr einfache Schaltung für das erste Demonstrationsbeispiel.
Abbildung 8: Demonstrationsbeispiel 1 (Touchpanel, Schaltung)
Die Schaltung besteht im Wesentlichen aus dem resistiven Touchpanel (TP1), der im Abschnitt 3 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
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
8
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 (ab Seite 21).
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.
5.2
Stückliste
Nr.
R1 - R6, R8, R9, R11 - R15
R7, R10
C1 - C3, C5, C6
C4
C7
D1 - D4
D5
D6
T1, T3
T2, T4, T5
IC1
IC2
TP1
IC1
K1
TP1
Bezeichnung
Widerstand 1k
Widerstand 47k
Keramikkondensator 100nF RM5.08
Mini-Elko 10µF/25V
Tantal 1µF/35V
Low-current-LED 5mm grün
Diode 1N4001
Low-current-LED 3mm grün
Transistor BC557B
Transistor BC547B
Mikrocontroller PIC16F88
Spannungsregler 7805
Touch-Panel
IC-Präzisionssockel 18polig
Anschlussklemme 2polig
Touch-Panel-Connector
Platine Basismaterial (160 x 100mm)
Abstandsbolzen M3x10
Mutter M3
St.
13
2
5
1
1
4
1
1
2
3
1
1
1
1
1
1
1
4
4
Lief.
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Farnell
Conrad
Tigal
Conrad
Conrad
Tigal
Conrad
Bestell-Nr.
40 81 66
40 83 60
45 33 58
46 05 24
48 16 70
14 60 30
16 22 13
14 59 71
15 50 98
15 50 12
976-1500
17 92 05
Alt. Lief.
Bestell-Nr.
Conrad
16 52 33
18 96 34
18 96 34
52 92 49
Tabelle 1: Demonstrationsbeispiel 1 (Touchpanel, Stückliste, Stand: September 2009)
5.3
Layout und Bestückungsplan
Die Abbildung 9 zeigt das Layout für dieses Demonstrationsbeispiel. Es ist im Maßstab
1:1 und wie üblich spiegelverkehrt. 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.
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
Abbildung 9: Demonstrationsbeispiel 1 (Touchpanel, Layout)
Abbildung 10: Demonstrationsbeispiel 1 (Touchpanel, Bestückungsplan)
9
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
5.4
10
Software
Der Quellcode ist zur besseren Übersicht in mehrere Dateien aufgeteilt:
• TouchPanel Demo.c beinhaltet das Hauptprogramm, die Interrupt-Service-Routine
(ISR) und die Unterprogramme zur Initialisierung des Mikrocontrollers (PIC16F88)
und zur Abfrage der virtuellen Tasten am Touchpanel.
• TOUCHPANEL.C beinhaltet die Unterprogramme zum Lesen der X- und Y-Koordinate
des Touchpanel gemäß Abschnitt 4.
• TOUCHPANEL.H ist die Headerdatei zu TOUCHPANEL.C und beinhaltet die Portdefinitionen, die bei jeder Anwendung überprüft und ggf. angepasst werden müssen.
• myPIC ADC.C beinhaltet das Hilfsunterprogramm zur Analog-Digital-Wandlung.
• myPIC ADC.H ist die Headerdatei zu myPIC ADC.C.
Datei TouchPanel Demo.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Touchpanel − D e m o n s t r a t i o n s b e i s p i e l
∗/
/∗
∗/
/∗
255 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
235 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
| Taste 1
|
| Taste 3
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
148 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
108 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
| Taste 2
|
| Taste 4
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
20 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
0 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
0 20
108
148
235 255
∗/
/∗
∗/
/∗ i n t e r n e r Takt (4 MHz)
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 1 5 . August 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 1 5 . August 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 1 6 . August 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ I n c l u d e −D a tei en ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#include ”TOUCHPANEL.H”
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ S t r u k t u r e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e S t r u k t u r e n v er w en d et ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ E x ter n e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e e x t e r n e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ B i t s i n den e x t e r n e n R e g i s t e r n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e e x t e r n e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ G l o b a l e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char
FlagISRHP ;
char
ZaehlerZeitbasis100ms ;
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
11
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ B i t s i n den g l o b a l e n R e g i s t e r n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ R e g i s t e r FlagISRHP ∗/
#define F l a g Z e i t b a s i s 1 0 0 m s
FlagISRHP . F0
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ P o r t b e l e g u n g ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ S i e h e TOUCHPANEL.H ∗/
/∗ L eu ch td i o d en ∗/
#define LED Taste1
#define LED Taste2
#define LED Taste3
#define LED Taste4
PORTB. F7
PORTB. F5
PORTB. F6
PORTB. F4
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Konstanten ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
// Konstanten f u e r d i e Z e i t b a s e n
#define KONSTZEITBASIS100MS
12
// Konstanten f u e r d i e T a s t e n k o o r d i n a t e n (Demo)
// Taste 1
#define KONSTTASTE1X1
20
#define KONSTTASTE1X2
108
#define KONSTTASTE1Y1
148
#define KONSTTASTE1Y2
235
// Taste 2
#define KONSTTASTE2X1
20
#define KONSTTASTE2X2
108
#define KONSTTASTE2Y1
20
#define KONSTTASTE2Y2
108
// Taste 3
#define KONSTTASTE3X1
148
#define KONSTTASTE3X2
235
#define KONSTTASTE3Y1
148
#define KONSTTASTE3Y2
235
// Taste 4
#define KONSTTASTE4X1
148
#define KONSTTASTE4X2
235
#define KONSTTASTE4Y1
20
#define KONSTTASTE4Y2
108
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ T a b e l l e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e T a b e l l e n ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void I n i t ( void ) ;
void TouchPanelTastenRoutine ( void ) ;
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ISR − Timer0 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ I n t e r r u p t S e r v i c e R o u ti n e :
∗/
/∗
∗/
/∗ A u f r u f :
∗/
/∗
a l l e 8 . 2 ms ( u n g e f a e h r )
∗/
/∗
∗/
/∗ Aufgaben :
∗/
/∗
+ Z e i t b a s i s f u e r 100 M i l l i s e k u n d e e r z e u g e n
∗/
/∗
+ Das Timer−I n t e r r u p t −F l a g T0IF w i e d e r l o e s c h e n
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void i n t e r r u p t ( void )
// I n t e r r u p t r o u t i n e
{
Z a e h l e r Z e i t b a s i s 1 0 0 m s −−;
i f ( Z a e h l e r Z e i t b a s i s 1 0 0 m s == 0 )
// B o t s c h a f t s f l a g f u e r 100 ms−Z e i t b a s i s s e t z e n
{
FlagZeitbasis100ms = 1;
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
12
Z a e h l e r Z e i t b a s i s 1 0 0 m s = KONSTZEITBASIS100MS ; // Z a e h l r e g i s t e r f u e r 100−ms−
// Z e i t b a s i s neu l a d e n
}
INTCON . T0IF = 0 ;
// Timer−I n t e r r u p t −F l a g T0IF w i e d e r l o e s c h e n
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Unterprogramme und Funktionen ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ I n i t :
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
I n i t i a l i s i e r u n g d es P r o z e s s o r :
∗/
/∗
+ Timer 0 (TMR0) l o e s c h e n
∗/
/∗
+ Timer 0−ISR s o l l ca . a l l e 8 , 2ms a u f g e r u f e n werden , d a h er den V o r t e i l e r mit
∗/
/∗
1 : 3 2 l a d e n ( b e i einem 4−MHz−Takt )
∗/
/∗
4 ∗ 256 ∗ VT
4 ∗ 256 ∗ 32
∗/
/∗
ISR−A u f r u f [ us ] = −−−−−−−−−−−−− = −−−−−−−−−−−− = 8192 us = 8 , 2 ms
∗/
/∗
f [MHz]
4
∗/
/∗
+ i n t e r n e n O s z i l l a t o r k o n f i g u r i e r e n ( h i e r : 4MHz)
∗/
/∗
+ Port A f u e r das Touchpanel a l s Eingang ( f u e r ADC) bzw . a l s Ausgang d e f i n i e r e n ∗/
/∗
+ Port B f u e r d i e L eu ch td i o d en a l s Ausgang d e f i n i e r e n und I n h a l t l o e s c h e n
∗/
/∗
+ ADC k o n f i g u r i e r e n
∗/
/∗
+ Zaehlregister fuer Zeitbasis i n i t i a l i s i e r e n
∗/
/∗
+ I n t e r r u p t f r e i g e b e n ( Timer0 f r e i g e b e n durch S e t z e n von GIE und T0IE im
∗/
/∗
INTCON−R e g i s t e r )
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
keiner
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void I n i t ( void )
{
// Timer−0− I n t e r r u p t k o n f i g u r i e r e n
TMR0 = 0 ;
// Timer 0 a u f 0 v o r e i n s t e l l e n
OPTION REG = 0 b10000100 ;
// Option−R e g i s t e r ( Bank 1 )
/∗
+−−−−−−−−−−−−−−−− B i t 7 (nRBPU) : P u l l −Up−Wi d er s ta en d e am Port B
|||||||
0 : P u l l −Up a k t i v i e r t
|||||||
−>
1 : P u l l −Up d e a k t i v i e r t
+−−−−−−−−−−−−−−−− B i t 6 (INTEDG) : I n t e r r u p t Edge S e l e c t B i t
||||||
−>
0 : I n t e r r u p t on f a l l i n g edge o f RB0/INT p i n
||||||
1 : I n t e r r u p t on r i s i n g edge o f RB0/INT p i n
+−−−−−−−−−−−−−−− B i t 5 (T0CS) : Timer 0 Clock s o u r c e S e l e c t B i t
|||||
−>
0 : T r a n s i t i o n on RA4/T0CKI p i n
|||||
1 : I n t e r n a l i n s t r u c t i o n c y c l e c l o c k (CLKOUT)
+−−−−−−−−−−−−−− B i t 4 (T0SE ) : TMR0 S o u r ce Edge S e l e c t b i t
||||
−>
0 : In cr em en t on low−to−h i g h t r a n i t i o n
||||
1 : In cr em en t on high −to −low t r a n i t i o n
+−−−−−−−−−−−− B i t 3 (PSA) : P r e s c a l e r Assignment b i t
|||
−>
0 : P r e s c a l e r i s a s s i g n e d to th e TIMER0 module
|||
1 : P r e s c a l e r i s a s s i g n e d to th e WDT
+++−−−−−−−−− B i t 2−0 ( PS2 : PS0 ) : P r e s c a l e r Rate S e l e c t b i t s
B i t Value
TMR0 Rate
WDT Rate
000 :
1:2
1:1
001 :
1:4
1:2
010 :
1:8
1:4
011 :
1:16
1:8
−> 100 :
1:32
1:16
101 :
1:64
1:32
110 :
1:128
1:64
111 :
1:256
1:128
∗/
// i n t e r n e n O s z i l l a t o r k o n f i g u r i e r e n
OSCCON = 0 b01101010 ;
// O s z i l l a t o r −C o n tr o l −R e g i s t e r ( Bank 1 )
/∗
+−−−−−−−−−−−−−−−−−−−− B i t 7 R es er v e
+++−−−−−−−−−−−−−−−−− B i t 6−4 ( IRCF2 : IRCF0 ) : I n t e r n a l RC−O s c i l l a t o r
||||
Frequency S e l e c t b i t s
||||
0 0 0 : 3 1 . 2 5 kHz (INTRC s o u r c e d r i v e s c l o c k )
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
||||
||||
||||
||||
||||
||||
||||
+−−−−−−−−−−−−−−−−
|||
|||
|||
|||
|||
+−−−−−−−−−−−−−−−
||
||
++−−−−−−−−−−−−−
13
0 0 1 : 125 kHz
0 1 0 : 250 kHz
0 1 1 : 500 kHz
1 0 0 : 1 MHz
1 0 1 : 2 MHz
−> 1 1 0 : 4 MHz
1 1 1 : 8 MHz
B i t 3 (OSTS) : O s c i l l a t o r S t a r t −up Time−out
Status bi t
0 : D ev i ce i s r u n n i n g from T1OSC o r INTRC
a s a s e c o n d a r y system c l o c k
−>
1 : D ev i ce i s r u n n i n g from th e primary
system c l o c k
B i t 2 ( IOFS ) : INTOSC Frequency S t a b l e b i t
−>
0 : Frequency i s not s t a b l e
1 : Frequency i s s t a b l e
B i t 1 , 0 ( SCS1 : SCS0 ) : O s c i l l a t o r Mode S e l e c t b i t s
0 0 : O s c i l l a t o r mode d e f i n e d by Fosc <2:0>
0 1 : T1OSC i s used f o r system c l o c k
−> 1 0 : i n t e r n a l RC i s used f o r system c l o c k
1 1 : R es er v ed
∗/
/∗
// P o r t s k o n f i g u r i e r e n
TRISA = 0 b00111100 ;
++−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−
// R i c h t u n g s r e g i s t e r
B i t 7−6 R es er v e
B i t 5 Port RA5 : h i e r
B i t 4 Port RA4 : h i e r
B i t 3 Port RA3 : h i e r
B i t 2 Port RA2 : h i e r
B i t 1 Port RA1 : h i e r
B i t 0 Port RA0 : h i e r
Port A ( 0 : Ausgang , 1 : Eingang )
TRISB = 0 b00000000 ;
+−−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−
// R i c h t u n g s r e g i s t e r
B i t 7 Port RB7 : h i e r
B i t 6 Port RB6 : h i e r
B i t 5 Port RB5 : h i e r
B i t 4 Port RB4 : h i e r
B i t 3 Port RB3 : h i e r
B i t 2 Port RB2 : h i e r
B i t 1 Port RB1 : h i e r
B i t 0 Port RB0 : h i e r
Port B ( 0 : Ausgang
Ausgang (LED Taste
Ausgang (LED Taste
Ausgang (LED Taste
Ausgang (LED Taste
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
a n a l o g e r Eingang ( Touchpanel )
a n a l o g e r Eingang ( Touchpanel )
h i e r Ausgang ( Touchpanel )
h i e r Ausgang ( Touchpanel )
∗/
/∗
, 1 : Eingang )
1)
3)
2)
4)
∗/
PORTB = 0 ;
/∗
// ADC k o n f i g u r i e r e n
ANSEL = 0 b00001100 ;
+−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−
// ANSEL−R e g i s t e r ( 0 : D i g i t a l I /O, 1 : Analog I /O)
B i t 7 R es er v e
B i t 6 Port RB7/AN6: h i e r D i g i t a l I /O
B i t 5 Port RB6/AN5: h i e r D i g i t a l I /O
B i t 4 Port RA4/AN4: h i e r u n b en u tzt
B i t 3 Port RA3/AN3: h i e r Analog I /O
B i t 2 Port RA2/AN2: h i e r Analog I /O
B i t 1 Port RA1/AN1: h i e r D i g i t a l I /O
B i t 0 Port RA0/AN0: h i e r D i g i t a l I /O
∗/
/∗
ADCON0 = 0 b01000001 ;
// ADC−C o n tr o l−R e g i s t e r 0 ( Bank 1 )
++−−−−−−−−−−−−−−−−−−− B i t 7−6 (ADCS1: ADCS0) : A/D C o n er s i o n Clock S e l e c t
||||||
bits
||||||
IF ADSC2 = 0 :
||||||
00 : Fosc /2
( b e i f o s z : 0 − 1 . 2 5 MHz)
||||||
−> 01 : Fosc /8
( b e i f o s z : 1 . 2 5 − 5 MHz)
||||||
10 : Fosc /32 ( b e i f o s z : 5 − 20 MHz)
||||||
11 : Frc
( b e i RC−O s z i l l a t o r )
||||||
IF ADSC2 = 1 :
||||||
00 : Fosc /4
( b e i f o s z : 0 − 1 . 2 5 MHz)
||||||
01 : Fosc /16 ( b e i f o s z : 1 . 2 5 − 5 MHz)
||||||
10 : Fosc /64 ( b e i f o s z : 5 − 20 MHz)
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
||||||
+++−−−−−−−−−−−−−−−−
|||
|||
|||
|||
|||
|||
|||
+−−−−−−−−−−−−−−−
||
||
||
+−−−−−−−−−−−−−−
+−−−−−−−−−−−−−
11 : Frc
( b e i RC−O s z i l l a t o r )
B i t 5−3 (CHS2 : CHS0 ) : Analog Channel S e l e c t b i t s
−> 0 0 0 : c h a n n e l 0 (RA0/AN0)
0 0 1 : c h a n n e l 1 (RA1/AN1)
0 1 0 : c h a n n e l 2 (RA2/AN2)
0 1 1 : c h a n n e l 3 (RA3/AN3)
1 0 0 : c h a n n e l 4 (RA4/AN4)
1 0 1 : c h a n n e l 5 (RB6/AN5)
1 1 0 : c h a n n e l 6 (RB7/AN6)
B i t 2 (GO/DONE) : A/D C o n v er s i o n S t a t u s B i t
IF ADON = 1 :
−>
0 : A/D c o n v e r s i o n not i n p r o g r e s s
1 : A/D c o n v e r s i o n i n p r o g r e s s
B i t 1 R es er v e
B i t 0 (ADON) : A/D On B i t
0 : A/D c o n v e r t e r module i s shut−o f f
−>
1 : A/D c o n v e r t e r module i s o p e r a t i n g
ADCON1 = 0 b00000010 ;
+−−−−−−−−−−−−−−−−−−−−
|||||||
|||||||
|||||||
|||||||
|||||||
|||||||
+−−−−−−−−−−−−−−−−−−−
||||||
||||||
||||||
++−−−−−−−−−−−−−−−−−
||||
||||
||||
||||
||||
++++−−−−−−−−−−−−−
// ADC−C o n tr o l−R e g i s t e r 1 ( Bank 1 )
B i t 7 (ADFM) : A/D R e s u l t Formated S e l e c t b i t s
−>
0 : Left j u s t i f i e d :
i n ADRESH:
Bit 9 bis Bit 2
i n ADRESL:
B i t 1 , B i t 0 , Rest 0
1 : Right j u s t i f i e d :
i n ADRESH:
0 0 0 0 0 0 Bit 9 Bit 8
i n ADRESL:
Bit 7 bis Bit 0
B i t 6 (ADCS2) : A/D Clock D i v i d e by 2 S e l e c t b i t
−>
0 : Disabled
1 : A/D c l o c k s o u r c e i s d i v i d e by 2 when
system c l o c k i s used
B i t 5 , 4 (VCFG1 :VCFG0) : A/D V o l ta g e R e f e r e n c e
V r ef+
Vref−
00 :
AVdd
AVss
01 :
AVdd
Vref−
10 :
V r ef+
AVss
11 :
V r ef+
Vref−
B i t 3−0 R es er v e
14
∗/
/∗
∗/
// Z a e h l r e g i s t e r f u e r Z e i t b a s i s i n i t i a l i s i e r e n
Z a e h l e r Z e i t b a s i s 1 0 0 m s = KONSTZEITBASIS100MS ; // Z a e h l r e g i s t e r f u e r 100−ms−Z e i t b a s i s
// i n i t i a l i s i e r e n
/∗
∗/
// I n t e r r u p t f r e i g e b e n
INTCON = 0 b10100000 ;
// I n t e r r u p t −C o n tr o l −R e g i s t e r ( Bank 1 )
+−−−−−−−−−−−−−−−−−−−− B i t 7 ( GIE) : Gl o b a l I n t e r r u p t Enable b i t
|||||||
0 : Disables a l l i nter r upts
|||||||
−>
1 : E n a b l es a l l unmasked i n t e r r u p t s
+−−−−−−−−−−−−−−−−−−− B i t 6 ( PEIE ) : P e r i p h e r a l I n t e r r u p t Enable b i t
||||||
−>
0 : Disables a l l peripheral i nter r upts
||||||
1 : E n a b l es a l l unmasked p e r i p h e r a l i n t e r r u p t s
+−−−−−−−−−−−−−−−−−− B i t 5 ( T0IE ) : Timer 0 O v er f l o w I n t e r r u p t Enable B i t
|||||
0 : Disabled
|||||
−>
1 : Enabled
+−−−−−−−−−−−−−−−−− B i t 4 (INTE ) : RB0/INT E x t e r n a l I n t e r r u p t Enable B i t
||||
−>
0 : Disabled
||||
1 : Enabled
+−−−−−−−−−−−−−−−− B i t 3 (RPIE ) : RB Port Change I n t e r r u p t Enable B i t
|||
−>
0 : Disabled
|||
1 : Enabled
+−−−−−−−−−−−−−−− B i t 2 ( T0IF ) : Timer 0 O v er f l o w I n t e r r u p t F l a g b i t
||
−>
0 : TMR0 r e g i s t e r d i d not o v e r f l o w
||
1 : TMR0 r e g i s t e r has o v e r f l o w e d
+−−−−−−−−−−−−−− B i t 1 (INTF) : RB0/INT E x t e r n a l I n t e r r u p t F l a g b i t
|
−>
0 : RB0/INT e x t e r n a l i n t e r r u p t d i d not o c c u r
|
1 : RB0/INT e x t e r n a l i n t e r r u p t o c c u r r e d
+−−−−−−−−−−−−− B i t 0 (RBIF ) : RB Port Change I n t e r r u p t F l a g b i t
−>
0 : None o f RB7 : RB4 p i n s have changed s t a t e
1 : One o f th e RB7 : RB4 p i n s changed s t a t e
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
15
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ TouchPanelTastenRou tine :
∗/
/∗
∗/
/∗ A u f r u f :
∗/
/∗
ca . a l l e 100 ms ( vom Hauptprogramm )
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
E r m i ttel n , ob und w el ch e d er v i e r ” v i r t u e l l e n ” Tasten am Touch−Panel g e d r u e c k t
∗/
/∗
wurde , und den ” v i r t u e l l e n ” T a s ten zu s ta n d t o g g e l n und den S t a t u s mit den LEucht− ∗/
/∗
d i o d en a n z e i g e n .
∗/
/∗
∗/
/∗ Zuordnung d er ” v i r t u e l l e n ” Tasten am Touch−Panel :
∗/
/∗
255 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
235 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
| Taste 1
|
| Taste 3
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
148 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
108 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
| Taste 2
|
| Taste 4
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
20 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
0 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
0 20
108
148
235 255
∗/
/∗
∗/
/∗ V o r g eh en s w e i s e :
∗/
/∗
+ x− und y−K o o r d i n a ten von Touchpanel l e s e n
∗/
/∗
+ Pruefen , ob d i e x− und y−K o o r d i n a te im B e r e i c h von Taste 1 l i e g t , wenn j a , den ∗/
/∗
Zustand d er Taste 1 b e i einem Uebergang von ” n i c h t g e d r u e c k t ” zu ” g e d r u e c k t ”
∗/
/∗
i n v e r t i e r e n ( t o g g e l n ) und j e nach Aufgabe d er Taste d i e s e a u s f ü h r e n ( h i e r : den ∗/
/∗
S t a t u s d er Taste mit e i n e r L eu ch td i o d e a n z e i g e n
∗/
/∗
+ Das s e l b e nun f u e r d i e a n d er en d r e i Tasten
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Anmerkungen :
∗/
/∗
+ B ei dem h i e r v er w en d eten r e s i s t i v e n Touch−Panel kann immer nur e i n e Taste ge−
∗/
/∗
d r u e c k t werden . Mehrere Tasten g l e i c h z e i t i g ( a l s o e i n e T a s ten k o m b i n a ti o n ) i s t
∗/
/∗
b e i r e s i s t i v e n Touchpanels n i c h t m ö g l i ch !
∗/
/∗
+ das s t a t i s c h e R e g i s t e r b u t t o n s t a t u s d i e h n t h i e r a l s H i l f s r e g i s t e r , wobei d i e
∗/
/∗
B i t s f o l g e n d e Bedeutung haben :
∗/
/∗
B i t 0 : Zustand von Taste 1 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 1 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 1
∗/
/∗
B i t 2 : Zustand von Taste 2 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 3 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 2
∗/
/∗
B i t 4 : Zustand von Taste 3 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 5 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 3
∗/
/∗
B i t 6 : Zustand von Taste 4 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 7 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 4
∗/
/∗
+ Die z u l a e s s i g e n B e r e i c h e d er Tasten am Touch−Panel s i n d durch d i e Konstanten
∗/
/∗
KONSTTASTExXx und KONSTTASTExYx b e g r e n z t .
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void TouchPanelTastenRoutine ( void )
{
char x , y ;
s t a t i c char b u t t o n s t a t u s = 0 ;
// S c h r i t t 1 : x− und y−K o o r d i n a ten von Touchpanel l e s e n
x = TP GetX ( ) ;
y = TP GetY ( ) ;
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
// S c h r i t t 2 : Taste 1
i f ( ( x >= KONSTTASTE1X1) && ( x <= KONSTTASTE1X2) && ( y >= KONSTTASTE1Y1) && ( y <=
KONSTTASTE1Y2) )
{
i f ( b u t t o n s t a t u s . F1 == 0 )
{
b u t t o n s t a t u s . F1 = 1 ;
i f ( button status
{
button status
LED Taste1 =
}
else
{
button status
LED Taste1 =
}
. F0 == 0 )
. F0 = 1 ;
1;
. F0 = 0 ;
0;
}
}
else
{
b u t t o n s t a t u s . F1 = 0 ;
}
// S c h r i t t 3 : Taste 2
i f ( ( x >= KONSTTASTE2X1) && ( x <= KONSTTASTE2X2) && ( y >= KONSTTASTE2Y1) && ( y <=
KONSTTASTE2Y2) )
{
i f ( b u t t o n s t a t u s . F2 == 0 )
{
b u t t o n s t a t u s . F2 = 1 ;
i f ( button status
{
button status
LED Taste2 =
}
else
{
button status
LED Taste2 =
}
. F3 == 0 )
. F3 = 1 ;
1;
. F3 = 0 ;
0;
}
}
else
{
b u t t o n s t a t u s . F2 = 0 ;
}
// S c h r i t t 4 : Taste 3
i f ( ( x >= KONSTTASTE3X1) && ( x <= KONSTTASTE3X2) && ( y >= KONSTTASTE3Y1) && ( y <=
KONSTTASTE3Y2) )
{
i f ( b u t t o n s t a t u s . F4 == 0 )
{
b u t t o n s t a t u s . F4 = 1 ;
i f ( button status
{
button status
LED Taste3 =
}
else
{
button status
LED Taste3 =
}
}
}
. F5 == 0 )
. F5 = 1 ;
1;
. F5 = 0 ;
0;
16
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
17
else
{
b u t t o n s t a t u s . F4 = 0 ;
}
// S c h r i t t 5 : Taste 4
i f ( ( x >= KONSTTASTE4X1) && ( x <= KONSTTASTE4X2) && ( y >= KONSTTASTE4Y1) && ( y <=
KONSTTASTE4Y2) )
{
i f ( b u t t o n s t a t u s . F6 == 0 )
{
b u t t o n s t a t u s . F6 = 1 ;
i f ( button status
{
button status
LED Taste4 =
}
else
{
button status
LED Taste4 =
}
. F7 == 0 )
. F7 = 1 ;
1;
. F7 = 0 ;
0;
}
}
else
{
b u t t o n s t a t u s . F6 = 0 ;
}
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Hauptprogramm ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Aufgaben d es Hauptprogramms :
∗/
/∗
+ C o n t r o l l e r i n i t i a l i s i e r e n ( Unterprogramm INIT )
∗/
/∗
+ T a e t i g k e i t e n / Unterprogramme , d i e a l l e z y k l i s c h d u r c h g e f u e h r t werden muessen :
∗/
/∗
+ a l l e 100 ms : Touchpanel a b f r a g en , ob e i n e ” v i r t u e l l e ” Taste g e d r u e c k t wurde ∗/
/∗
( Unterprogramm TouchPanelTastenRoutine )
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void main ( void )
{
// C o n t r o l l e r i n i t i a l i s i e r e n
Init () ;
// E n d l o s s c h l e i f e
while ( 1 )
{
i f ( FlagZeitbasis100ms)
{
// Touchpanel a b f r a g en , ob e i n e ” v i r t u e l l e ” Taste g e d r u e c k t wurde
TouchPanelTastenRou tine ( ) ;
// B o t s c h a f t s f l a g ( f u e r 100 ms−Z e i t b a s i s ) z u r u e c k s e t z e n
FlagZeitbasis100ms = 0;
}
}
}
Datei TOUCHPANEL.C:
1
2
3
4
5
6
7
8
9
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Unterprogramme zum Lesen d er x− und y−K o o r d i n a te von einem r e s i s t i v e n Touchpanel
∗/
/∗
∗/
/∗
255 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
|
|
∗/
/∗
|
|
∗/
/∗
|
|
∗/
/∗
|
|
∗/
/∗
|
|
∗/
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
18
/∗
|
|
∗/
/∗
0 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
0
255
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 1 6 . August 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ I n c l u d e −D a tei en ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#include ”TOUCHPANEL.H”
#include ”myPIC ADC.H”
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Unterprogramme zum Lesen d er x− und y−K o o r d i n a te ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ TP GetX :
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
x−K o o r d i n a te von Touchpanel l e s e n :
∗/
/∗
∗/
/∗ V o r g eh en s w e i s e :
∗/
/∗
+ P o r t p i n DRIVEA = 1 und P o r t p i n DRIVEB = 0 ( Rechts : +Vcc , L i n k s : Vss ,
∗/
/∗
Oben : hochohmig , Unten : x−K o o r d i n a te )
∗/
/∗
+ 5ms warten
∗/
/∗
+ x−Wert ( Unten ) l e s e n
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keine
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
x−K o o r d i n a te ( 0 . . . 2 5 5 )
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char TP GetX ( void )
{
char x K o o r d i n a t e ;
// P o r t p i n DRIVEA = 1 und P o r t p i n DRIVEB = 0 ( Rechts : +Vcc , L i n k s : Vss ,
// Oben : hochohmig , Unten : x−K o o r d i n a te )
TP PORT DRIVEA = 1 ;
TP PORT DRIVEB = 0 ;
// 5ms warten
Delay ms ( 5 ) ;
// x−Wert ( Unten ) l e s e n
x K o o r d i n a t e = ADC8(TP CHAN READX) ;
return ( x K o o r d i n a t e ) ;
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ TP GetY :
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
y−K o o r d i n a te von Touchpanel l e s e n :
∗/
/∗
∗/
/∗ V o r g eh en s w e i s e :
∗/
/∗
+ P o r t p i n DRIVEA = 0 und P o r t p i n DRIVEB = 1 ( Oben : +Vcc , Unten : Vss ,
∗/
/∗
Rechts : hochohmig , L i n k s : y−K o o r d i n a te )
∗/
/∗
+ 5ms warten
∗/
/∗
+ y−Wert ( L i n k s ) l e s e n
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keine
∗/
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
19
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
y−K o o r d i n a te ( 0 . . . 2 5 5 )
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char TP GetY ( void )
{
char y K o o r d i n a t e ;
// P o r t p i n DRIVEA = 0 und P o r t p i n DRIVEB = 1 ( Oben : +Vcc , Unten : Vss ,
// Rechts : hochohmig , L i n k s : y−K o o r d i n a te )
TP PORT DRIVEA = 0 ;
TP PORT DRIVEB = 1 ;
// 5ms warten
Delay ms ( 5 ) ;
// y−Wert ( L i n k s ) l e s e n
y K o o r d i n a t e = ADC8(TP CHAN READY) ;
return ( y K o o r d i n a t e ) ;
}
Datei TOUCHPANEL.H:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Header f u e r d i e Unterprogramme zum Lesen d er x− und y−K o o r d i n a te von einem
∗/
/∗ r e s i s t i v e n Touchpanel
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 1 6 . August 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ G l o b a l e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e g l o b a l e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ P o r t b e l e g u n g ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP PORT DRIVEA
PORTA. F1
#define TP PORT DRIVEB
PORTA. F0
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Analoge Kanaele ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP CHAN READX
3
#define TP CHAN READY
2
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char TP GetX ( void ) ;
char TP GetY ( void ) ;
Datei myPIC ADC.C:
1
2
3
4
5
6
7
8
9
10
11
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Unterprogramme zum Lesen d es PIC−i n t e r n e n ADC−Moduls
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 2 4 . J u l i 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
20
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ I n c l u d e −D a tei en ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#include ”myPIC ADC.H”
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Unterprogramm zu r Analog−D i g i t a l −Wandlung ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ADC8 :
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
Analog−D i g i t a l −Wandlung mit dem PIC−i n t e r n e ADC f u e r den a u s g e w a e h l t e n ADC−Kanal ∗/
/∗
s t a r t e n , a u f das Wa n d l u n g s er g eb n i s warten und d i e s e s dem a u f r u f e n d e n Programm
∗/
/∗
zu r u eck g eb en .
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
kanal :
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
8 h o e h e r w e r t i g e n B i t s d er AD−Wandlung ( PIC−R e g i s t e r : ADRESH)
∗/
/∗
∗/
/∗ V o r g eh en s w e i s e :
∗/
/∗
+ ADC−Kanal a u s w a eh l en ( B i t s <3:5> im R e g i s t e r ADCON0) . Dazu muss d i e Kanal−Nummer∗/
/∗
an d i e s e P o s i t i o n g es ch o b en werden und mit dem R e g i s t e r ADCON0 v e r k n u e p f t werden ∗/
/∗
+ ca . 50 Mikrosekunden ( us ) warten . D i e s e Z e i t b e n o e t i g t d er PIC um den i n t e r n e n
∗/
/∗
Kondensator mit d er zu messenden Analogspannung zu l a d e n .
∗/
/∗
+ Analog−D i g i t a l −Wandlung s t a r t e n . Dazu das F l a g GO ( im R e g i s t e r ADCON0) s e t z e n .
∗/
/∗
+ Warten , b i s d er PIC mit d er Wandlung f e r t i g i s t . Der PIC s e t z t das F l a g GO auto −∗/
/∗
m a ti s ch zu r u eck , wenn e r mit d er Analog−D i g i t a l −Wandlung f e r t i g i s t .
∗/
/∗
+ Aus den R e g i s t e r n ADRESL und ADRESH das E r g e b n i s zusammensetzen und an das auf − ∗/
/∗
r u f e n d e Unterprogramm ( o d er Hauptprogramm ) zu r u eck g eb en
∗/
/∗
∗/
/∗ Anmerkung :
∗/
/∗
Das Ausgabeformat d er ADC−Wandlung , a l s o wie d i e 10 E r g e b n i s b i t s i n den R e g i s t e r n ∗/
/∗
ADRESL und ADRESH a b g e l e g t werden wird an a n d e r e r S t e l l e ( z . B . im Unterprogramm
∗/
/∗
INIT ) k o n f i g u r i e r t .
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char ADC8( char k a n a l )
{
ADCON0 = ADCON0 & 0 b11000111 ;
k a n a l = k a n a l << 3 ;
ADCON0 = ADCON0 | k a n a l ;
Delay us (50) ;
ADCON0.GO = 1 ;
while (ADCON0.GO) ;
return (ADRESH) ;
}
Datei myPIC ADC.H:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Header f u e r d i e Unterprogramme zum Lesen d es PIC−i n t e r n e n ADC−Moduls
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 2 4 . J u l i 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char ADC8( char k a n a l ) ;
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
5.5
21
Anmerkungen zur Software
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:
• kurzes Hauptprogramm am Ende des Quellcodes von TouchPanel Demo.c, Zeilen
507 bis 524
• kurze Interrupt-Service-Routine (kurz: ISR), in der Datei TouchPanel Demo.c, Zeilen 110 bis 120
• 1 Unterprogramm zur Initialisierung des PIC16F88 (Unterprogramm Init in der
Datei TouchPanel Demo.c, Zeilen 150 bis 329).
• 1 Unterprogramm zur Abfrage der virtuellen Tasten am Touchpanel (Unterprogramm TouchPanelTastenRoutine in der Datei TouchPanel Demo.c, Zeilen 391
bis 496).
• 2 Unterprogramme zur Bestimmung der Koordinaten am Touchpanel (Unterprogramme TP GetX und TP GetY in der Datei TOUCHPANEL.C, Zeilen 47 bis 64 bzw.
Zeilen 85 bis 102).
• 1 Hilfs-Unterprogramm zur Analog-Digital-Wandlung mit dem PIC-internen ADCHardware-Modul (Unterprogramm ADC8 in der Datei myPIC ADC.C, Zeilen 47 bis
59).
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).
ISRAUF RUF [µs] =
4 · 256 · V T
4 · 256 · 32
=
= 8192µs = 8.2ms
fT akt [MHz]
4
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
22
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 4 (ab Seite 3)
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 lie”
gen (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 4 (ab Seite 3) sehr ausführlich
behandelt, so dass sie hier nicht mehr näher erläutert werden müssen.
5 DEMONSTRATIONSBEISPIEL 1 (TOUCHPANEL)
23
Wichtig:
In der Datei TOUCHPANEL.H müssen die Portpins und die analogen Kanäle gemäß
der Demonstrationsschaltung nach Abbildung 8 (Seite 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-DigitalWandlung 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:
• Einbinden externer Codeteile (Zeile 27)
• Definition der globalen Register für die ISR (Zeilen 43 und 44)
• Portdefinition (hier für die vier Leuchtdioden, Zeilen 56 bis 59)
• Konstanten für die Erzeugung der 100-ms-Zeitbasis (Zeile 64) und für die Erkennung
der vier virtuellen“ Tasten (Zeilen 68 bis 86)
”
• Die Funktionsprototypen für die hier verwendeten Unterprogramme (Zeilen 94 und
95)
• Ab Zeile 110 beginnt der Quellcode der ausreichend mit Kommentaren versehen ist
Ein kleiner Nachteil beim mikroC-Compiler ist, dass die Konfigurationsbits für den PICMikrocontroller 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:
!
!
!
!
!
!
!
!
CP OFF
DEBUG OFF
WRT ENABLE OFF
CPD OFF
LVP OFF
BODEN OFF
MCLR OFF
PWRTE ON
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
!
!
!
!
6
24
WDT OFF
INTRC IO
IESO OFF
CFG2
FCMEN OFF
CFG2
Demonstrationsbeispiel 2 (Touchscreen)
Eine typische Anwendung für ein Touchpanel ist das Touchscreen. Bei einem Touchscreen wird das Touchpanel über einem Grafik-Display befestigt. Dadurch ergibt sich eine
sehr kompakte Bedien- und Anzeigeeinheit. Das Grafik-Display zeigt Tasten in Form von
Rechtecken an, und ein Druck auf das darüberliegende, durchsichtige Touchpanel löst die
gewünschte Reaktion aus.
Das zweite Demonstrationsbeispiel zeigt dies an einem einfachen Besipiel mit zwei Tasten
(Abbildung 11).
Abbildung 11: Demonstrationsbeispiel 2 (Foto)
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
25
Die Abbildung 12 zeigt die Koordinaten der beiden virtuellen Tasten am Touchpanel.
Abbildung 12: Demonstrationsbeispiel 2 (Koordinaten der virtuellen Tasten)
6.1
Schaltung (Hardware)
Die Abbildung 13 zeigt die Schaltung für das zweite Demonstrationsbeispiel.
Abbildung 13: Demonstrationsbeispiel 2 (Touchscreen, Schaltung)
Der Wesentliche Unterschied zum ersten Demonstrationsbeispiel ist das Grafik-Display
(LCD1) mit einer Auflösung von 128 x 64 Pixel. Dadurch ist auch ein größerer“ Mikro”
controller (IC1) mit zusätzlichen Portpins notwendig. Für dieses Demonstrationsbeispiel
wird daher der PIC16F877 verwendet, der mit einem externen 20-MHz-Takt versorgt wird
(X1, C5, C6 und R14). Der PIC16F877 lässt sich sehr gut in der Schaltung programmieren.
Diese Methode wird ICSP genannt. ICSP steht für In-Circuit-Serial-Programming.
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
26
Der Reset wird hier mit einem RC-Glied bestehend aus R13 und C3 erzeugt. Zusätzlich
kann ein Reset jederzeit mit dem Taster S1 ausgelöst werden. Da der Reseteingang des
Mikrocontrollers (MCLR, Pin 1) auch gleichzeitig die Programmierspannung (ca. 13V) bei
der ICSP-Programmierung ist, darf während einer Programmierung kein Reset ausgelöst
werden. Durch die Diode D1 ist ein Reset durch das RC-Glied (R13 und C3) während
einer Programmierung via ICSP nicht möglich.
Für die Beschaltung des Touchpanel (TP1), für den Koppelkondensator (hier: C4) und
für die Stromversorgung gilt das gleiche wie beim ersten Demonstrationsbeispiel.
6.2
Stückliste
Nr.
R1 - R6, R8, R9, R15
R7, R10
R11
R12
R13
R14
C1, C2, C4, C8, C9
C3, C7
C5, C6
C10
D1
D2
D3
T1, T3
T2, T4, T5
IC1
IC2
X1
LCD1
TP1
IC1
K1
K2
LCD1
JP1
TP1
JP1
S1
Bezeichnung
Widerstand 0 Ohm SMD 1206
Widerstand 1k
Widerstand 47k
Trimmer 10k
Widerstand 10 Ohm
Widerstand 10k
Widerstand 270 Ohm
Keramikkondensator 100nF RM5.08
Mini-Elko 10µF/25V
Keramikkondensator 22pF RM2.54
Tantal 1µF/35V
Diode 1N5711
Diode 1N4001
Low-current-LED 3mm grün
Transistor BC557B
Transistor BC547B
Mikrocontroller PIC16F877(A)
Spannungsregler 7805
Quarz 20 MHz
Grafik-Display 128 x 64 Pixel
Touch-Panel
IC-Präzisionssockel 40polig
Buchsenleiste 5polig
Anschlussklemme 2polig
Stiftleiste 20polig
Stiftleiste 2polig
Touch-Panel-Connector
Jumper, schwarz
Taster
Platine Basismaterial (160 x 100mm)
Abstandsbolzen M3x10
Mutter M3
Abstandsbolzen M2.5x10
Beilagscheibe M2.5
Zylinderkopfschraube M2.5x6
St.
3
9
2
1
1
1
1
5
2
2
1
1
1
1
2
3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
Lief.
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Conrad
Farnell
Conrad
Conrad
Tigal
Tigal
Conrad
Conrad
Conrad
Conrad
Conrad
Tigal
Conrad
Conrad
Conrad
Bestell-Nr.
40 22 22
40 81 66
40 83 60
43 08 62
40 79 25
40 82 80
40 80 93
45 33 58
46 05 24
45 71 67
48 16 70
15 54 59
16 22 13
14 59 71
15 50 98
15 50 12
976-1373
17 92 05
16 87 69
18
74
18
73
73
96
04
96
24
24
Alt. Lief.
Bestell-Nr.
Conrad
16 51 44
77
38
34
78
78
73 41 52
70 04 60
52 92 49
Tabelle 2: Demonstrationsbeispiel 2 (Touchscreen, Stückliste, Stand: September 2009)
6.3
Layout und Bestückungsplan
Die Abbildung 14 zeigt das Layout für dieses Demonstrationsbeispiel. Es ist im Maßstab
1:1 und wie üblich spiegelverkehrt. Der Bestückungsplan ist in Abbildung 15 zu sehen.
Der Nachbau sollte auch bei diesem Demonstrationsbeispiel keine Probleme bereiten. Bei
der Bestückung beginnt man auch hier üblicherweise mit den niedrigen Bauteilen.
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
Abbildung 14: Demonstrationsbeispiel 2 (Touchscreen, Layout)
Abbildung 15: Demonstrationsbeispiel 2 (Touchscreen, Bestückungsplan)
27
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
28
Achtung:
Die Drahtbrücken“ in Form von SMD-Widerständen (0 Ohm) auf der Lötseite
”
nicht vergessen!
6.4
Software
Auch bei diesem Demonstrationsbeispiel ist der Quellcode zur besseren Übersicht in mehrere Dateien aufgeteilt:
• TouchScreen Demo.c beinhaltet das Hauptprogramm, die Interrupt-Service-Routine
(ISR) und die Unterprogramme zur Initialisierung des Mikrocontrollers (PIC16F877)
und zur Abfrage der virtuellen Tasten am Touchpanel.
• TOUCHPANEL.C beinhaltet die Unterprogramme zum Lesen der X- und Y-Koordinate
des Touchpanel gemäß Abschnitt 4.
• TOUCHPANEL.H ist die Headerdatei zu TOUCHPANEL.C und beinhaltet die Portdefinitionen, die bei jeder Anwendung überprüft und ggf. angepasst werden müssen.
• myPIC ADC.C beinhaltet das Hilfsunterprogramm zur Analog-Digital-Wandlung.
• myPIC ADC.H ist die Headerdatei zu myPIC ADC.C.
Achtung:
Für dieses zweite Demonstrationsbeispiel ist die kostenpflichtige Vollversion des
C-Compilers mikroC notwendig!
Datei TouchScreen Demo.c:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ T o u ch s cr een − D e m o n s t r a t i o n s b e i s p i e l
∗/
/∗
∗/
/∗
255 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
|
|
∗/
/∗
184 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
|
| Taste 1
|
| Taste 2
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
72 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
|
∗/
/∗
0 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
0 20
116
140
236 255
∗/
/∗
∗/
/∗ e x t e r n e r Takt (2 0 MHz)
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 1 6 . August 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ I n c l u d e −D a tei en ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#include ”TOUCHPANEL.H”
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
29
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ S t r u k t u r e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e S t r u k t u r e n v er w en d et ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ E x ter n e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e e x t e r n e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ B i t s i n den e x t e r n e n R e g i s t e r n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e e x t e r n e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ G l o b a l e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char
FlagISRHP ;
char
ZaehlerZeitbasis100ms ;
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ B i t s i n den g l o b a l e n R e g i s t e r n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ R e g i s t e r FlagISRHP ∗/
#define F l a g Z e i t b a s i s 1 0 0 m s
FlagISRHP . F0
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ P o r t b e l e g u n g ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ S i e h e TOUCHPANEL.H ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Konstanten ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
// Konstanten f u e r d i e Z e i t b a s e n
#define KONSTZEITBASIS100MS
15
// Konstanten f u e r d i e T a s t e n k o o r d i n a t e n (Demo)
// Taste 1
#define KONSTTASTE1X1
20
#define KONSTTASTE1X2
116
#define KONSTTASTE1Y1
72
#define KONSTTASTE1Y2
184
// Taste 2
#define KONSTTASTE2X1
140
#define KONSTTASTE2X2
236
#define KONSTTASTE2Y1
72
#define KONSTTASTE2Y2
184
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ T a b e l l e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e T a b e l l e n ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void I n i t ( void ) ;
void TouchPanelTastenRoutine ( void ) ;
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ISR − Timer0 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ I n t e r r u p t S e r v i c e R o u ti n e :
∗/
/∗
∗/
/∗ A u f r u f :
∗/
/∗
a l l e 6 . 5 ms ( u n g e f a e h r )
∗/
/∗
∗/
/∗ Aufgaben :
∗/
/∗
+ Z e i t b a s i s f u e r 100 M i l l i s e k u n d e e r z e u g e n
∗/
/∗
+ Das Timer−I n t e r r u p t −F l a g T0IF w i e d e r l o e s c h e n
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void i n t e r r u p t ( void )
// I n t e r r u p t r o u t i n e
{
Z a e h l e r Z e i t b a s i s 1 0 0 m s −−;
i f ( Z a e h l e r Z e i t b a s i s 1 0 0 m s == 0 )
// B o t s c h a f t s f l a g f u e r 100 ms−Z e i t b a s i s s e t z e n
{
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
30
FlagZeitbasis100ms = 1;
Z a e h l e r Z e i t b a s i s 1 0 0 m s = KONSTZEITBASIS100MS ; // Z a e h l r e g i s t e r f u e r 100−ms−
// Z e i t b a s i s neu l a d e n
}
INTCON . T0IF = 0 ;
// Timer−I n t e r r u p t −F l a g T0IF w i e d e r l o e s c h e n
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Unterprogramme und Funktionen ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ I n i t :
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
I n i t i a l i s i e r u n g d es P r o z e s s o r :
∗/
/∗
+ Timer 0 (TMR0) l o e s c h e n
∗/
/∗
+ Timer 0−ISR s o l l ca . a l l e 6 , 5ms a u f g e r u f e n werden , d a h er den V o r t e i l e r mit
∗/
/∗
1 : 1 2 8 l a d e n ( b e i einem 20−MHz−Takt )
∗/
/∗
4 ∗ 256 ∗ VT
4 ∗ 256 ∗ 128
∗/
/∗
ISR−A u f r u f [ us ] = −−−−−−−−−−−−− = −−−−−−−−−−−−− = 6 5 5 3 . 6 us = 6 . 5 5 ms
∗/
/∗
f [MHz]
20
∗/
/∗
+ Port A und C f u e r das Touchpanel a l s Eingang ( f u e r ADC) bzw . a l s Ausgang
∗/
/∗
d e f i n i e r e n ( Anmerkung : Port B und Port D werden f u e r das Gr a f i k −D i s p l a y im
∗/
/∗
Hauptprogramm d e f i n i e r t ! )
∗/
/∗
+ ADC k o n f i g u r i e r e n
∗/
/∗
+ Zaehlregister fuer Zeitbasis i n i t i a l i s i e r e n
∗/
/∗
+ I n t e r r u p t f r e i g e b e n ( Timer0 f r e i g e b e n durch S e t z e n von GIE und T0IE im
∗/
/∗
INTCON−R e g i s t e r )
∗/
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
keiner
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void INIT ( void )
{
// Timer−0− I n t e r r u p t k o n f i g u r i e r e n
TMR0 = 0 ;
// Timer 0 a u f 0 v o r e i n s t e l l e n
OPTION REG = 0 b10000110 ;
// Option−R e g i s t e r ( Bank 1 )
/∗
+−−−−−−−−−−−−−−−− B i t 7 (nRBPU) : P u l l −Up−Wi d er s ta en d e am Port B
|||||||
0 : P u l l −Up a k t i v i e r t
|||||||
−>
1 : P u l l −Up d e a k t i v i e r t
+−−−−−−−−−−−−−−−− B i t 6 (INTEDG) : I n t e r r u p t Edge S e l e c t B i t
||||||
−>
0 : I n t e r r u p t on f a l l i n g edge o f RB0/INT p i n
||||||
1 : I n t e r r u p t on r i s i n g edge o f RB0/INT p i n
+−−−−−−−−−−−−−−− B i t 5 (T0CS) : Timer 0 Clock s o u r c e S e l e c t B i t
|||||
−>
0 : T r a n s i t i o n on RA4/T0CKI p i n
|||||
1 : I n t e r n a l i n s t r u c t i o n c y c l e c l o c k (CLKOUT)
+−−−−−−−−−−−−−− B i t 4 (T0SE ) : TMR0 S o u r ce Edge S e l e c t b i t
||||
−>
0 : In cr em en t on low−to−h i g h t r a n i t i o n
||||
1 : In cr em en t on high −to −low t r a n i t i o n
+−−−−−−−−−−−− B i t 3 (PSA) : P r e s c a l e r Assignment b i t
|||
−>
0 : P r e s c a l e r i s a s s i g n e d to th e TIMER0 module
|||
1 : P r e s c a l e r i s a s s i g n e d to th e WDT
+++−−−−−−−−− B i t 2−0 ( PS2 : PS0 ) : P r e s c a l e r Rate S e l e c t b i t s
B i t Value
TMR0 Rate
WDT Rate
000 :
1:2
1:1
001 :
1:4
1:2
010 :
1:8
1:4
011 :
1:16
1:8
100 :
1:32
1:16
101 :
1:64
1:32
−> 110 :
1:128
1:64
111 :
1:256
1:128
∗/
/∗
// P o r t s k o n f i g u r i e r e n
TRISA = 0 b00111111 ;
// R i c h t u n g s r e g i s t e r Port A ( 0 : Ausgang , 1 : Eingang )
++−−−−−−−−−−−−−−−−−−−− B i t 7−6 R es er v e
+−−−−−−−−−−−−−−−−−−− B i t 5 Port RA5 : h i e r u n b en u tzt
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
+−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−
Bit
Bit
Bit
Bit
Bit
4
3
2
1
0
Port
Port
Port
Port
Port
RA4 :
RA3 :
RA2 :
RA1 :
RA0 :
hier
hier
hier
hier
hier
31
u n b en u tzt
u n b en u tzt
u n b en u tzt
a n a l o g e r Eingang ( Touchpanel )
a n a l o g e r Eingang ( Touchpanel )
∗/
/∗ TRISB und TRISD ( f u e r Gr a f i k −D i s p l a y ) : S i e h e Hauptprogramm ∗/
/∗ ( I n i t i a l i s i e r u n g d es D i s p l a y ) ∗/
/∗
TRISC = 0 b00000000 ;
+−−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−−
+−−−−−−−−−−−−−−
// R i c h t u n g s r e g i s t e r
B i t 7 Port RC7 : h i e r
B i t 6 Port RC6 : h i e r
B i t 5 Port RC5 : h i e r
B i t 4 Port RC4 : h i e r
B i t 3 Port RC3 : h i e r
B i t 2 Port RC2 : h i e r
B i t 1 Port RC1 : h i e r
B i t 0 Port RC0 : h i e r
Port C ( 0 : Ausgang , 1 : Eingang )
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
u n b en u tzt
Ausgang ( Touchpanel )
Ausgang ( Touchpanel )
∗/
/∗
// ADC k o n f i g u r i e r e n
ADCON0 = 0 b10000001 ;
++−−−−−−−−−−−−−−−−−−−
||||||
||||||
||||||
||||||
||||||
+++−−−−−−−−−−−−−−−−
|||
|||
|||
|||
|||
|||
|||
|||
+−−−−−−−−−−−−−−−
||
||
||
+−−−−−−−−−−−−−−
+−−−−−−−−−−−−−
// ADC−C o n tr o l−R e g i s t e r 0 ( Bank 1 )
B i t 7−6 (ADCS1: ADCS0) : A/D C o n er s i o n Clock S e l e c t
bits
00 : Fosc /2
( b e i f o s z : 0 − 1 . 2 5 MHz)
01 : Fosc /8
( b e i f o s z : 1 . 2 5 − 5 MHz)
−> 10 : Fosc / 3 2 . . ( b e i f o s z : 5 − 20 MHz)
11 : Frc
( b e i RC−O s z i l l a t o r )
B i t 5−3 (CHS2 : CHS0 ) : Analog Channel S e l e c t b i t s
−> 0 0 0 : c h a n n e l 0 (RA0/AN0)
0 0 1 : c h a n n e l 1 (RA1/AN1)
0 1 0 : c h a n n e l 2 (RA2/AN2)
0 1 1 : c h a n n e l 3 (RA3/AN3)
1 0 0 : c h a n n e l 4 (RA5/AN4)
1 0 1 : c h a n n e l 5 (RE0/AN5)
1 1 0 : c h a n n e l 6 (RE1/AN6)
1 1 1 : c h a n n e l 7 (RE2/AN7)
B i t 2 (GO/DONE) : A/D C o n v er s i o n S t a t u s B i t
IF ADON = 1 :
−>
0 : A/D c o n v e r s i o n not i n p r o g r e s s
1 : A/D c o n v e r s i o n i n p r o g r e s s
B i t 1 R es er v e
B i t 0 (ADON) : A/D On B i t
0 : A/D c o n v e r t e r module i s shut−o f f
−>
1 : A/D c o n v e r t e r module i s o p e r a t i n g
∗/
/∗
ADCON1 = 0 b00000010 ;
+−−−−−−−−−−−−−−−−−−−−
|||||||
|||||||
|||||||
|||||||
|||||||
|||||||
+++−−−−−−−−−−−−−−−−−
++++−−−−−−−−−−−−−
// ADC−C o n tr o l−R e g i s t e r 1 ( Bank 1 )
B i t 7 (ADFM) : A/D R e s u l t Formated S e l e c t b i t s
−>
0 : Left j u s t i f i e d :
i n ADRESH:
Bit 9 bis Bit 2
i n ADRESL:
B i t 1 , B i t 0 , Rest 0
1 : Right j u s t i f i e d :
i n ADRESH:
0 0 0 0 0 0 Bit 9 Bit 8
i n ADRESL:
Bit 7 bis Bit 0
B i t 6−4 R es er v e
B i t 3−0 (PCFG3 : PCFG0) : A/D Port C o n f i g u r a t i o n
Control b i t s
RE2 RE1 RE0 RA5 RA3
RA2 RA1 RA0 V r ef+ Vref−
0000: A
A
A
A
A
A
A
A
Vdd
Vss
0001: A
A
A
A
V r ef+ A
A
A
RA3
Vss
−> 0 0 1 0 : D
D
D
A
A
A
A
A
Vdd
Vss
0011: D
D
D
A
V r ef+ A
A
A
RA3
Vss
0100: D
D
D
D
A
D
A
A
Vdd
Vss
0101: D
D
D
D
V r ef+ D
A
A
RA3
Vss
011 x : D
D
D
D
D
D
D
D
Vdd
Vss
1000: A
A
A
A
V r ef+ Vref− A
A
RA3
RA2
1001: D
D
A
A
A
A
A
A
Vdd
Vss
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
1010:
1011:
1100:
1101:
1110:
1111:
D
D
D
D
D
D
D
D
D
D
D
D
A
A
D
D
D
D
A
A
A
D
D
D
V r ef+
V r ef+
V r ef+
V r ef+
D
V r ef+
32
A
Vref−
Vref−
Vref−
D
Vref−
A
A
A
A
D
D
A
A
A
A
A
A
RA3
RA3
RA3
RA3
Vdd
RA3
Vss
RA2
RA2
RA2
Vss
RA2
∗/
// Z a e h l r e g i s t e r f u e r Z e i t b a s i s i n i t i a l i s i e r e n
Z a e h l e r Z e i t b a s i s 1 0 0 m s = KONSTZEITBASIS100MS ; // Z a e h l r e g i s t e r f u e r 100−ms−Z e i t b a s i s
// i n i t i a l i s i e r e n
/∗
// I n t e r r u p t f r e i g e b e n
INTCON = 0 b10100000 ;
// I n t e r r u p t −C o n tr o l −R e g i s t e r ( Bank 1 )
+−−−−−−−−−−−−−−−−−−−− B i t 7 ( GIE) : Gl o b a l I n t e r r u p t Enable b i t
|||||||
0 : Disables a l l i nter r upts
|||||||
−>
1 : E n a b l es a l l unmasked i n t e r r u p t s
+−−−−−−−−−−−−−−−−−−− B i t 6 ( PEIE ) : P e r i p h e r a l I n t e r r u p t Enable b i t
||||||
−>
0 : Disables a l l peripheral i nter r upts
||||||
1 : E n a b l es a l l unmasked p e r i p h e r a l i n t e r r u p t s
+−−−−−−−−−−−−−−−−−− B i t 5 ( T0IE ) : Timer 0 O v er f l o w I n t e r r u p t Enable B i t
|||||
0 : Disabled
|||||
−>
1 : Enabled
+−−−−−−−−−−−−−−−−− B i t 4 (INTE ) : RB0/INT E x t e r n a l I n t e r r u p t Enable B i t
||||
−>
0 : Disabled
||||
1 : Enabled
+−−−−−−−−−−−−−−−− B i t 3 (RPIE ) : RB Port Change I n t e r r u p t Enable B i t
|||
−>
0 : Disabled
|||
1 : Enabled
+−−−−−−−−−−−−−−− B i t 2 ( T0IF ) : Timer 0 O v er f l o w I n t e r r u p t F l a g b i t
||
−>
0 : TMR0 r e g i s t e r d i d not o v e r f l o w
||
1 : TMR0 r e g i s t e r has o v e r f l o w e d
+−−−−−−−−−−−−−− B i t 1 (INTF) : RB0/INT E x t e r n a l I n t e r r u p t F l a g b i t
|
−>
0 : RB0/INT e x t e r n a l i n t e r r u p t d i d not o c c u r
|
1 : RB0/INT e x t e r n a l i n t e r r u p t o c c u r r e d
+−−−−−−−−−−−−− B i t 0 (RBIF ) : RB Port Change I n t e r r u p t F l a g b i t
−>
0 : None o f RB7 : RB4 p i n s have changed s t a t e
1 : One o f th e RB7 : RB4 p i n s changed s t a t e
∗/
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ TouchPanelTastenRou tine :
∗/
/∗
∗/
/∗ A u f r u f :
∗/
/∗
ca . a l l e 100 ms ( vom Hauptprogramm )
∗/
/∗
∗/
/∗ Aufgabe :
∗/
/∗
E r m i ttel n , ob und w el ch e d er b e i d e n ” v i r t u e l l e n ” Tasten am Touch−Panel g e d r u e c k t
∗/
/∗
wurde , und den ” v i r t u e l l e n ” T a s ten zu s ta n d t o g g e l n und den S t a t u s am Gr a f i k −
∗/
/∗
Display anzeigen .
∗/
/∗
∗/
/∗ Zuordnung d er ” v i r t u e l l e n ” Tasten am Touch−Panel :
∗/
/∗
255 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
|
|
∗/
/∗
184 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
|
| Taste 1
|
| Taste 2
|
|
∗/
/∗
|
|
|
|
|
|
∗/
/∗
72 |
+−−−−−−−−−−+
+−−−−−−−−−−+
|
∗/
/∗
|
|
∗/
/∗
0 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
∗/
/∗
0 20
116
140
236 255
∗/
/∗
∗/
/∗ V o r g eh en s w e i s e :
∗/
/∗
+ x− und y−K o o r d i n a ten von Touchpanel l e s e n
∗/
/∗
+ Pruefen , ob d i e x− und y−K o o r d i n a te im B e r e i c h von Taste 1 l i e g t , wenn j a , den ∗/
/∗
Zustand d er Taste 1 b e i einem Uebergang von ” n i c h t g e d r u e c k t ” zu ” g e d r u e c k t ”
∗/
/∗
i n v e r t i e r e n ( t o g g e l n ) und j e nach Aufgabe d er Taste d i e s e a u s f ü h r e n ( h i e r : den ∗/
/∗
S t a t u s d er Taste am Gr a f i k −D i s p l a y a l s Text a n z e i g e n
∗/
/∗
+ Das s e l b e nun f u e r d i e z w e i t e Taste
∗/
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
33
/∗
∗/
/∗ U eb er g a b ep a r a m eter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Rueckgabeparameter :
∗/
/∗
keiner
∗/
/∗
∗/
/∗ Anmerkungen :
∗/
/∗
+ B ei dem h i e r v er w en d eten r e s i s t i v e n Touch−Panel kann immer nur e i n e Taste ge−
∗/
/∗
d r u e c k t werden . Mehrere Tasten g l e i c h z e i t i g ( a l s o e i n e T a s ten k o m b i n a ti o n ) i s t
∗/
/∗
b e i r e s i s t i v e n Touchpanels n i c h t m ö g l i ch !
∗/
/∗
+ das s t a t i s c h e R e g i s t e r b u t t o n s t a t u s d i e h n t h i e r a l s H i l f s r e g i s t e r , wobei d i e
∗/
/∗
B i t s 0 b i s 4 f o l g e n d e Bedeutung haben :
∗/
/∗
B i t 0 : Zustand von Taste 1 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 1 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 1
∗/
/∗
B i t 2 : Zustand von Taste 2 (0 = Taste n i c h t g ed r u eck t , 1 = Taste g e d r u e c k t ) ∗/
/∗
B i t 3 : H i l f s f l a g zu r Erkennung e i n e r ” n i c h t g ed r u eck t −g ed r u eck t −Flanke ” von ∗/
/∗
Taste 2
∗/
/∗
+ Die z u l a e s s i g e n B e r e i c h e d er Tasten am Touch−Panel s i n d durch d i e Konstanten
∗/
/∗
KONSTTASTExXx und KONSTTASTExYx b e g r e n z t .
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void TouchPanelTastenRoutine ( void )
{
char x , y ;
s t a t i c char b u t t o n s t a t u s = 0 ;
// S c h r i t t 1 : x− und y−K o o r d i n a ten von Touchpanel l e s e n
x = TP GetX ( ) ;
y = TP GetY ( ) ;
// S c h r i t t 2 : Taste 1
i f ( ( x >= KONSTTASTE1X1) && ( x <= KONSTTASTE1X2) && ( y >= KONSTTASTE1Y1) && ( y <=
KONSTTASTE1Y2) )
{
i f ( b u t t o n s t a t u s . F1 == 0 )
{
b u t t o n s t a t u s . F1 = 1 ;
i f ( b u t t o n s t a t u s . F0 == 0 )
{
b u t t o n s t a t u s . F0 = 1 ;
Gl cd Wr i te T ex t ( ”EIN ” , 2 6 , 4 , 0 ) ;
}
else
{
b u t t o n s t a t u s . F0 = 0 ;
Gl cd Wr i te T ex t ( ”AUS” , 2 6 , 4 , 0 ) ;
}
}
}
else
{
b u t t o n s t a t u s . F1 = 0 ;
}
// S c h r i t t 3 : Taste 2
i f ( ( x >= KONSTTASTE2X1) && ( x <= KONSTTASTE2X2) && ( y >= KONSTTASTE2Y1) && ( y <=
KONSTTASTE2Y2) )
{
i f ( b u t t o n s t a t u s . F2 == 0 )
{
b u t t o n s t a t u s . F2 = 1 ;
i f ( b u t t o n s t a t u s . F3 == 0 )
{
b u t t o n s t a t u s . F3 = 1 ;
Gl cd Wr i te T ex t ( ”EIN ” , 8 6 , 4 , 0 ) ;
}
else
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
34
{
b u t t o n s t a t u s . F3 = 0 ;
Gl cd Wr i te T ex t ( ”AUS” , 8 6 , 4 , 0 ) ;
}
}
}
else
{
b u t t o n s t a t u s . F2 = 0 ;
}
}
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Hauptprogramm ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Aufgaben d es Hauptprogramms :
∗/
/∗
+ C o n t r o l l e r i n i t i a l i s i e r e n ( Unterprogramm INIT )
∗/
/∗
+ Gr a f i k −D i s p l a y i n i t i a l i s i e r e n und l o e s c h e n
∗/
/∗
+ 2 Tasten am D i s p l a y d a r s t e l l e n
∗/
/∗
+ T a e t i g k e i t e n / Unterprogramme , d i e a l l e z y k l i s c h d u r c h g e f u e h r t werden muessen :
∗/
/∗
+ a l l e 100 ms : Touchpanel a b f r a g en , ob e i n e ” v i r t u e l l e ” Taste g e d r u e c k t wurde ∗/
/∗
( Unterprogramm TouchPanelTastenRoutine )
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
void main ( void )
{
// C o n t r o l l e r i n i t i a l i s i e r e n
Init () ;
// Gr a f i k −D i s p l a y i n i t i a l i s i e r e n
G l c d I n i t (&PORTB, 5 , 4 , 3 , 2 , 0 , 1 , &PORTD) ;
Gl cd Fi l l (0) ;
// D i s p l a y l o e s c h e n
G l c d S e t F o n t ( f o n t5 x 7 , 5 , 7 , 3 2 ) ;
Gl cd Fi l l (0) ;
// Button 1
Glcd Rectangle (8 ,16 ,60 ,48 ,1) ;
Glcd Box ( 1 0 , 1 8 , 5 8 , 4 6 , 1 ) ;
Gl cd Wr i te T ex t ( ”TASTE 1” , 1 4 , 3 , 0 ) ;
Gl cd Wr i te T ex t ( ”AUS” , 2 6 , 4 , 0 ) ;
// Button 2
Glcd Rectangle (68 ,16 ,120 ,48 ,1) ;
Glcd Box ( 7 0 , 1 8 , 1 1 8 , 4 6 , 1 ) ;
Gl cd Wr i te T ex t ( ”TASTE 2” , 7 4 , 3 , 0 ) ;
Gl cd Wr i te T ex t ( ”AUS” , 8 6 , 4 , 0 ) ;
// E n d l o s s c h l e i f e
while ( 1 )
{
i f ( FlagZeitbasis100ms)
{
// Touchpanel a b f r a g en , ob e i n e ” v i r t u e l l e ” Taste g e d r u e c k t wurde
TouchPanelTastenRou tine ( ) ;
// B o t s c h a f t s f l a g ( f u e r 100 ms−Z e i t b a s i s ) z u r u e c k s e t z e n
FlagZeitbasis100ms = 0;
}
}
}
Datei TOUCHPANEL.H:
1
2
3
4
5
6
7
8
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ Header f u e r d i e Unterprogramme zum Lesen d er x− und y−K o o r d i n a te von einem
∗/
/∗ r e s i s t i v e n Touchpanel
∗/
/∗
∗/
/∗ Compiler : mikroC
∗/
/∗
∗/
/∗ E n t w i c k l e r : S t e f a n Buchgeher
∗/
/∗ E n t w i c k l u n g s b e g i n n d er S o f t w a r e : 2 4 . J u l i 2009
∗/
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
35
/∗ F u n k t i o n s f a e h i g s e i t : 2 4 . J u l i 2009
∗/
/∗ L e t z t e B e a r b e i t u n g : 1 6 . August 2009
∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ G l o b a l e R e g i s t e r ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
/∗ k e i n e g l o b a l e n R e g i s t e r ∗/
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ P o r t b e l e g u n g ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP PORT DRIVEA
PORTC. F0
#define TP PORT DRIVEB
PORTC. F1
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ Analoge Kanaele ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
#define TP CHAN READX
0
#define TP CHAN READY
1
/∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ F u n k t i o n s p r o t o t y p e n ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗/
char TP GetX ( void ) ;
char TP GetY ( void ) ;
Datei TOUCHPANEL.C:
⇒ Siehe Demo 1
Datei myPIC ADC.H:
⇒ Siehe Demo 1
Datei myPIC ADC.C:
⇒ Siehe Demo 1
6.5
Anmerkungen zur Software
Auch bei diesem Demonstrationsbeispiel besteht die Software aus mehreren Programmteilen, die denen vom ersten Demonstrationsbeispiel sehr ähnlich sind:
• kurzes Hauptprogramm am Ende des Quellcodes von TouchScreen Demo.c, Zeilen
403 bis 438
• kurze Interrupt-Service-Routine (kurz: ISR), in der Datei TouchScreen Demo.c, Zeilen 93 bis 103
• 1 Unterprogramm zur Initialisierung des PIC16F877 (Unterprogramm Init in der
Datei TouchScreen Demo.c, Zeilen 133 bis 278).
• 1 Unterprogramm zur Abfrage der virtuellen Tasten am Touchpanel (Unterprogramm TouchPanelTastenRoutine in der Datei TouchScreen Demo.c, Zeilen 333
bis 390).
• 2 Unterprogramme zur Bestimmung der Koordinaten am Touchpanel (Unterprogramme TP GetX und TP GetY in der Datei TOUCHPANEL.C, Zeilen 47 bis 64 bzw.
Zeilen 85 bis 102).
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
36
• 1 Hilfs-Unterprogramm zur Analog-Digital-Wandlung mit dem PIC-internen ADCHardware-Modul (Unterprogramm ADC8 in der Datei myPIC ADC.C, Zeilen 47 bis
59).
Interrupt-Service-Routine (kurz: ISR):
Für die ISR (in der Datei TouchScreen Demo.c, Zeilen 93 bis 103) gilt im Wesentlichen
das gleiche wie beim ersten Demonstrationsbeispiel. Auch hier hat die ISR die Aufgabe
eine 100-ms-Zeitbasis zu erzeugen.
Im Gegensatz zum ersten Demonstrationsbeispiel wird hier als Taktquelle für den Mikrocontroller ein externer 20 MHz-Quarz verwendet, dadurch ergeben sich Änderungen
in den Zeiten. Mit einem Vorteiler (VT) von 1:128 ergibt sich, dass die ISR hier ca. alle
6.5ms aufgerufen wird.
ISRAUF RUF [µs] =
4 · 256 · V T
4 · 256 · 128
=
= 6553.6µs = 6.5ms
fT akt [MHz]
20
Wird diese ISR 15 mal aufgerufen so vergeht eine Zeit von 15 x 6.5ms = ca 97ms). Die
Konstante KONSTZEITBASIS100MS beinhaltet daher den Wert 15.
Hauptprogramm:
Das Hauptprogramm (main, Datei: TouchScreen Demo.c, Zeilen 403 bis 438) ist hier etwas länger. Zuerst muss der Mikrocontroller initialisiert werden (mit dem Unterprogramm
Init, Zeile 406). Neu ist die Initialisierung des Grafik-Displays mit den Unterprogrammen Glcd Init, Glcd Fill und Glcd Set Font (Zeilen 409 bis 412). Anmerkung: Diese
Unterprogramme werden vom mikroC-Compiler automatisch zur Verfügung gestellt, und
müssen daher nicht ausprogrammiert werden. Als nächstes müssen noch zwei Tasten mit
passenden Texten am Grafik-Display dargestellt werden. Die Zeilen 415 bis 424 übernehmen diese Aufgaben.
Nun befindet sich das Hauptprogramm 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 432). Wichtig
ist, dass das Botschaftsflag wieder gelöscht werden muss (Zeile 435).
Unterprogramm Init:
Das Unterprogramm Init (Datei: TouchScreen Demo.c, Zeilen 133 bis 278) dient auch
hier zur Initialisierung des Mikrocontrollers. Es gilt im Wesentlichen das Gleiche wie
beim ersten Demonstrationsbeispiel. Nur mit dem Unterschied, dass eben hier ein anderer
Mikrocontroller verwendet wird.
Unterprogramm TouchPanelTastenRoutine:
Das Unterprogramm TouchPanelTastenRoutine (Datei: TouchScreen Demo.c, Zeilen 333
bis 390) ist auch hier das wesentliche Unterprogramm für dieses Demonstrationsbeispiel.
Auch hier gilt im Wesentlichen das gleiche wie beim ersten Demonstrationsbeispiel. Der
6 DEMONSTRATIONSBEISPIEL 2 (TOUCHSCREEN)
37
einzige Unterschied ist, dass hier nicht die Zustände der Leuchtdioden verändert werden,
sondern die Texte am Grafik-Display, und dass hier nur zwei Tasten zu bearbeiten sind.
Wichtig:
Auch dieses Unterprogramm muss im Hauptprogramm regelmäßig (zyklisch) aufgerufen werden (Siehe Hauptprogramm, Datei: TouchScreen Demo.c, Zeile 432).
Unterprogramme TP GetX und TP GetY:
Diese beiden Unterprogramme wurden bereits im Abschnitt 4 (ab Seite 3) 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 13 (Seite 13) definiert werden, Zeilen 19, 20, 24 und 25.
Unterprogramm ADC8:
Das Unterprogramm ADC8 (Datei: myPIC ADC.C, Zeilen 47 bis 59) dient zur Analog-DigitalWandlung mit dem PIC-internen-Hardwaremodul und entspricht der Vorgabe im Datenblatt zum PIC16F877 [6].
Sonstiges:
Am Beginn des Quellcodes (in der Datei TouchScreen Demo.c) befinden sich die folgenden
Definitionen und Einstellungen:
• Einbinden externer Codeteile (Zeile 26)
• Definition der globalen Register für die ISR (Zeilen 42 und 43)
• Konstanten für die Erzeugung der 100-ms-Zeitbasis (Zeile 57) und für die Erkennung
der beiden virtuellen“ Tasten (Zeilen 61 bis 69)
”
• Die Funktionsprototypen für die hier verwendeten Unterprogramme (Zeilen 77 und
78)
• Ab Zeile 93 beginnt der Quellcode der ausreichend mit Kommentaren versehen ist
Hier, zum Abschluss, die notwendigen Einstellungen für den PIC16F877 für dieses Demonstrationsbeispiel:
!
!
!
!
CP OFF
DEBUG OFF
WRT OFF
CPD OFF
LITERATUR
!
!
!
!
!
38
LVP OFF
BODEN OFF
PWRTE ON
WDT OFF
HS OSC
Literatur
[1] Elektor electronics worldwide. Ausgabe Februar 2009. http://www.elektor.de.
[2] mikroElekronika. Werbeartikel über Touchscreens.
article/, Juli 2009.
http://www.mikroe.com/en/
[3] TIGAL. Smart Solutions for Electronics. http://www.tigal.com/, Juli 2009.
[4] mikroElekronika. mikroc user’s manual. http://www.mikroe.com/, 2009.
[5] Microchip. Datenblatt des PIC16F87/88. http://ww1.microchip.com/downloads/en/
DeviceDoc/30487c.pdf, 2005.
[6] Microchip. Datenblatt des PIC16F877. http://ww1.microchip.com/downloads/en/
Device/Doc/30292c.pdf, 2001.

Documentos relacionados