Hat ein PIC zu
wenig Pins
Tasten
LEDs
Multiplexen
Das hängt ganz von der Anwendung und vom Geldbeutel ab. Die preislich attraktiven PICs im 8-poligen oder 18-poligen Gehäuse besitzen sicherlich nicht genug Ausgänge, um direkt eine große Modelleisenbahnanlage steuern zu können. Mit ein wenig Phantasie lassen sich die vorhandenen Pins jedoch ökonomisch nutzen.
Tasten
Als Beispiel dient mit der Anschluss
von möglichst vielen Tasten an das 8-pinnige Port B.
Die einfachste Lösung ist
das Anschließen
von jeweils einer Taste an ein Pin des PIC. Werden beim Port B die
internen pull-up-Widerstände
aktiviert, dann liegen die Pins des Port B auf High-Pegel. Durch
Drücken
einer Taste wird ein Pin auf Low gezogen.
Die softwareseitige Auswertung
der Tastendrücke
ist einfach. Die Anzahl der Tasten ist aber reichlich klein. |
Doppelt soviele Tasten lassen
sich anschließen,
wenn man die Tasten in einer Matrix anordnet. Das ist deshalb auch die
üblichste Art der Tastenverwaltung. RB0..3 sind Ausgänge,
wären
RB4..7 Eingänge sind. Die Auswertung (erkennen welche der Tasten gedrückt ist) ist etwas komplizierter, aber immer noch recht einfach. In den Lernbeispielen habe ich solche Lösungen beschrieben. Die zusätzlichen
Widerstände
sind nötig, um Kurzschlüsse der Pins RB0..3 zu vermeiden,
wenn
mehrere Tasten gleichzeitig gedrückt werden. Positiv ist, das alle Tasten dazu geeignet sind, den PIC aus dem SLEEP-Mode aufzuwecken. |
Es lassen sich aber auch 56
Tasten anschließen
und auswerten. Während der Auswertung wird nacheinander von jedem
Pin
aus überprüft, ob (durch einen gedrückten Taster)
Verbindung
zu einem der anderen 7 Pins besteht. Dadurch ist ein ständiges
Umschalten
der Pins von Eingang auf Ausgang und wieder auf Eingang nötig. Es gibt für jedes Pinpaar immer zwei Taster, die die Pins verbinden können. Die Schalter in der unteren linken Hälfte verbinden die Pins bidirektional, während die Schalter in der oberen rechten Hälfte nur in eine Richtung leiten (Dioden). Dadurch lassen sie sich auseinander halten, und alle 56 Taster eindeutig identifizieren. Zum Wecken aus dem Sleep-Mode eignen sich nur die grün nummerierten Tasten, sollen sie dazu verwendet werden, sind zusätzlich 1 kOhm-Widerstände in die Leitungen der Pins RB0..3 einzufügen. |
Am einfachsten lassen sich LEDs ansteuern, wenn man jeder LED ein eigenes Pin spendiert. Leider ist die Zahl der Pins sehr begrenzt. |
Ist man bereit, einen
höheren Softwareaufwand
zu betreiben, lassen sich auch 16 LEDs mit 8 Pins ansteuern. Allerdings
muss man hier mit einem Zeitmultiplexverfahren arbeiten, um alle
LEDs
unabhängig voneinander ansteuern zu können.
In einem festen Takt (z.B. per Timer-Interrupt gesteuert) werden reihum die Pins RB0 bis RB3 einzeln auf Low-gelegt. Dann werden die zu den aktiven LEDs gehörenden Pins RB4..7 auf High gelegt. Im Durchschnitt ist jede leuchtende LED nur 1/4 der Zeit wirklich eingeschaltet. Dadurch wirkt die LED dunkler. Bei Bedarf lässt sich das durch kleinere Widerstände R3..6 (100..200 Ohm) korrigieren. |
Eine zweite LED-Matrix
lässt
sich parallel betreiben, mit umgekehrten Pegeln an den Ports. Im Durchschnitt ist nun jede
leuchtende
LED nur 1/8 der Zeit wirklich eingeschaltet. Dadurch wirkt die LED
dunkler.
Bei Bedarf lässt sich das durch kleinere Widerstände
R3..6
korrigieren (100 Ohm). Um z.B. die LED in der unteren
linken Ecke leuchten zu lassen, gibt man an RB0 High und an RB7 Low
aus, während man alle anderen Pins auf input schaltet. |
Multiplexen
In einer Schaltung lässt sich
oft ein Pin für mehrere Aufgaben nutzen.
Ein schönes Beispiel findet sich in der Microchip Applicationnote AN557. Dort werden an einen 16C71 (eine Art Vorläufer des 16F628) eine 4-stellige 7-Segment-LED-Anzeige, eine Tastatur mit 16 Tasten und 4 analoge Eingangsspannungen an die selben Pins angeschlossen.