I/O Pin - Teil 2
Bevor wir uns mit der Adressierung der Eingangspins befassen, wird die Methode wrpin vorgestellt. Mit ihrer Hilfe lassen sich u.a. Pullup- und Pulldown-Widerstände an allen 64 Pin zu- oder abschalten. Das vereinfacht u.a. die Beschaltung auf dem Steckbrett und wird deshalb vorangestellt.
1 - Die Instruktion wrpin(pinfeld, data) (Theorieteil)
Nach dem Datenblatt des Propeller P2 verfügt jeder der 64 I/O Pins über mehrere Pullup- bzw. Pulldown Widerstände (1,5k; 15k und 150k), die über die Software zu- oder abgeschaltet werden. Nach Datenblatt geschieht das über die Instruktion
Das Format des Pinfeldes von WRPIN ist angegeben mit:
Dabei bedeuten:
Die Biteinstellungen A, B und F sowie die Einstellung T und S bleiben in der Voreinstellung und werden nicht weiter betrachtet. Der Pinmodus wird über die 13 M-Bits eingestellt, die im Datenblatt (Propeller Hardware Manual v. 15.10.2021, S. 35) dokumentiert sind.
Die WRPIN D[20:8] Konfiguration der 13 M-Bits lautet für die Pineinstellung OUT, logic:
mit CIO -> 010 (s. Abb. 1 linke Spalte), HHH -> 010 und LLL -> 000 (s. Abb. 1, rechte Spalte). Die Grundeinstellung von CIO ist 010, sie wird in der Bitfolge - wie auch die vorangestellten vier Nullen - nicht explizit angegeben.
Die Bitfolge zur Konfiguration eines 15k Pullup-Widerstandes lautet
Vergleiche die Darstellung mit (1). Die drei Bits in der H-Gruppe legen den Pullup- und die in der L-Gruppe den Pulldown-Widerstandswert fest.
Die Pingruppe T mit %00 bezieht sich auf die DIR/OUT Steuerung und ist voreingestellt auf 00. Die Pingruppe S stellt den Smartmodus ein und ist voreingestellt auf %00000. Die ganze Bitfolge wird immer mit einer 0 abgeschlossen.
Im folgenden Programm werden für die Ausgangspin P0, ..., P4 Pullupwiderstände von 15 kOhm gesetzt.
Pullup-Widerstand einschalten
Wie arbeitet das Programm?
Im CON-Block werden die Taktfrequenz des Controllers und die anzusprechenden Pins für die LEDs (Programmzeile 10) festgelegt.
Es folgen ein PUB- und ein PRI-Block.
Die Einstellung des/der Pullup-Widerstandes/Widerstände erfolgt im PRI-Block. Es ist ein klassischer Einzeiler, geschrieben in PASM2 (Assembler). Mit
werden die Widerstände an den I/O Ausgängen pin aktiviert.
Im Hauptprogramm main() werden zunächst die Pullup-Widerstände eingeschaltet und in einer nachfolgenden Endlosschleife die LED-Zustände an den Pins mit jedem Durchlauf über pintoggle invertiert, gefolgt von einer kleinen Verzögerungszeit von 200 ms.
2 - I/O-Pin als Eingang
Mit diesem Vorwissen ist es jetzt leicht, einen Taster und fünf LED mit jeweils 1,5kOhm Pullup-Widerstand zu beschalten. Der Taster soll mit P17 verbunden sein und, sobald er gedrückt wird, die LED-Gruppe LED0 ... LED4 an P0 ... P4 in einer bestimmten Sequenz einschalten.
Übung 1 - Taster schaltet LED-Gruppe mit internen Pullups ein bzw. aus
Taster schaltet LED-Gruppe ein- bzw. aus | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Das Programm
Sobald die Taste T1 gedrückt wird, leuchten die LED an P0, P2 und P4 auf.
Internen Pullup-Widerstand für Taster an P17 einschalten
Der Schaltungsaufbau aus Abb. 3b lässt sich mit Zuschaltung des internen Pullup-Widerstandes von P17 ebenfalls vereinfachen (s. Abb. 5). Das geänderte Programm zeigt Abb. 6.
Zum Verständnis der Wirkung des Pullup-Widerstandes gibt es weitere Hinweise an dieser Stelle.
Das geänderte Programm mit Aufruf interner Pullup-Widerstände
Abb. 6
Die Pullup-Widerstände 1,5kOhm (für LED) und 15kOhm (für Taster T1) werden in den Methoden Pullup1k5() und Pullup15k() eingeschaltet.
Die Einstiegsmethode main() schaltet die Pullups ein.
In der Endlosschleife repeat wird der Status des Tasters abgefragt. Ist er gedrückt, liegt eine 0 am Eingang von P17.
In der Entscheidungsabfrage IF ... ELSE werden bei 0 an P17 bestimmte LEDs eingeschaltet; wenn nicht (ELSE), werden sie ausgeschaltet.