I2c LC-Display ansteuern *erledigt*

Der chaotische Hauptfaden

Moderatoren: Sven, Heaterman, TDI, Finger

I2c LC-Display ansteuern *erledigt*

Beitragvon Burga » Di 13. Aug 2013, 02:45

Hossa,

bin gerade dabei ein LC-Modul mit i2c Schnittstelle mit einem Atmega8 zu verheiraten. Dummerweise gibt´s in Bascom keine passende lib also muss ich mir selbst eine schreiben.
Der i2c IC ist ein Portexpander und hört auf den Namen PCF8574T.

Und hier meine Frage: Muss ich nach jedem abgesetzten Byte ein "Enable" triggern und vorallem muss das Enable Byte dann auch die vorher übertragenen Bits wieder beinhalten? Ich meine theoretisch sollten ja alle Pins gleichzeitig geschaltet werden.

Bitte helft mir mein Kopf raucht schon vom Nibbles drehen
Zuletzt geändert von Burga am Di 13. Aug 2013, 17:05, insgesamt 1-mal geändert.
Burga
 
Beiträge: 85
Registriert: Di 13. Aug 2013, 02:43
Wohnort: Odenthal

Re: I2c LC-Display ansteuern

Beitragvon Heaterman » Di 13. Aug 2013, 03:08

Das Schreiben auf den PCF8574 besteht doch eigentlich nur aus:

Code: Alles auswählen
I2start
I2cwbyte Pcf8547_schreib_adresse
I2cwbyte &Bxxxxxxxxx
I2cstop


Es gibt für I2C-LCD bei MSC eine App-Note: 118 mit einer I2C-LCD-Lib: LCD.i2c.lib
Benutzeravatar
Heaterman
 
Beiträge: 2689
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: I2c LC-Display ansteuern

Beitragvon Burga » Di 13. Aug 2013, 03:28

Danke für die schnelle Antwort Heaterman.

Die Appnote habe ich gelesen und ausprobiert. Funzt aber leider nicht da mein Display anders an den Portexpander angeschlossen ist.
(Gibt auch eine Version der Library in der man die Belegng anpassen kann, funzt aber ebenso nicht.)

Es geht um den Enable-Pin auf der Display Seite, der mit einem Pin des Port Expanders verbunden ist. Dieser taucht ja in dem Datenbyte auf welches ich an den Expander schicke.

Bei einem direkt verdrahtetem Display würd ich etwas in dieser Art machen :

Code: Alles auswählen
'8-Bit mode
config Porta =output
config Portb=output
' Angenohmen Portb.0 wäre die Enableleitung
<-- Display init spar ich mir-->
Dim i as integer
dim welteroberungsstring as string *10

welteroberungsstring="Hallo Welt"
for i = 1 to 10
  porta=mid(welteroberungsstring, i, 1) 'Ein Zeichen des Strings ausgeben
  set Portb.0 'enable setzen
  nop:nop:nop ' drei Zyklen warten
  reset Portb.0 ' enable löschen
next


Bei I2c über den Portexpander schicke ich aber das enable Flag zusammen mit den Daten im selben Byte, daher stellt sich mir die Frage ob ich die Daten nochmal extra in das Byte packen muss. Vielleicht denk ich hier auch zu wirr
Burga
 
Beiträge: 85
Registriert: Di 13. Aug 2013, 02:43
Wohnort: Odenthal

Re: I2c LC-Display ansteuern

Beitragvon flogerass » Di 13. Aug 2013, 09:05

Hab ich das richtig verstanden, dass das ein Display im 4bit mode ist, das parallel an einem i2c=>parallel-Wandler hängt?
Dann musst du immer den kompletten neuen Zustand übertragen:
Daten => Daten mit Enable => 00
Benutzeravatar
flogerass
 
Beiträge: 1145
Registriert: Mo 12. Aug 2013, 17:46
Wohnort: Nord-Östlich von Ulm

Re: I2c LC-Display ansteuern

Beitragvon Burga » Di 13. Aug 2013, 09:37

Ja hast Du richtig verstanden, I2C-Portexpander-4Bit-Display
Mein Problem hat sich mehr oder minder gerade von selbst gelöst. Gut das mit dem Enable zu wissen, es gibt ja durchaus weitere IC die eine Enable Leitung haben und die man darüber ansteuern möchte.

Was ist passiert und wie schaut die Lösung aus :

Ich wollte ursprünglich das LCD erstmal nur per i2c ansprechen, um überhaupt erstmal zu sehen ob es funktioniert, darauf zielte meine Frage.
Da ich so schnell keine Antwort erwartet habe, war ja mitten in der Nacht, hab ich mir die LCD Routinen von Bascom angeschaut und darüber das Display initialisiert, die paar Bits konnte ich ja auch einmal statisch umsortieren. Bei der nachfolgenden Testausgabe habe ich dann festgestellt das jeweils das Low und High nibble der Daten vertauscht wurden und nach einer Möglichkeit gesucht mich in die Ausgaberoutine zu klinken und diese dann einfach per SWAP-Befehl zu tauschen und siehe da: In der neuen Bascomversion gibt es die beiden Compilerdirektiven "$lcdputdata=label" und "$lcdputdata=label" die einem vor dem Senden am R24 Register rumspielen lassen(enthält das zu sendende Byte).

Vielen Dank!
Burga
 
Beiträge: 85
Registriert: Di 13. Aug 2013, 02:43
Wohnort: Odenthal


Zurück zu Allgemeine Diskussion

Wer ist online?

Mitglieder in diesem Forum: Daffid, Google [Bot], inse, Marsupilami72, MichelH, nero, scotty-utb, space24, Sr.Gallinger, sub, the_placebo und 26 Gäste

span