Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: *Danke* Kategorie: Hardware (von manfred - 8.01.2005 10:57)
 Als Antwort auf Re: *peinlich* von Kay - 7.01.2005 18:18
Hallo Kay,

nochmals danke

manfred

> ~loooooool~  du hast recht.
> die frage ist berechtigt und weil ich sie nicht gleich beantworten
> konnte, habe ich noch mal ins datenblatt geschaut und dabei
> bemerkt, dass sich die schleife zum CG-RAM-export noch
> weiter vereinfachen lässt und ausserdem meine daten in der
> tabelle unten falsch sind. NUR deshalb bist du wohl stutzig
> geworden   :-)
>
> es werden deshalb 8 byte pro chracter übertragen, weil der CG-RAM
> so organisiert ist, wenn auch nur die bytes 0...6 eine rolle spielen.
> wenn man nur 7 bytes übertragen wollte, müsste man die CG-RAM adresse
> jedesmal umständlich neu nachberechnen, übertragen, und könnte erst dann
> das nächste zeichen nachschieben.
> programmmäßig war mir das damals zu albern und ich fand es einfacher,
> die übertragung zu 8 bit in der schachtelschleife zu machen und lieber
> ein byte umsonst zu übertragen, weil der kontroller im display nach jedem
> schreibvorgang die adresse ja automatisch incrementiert und so selbständig
> das nächste zeichen setzt.
>
> die daten in meiner zeichentabelle waren aber wirklich falsch, das letzte byte
> sollte schon 00 sein   :-)
> meine güte.. wegen dir fliegen in einem 4 jahre alten programm alle dummen fehler auf,
> die machbar waren   :-) ich habs noch mal übergangen und weiter versimpelt.
> so wie jetzt hier steht, gehts und gibt brav alle 8 selbstdefinierten zeichen richtig aus:
>
> ' *** BYTE-VARIABLEN FUER LCD-TREIBER ***
> define lcd_buf  byte 'Puffer fuer Datentranfer zum Display
> define lcd_dat  byte 'zu sendenden Daten-Bytes
> define zeile     byte  'Zeilennummer fuer DD-RAM-Adressierung
> define spalte   byte  'Spaltennummer fuer DD-RAM-Adressierung
>  
> define i        byte     'Laufvariablen
> define j        byte
>  
> ' *** Port-Variablen LCD-Treiber ***
> define lcd_port      byteport[2] 'LCD-Interface-Port - gesamt
> define lcd_rs        port[14]    'Befehls-Leitung - fuer Cmd's auf 1
> define lcd_e         port[15]    'Execute-Leitung - H-L-Pulse
>  
> ' ***   DISPLAY - POWER_ON_INITIALISIERUNG   ***
> zeile = 1  :  spalte = 1    'Zeilen- und Spaltenzaehler setzen
> lcd_port = &B01000000  'EXE-Leitung HI setzen
> lcd_dat  = &B00110000 : gosub SEND_COM 'FUNC-Set (noch 8-Bit)
> lcd_port = &B01000010 : pulse lcd_e             'FUNC-Set: ab jetzt 4-Bit
>
> 'Betriebsparameter einstellen
> lcd_dat  = &B00101000 : gosub SEND_COM 'N=1 (2zeilg. Disp.) F=0 (5x7 Font)
> lcd_dat  = &B00001100 : gosub SEND_COM 'Disp an, Cursor aus, Blinken aus
> lcd_dat  = &B00000110 : gosub SEND_COM 'Adresspointer increm., Kein Shift
>
> 'Sonderzeichen in den CG-RAM exportieren
> for i = 0 to 56 step 8
>    lcd_dat = 64 + i : gosub SEND_COM
>    for j = i to i + 7
>       looktab CG_CODES,j,lcd_dat
>       gosub SEND_CHAR
>    next
> next
>  
> gosub CLS
>  
> '---------------------------------- anwenderprogramm (hier: testausgabe-schleife)
> for lcd_dat = 0 to 7
>    gosub SEND_CHAR
> next lcd_dat
>
> end
> '-----------------------------------
>
> ' *** LCD-Treiber ***
> #LOCATE            ' Unterprogramm "Cursor auf Display platzieren"
>    if zeile = 1 then lcd_dat = 127 + spalte
>    if zeile = 2 then lcd_dat = 191 + spalte
>    if zeile = 3 then lcd_dat = 147 + spalte
>    if zeile = 4 then lcd_dat = 211 + spalte
>    gosub SEND_COM
> return
>  
> #CLS                   ' Unterprogramm "Display loeschen"
>    lcd_dat = 2 : gosub SEND_COM
>    lcd_dat = 1 : gosub SEND_COM
> return
>  
> #SEND_COM       ' Unterprogramm "Befehl an Display senden"
>    lcd_buf = &B01000000
>    goto SEND_OUT
> #SEND_CHAR     ' Unterprogramm "Zeichen senden"
>    lcd_buf = &B01100000
>    #SEND_OUT
>    lcd_port = lcd_buf or (lcd_dat shr 4)    ' obere 4 Bits senden
>    pulse lcd_e
>    lcd_port = lcd_buf or (lcd_dat and &H0F) ' untere 4 Bits senden
>    pulse lcd_e
> return
>  
> ' *** Zeichengenerator-Daten ***
> table CG_CODES
>       31 17 17 17 17 17 31 00 'Code 00, leerer Rahmen
>       31 31 31 31 31 31 31 00 'Code 01, voller Klotz
>       10 00 17 17 17 17 14 00 'Code 02, grosses Ue
>       00 16 08 04 02 01 00 00 'Code 03, Zeichen \
>       00 00 00 00 00 00 00 00 'Code 04, leer,nicht belegt
>       00 00 04 14 04 00 00 00 'Code 05, Zeichen CTRL+G
>       04 00 04 08 16 17 14 00 'Code 06, verkehrtes Fragezeichen
>       15 16 14 17 14 01 30 00 'Code 07, Paragraph
>      '17 14 17 17 31 17 17 00 'Code __, grosses Ae
>      '17 14 17 17 17 17 14 00 'Code __, grosses Oe
> tabend
>  
>

 Antwort schreiben

Bisherige Antworten: