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: *peinlich* Kategorie: Hardware (von Kay - 7.01.2005 18:18)
 Als Antwort auf Re: *peinlich* von manfred - 7.01.2005 16:59
~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:

Re: *Danke* (von manfred - 8.01.2005 10:57)