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

 LED_-_Anzeigen_IO-Terminal ,

 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'

nach_oben

(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

nach_oben

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

nach_oben

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

nach_oben

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

nach_oben

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.

nach_oben

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 

 

Kostenlose Zähler und Statistiken für Ihre Website bei www.motigo.com