LED-Bar am virtuellen Port E
Verfasst: Mi 27. Nov 2019, 13:23
Für erste Experimente mit dem Nano-Board, aber auch zum raschen Testen von Zwischenergebnissen, bietet sich der Einsatz eines LED-Bar-Moduls an. Dieses besteht aus 8 LEDs, welche jeweils über einen Widerstand an Vcc gelegt werden. Ein solches Modul erhält man in China ab ca. 1,20 Euro inkl. Porto.
Damit kann auf einfache Weise der Inhalt einer Speicherzelle (bzw. Byte-Variablen) angezeigt werden. Am Nano-Board steht leider kein vollständiges Port mit nebeneinander liegenden Bits zur Verfügung. Deswegen habe ich für die Nutzer von BASCOM und MikroForth3 ein "virtuelles Port E" ersonnen. Dieses Port besitzt die Anschlüsse D2 bis D9. Dahinter stecken die Ports D.2 - D.7 und B.0 - B.1.
Somit verbinden wir die Pins S0 - S7 des LED-Bar-Moduls mit den Anschlüssen D9 - D2 des Nano-Boards; bei der obigen Abbildung geschieht das durch die Kontaktleisten des Breadboards. Der Vcc-Anschluss de LED-Bar-Moduls ist dann auch mit dem Anschluss D10 des Nano-Boards verbunden. Damit dieser die Versorgungsspannung von 5 V liefert, müssen wir nur den Anschluss D10 (PortB.2) als Ausgang konfigurieren und auf High legen.
Wie geben wir jetzt ein Byte am virtuellen Port E aus? Dies stelle ich für die beiden Programmiersprachen BASCOM und Forth getrennt dar:
BASCOM
Zunächst laden wir die Library "vPortE.zip" (s. u.) herunter, entpacken sie und kopieren die Datei vPortE.lib in den Unterordner "LIB" von BASCOM.
Das folgende Programm zeigt, wie man nun den Inhalt der Variablen "wert" am Port E mit Hilfe der Prozedur "Porte" zur Anzeige bringt:
Die Komplement-Bildung ist erforderlich, weil die LEDs nicht gegen Masse, sondern gegen Vcc geschaltet sind.
Forth
In Forth ist die Ausgabe eines Wertes vom TOS noch einfacher: Zuerst wird mit dem Wort "bnot" das Komplement gebildet; dann wird dies mit dem Punkt-Wort "." an PortE ausgegeben:
.
Damit kann auf einfache Weise der Inhalt einer Speicherzelle (bzw. Byte-Variablen) angezeigt werden. Am Nano-Board steht leider kein vollständiges Port mit nebeneinander liegenden Bits zur Verfügung. Deswegen habe ich für die Nutzer von BASCOM und MikroForth3 ein "virtuelles Port E" ersonnen. Dieses Port besitzt die Anschlüsse D2 bis D9. Dahinter stecken die Ports D.2 - D.7 und B.0 - B.1.
Somit verbinden wir die Pins S0 - S7 des LED-Bar-Moduls mit den Anschlüssen D9 - D2 des Nano-Boards; bei der obigen Abbildung geschieht das durch die Kontaktleisten des Breadboards. Der Vcc-Anschluss de LED-Bar-Moduls ist dann auch mit dem Anschluss D10 des Nano-Boards verbunden. Damit dieser die Versorgungsspannung von 5 V liefert, müssen wir nur den Anschluss D10 (PortB.2) als Ausgang konfigurieren und auf High legen.
Wie geben wir jetzt ein Byte am virtuellen Port E aus? Dies stelle ich für die beiden Programmiersprachen BASCOM und Forth getrennt dar:
BASCOM
Zunächst laden wir die Library "vPortE.zip" (s. u.) herunter, entpacken sie und kopieren die Datei vPortE.lib in den Unterordner "LIB" von BASCOM.
Das folgende Programm zeigt, wie man nun den Inhalt der Variablen "wert" am Port E mit Hilfe der Prozedur "Porte" zur Anzeige bringt:
Code: Alles auswählen
$regfile = "m328pdef.dat"
$crystal = 16000000
$framesize = 32
$swstack = 32
$hwstack = 64
$lib "vPortE.LIB"
$external Porte
Declare Sub Porte(byval X As Byte)
'**********************************************************
'******************* Deklarationen ************************
Dim Wert As Byte
Dim Komplement As Byte
'****************** Initialisierung ***********************
Ddrb.2 = 1
Portb.2 = 1
'**********************************************************
'******************** Hauptprogramm ***********************
Wert = 17
Komplement = 255 - Wert
Porte Komplement
End
Die Komplement-Bildung ist erforderlich, weil die LEDs nicht gegen Masse, sondern gegen Vcc geschaltet sind.
Forth
In Forth ist die Ausgabe eines Wertes vom TOS noch einfacher: Zuerst wird mit dem Wort "bnot" das Komplement gebildet; dann wird dies mit dem Punkt-Wort "." an PortE ausgegeben:
Code: Alles auswählen
( Test für LED-Bar; S0-S7 an PortE; Vcc auf Portb.2 -> High; LEDs gegen High gelegt -> bnot )
: initVcc 2 1 ddbitb 2 1 outportb ;
: main initVcc 17 bnot . ;