Bascom DFRobot I2C/TWI LCD für Arduino

WerWolf

Mitglied
30. Dez. 2009
67
0
6
Heidenheim
Moin Moin,

habt ihr schon mal versucht, das DFRobot I2C/TWI LCD 1602 für Arduino unter Bascom zum Laufen zu bekommen?

Die Dinger sind eigentlich für den Arduino gedacht, könnten doch aber unter Bascom evtl. auch funktionieren?
 
Hallo Wolf,

das sieht stark nach sowas aus ...
16x4 LCD am I2C-BUS mit einem E-Pin (ASM & Bascom)
weiterhin Ungeklärt: Problem, 27x4 LCD via PCF8574 und I2C ansteuern
da hat Cassio schonmal etwas mit LCD und I2C gebastelt.
Wenn die da keinen extra Controller für I2C draufgebaut haben sondern nur den
PCF8574 Portexpander dann ist das relativ identisch.

Leider habe ich trotz "OpenSource" und so von dem Display keinen Schaltplan gefunden. So "Open"
scheint das Display dann wohl doch nicht zu sein :p

Gruß
Dino
 
Hallo Dino,

ich hatte erst die Hoffnung, dass das Ding alles anzeigt, was auf dem I2C-Bus ausgegeben wird. Es ist aber leider wirklich nur so ein Portexpander drauf. :(
Auf dem Display habe ich keine Bezeichnung erkennen können. Die Chips sind nur so schwarze Klekse. Einen Schaltplan habe ich auch nicht finden können. Es waren auch keinerlei Unterlagen dabei. :confused:

Wenn Cassio mit so was schon so kämpfen musste, schwant mir böses. :pcguru:
 
Hallo,

Wenn Cassio mit so was schon so kämpfen musste, schwant mir böses. :pcguru:
Naja... es läuft ja eigentlich. Nur das eine Display hat rumgezickt.

Ich tippe mal das unter den "Klecksen" ein HD44780-kompatibler LCD-Controller
schlummert. Also absoluter Standard.

Gruß
Dino
 
Wenn Cassio mit so was schon so kämpfen musste, schwant mir böses. :pcguru:


Hallo Wolf!

Zum Einen... wenn ICH mal kämpfen muss bedeutet das noch gar nichts :wink: und zum Anderen....
war das ja nur bei dem 4x27 LCD von Pollin der Fall.

Ein 2x16 und ein 4x16 (beide mit nur einer E Leitung) laufen problemlos unter BASCOM mit dem Port-Expander! :D


Die Typenbezeichnung des TWI-IC`s auf dem Modul wäre mal interessant.
Ein PCF8574(A) kann es eigentlich nicht sein.... die haben 40h und 70h als TWI-Standard-Adresse.
Bei dem LCD-Modul wird aber 27h als Adresse angegeben.... :stupido2:
Binär wäre das also: 100111
Die ersten drei Bits sind alle High, was mir ein wenig seltsam vorkommt. :hmmmm:
Bit-0 ist normalerweise immer das R/W Bit. Dies steht nur auf 1 , wenn der Lesemodus aktiv sein soll.
Bit-1 und Bit-2 können manuell auf 1 gelegt sein, weil man eine bestimmte Adresse vorgeben wollte.

Wie schon angedeutet.....
Wenn man den Typ kennt und das Datenblatt mal durchgesehen hat, dann könnte man dazu vielleicht auch mehr sagen. :wink:


Bevor du dich aber unnötig ärgerst und gern ein LCD via TWI (I2C) verwenden möchtest......
wie wäre es denn mit DIESEM MODUL von Pollin.
Die Einheit arbeitet garantiert mit BASCOM (und der LIB von Kent Andersson) zusammen und....
du könntest dir zum Beispiel DIESES DISPLAY gleich mitbestellen.

Die Kombination funktioniert dann auf alle Fälle....
incl. den Beispielcodes von mir zu dem Thema! :wink:

Pollin selbst hat das Modul aber auch gleich für ein 2x16LCD layoutet.
Das kannst du dann sogar direkt draufstecken.
GB810145.JPG



Grüße,
Cassio
 
Hallo,

dazu ist mir grade noch was eingefallen ...
Die Typenbezeichnung des TWI-IC`s auf dem Modul wäre mal interessant.
Ein PCF8574(A) kann es eigentlich nicht sein.... die haben 40h und 70h als TWI-Standard-Adresse.
Bei dem LCD-Modul wird aber 27h als Adresse angegeben.... :stupido2:
Binär wäre das also: 100111
Die ersten drei Bits sind alle High, was mir ein wenig seltsam vorkommt. :hmmmm:
Bit-0 ist normalerweise immer das R/W Bit. Dies steht nur auf 1 , wenn der Lesemodus aktiv sein soll.
Bit-1 und Bit-2 können manuell auf 1 gelegt sein, weil man eine bestimmte Adresse vorgeben wollte.
manchmal wird die I2C-Adresse auch ohne das R/W-Bit angegeben. Also bei 27h ist
das ja ... 00100111 ... mit hintergesetztem RW wäre es dann ... 01001110 oder
01001111 . Und schon hat man die Adressen 4Eh und 4Fh.
Das würde dann zu einem PCF8574 passen bei dem A0-2 auf High sind ...
0100 A2 A1 A0 RW ... :p ;) :cool:

