5. Softwarebausteine Teil 4 (Stand: 14.12.2009) Z zurück zu Teil_1 Teil_2 Teil_3
Die Teile aus den Programmen können auch kopiert und in eigene Programme eingefügt werden.
Bildschirm-Bedienung Anzeige auf PC-Bildschirm
(Bedienmenu) Befehl put (Term)
Tastatur mit LED-Quittung der Station, Eingabe Sollwert
LCD-Anzeige_IO-Terminal (größere LCD an Station siehe Teil 2)
Einbindung_Treiber Beispiel syscode IO-Teminal
Tastatur_Applikationsboard Methode der Fehleranalyse und Fehlerbeseitigung
LCD_Anzeige_Applikationsboard mit Software Tastatur-Test und LCD
Anwendungsprogramm für Station mit i/o-Terminal und sys-Treiber
und für Applikationsboard ohne und mit sys-Treiber
Tastatur, Zeichenvorrat LCD ( byte , word, HEX-Zahl, ASCII , Binär),
Relais schalten, Schrittsteuerung mit Wartezeit, Text- und
Zahlenausgabe
Einbinden des Assembler .s19 Laden und Auskommentieren
5.4.0) Bedienen und Anzeigen am PC
define Key_Ext byte
(1) Eingabe von Zahlen z.B.
Sollwerte
Am PC wird
die Zahl als Ziffern nacheinander eingegeben, die über die serielle
Schnittstelle an die c-control gesendet werden.
Hier wird
das Prinzip der Zahlenbildung in der c-control erläutert.
Die zuletzt
eingegebene Ziffer ist immer der Einer, wobei die vorher eingegebenen Ziffern
zu Zehner , Hunderter, usw. werden.
Meistens kann man auf
Zahleneingabe verzichten und nutzt die Sollwert-Eingabe laut nächstem
Abschnitt.
'Abfrage Tastatur PC-Befehl
if not RXD then goto EndePC 'kein Befehl empfangen
GET Key_Ext 'Zeichen empfangen
'Mit der Taste „Return“ wird die eingegebene Zahl Null gesetzt bzw. ausgewertet.
if
Key_Ext = 13 then Eingabe = 0 'PC-Taste
Return
'Zifferabfrage 0 bis
9 (Einer)
if
Key_Ext >= &H30 and Key_Ext <= &H39 then goto Zahlbilden
goto weiter
#Zahlbilden ' Der bisherige Wert wird um eine Zehnerstelle erhöht und dann der Einer addiert
Eingabe = Eingabe * 10 + ( Key_Ext
and &H0F)
'Maskierung Ziffer und Bildung der Zahl
#weiter
(2) Anzeige auf dem Bildschirm
Print “Text xyz “;wert1;“ “ ' Text und
Variable werden in einer Zeile ausgegeben ohne Semikolon ; wird k
Print “Text xyz “;wert1;“ “; ' mit Semikolon bedeutet Fortsetzung der
Ausgabe in dieser Zeile
Print “abc “ ' Ausgabe Text oder
Variable schließt an obiger Zeile an
Put 65 oder Put &H41 gibt den Buchstaben A auf dem Bildschirm aus.
Man kann auch ein Term ausgeben, indem eine Bit-Variable zu
einem ASCII-Zeichen umgeformt wird z.B. für Define
Pumpe bit 192
Put (66 + Pumpe) ' bei OFF
wird B und bei ON hat Bit den
Wert –1, d.h. 66 –1 = 65, es wird A
ausgegeben.
Put (78 + Pumpe*4) ' bei OFF wird N
und bei ON hat Bit den Wert –1, d.h. 78 –1*4) = 74 , es wird J ausgegeben.
Put (32 – Pumpe*42) ' bei OFF wird
Space (Leerzeichen) und bei ON hat Bit den Wert –1, d.h. 32 – (–1*42) = 74 , es
wird J ausgegeben.
(3) Bildschirm-Bedienung mit Menu
Die Sollwerte werden mit den Pfeiltasten der PC-Tastatur erhöht bzw. gesenkt (mehr bzw. weniger).
Welcher Sollwert verändert wird, kann mit den Zifferntasten als Menuwahl bestimmt werden.
Je nach gewählter Ziffer wird der Sollwert-Name als Text angezeigt.
Schalten: Soweit Ziffern für Sollwert-Stellen nicht gebraucht werden, dienen sie der Informations-Menu, welche Buchstaben Funktionen haben.
Beispiel: (U)rlaub Ein-Aus bedeutet mit Taste U (klein u) wird die Funktion Urlaub geschaltet.
' Abfrage
Tastatur PC-Befehl
if not RXD then goto EndePC 'kein Befehl empfangen
GET Key_Ext 'Zeichen
empfangen
if Key_Ext = 91 then goto PfeilTasten ' zur Auswertung 2.
Zeichen (welcher Pfeil)
' Menu-Wahl
für Pfeiltasten Zifferabfrage 0 bis
9 für Anzeige-Nr.
if
Key_Ext >= &H30 and Key_Ext <= &H39 then AnzeigeNr = Key_Ext and
&H0F 'Maskierung Ziffer
' Direkte
Befehle Abfrage von Buchstaben-Tasten
(Beispiele)
if Key_Ext =
&H75 then Urlaub = not Urlaub' Taste u
(Heizung bei Urlaub Ein-Aus)
if Key_Ext =
&H68 then gosub DatumHeute ' Taste h Datum heute setzen
if Key_Ext =
&H6E then gosub NachtEinHand ' n
Nacht Hand ein aus
if Key_Ext =
&H74 then gosub NachtAusHand ' t Tag Hand
if Key_Ext =
&H70 then goto PC_PumpeEin ' Taste
p (Beispiel siehe unten)
if Key_Ext = &H73 then gosub SommerEinAus ' Taste s
if Key_Ext = &H67 then gosub Reset' g Grundeinstellung
goto
EndePC
' Menue Pfeil-Tasten, Auswahl je nach gewählter Anzeige-Nr (Vorwahlziffer)
#PfeilTasten
if not RXD then goto EndePC 'keinen
Befehl empfangen
GET Key_Ext
'2.Zeichen nach Pfeil empfangen
'if AnzeigeNr = 1 then goto PC1'
if AnzeigeNr = 2 then goto PC2'
if AnzeigeNr = 3 then goto PC3'
if AnzeigeNr = 4 then goto PC4'
goto EndePC
'Beispiele zur Belegung der Pfeiltasten
#PC2 ' Vorwahl Ziffer 2 Einstellen Urlaub letzter Tag
if Key_Ext = 65 then gosub TagPlus'Taste Pfeil oben
if Key_Ext = 66 then gosub Tagminus'Taste Pfeil
unten
if Key_Ext = 67 then gosub MonatPlus'Taste Pfeil
rechts
if Key_Ext = 68 then gosub MonatMinus'Taste Pfeil
links
goto EndePC
#PC3 ' Vorwahl Ziffer 2 Einstellen Nachtzeit
if Key_Ext = 65 then gosub AbendPlus'Taste Pfeil
oben
if Key_Ext = 66 then gosub AbendMinus'Taste Pfeil
unten
if Key_Ext = 67 then gosub FruehPlus'Taste Pfeil
rechts
if Key_Ext =
68 then gosub FruehMinus'Taste Pfeil links
goto EndePC
' Beispiel für Schalten mit Taste p
#PC_PumpeEin ' Pumpe zeitbegrenzt einschalten
Wartezeit = 30 '(Ausschalten nach Zeitablauf siehe Kapitel Steuerungstechnik)
K2 = EIN '
Pumpe einschalten
#EndePC'
(4) Anzeige des Menus auf dem PC-Bildschirm für Bedienerführung
wert1 = AnzeigeNr
print " Funktion
waehlen: Ziffertaste 1...9, Werte
stellen: Pfeiltasten"
print "[";wert1;"] ";
on wert1 goto z0,z1,z2,z3,z4,z5,z6,z7,z8, z9 'Text-Zuordnung zu AnzeigeNr
goto Textfehler
#z0
#z1
Print "Sollwert / ......";
goto Textende2
#z2
Print "Urlaub letzter
Tag / Monat";
goto AnhangU
#z3
Print "Nacht Anfang /
Ende";
goto AnhangNT
#z4
Print "Steilheit /
Grundwert";
goto Textende2
#z5
Print "[P]umpe 2
Minuten Ein";
goto Textende2
#z6
Print "[S]ommer [W]armwasser Ein-Aus";
goto Textende2
#z7
#z8
#z9
Print "frei ";
' Text für Ziffer 7, 8, 9
goto Textende2
#AnhangNT
Print " [N]acht [T]ag Ein-Aus "
goto Textende3
#AnhangU
goto Textende3
#AnhangU
Print " [H]eute
[U]rlaub Ein-Aus "
goto Textende3
#Textfehler
print " ? ? ? ? ?
";
#Textende2 'neue zeile bzw ;'Semikolon
= keine neue Zeile
Print " [G]rundeinstellung "
#Textende3
5.4.1) Bedienen und Anzeigen am Steuergerät
(1) Bedienungsprinzip mit Quittungs-LED
Bedienung: Taste drücken bis LED als Quittung leuchtet , dann ist Taste vom Programm ausgewertet.
LED 1 ist zentrale Quittung für F 1 (und für I/O-Terminal).
Hauptprogramm: gosub Tastatur
Unterprogramme:
#Tastatur '
if not F1 then goto AnzeigeNrstellen' Funktionsumschaltung Taste F1 (z.B. Station)
LED1 = OFF ' Taste F1 nicht gedrueckt, dann LED 1 aus
if not F2 then goto ......... ' weitere Tasten F2, F3, F4
RETURN ' Tastatur fertig, keine Eingabe
#AnzeigeNrstellen ' Bedienfunktionen
LED1 = ON ' Tasten-Quittung auf LED 1
AnzeigeNr = AnzeigeNr +1 ' Eingabemodus = AnzeigeNr LCD
RETURN
(2) Bedienungsprinzip mit zentraler und einzelner Quittungs-LED
#Tastatur ' ergänzt mit I/O
if not F1 then goto AnzeigeNrstellen' Funktionsumschaltung Taste F1 (Station)
LED1 = OFF ' zentrale
Quittungs-LED aus
if not F2 then goto ......... ' weitere Tasten F2 F3 F4
gosub key_decode 'Abfrage Taste auf I/O-Terminal gedrückt
if key = 255 then goto weiter23 '255 = keine Taste gedrückt
if key =10 then goto NachtEinHand' FT 1 I/O Nachtabsenkung Ein (vorzeitig anstelle Uhr) (Beispiel)
if key =11 then goto ......... ' FT 2 I/O Keine Nachtabsenkung (anstelle Uhr)
if key =12 then goto SommerHand' FT 3 I/O
Sommerbetrieb Ein
if key =13 then goto Reset 'Taste CLEAR I/O
(Reset für Alles)
if (key > 9) then weiter23 'weitere Tasten nicht belegt
AnzeigeNr = key ' Übernahme Taste 0 bis 9 auf AnzeigeNr
LED1 = ON ' zentrale Tasten-Quittung auf LED 1
#weiter23
(3) AnzeigeNr abfragen für Eingaben z.B. Nachtzeit ändern
if (AnzeigeNr = 0) then goto ohneEingabe
if (AnzeigeNr = 1) then goto NachtEin' Uhr stellen
if (AnzeigeNr = 2) then goto NachtAus' Uhr stellen (Beispiel)
if (AnzeigeNr = 3) then goto StelleSollwertEin' Sollwert stellen (Beispiel)
if (AnzeigeNr = 4) then goto StelleSollwertAus
if (AnzeigeNr < 10) then goto ohneEingabe
AnzeigeNr = 0' AnzeigeNr Null setzen, wenn keine if-Abfrage
#ohneEingabe
RETURN ' Tastatur fertig, keine Taste betätigt
---- Unterprogramme zu den Beispielen ----------------
(4) Bits schalten
#NachtEinHand' Nachtabsenkung von Hand ein
NachtAusHand = OFF : NachtEinHand
= ON : RETURN
(5) Sollwert-Eingabe mit LED-Quittung
#NachtAus '
Uhrzeit stellen
if not F3 then goto FruehPlus ' wenn F3 betätigt, dann....
if not F4 then goto FruehMinus ' wenn F4 betätigt, dann....
LED3 = OFF : LED4 = OFF ' keine Taste gedrueckt, dann LEDs aus
RETURN ' keine Taste betätigt
#FruehPlus ' Stunde einstellen
LED3 = ON ' LED, Einzel-Quittung
NachtZeit = NachtZeit +1
RETURN
#FruehMinus ' einstellen
LED4 = ON ' LED, Einzel-Quittung
NachtZeit = NachtZeit -1
RETURN
(6)
Sollwert-Eingabe begrenzen
Außerdem wird hier das Schalten der LEDs zusammen gefasst.
#StelleSollwertEin
if not F4 then goto SollMinus ' wenn F4 betätigt, dann....
if F3 then goto AusLED34 ' keine Taste gedrueckt, dann LEDs aus
SollPlus ' Sollwert stellen
If Sollwert > 60 then goto
EinLED3
Sollwert = Sollwert +1
goto EinLED3 ' LED, Einzel-Quittung
Begrenzung mit
Fehler-Korrektur
#SollPlus ' Sollwert stellen
If Sollwert > 59 then
Sollwert = 59
Sollwert = Sollwert +1
goto EinLED3
#SollMinus ' Sollwert stellen
If Sollwert < 21 then
Sollwert = 21 ' Begrenzung auf 20,
weil danach noch –1 folgt.
Sollwert = Sollwert -1
goto EinLED4
Achtung bei Byte-Variable
(Sollwert = Sollwert – 1 ergibt bei Sollwert 0 den Wert 255). Lösungsbeispiel:
If Sollwert < 1 then
Sollwert = 1 ' Begrenzung auf Null,
weil danach noch –1 folgt.
Sollwert = Sollwert –1 '
goto EinLED4
' LED schalten,
Unterprogramm gosub Tastatur abschließen
#EinLED4
LED4 = ON ' LED, Einzel-Quittung
RETURN
#EinLED3
LED3 = ON ' LED, Einzel-Quittung
RETURN
#AusLED34
LED3 = OFF : LED4 = OFF ' keine Taste
gedrueckt, dann LEDs aus
RETURN
5.4.2) LED - Anzeigen I/O-Terminal (LED-Anzeigen Station siehe oben)
Die LEDs werden mit gosub ein- bzw. ausgeschaltet.
Voraussetzung ist EINBINDUNG DES TREIBERS syscode "iotdrv12.s19" (siehe Linkliste)
if (NachtEinHand = ON) or (NachtUhr = ON) then gosub 1gnON else gosub 1gnOFF' Nachtabsenkung
if (NachtAusHand = ON) then gosub 2rtON else gosub 2rtOFF' Sperre Nachtabsenkung
if (SommerHand = ON) then gosub 3gnON else gosub 3gnOFF' Sommerbetrieb für Heißwasser
'------ Unterprogramme -----------------------------------------
#1gnON ' LED wird
eingeschaltet (grün)
GRN1 = OFF : goto LED_IO ' Unterprogramm arbeitet intern umgekehrt
#1gnOFF
GRN1
= ON : goto LED_IO
#2rton ' Jede LED kann rot eingeschaltet werden (oder grün)
RT2 = OFF : goto LED_IO
#2gnon ' LED wird eingeschaltet (grün)
GRN2 = OFF
#LED_IO
SYS IO_DRV : Return
5.4.3) LCD - Anzeige I/O-Terminal
Anmerkung: Die LCD des
i/o-Terminals ist sehr klein. Eine größere LCD mit einigen Tasten und
LEDs kann in ein flaches Gehäuse zur Fernbedienung über I2C-Bus eingebaut
werden (siehe Softwarebausteine Teil 2).
Voraussetzung für i/o-Terminal ist EINBINDUNG DES TREIBERS syscode "iotdrv12.s19" (siehe Linkliste)
Mit der Tastatur wird die Anzeige-Nr (=Bild-Nr.) gewählt.
if (AnzeigeNr = 1) then goto Nachtuhr' Zeile 1 Uhr Nacht stellen mit F3(+) und F4(-)
if (AnzeigeNr = 2) then goto Nachtuhr' Zeile 2 Uhr Nacht stellen mit F3(+) und F4(-)
if (AnzeigeNr = 3)then goto IstSoll' Sollwert stellen mit F3(+) und F4(-)
--------------------------------------------------------------------------
Nur diese Anweisungen sind notwendig. Die Unterprogramme erledigen die Anzeige.
#Nachtuhr'(1,2) Anzeige für Ändern der Uhrzeiten der Nachtabsenkung
gosub StartAnzeigeNR : sys LCD_print : print "Uhr "; : gosub Nachtzeit : gosub ZAHL2
gosub setline2 : sys LCD_print : print "Nacht "; : wert1 = wert2 : gosub ZAHL2 : goto ende
#Ende' Ende LCD-Ausgabeprogramm
Goto loop 'Ende des Ablaufprogramms, Schleife zurück
----- Unterprogramme --------------------------------------------------
#StartAnzeigeNR
gosub setline1 : wert1 = AnzeigeNr : gosub Zahl1
#space' (gosub space) gibt 1 space auf
LCD aus
CHAR=&HA0
#SYS_WRT
SYS LCD_WRT : Return
#ZAHL1' 1 Ziffer
Wert3 = Wert1 : goto Ziffer 'Ausgabe 1 Ziffer
#Zahl2' 2 Ziffern (2 Plätze 0 bis 99)
if (wert1 > 99) then goto ZZ' Zahl zu groß
Wert3=Wert1/10:gosub Ziffer 'Maskierung Zehner + Ausgabe Ziffer
#Einer
Wert3=Wert1 Mod 10:goto Ziffer 'Maskierung Einer
#ZZ
CHAR=&HBF: SYS LCD_WRT' Zeichen(?) ausgeben
goto Einer' ausgeben
#Ziffer' (gosub Ziffer) gibt 1 Ziffer im Speicher "Wert3" auf LCD aus
CHAR = Wert3 + &HB0 : Goto SYS_WRT
#SYS_WRT
SYS LCD_WRT : Return
#setline1
CHAR=&H84:sys LCD_CMD:return
#setline2
CHAR=&HC4:sys LCD_CMD:return
#Nachtzeit ' *** Nachtabsenkung *** Uhrzeit Beginn in Wert1 und Ende in Wert2
wert1 = 24 - Nachtzeit shr 4 : wert2 = Nachtzeit MOD 16 : return
Fertiges Programmbeispiel siehe unten
5.4.4 ) Tastatur
Applikationsboard (Methode der
Fehleranalyse)
Bei Betätigen der Folientastatur des Applikationsboards
werden immer wieder falsche Tastenwerte ausgegeben.
Im Folgenden wird die Fehleranalyse
beschrieben und schließlich der Fehler beseitigt.
''-------- SUBROUTINE DECODE KEY
------------
#key_decode 'Umsetzung auf Tastencode *** Applikationboard Original ***
key=255 ' Vorbesetzung (keine Taste gedrückt)
if key_val >240
then return ' Auswertung Analog-Eingang
(keine Taste gedrückt)
if key_val >=0 then key = 10 'BACK KEY * (Taste
gedrückt)
if key_val >14 then key = 7 ' KEY
if key_val >36 then key = 4 ' KEY
if key_val >57 then key = 1 ' KEY
if key_val >70 then key = 0 ' KEY
if key_val >100 then key = 8 ' KEY
if key_val >122 then key = 5 ' KEY
if key_val >142 then key = 2 ' KEY
if key_val >163 then key = 11 ' RETURN KEY #
if key_val >183 then key = 9 ' KEY
if key_val >204 then key = 6 ' KEY
if key_val >225 then key = 3 ' KEY
return ' Analog-Eingang
ausgewertet ( Taste gedrückt)
Für die Analyse werden
Kontroll-Speicher eingefügt, um die Fehler zu „fangen“.
#key_decode2
key=255 ' Vorbesetzung (keine Taste gedrückt)
if key_val >240
then return ' Auswertung Analog-Eingang
(keine Taste gedrückt)
if key_val >240 then Kontrolle1
= Key_val ' Kontrolle 1
Kontrolle2 = key_val ' Kontrolle
2
if key_val >=0 then key = 10 'BACK KEY * (Taste
gedrückt)
if key_val >14 then key = 7 ' KEY
if key_val >36 then key = 4 ' KEY
if key_val >57 then key = 1 ' KEY
if key_val >70 then key = 0 ' KEY
if key_val >100 then key = 8 ' KEY
if key_val >122 then key = 5 ' KEY
if key_val >142 then key = 2 ' KEY
if key_val >163 then key = 11 ' RETURN KEY #
if key_val >183 then key = 9 ' KEY
if key_val >204 then key = 6 ' KEY
if key_val >225 then key = 3 ' KEY
Kontrolle3 = key_val
'
Kontrolle 3
Kontrolle4 = Key ' Kontrolle 4
return ' Analog-Eingang ausgewertet ( Taste gedrückt)
Das Programm mit LCD-Anzeige steht unten am Ende dieses
Abschnitts zur Verfügung.
Test-Ergebnis:
Bei mehreren
Betätigungen der Tastatur zeigt Kontrolle 1 immer wiederholt Werte an,
obwohl der Befehl davor bei Werten größer 240 das
eigentlich verhindern müsste.
Kontrolle 2 und 3 zeigen unterschiedliche Werte an.
Kontrolle 4 zeigt manchmal falsche
Taste an (oft Key = 3).
Lösung:
Der Wert vom Analog-Eingang „Key_val“ ändert sich auch
während der Abfrage.
Bei Betätigung einer Taste läuft der Wert von 255 abwärts
bis zum Wert entsprechend der Taste.
Beim Loslassen der Taste läuft der Wert z.B. von 0
aufwärts.
Erfolgt die Abfrage während dieser Phasen, werden
zwangsläufig falsche Tasten gemeldet.
Das folgende Programm prüft erst durch Vergleich Neuwert
mit Altwert, ob der Wert stabil ist.
Danach wird der fest gehaltene Wert
ausgewertet. In der Automatisierungstechnik wird mit dem Prozessabbild
gearbeitet.
#key_decode3
key=255 ' Vorbesetzung (keine Taste gedrückt)
#nochmal
wert3 = key_val '
(Erzeugung Prozessabbild)
if key_val >240
then return ' Auswertung Analog-Eingang (keine Taste gedrückt)
key = key
- 1 ' Schleifenzähler
Kontrolle1 = key ' Kontrolle 1 (nur für Test)
if wert3 =
key_val then goto
TasteAusgeben 'Wert stabil? Ja, dann
...
if key > 240 then goto nochmal ' max 15-mal prüfen
return ' dann Abbruch
#TasteAusgeben
if wert3
>=0 then key = 10 ' KEY * (Taste gedrückt)
if wert3 >14 then key = 7 ' KEY
if wert3 >36 then key = 4 ' KEY
if wert3 >57 then key = 1 ' KEY
if wert3 >70 then key = 0 ' KEY
if wert3 >100 then key = 8 ' KEY
if wert3 >122 then key = 5 ' KEY
if wert3 >142 then key = 2 ' KEY
if wert3 >163 then key = 11 ' KEY #
if wert3 >183 then key = 9 ' KEY
if wert3 >204 then key = 6 ' KEY
if wert3 >225 then key = 3 ' KEY
Kontrolle4 = Key ' Kontrolle 4 (nur
für Test)
return ' Analog-Eingang
ausgewertet ( Taste gedrückt)
Nach Return steht der Zwischenspeicher wert3
anderen Softwarebausteinen zur Verfügung.
Die Variablen
Kontrolle 1 und Kontrolle 4 werden nur für den Test gebraucht und danach
entfernt.
Programm für Tastaturtest mit
LCD-Anzeige(18.02.2004) hier laden: keypadTest.bas
Im Testprogramm wird auch Auswerten der Tasten für Takten
und mit Tastatur-Flanke für Einzelschritt gezeigt
sowie ein Zähler 0-255 mit Anzeige der zugehörigen HEX-Zahl
und des ASCII-Zeichens.
5.4.5 ) LCD – Anzeige
(auch Applikationsboard)
Im Testprogramm wird die LCD-Anzeige
bei Wechsel der Anzeige durch ein Aufruf-Bit gelöscht, dadurch bleiben alte
Teile nicht stehen.
(1) Der Text „KEY“ kann
aufwändig mit HEX-Werten programmiert werden:
lcd_param = &H4B : gosub lcd_writechar 'K
lcd_param = &H45 : gosub lcd_writechar 'E
lcd_param = &H59 : gosub
lcd_writechar 'Y
(2) oder mit Buchstaben als Konstante (define E &H45) :
lcd_param = E : gosub
lcd_writechar 'E
(3) oder leicht programmierbar und lesbar mit GOSUB:
gosub K : gosub E : gosub Y
und leicht änderbar in Kleinschreibung :
gosub K : gosub e# : gosub y#
Ausgabe Space sowie Zahlenausgabe ohne führende Nullen ist
auch möglich:
gosub Space : wert1 = Kontrolle4 : gosub Zahl2
Unterprogramme bleiben im Hintergrund:
#K
lcd_param = &H4B : goto lcd_writechar
#E lcd_param
= &H45 : goto lcd_writechar ' Großbuchstabe E
#Y
lcd_param = &H59 : goto lcd_writechar
#e# lcd_param = &H65 : goto lcd_writechar ' Kleinbuchstabe e
#y# lcd_param = &H79 : goto lcd_writechar
#Space lcd_param = &H20 :goto lcd_writechar
(4) Zahlenausgabe (weitere Unterprogramme mit word siehe in
„Fertige Programme“)
#Zahl3 ' 3-stellige
Zahl ausgeben (Byte max 255) alternativ space
if wert1 >= 100 then lcd_param = wert1/100 +&H30 else lcd_param = &H20
gosub ausgeben
#Zahl2 ' 2-stellige Zahl ausgeben
if wert1 >= 10 then lcd_param = wert1 MOD
100 /10 +&H30 else lcd_param =
&H20
gosub ausgeben
#Zahl1 ' 1-stellige Zahl ausgeben
lcd_param = wert1 mod 10 +&H30
#ausgeben
goto lcd_writechar
(5) Wird ein Maschinenprogramm ..S19 eingebunden, dann ist die Programmierung von Text noch einfacher.
Sys LCD Print : print „ABCdef 123„
Die Zeichen müssen nicht mehr als HEX-Werte, Konstante oder Unterprogramme abgelegt werden, sondern man schreibt fortlaufend den gewünschten Text hinter Print.
5.4.6) Fertige Programme
Station mit i/o-Terminal (mit großer LCD siehe Teil 2)
Beispiele für Tasten, Relais, LED und LCD mit „print Text“
Wartezeiten und Schrittsteuerung
Beispiel Station sysV1.bas mit Maschinenprogramm IOTDRV12.S19
' --------- EINBINDUNG DES TREIBERS I/O-Terminal -----------
syscode "iotdrv12.s19" '(Machinenprogramm)
Der Treiber muss
zusammen mit dem Programm in einem Ordner liegen.
Er wird dann beim Übertragen des Programms in die c-control mit übertragen.
Es kann nur ein sys-Programm eingebunden werden.
Dort bleibt es erhalten bis zur Übertragung eines anderen sys-Programms.
Da jede Übertragung
die Lebensdauer des Speichers verkürzt, soll man nach der ersten Übertragung
die obige Befehlszeile „auskommentieren“.
Diese Abschaltung der Übertragung erfolgt am besten durch das Hochkomma, weil man später noch sieht, welches sys-Programm notwendig ist.
' syscode "iotdrv12.s19" '(siehe Linkliste)
5.4.7)
Fertige Programme Applikationsboard (bzw. auch für
Station)
Die Beispiele können durch eigene Anpassung auch für die Station mit Treiber und großer LCD angewendet werden, siehe Teil 2.
1) Auswerten der Tasten für Takten und mit Tastatur-Flanke für Einzelschritt
2) Aufruf-Bit für LCD-Löschen bei Anzeigewechsel
3) Zähler 0-255 mit Anzeige der zugehörigen HEX-Zahl und des ASCII-Zeichens (Anzeige des Zeichenvorrats der LCD-Anzeige).
4) Stellen von Bytes
und Ausgabe als word +- 32676 ' Ausgabe von Zahlen mit Vorzeichen
Programm (26.02.2004) hier laden: keypad_LCD.bas
zusätzlich
5) Relais (Port) mit Tasten schalten: keypad_LCD_Relais.bas
zusätzlich
6) Relais schalten nach Wartezeit
7) Schrittsteuerung
8) Zykluszeitmessung
9) Anzeige Binärcode zu 3)
10) steigende Taktgeschwindigkeit für Taste: keypad_LCD_Zeit.bas (25.3.2004)
5.4.8) Einbinden
des sys-Programms (Assembler)
Gleiches Programm keypad_LCD_Zeit_sys.bas (22.1.2008) wie vor jedoch mit Treiber LCDDRV11.S19 (bzw. lcddrv11.zip )
Dieses Beispiel zeigt auch für andere Assemblerprogramme (Treiber sys) ..s19, deren Einbindung in das Programm und Handhabung beim Laden in die Hardware.
Man ladet das Programm ..bas in einen Ordner und den Treiber ..S19 in denselben Ordner.
Bei einer zip-Datei ladet man das ..zip in dasselbe Verzeichnis des Ordners. Anschließend muss zip (z.B. mit dem Explorer) geöffnet werden.
Die Datei lcddrv11.S19 muss nun in das gleiche Verzeichnis extrahiert bzw. gespeichert werden.
Beim Laden des Programms in die c-control braucht nur das Programm ...bas geladen werden, dabei wird das ..s19 selbsttätig mitgenommen.
Der Treiber muss
zusammen mit dem Programm in einem Ordner liegen.
Es kann nur ein sys-Programm ..s19 eingebunden werden.
Im Gerät bleibt es erhalten bis zur Übertragung eines anderen sys-Programms.
Da jede Übertragung
die Lebensdauer des Speichers verkürzt und auch Ladezeit braucht, soll man nach
der ersten Übertragung die Befehlszeile
„auskommentieren“.
Diese Abschaltung der Übertragung erfolgt am besten durch das Hochkomma, weil man später noch sieht, welches sys-Programm notwendig ist.
' syscode "lcddrv.s19" '(weitere Übertragungen
durch Hochkomma abgeschaltet)
------------------------------------- ENDE Softwarebausteine Teil 4 ------------ nach_oben
zurück zu Softwarebausteine_Teil_1 Teil_2 Teil_3 Startseite