Bascom Diverse GLCD via TWI / I2C als Charakter LCD verwenden

Cassio

Aktives Mitglied
29. Okt. 2008
4.027
17
38
Region Hannover
Sprachen
  1. BascomAVR
Hallo zusammen!

Ich habe ja HIER schon einige Beispiele eingestellt,
wie man mit ein paar Include-Dateien normale LCD`s am TWI bzw. I2C Bus betreiben kann.

Irgendwann kam mir aber der Gedanke, dass man diverse günstige GLCD`s ja auch dafür verwenden könnte.
Genaus darum geht es in diesem Thread:
Die Verwendung verschiedener GLCD`s als CLCD (Charakter LCD) am TWI bzw. I2C Bus.

Damit die Ansteuerung möglichst einfach bleibt und die Anzeigegeschwindigkeit nicht darunter leidet, kommt kein fertiger I2C-Baustein, wie z.B. der PCF8574 (oder eher der PCF8575), zum Einsatz sondern ein ATMega8!

Durch die Verwendung eines AVR`s, als Schnittstelle zwischen dem TWI Bus und dem GLCD, gestaltet sich die Ansteuerung natürlich recht einfach und obendrein spart es auch noch Platz im steuernden AVR.
So befinden sich z.B. drei Font-Dateien im "Slave-AVR" die speichertechnisch nicht den eigentlichen Programm-AVR belasten.
Durch einen kleinen Zusatz kann man dann problemlos die Schriftgröße gleich mit angeben.
Die drei integrierten Schriftgrößen sind:
0 = 6x8 Pixel
1 = 8x8 Pixel
2 = 16x16 Pixel


Aktuell habe ich für vier verschiedene GLCD-Controller die Programme fertig und getestet......
dem KS0108, dem KS0108 mit drei CS-Pins, dem SED-Controller und auch dem T6963C !
Außerdem habe ich immer zwei Versionen erstellt:
Einmal für den Mega8 als TWI-Slave
und einmal für den Mega8A als TWI-Slave.


Beginnen möchte ich mit einem recht bekannten Display-Controller,
dem KS0108.

Hier ist der Anschlussplan zum Nachbauen:
TWI_I2C_M8_KS0108-GLCD.gif

und hier die fertigen Programme:
Anhang anzeigen I2C_M8_KS0108-GLCD.zip
Die ZIP-Datei beinhaltet die Programme für den Mega8 und den Mega8A !

Einfach die Datei mit BASCOM in den AVR laden,
die internen 8MHz per FUSES einstellen,
Schaltung aufbauen,
fertig! :D

Wie auf dem Anschlussplan zu erkennen ist, kann man die TWI-Bus Adresse ebenfalls mit den Pins A0, A1 und A2 einstellen.
Die Einstellung muss jedoch VOR dem Anlegen der Betriebsspannung getätigt werden.
Im laufenden Betrieb kann die Adresse nicht geändert werden!


Zur Ansteuerung im Programm-AVR benötigt man nun nur noch die passenden Subroutinen.
Einmal im Programmkopf:
Code:
Declare Sub Lcd_(byval Zeile As Byte , Byval Charakter As Byte , Byval Text1 As String * 32 , Byval Fonttyp As Byte)
Declare Sub Lcd_cls

Dim Text As String * 32
Dim Chr_text(33) As Byte At Text Overlay
Dim Twi_send(35) As Byte
'*********************
Const M8_slave = &H7E                  'ggf. anpassen !
'*********************
Dim I1 As Byte
Dim I2 As Byte


und einmal am Ende des Programms noch die eigentlichen Subroutinen:
Code:
' #############################################################################
Sub Lcd_(byval Zeile As Byte , Byval Charakter As Byte , Byval Text1 As String * 32 , Byval Fonttyp As Byte)

I2 = 0
Text = Text1

Twi_send(1) = Zeile
Twi_send(2) = Charakter
Twi_send(35) = Fonttyp

For I1 = 3 To 34
   Incr I2
   Twi_send(i1) = Chr_text(i2)
Next I1

Gosub Twi_senden

End Sub


' #############################################################################
Sub Lcd_cls

Twi_send(1) = &HFF
Gosub Twi_senden

End Sub


' #############################################################################
Twi_senden:
I2csend M8_slave , Twi_send(1) , 35
Return


Im Programm kann man dann folgendes eingeben:
Code:
  LCD_ 1 , 1 , "Hallo Welt!" , 0
   |   |   |         |         |
   |   |   |         |         '--- 0 => 6x8 Font / 1= 8x8 Font / 2= 16x16 Font
   |   |   |         |
   |   |   |         '------------- String bis 21 Zeichen
   |   |   |
   |   |   '----------------------- Spalte (1-21)
   |   |
   |   '--------------------------- Zeile 1-8
   |
   '------------------------------- Subroutine


Eines gibt es aber noch....
Mit der Anweisung "Lcd_cls" kann ein Clear_Screen veranlasst werden.

Das war es dann auch schon. :cool:

Zum Schluss noch ein Foto, wie das Ganze dann aussehen könnte:
I2C-KS0108.jpg


Die nächsten Anschlusspläne und Programme für die anderen Display-Controller folgen dann in Kürze.

Grüße,
Cassio
 
Hallo!

Da wir gerade beim KS0108-Display sind......
Es gibt ja auch die Variante mit den drei CS Pins und einer Auflösung von 192x64 Pixel.

Wenn man bei diesem Display die 6x8 Pixel Schrift verwendet, passen also max. 32 Zeichen in eine Zeile.
Man hat also etwas mehr Platz zur Verfügung. :wink:


Auf Grund des KS0108 muss ich ja nun nicht alles aus dem vorherigen Beitrag noch mal erwähnen......
Was man allerdings zum Betrieb benötigt ist natürlich wieder der Anschlussplan und das Programm.

Hier also der Anschlussplan:
TWI_I2C_M8_KS0108-CS3-GLCD.gif


Dann noch das Programm....
Wieder einmal für den Mega8 und den Mega8A !
Anhang anzeigen I2C_M8_KS0108_CS3-GLCD.zip


Zu guter Letzt noch ein Foto, dass leider nicht sehr gut geworden ist.
Es lässt sich aber alles Wichtige erkennen. :wink:
I2C-KS0108_CS3.jpg


Die Ansteuerung vom Programm-AVR aus ist natürlich mit der in Beitrag #1 beschriebenen Variante identisch! :cool:


Grüße,
Cassio
 
Hallo!

Damit man bei der Auswahl des Displays nicht an den KS0108-Typ gebunden ist,
habe ich ein weiteres Programm für SED-Display`s erstellt.

Er sollten also alle Display`s damit funktionieren, die mit der "SEDGLCD.lib" arbeiten (BASCOM) und eine Auflösung 128x64 Pixel haben.
Ein altbekannter Kandidat dafür ist z.B. das Optrex F-51320, mit dem ich mein Programm auch getestet habe.


Hier nun wieder der Anschlussplan:
TWI_I2C_M8_SED-GLCD.gif


und natürlich wieder das Programm für den Mega8 und Mega8A:
Anhang anzeigen I2C_M8_SED-GLCD.zip


Die Ansteuerung vom Programm-AVR aus ist mit der für die KS0108-Displays identisch.... siehe Beitrag #1 !


Jetzt noch ein Foto vom funktionierenden Display:
I2C_SED-Display.jpg


Grüße,
Cassio
 
Hallo!

Kommen wir zum vorläufig letzten Displaytyp, den ich vorbereitet habe.

Es geht um den altbekannten T6963C Controller!
Der eigentliche Vorteil des GLCD-Controllers lag immer darin, dass er selbst einen Fontsatz bereithält.
So war die Ansteuerung mit Textzeilen bei diesem Typ immer sehr einfach.
Obendrein bot es eine Möglichkeit der Schriftweiten-Umschaltung zwischen 6x8 und 8x8 Pixel.

Aus diesem Grunde entfällt jetzt auch die Font-Auswahl, wie bei den anderen Displaytypen.
Die Font ist nun fest auf 6x8 Pixel eingestellt und bei meinem 240x64 Pixel Display passen damit maximal 40 Zeichen in 8 Zeilen.... also 320 Zeichen auf den Screen.


Wie eben schon erwähnt, ist die Ansteuerung leicht geändert.
Es entfällt aber nur die Fontauswahl, hinter dem String.
Die Anweisung sieht dann so aus:
Code:
Lcd_ 6 , 32 , "Cassio AVR-Praxis.de"

Außerdem muss man die Einstellungen im Programm der neuen Zeichenanzahl anpassen.


Im Programmkopf kommt dann also folgendes:
Neue Version vom 16.06.12:
Code:
Declare Sub Lcd_(byval Zeile As Byte , Byval Charakter As Byte , Byval Text1 As String * 40)
Declare Sub Lcd_cls
Dim Text As String * 40
Dim Chr_text(41) As Byte At Text Overlay
Dim Twi_send(43) As Byte
'*********************
Const M8_slave = &H7E
'*********************
Dim I1 As Byte
Dim I2 As Byt


und an das Programmende kommen dann noch die Subroutinen selbst:
Neue Version vom 16.06.12:
Code:
' #############################################################################
Sub Lcd_(byval Zeile As Byte , Byval Charakter As Byte , Byval Text1 As String * 40)