Gruß
Dino
 
manchmal wird die I2C-Adresse auch ohne das R/W-Bit angegeben. Also bei 27h ist
das ja ... 00100111 ... mit hintergesetztem RW wäre es dann ... 01001110 oder
01001111 . Und schon hat man die Adressen 4Eh und 4Fh.

Hi Dino!

Wie jetzt?

Wenn die Standardadresse diese ist:
b&01001110...... also h&4E
dann ist es 4Eh und nicht 27h. :hmmmm:

Wozu soll die Angabe 27h denn dann gut sein?
Außerdem wird die 27h in dem C-Beispielcode verwendet... und nicht 4Eh. :wink:

Grüße,
Cassio
 
Hi,

Wenn die Standardadresse diese ist:
b&01001110...... also h&4E
dann ist es 4Eh und nicht 27h. :hmmmm:
Sei doch mal ein wenig flexibel ;)
Es kann doch sein das die I2C-Bibliothek die die Adresse übergeben bekommt nur
7Bit benötigt und dann das RW-Bit selber dahinter packt. Je nachdem ob man
lesen oder schreiben will. Ich hab das meiner Meinung nach auch schon mal im
Internet und ich glaube sogar bei Datenblättern gesehen.

Wozu soll die Angabe 27h denn dann gut sein?
Außerdem wird die 27h in dem C-Beispielcode verwendet... und nicht 4Eh. :wink:
27h wäre dann eine Adresse die vom RW-Bit bereinigt wurde. Man muß also nur
die Bits um eine Stelle nach links verschieben und an Position Bit0 das RW-Bit je
nach gewünschter Operation (Lesen/Schreiben) einsetzen.

Gruß
Dino
 
Hallo Cassio,

vielen Dank für deine ausführliche Antwort! :D
Das kommt mir gleich mal auf die nächste Pollin-Bestell-Liste. Nur habe ich dummerweise schon zwei von den DFRobot-LCD's hier. :mad: Ich habe beim Händler direkt in China nach weiteren Infos über das Modul nachgefragt, bisher aber leider noch keine Antwort bekommen.

Auf der LCD-Platine steht die Bezeichnung "1602A V1.0". Laut Tante Google ist das wohl die Bezeichnung, der beim Arduino verwendeten Displays. Und die scheinen alle den HD44780 zu verwenden. Somit hat unser Dino hier wieder richtig gelegen. :)

Auf dem Chip der I2C-Platine steht PCA8574. Da drunter steht "R888301", "TnD10" und "46-", sofern ich das mit der Lupe richtig entziffern konnte.

