LED-Bar am virtuellen Port E

Atmega 328 mit BASCOM und FORTH programmieren
Antworten
Heinrichs
Beiträge: 173
Registriert: Do 21. Okt 2010, 18:31

LED-Bar am virtuellen Port E

Beitrag von Heinrichs » 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.

led_bar_klein.jpg
LED-Bar am virtuellen Port E
led_bar_klein.jpg (49.74 KiB) 11502 mal betrachtet

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 . ;

led_bar_video.wmv
Beispielvideo
(929.06 KiB) 1018-mal heruntergeladen
.
Dateianhänge
vPortE.zip
BASCOM-Library "vPortE.lib"
(807 Bytes) 1016-mal heruntergeladen

Antworten