I2 = 0
Text = Text1

Twi_send(1) = Zeile
Twi_send(2) = Charakter
Twi_send(43) = &H00

For I1 = 3 To 42
   Incr I2
   Twi_send(i1) = Chr_text(i2)
Next I1

Gosub Twi_senden

End Sub


' #############################################################################
Sub Lcd_cls

Twi_send(1) = &HFF
Gosub Twi_senden

End Sub


' #############################################################################
Twi_senden:
I2csend M8_slave , Twi_send(1) , 43
Return


Nun noch der Anschlussplan:
TWI_I2C_M8_T6963C-GLCD.gif

und das Programm, wieder für den Mega8 und den Mega8A:
Neue Version vom 16.06.12: Anhang anzeigen I2C_M8_T6963C_GLCD_v2.zip

Dafür gibt es jetzt auch gleich ein Bild vom funktionierenden Display dazu:
I2C_T6963C.jpg



Das war es dann erst mal mit den Beiträgen.....

Grüße,
Cassio
 
Hallo!

Ich hatte im Programm für das T6963C-Display einen kleinen Fehler entdeckt, als ich heute den Testaufbau noch einmal in Betrieb genommen hatte, um noch ein Foto zu erstellen.

Der Fehler hätte ein Volllaufen des Speichers verursacht und darum habe ich das auch sofort geändert.
Die anderen Programme sind davon aber nicht betroffen!


Es gibt in den Programmen für das SED- und KS0108-Display nur einen kleinen "optischen" Fehler.....
Zu Beginn wird immer die Meldung "8x16 LCD" angezeigt, was natürlich nicht immer richtig ist. :wink:

Vielleicht ändere ich das aber in den nächsten Tagen noch mal,
weil mich auch so ein "Schönheitsfehler" irgendwie stört. :cool:


Grüße,
Cassio
 
Hey und Hallo
Auch wenn dieses Thema schon lange zurück liegt,
ich habe Deine Beiträge gelesen, gefällt mir gut :)
Was mich interessiert, geht das auch für ein 240x128 GLCD mit t6963C ?
für eine Antwort wäre ich Dankbar.
 
Eigentlich ist das eine wunderbare Sache. Leider Basic und ich arbeite mit C.
Hat jemand sowas vielleicht schom in C gemacht?
achim
 
Was mich interessiert, geht das auch für ein 240x128 GLCD mit t6963C ?
für eine Antwort wäre ich Dankbar.

Hallo Hirschi! :ciao:

Sorry, dass ich erst soooo spät antworte, aber der Zeitfaktor für AVR & Co ist bei mir momentan sehr knapp bemessen.

Wie du ja lesen kannst, sind die Beiträge schon etwas älter und ich müsste mich erst mal wieder reindenken......
Generell würde ich aber sagen, dass du mit der Ansteuerung des Displays keine Probleme bekommen solltest.
Einzig für die andere Auflösung müsste ich ggf. einige Anpassungen vornehmen. :hmmmm:

Ich schaue mir das mal an und melde mich dann wieder......
falls es dich noch interessieren sollte. ;)


Grüße,
Cassio
 
Hallo Hirschi!

Es hat mir ja keine Ruhe gelassen, also habe ich eben noch mal schnell nachgeschaut.... ;)

Wenn ich mich nicht getäuscht habe, dann gibt es keine Zeilenbegrenzung in meiner Ausführung zur Ansteuerung.
Daher sollte dein 240*128 Display auch problemlos funktionieren.

Du kommst damit auf 40 Zeichen in 16 Zeilen (6*8 Font)........ also 640 Zeichen auf dem Display.

Probiere es doch einfach mal aus mit:


CodeBox BascomAVR
Lcd_ 1, 1, "Erste Zeile"
Lcd_ 8, 1, "Achte Zeile"
Lcd_ 9, 1, "Neunte Zeile"
Lcd_ 16, 1, "Sechzehnte Zeile"


Grüße,
Cassio
 
hey Cassio
hat zwar lange gedauert, aber ich bin noch dabei.
Hab das mal ausprobiert. Super!!
Da ja nicht die Quelldaten vorlagen, hab ich das ganze dann noch ein bisschen anders gemacht. Größeren Prozessor
und mehr Speicher. also warum nicht einen 1284 nehmen. habe da auch Demos mit eingebaut.
mit SPI und Serial TTL probiert. der beste versuch war das mit dem SPI. Sehr schnelle Darstellungen. 20Mhz
Schnell Datenverarbeitung. Nur die Datenausgabe musste ich drosseln, Für das Display zu schnell.
Also Danke für die hervorragende Inspiration.

Lg Hirschi3
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)