Es gibt über diesen PCA8574 auch ein Datenblatt zum Download. Es ist zwar auf Englisch und nicht Chinesisch, wobei das bei mir keinen großen Unterschied macht. :stoned:
In diesem Datenblatt steht auch eine Tabelle mit "Address 27h". Was auch immer die damit meinen ... :stupido2:

So, ich werde mich jetzt mal in die Falle verziehen, bevor ich noch vor dem PC einschlafe. Euch noch einen schönen Abend und eine gute Nacht. :goodnight:
 
Hallo Wolf!

Ich habe mir das Datenblatt eben mal angesehen.....
Es ist eigentlich egal, ob du den PCF8574 oder PCA8574 verwendest.

Wenn die schreiben, dass die Adresse 27h sein soll, dann musst du das R/W Bit noch hinzurfechnen.
Damit ergibt sich dann 4Eh !
Ansonsten sollte es genauso funktionieren.

Probiere es doch einfach mal mit meinem TESTCODE aus..... nur das du in deinem Prorgamm dann:
'I2C-Adresse des PCA8574
Const Pcf8574_lcd = &H4E
angeben musst. :wink:


Grüße,
Cassio
 
Hallo Wolf,

Auf der LCD-Platine steht die Bezeichnung "1602A V1.0". Laut Tante Google ist das wohl die Bezeichnung, der beim Arduino verwendeten Displays. Und die scheinen alle den HD44780 zu verwenden. Somit hat unser Dino hier wieder richtig gelegen. :)
Die Bezeichnung 1602A erinnert mich an meine LCDs von Pollin. Die sind von
Powertip und heißen auch 1602 aber PC1602-E . Mit ner anderen Endung kommt dann
bei dir PC1602-A bei raus ...
Anhang anzeigen PC1602-E_Powertip.pdf
Anhang anzeigen PC1602-J_Powertip.pdf
ich hab auch noch ein Datenblatt vom PC1602-F . Das ist aber mit 1,4MB etwas zu
groß zum Upload. Da sind alle Ansteueroptionen mit drin. Eigentlich kompatibel mit
dem HD44780-Controller. Nur wieder ein etwas anderes Gehäuse. Der Controller ist
bei allen der ST7066U. Je nach Endung ist das LCD mit oder ohne Backlight, mit anderen
Schriftgrößen, anders angeordneten Anschlüssen, ... usw.

Auf dem Chip der I2C-Platine steht PCA8574. Da drunter steht "R888301", "TnD10" und "46-", sofern ich das mit der Lupe richtig entziffern konnte.

Es gibt über diesen PCA8574 auch ein Datenblatt zum Download. Es ist zwar auf Englisch und nicht Chinesisch, wobei das bei mir keinen großen Unterschied macht. :stoned:
In diesem Datenblatt steht auch eine Tabelle mit "Address 27h". Was auch immer die damit meinen ... :stupido2:
hier bekommt man auch ohne Google ne Menge Datenblätter ..
http://www.datasheetarchive.com/
und hier auch ...
http://www.datasheetcatalog.com/
Anhang anzeigen PCA8574_8Bit-PortExpander.pdf
Auf Seite 6 (7.1 und 7.1.1) kann man meine Annahme bestätigt sehen ;)
A0..6 sind die Adresse und RW ist sozusagen als A-minus-1 rechts angesetzt.
Es sind also PCF8574 von einem anderen Hersteller. Nicht von Philips mit PCFxxxx
sondern von NXP mit PCAxxxx. Ich habs jetzt nicht überprüft, aber ich glaube die
werden sogar Pinkompatibelsein. Wenn die I2C-Adressen schon identisch sind :rolleyes:

So ... jetzt sollte es aber alles klar sein. Und nach ner Nacht drüber schlafen sieht
morgen alles viel besser aus ;)

Gruß
Dino
 
Hallo ihr beiden,

besten Dank für eure Hilfe! :D
Mit der Adresse"&H4E" reagiert das Display schon mal. Die Beleuchtung geht nach Lust und Laune aus und an und es erscheinen "Klingonische-Zeichen", die sich wiederholen. Ich versuche mal ein Bild anzuhängen. Die Qualität ist aber extrem schlecht, da das Display sehr kamerascheu ist. :eek:
CIMG0153.JPG

Ich habe deinen Code wie folgt abgeändert:
Code:
$regfile = "m1280def.dat"                                   ' used micro
$crystal = 16000000                                         ' used xtal
$baud = 19200                                               ' baud rate we want
'-------------------------------------------------------------------------------


 Config Scl = Portd.0                                       'I2C SCL Pin
 Config Sda = Portd.1                                       'I2C SDA Pin

 Config I2cdelay = 1
I2cinit

' I2C LCD (Kent Andersson)-----------------------------------
$lib "Lcd_i2c.lib"                                          'LIB für I2C-LCD

Const Pcf8574_lcd = &H4E                                    'I2C-Adresse des PCF8574A

 ' _lcd_e Variable für E + E2
Dim _lcd_e As Byte
_lcd_e = 128                                                ' E-Pin aktiv
' 128 für E-Pin
' 64 für E2-Pin
' 192 für E + E2 aktiv

' Anfangswerte:
Initlcd
Cls

Locate 1 , 1 'erste Zeile
Lcd "1234567890123456"


Do

Locate 1 , 1 'erste Zeile
Lcd "Test"

'Locate 2 , 1
'Lcd "Test 2"

Loop

Wenn ich "bei _lcd_e" 128, 64 oder 192 eintrage, bleibt die Darstellung immer Klingonisch. Das Ding mag wohl unsere Sprache nicht. :confused:
 
Hallo Wolf!

Theoretisch sollte es ja funktionieren.
Tja und das die Hardware unsere "Sprache" nicht mag glaube ich da weniger. :wink:

Als erstes würde ich ein paar Pausen einbauen!
Du befeuerst das Display mit deinem Beispielcode auch sehr schnell mit neuen Daten.
Dies mögen die Display`s mit I2C-Schnittstelle scheinbar nicht so gerne.
Bei einigen Versuchen habe ich festgestelt, dass mindestens eine Pause von 250ms erfolgen sollte, damit es später in Betrieb nicht zu Problemen kommt.

Zum Test würde ich also nach jeder neuen Anzeige mal ein "WAIT 1" einbauen.


Du kannst aber zur Probe auch mal den I2C-BUS etwas langsamer einstellen...
I2cdelay = 5
oder auch....
I2cdelay = 10


Obendrein solltest du auch die "i2c_twi.lbx" einbinden... da du ja sowieso die Hardwarepins für den TWI-BUS verwendest.

Grüße,
Cassio
 
Hallo Cassio,

besten Dank für deine Tipps. :)
Durch das "WAIT 1" wird aus dem Display ein schönes blaues Blitzlicht, dass im Sekundentakt aufblitzt. Es scheint auch ein Cursor von rechts nach links zu wandern, leider werden aber keine Buchstaben angezeigt.

Sobald ich die "i2c_twi.lbx" einbinde, geht die Displaybeleuchtung aus. Es scheint aber auch nichts angezeigt zu werden.
 
Hallo Wolf!

Ach so... die haben die Hintergrundbeleuchtung schaltbar gemacht.

Die Beleuchtung wird bestimmt durch den freien E2-Pin gesteuert.
Aus dem Grunde solltest auch du nur "_lcd_e = 128" zur Zeichenausgabe verwenden!

Schau auch noch mal HIER und in den folgenden Beitrag!

Wenn das mit dem E2-Pin so sein sollte, dann muss das "Blaulicht" aufhören zu blinken.

Gibt es zu dem Modul auch einen Schaltplan, den man hier einstellen kann (darf)?
Apropos Schaltplan.....
Hast du mal einen Schaltplan gezeichnet, der alle Komponenten anzeigt?

Grüße,
Cassio
 
Hallo Cassio,

wenn ich deine modifizierte Version der Lib einsetzen möchte, läuft der Compiler auf einen Fehler.
"_lcd_e = 128" habe ich eingetragen, es ändert aber nichts am Verhalten.

Nach einen Schaltplan habe ich den Händler schon gefragt, aber bisher noch nichts bekommen. :(
Sind bestimmt chinesische Betriebsgeheimnisse. :stupido2:

Ich habe jetzt die Arduino Entwicklungsumgebung installiert und das Display mal damit ausprobiert. Das Display funktioniert damit. Das bedeutet auch, dass ich es sogar richtig angeschlossen habe. :rolleyes:

Angeschlossen habe ich es an einem Arduino-Mega-1280 an SDA (20) und SCL (21).
 
wenn ich deine modifizierte Version der Lib einsetzen möchte, läuft der Compiler auf einen Fehler.


Hallo Wolf!

Was für einen Fehler bekommst du denn?

Versuch doch mal die "twi_i2c.lbx" wieder heraus zunehmen (einfach kommentieren), wenn du die modifizierte LIB verwendest.

Ich habe auch hin und wieder mal Probleme damit gehabt. :wink:


Wenn das Display sonst am Arduino funktioniert will ich mal nicht hoffen, dass das Display ein etwas anderes INIT benötigt.
Dann wird es natürlich problematisch.

Grüße,
Cassio
 
Hallo Wolf!

Was ich eben mal beim Stöbern entdeckt habe.....

In einer "readme.txt" steht:
This is a C++ library for Arduino for controlling an HD74800-compatible LCD in 4-bit mode.


In einer anderen Datei ist dagegen aber wieder dieser Satz zu lesen:
An arduino library for comms with HD44780-compatible LCD, in 4-bit mode (saves pins)


Ich blick da net durch.....

Grüße,
Cassio
 
Hallo Cassio,

vielen herzlichen Dank für deine Bemühungen! :)
Ich würde vorschlagen, das Projekt auf Eis zu legen. Diese Displays scheinen wohl nicht so ganz Bascom-tauglich zu sein.
Nachdem ich mir einige Arduino-Platinen und diese Displays gekauft hatte, um diese unter Bascom zu verwenden, scheint mir die Idee nicht mehr ganz so gut zu sein.
Aber, da das Ganze mit der Arduino-Entwicklungsumgebung problemlos läuft, werde ich mir diese mal näher anschauen. Ich hoffe, dass ich mich mit dieser C-ähnlichen Sprache anfreunden kann. Ein Buch für Einsteiger habe ich mir gerade bestellt. :)

Den zweiten Arduino-Mega, dessen Bootloader mir Bascom überschrieben hatte, lies sich problemlos mit der Arduino-Entwicklungsumgebung und dem AVRISP mkII reparieren.

Fällt dir was auf? Ich habe oben schon zwei mal "problemlos" geschrieben. Ja, ich habe tatsächlich mal was ohne eure Hilfe hinbekommen. :D
Ist mir ja schon peinlich, immer euch fragen zu müssen. Mal schaun, ob es mit der Arduino-Entwicklungsumgebung einfacher wird.
 
Hallo Wolf,

Mal schaun, ob es mit der Arduino-Entwicklungsumgebung einfacher wird.
das sollte wohl so sein. Da das Arduino-Projekt wohl für Künstler, Designer, ...
entwickelt wurde - also eigentlich Leuten von denen man ausgeht das sie in einer
etwas anderen Denkweise arbeiten - sollte der Einstieg für einen Techniker umso
leichter sein ;)

Die Entwicklungsumgebung beruht auf Processing (einem Java-Dialekt) und Wiring (einem C-Dialekt), die insbesondere Künstlern, Designern, Hobbyisten und anderen Interessierten den Zugang zur Programmierung und zu Mikrocontrollern erleichtern soll.
...
Arduino wird intensiv an Kunsthochschulen genutzt, um interaktive Installationen aufzubauen.
Wikipedia: Arduino-Plattform

Gruß
Dino
 

Ü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)