Bascom DFRobot I2C/TWI LCD für Arduino

Hallo Wolf,

die haben die Beschaltung gegenüber der Lib von Cassio am PCF8574 anders.

;define a constant named PCF8574_LCD pointing to the i2c address
;dimension _lcd_e as byte to control the E-lines (4 lines LCD:s)
;_lcd_e should have one of the following values
;128 to enable E1, 64 to enable E2, 192 to enable both E1 and E2 (cls, deflcdchar)
;Connect the following pins from PCF8574 to LCD
;
;P0 - D4
;P1 - D5
;P2 - D6
;P3 - D7
;P4 - RS
;P5 - RW (not used, set to 0 to ground for write)
;P6 - E2 (on 1 or 2 line display nc)
;P7 - E1

Bei Arduino:
P0 - RS
P1 - RW
P2 - E
P3 - BT (Backlight)
P4 - D4
P5 - D5
P6 - D6
P7 - D7

Mit der anderen Beschaltung läuft also die Lib von Cassio stumpf vor die Wand.

Wenn man die Pins verändert oder die Lib, dann sollte es aber auch funktionieren.
Eins von beiden muß man also anfassen.

Gruß
Dino
 
Hallo Wolf!

Da hat der Dino schon geschaut und völlig recht!
Die "Kent Andersson-LIB" für den PCF8574 verwendet andere Pins für die Steuerung und die Datenbits!
Darum kann da natürlich auch nur Unsinn bei rauskommen. :wink:
An deiner Stelle würde ich versuchen die LIB anzupassen, bevor du die schöne Platine zerlegst.

Bin im übrigen ziemlich überrascht, dass du tatsächlich den Anschlussplan vom Chinamann bekommen hast.
Na ja OK... mit ein wenig Konzentration kann man die paar Pins sonst auch durchklingeln. :wink:

Dann wissen wir ja nun wo der Hase im Pfeffer liegt.
Mit der Info sollte es dann doch zu machen sein.

Gutes Gelingen,
Cassio
 
Hallo,

Die "Kent Andersson-LIB" für den PCF8574 verwendet andere Pins für die Steuerung und die Datenbits!
...
An deiner Stelle würde ich versuchen die LIB anzupassen, bevor du die schöne Platine zerlegst.
sehe ich auch so ;)

Ich versuche grade durch die Lib von Kent Andersson durchzublicken. Anfang habe ich
schon gemacht. ... Mal sehen :rolleyes: Da es meine erste BASCOM-Lib ist muß ich
da noch ein wenig in die Materie reinkommen. Assembler ist ja nicht das Thema ;)
Hab ich heute abend einfach mal "Bock drauf" gehabt :cool:

Gruß
Dino
 
Hallo Dino!

Du kannst dir erst mal die Arbeit sparen....
Ich habe sie schon umgestellt. :D

Wolf kann es damit ja mal probieren.
Sollte es dann nicht gehen, musst du als echter ASM`ler noch mal ran. :wink:


Ach so....
Ich möchte die LIB hier nicht veröffentlichen weil ich nicht weiß, ob ich das darf.
Aus dem Grunde werde ich "Wolf" bei Interesse die geänderte ARDUINO-LIB "persönlich" übermitteln.

Schade, dass ich es mangels Hardware nicht selber testen kann.


Kurz zu "meiner" LIB:
Du musst dann in BASCOM eine Constante "pca8574_lcd" mit der I2C-Adresse (&H4E in deinem Fall) angeben.
Dann wie vorher auch die Variable "_lcd_e" als Byte dimensionieren.
Der Wert "8" ist dann für E1,
der Wert "4" für E2 und
der Wert "12" für beide E-Leitungen.


Wie aber schon geschrieben, bei Interesse schreib mir bitte eine PN!

Grüße,
Cassio
 
Aus dem Grunde werde ich "Wolf" bei Interesse die geänderte ARDUINO-LIB "persönlich" übermitteln.


Hallo Wolf!

Solltest du die LIB einmal ausprobieren wollen, dann melde dich bitte hier im Forum!


Da ich einige Tage nicht online sein werde, kann Dino dir aber weiterhelfen! :wink:

Grüße,
Cassio
 
Hallo ihr beiden,

jetzt habe ich wohl euren Forscherdrang geweckt. :D
Ich würde sehr gerne die geänderte Lib testen. Ich war nur gestern abend zu Müde :sleep:, um den PC einzuschalten, daher habe ich eure Antworten erst heute gesehen.

PN geht gleich raus.

Der Chinese ist sehr nett. Ich habe gestern mittag noch einige Arduino-Teile (auch noch ein paar Displays) bei ihm bestellt. Laut Tracking kommen die heute schon an. Er beantwortet Fragen sehr schnell und kann auch recht gut deutsch.
Ich vermute fast, dass die die Teile selber herstellen und direkt verkaufen.
 
Hallo ihr beiden,

besten Dank für die angepasste Lib! :)
Das scheint der Sache schon recht nahe zu kommen.

Es war auf dem Display der gewünschte Text "1234" zu sehen, aber die Hintergrundbeleuchtung blitzt nur kurz auf und bleibt dann aus.

Das Ändern von "_lcd_e" auf 8,4 oder 12 bewirkt hier keine Änderung.

Wenn ich in der Hauptschleife den Text ändere, blitzt kurz die Beleuchtung auf und geht dann auch wieder aus.

Ich habe dann den darzustellenden Text von "1234" auf "1234 - Test" geändert und hier bekann das Chaos:
Das Display wollte nichts mehr anzeigen. :stupido2:
Reset und vom Strom nehmen hat nichts geholfen.
Mit der Arduino-Software überschreiben -> Error :fie:
Arduino-Bootloader neu schreiben -> ging
Mit der Arduino-Software überschreiben -> Error :hmpf:
Rechner durchstarten
Mit der Arduino-Software überschreiben -> Ok
Display zeigt aber immer noch nichts an -> ARGH! :shout:
Nochmals Reset am Board drücken -> Es lebt wieder :angel:

Das Ding scheint einen Ich-nerv-jetzt-den-Wolf-Zufallsgenerator eingebaut zu haben.
 
Hallo Wolf,

Es war auf dem Display der gewünschte Text "1234" zu sehen, aber die Hintergrundbeleuchtung blitzt nur kurz auf und bleibt dann aus.

Das Ändern von "_lcd_e" auf 8,4 oder 12 bewirkt hier keine Änderung.

Wenn ich in der Hauptschleife den Text ändere, blitzt kurz die Beleuchtung auf und geht dann auch wieder aus.
da hab ich letztens beim suchen nach der Lib was bei (ich glaube) mikrocontroller.net gefunden.
Da steht wie man die Lib verändern muß damit man das auch sauber steuern kann.

Gruß
Dino
 
Moin Dino,

das dürfte dieses Thema gewesen sein.
Assembler ist für mich wie Chinesisch. Ich versteh es nicht und es graut mir zu sehr, um es verstehen zu wollen. :fie:

Heute ist mein Arduino Buch gekommen. Jetzt gibts was zu lesen. :yes4:
 
Hallo Wolf!

Es freut mich, dass der erste Test ein bisschen erfolgreich gewesen ist! :wink:
Ich hatte extra die Standard-LIB als Basis genommen und noch nicht die Modifizierte für das Backlight.

Nach meiner heutigen Änderung sieht die LIB wie folgt aus:
Du benötigst im Programm....
Const = PCA8574_LCD
Dim _lcd_out As Byte


Die Variable "_lcd_out" ist für das Backlight... daher auch "out" für Ausgang. :wink:
Wenn du die Beleuchtung einschalten möchtest, dann musst du im Programm angeben:
_lcd_out = 4
möchtest du sie ausschalten, dann natürlich:
_lcd_out = 0


Die neue LIB nennt sich genauso wie die Alte und du bekommst sie an der selben Stelle. :wink:

Freue mich auf eine Rückmeldung.

Grüße,
Cassio
 
Hallo Cassio,

ich habe es jetzt mit der neuen Lib probiert. Es scheint aber verhext zu sein.
Das Ding will unter Bascom nicht funktionieren. Das Verhalten ist wie nach dem letzten Versuch. Es blitzt, zeigt aber nichts mehr an. :hmmmm:
 
Hallo Wolf!

Das ist ja schade....
Ist natürlich auch ein wenig schlecht für mich, weil ich die Hardware selber nicht habe.

Letztlich habe ich nur die Ausgabe der Pins in der LIB angepasst.
Vielleicht werden ja die LCD-Ausgaben in der Original-LIB noch angepasst. :hmmmm:

Um das aber irgendwie nachvollziehen zu können, müsste ich mir erst ein ähnliches Stück Hardware bauen.
Wozu ich aber momentan weder Zeit...... noch Lust habe. :wink:

Wenn mir noch eine Idee kommen sollte, dann melde ich mich hier wieder.

Grüße,
Cassio
 
Hallo Wolf!

Ich habe die letzte LIB jetzt noch mal ein klein wenig geändert........
Glaube zwar nicht dass es viel bringt, aber wer weiß das schon. :wink:


Wenn du den Versuch auch noch mal durchführen möchtest, dann melde dich kurz per PN bei mir.
Ich gebe dir dann die Info zur neuen LIB.

Grüße,
Cassio


EDIT:
Ich habe eben noch einen Fehler von mir entdeckt.......
Nun bin ich eigentlich guter Dinge, dass es funktionieren müsste. :cool:
PN habe ich schon an dich raus geschickt!
 
Hallo Cassio,

deine PN mit neuer Lib ist wohlbehalten angekommen. Besten Dank!
Die LCD-Beleuchtung funktioniert damit jetzt auch. :flowers:
Es zeigt auch Zahlen an. ... :yes4:

Und jetzt bitte alles werfbare weglegen und hinsitzen ...
.. jetzt kommt das ABER ... :vroam:
Es kann keine Buchstaben anzeigen, nur Zahlen. "1234" geht, bei "Test" zeigt es "4Uct" an. Da scheint der falsche Zeichensatz eingebaut zu sein.

Meistens wird alles nur in grauer Schrift und nicht in weiß dargestellt. So wie das Ding gerade Lust hat.

Auswahl der 2. Zeile klappt nicht.

In der Main Loop muß vor jede Ausgabe ein "Initlcd", sonst spinnt es und verschiebt den Inhalt immer weiter nach rechts.

Also ich befürchte, ohne so ein Display bei dir vor Ort, ist das eine Endlosbaustelle. Du musst ja immer nur raten und kannst nichts selber testen. Aber dafür hast du schon sehr gute Arbeit geleistet! :D
 
Hallo Wolf!

Nun ja... das ist ja schon mal ein Teilerfolg. :cool:

Wenn ich das richtig verstanden habe läuft es jetzt aber stabiler.
Die Beleuchtung arbeitet zuverlässig und Zahlen kann es auch darstellen.

Woher das Problem mit dem Zeichensatz und der zweiten Zeile kommt, will sich mir momentan nicht erschließen. :hmmmm:

Hast du die Bus-Geschwindigkeit weiterhin bei 100k, oder höher?
Ähnliche Probleme kenne ich nur, wenn die Taktrate zu hoch war.


Natürlich könnte ich schneller experimentieren, wenn ich die Hardware selber hätte......
aber so hat es auch Spaß gemacht. :wink:

Momentan habe ich aber keine Idee mehr, wo das aktuelle Problem liegen sollte.

Kannst du deinen aktuellen Test-Programmcode hier mal einstellen?
Danke dir!

Grüße,
Cassio
 
Hallo,

Woher das Problem mit dem Zeichensatz und der zweiten Zeile kommt, will sich mir momentan nicht erschließen. :hmmmm:
ist denn das Problem bei aus und eingeschalteter Beleuchtung identisch ? Sind die
Zeichen dann auch identisch oder unterschiedlich ? Sonst könnte sich in der Lib ein
Fehler eingeschlichen haben der die übertragenen Daten verändert.

Gruß
Dino
 
Hi zusammen!

Die Beleuchtung sollte eigentlich keinen Einfluss darauf haben.

Ich vermute ja bald, dass das Darstellen der Zahlen nur ein Zufall ist.
Er könnte ja auch mal nur die ASCII-Zeichennummern per CHR() senden und schauen, was z.B. bei 65 rauskommt.
Wenn das dann kein "A" ist, passt da etwas nicht.
Kann ich mir aber nicht vorstellen, da es ja ein HD44780 sein soll. :wink:

Ich muss einfach mal schauen, ob ich hier noch einen PCF8574A in normaler Ausführung für ein Steckboard habe, dann kann ich das selber mal testen.

Grüße,
Cassio
 
Hallo zusammen!

Es hat mich einfach nicht in Ruhe gelassen und darum habe ich bei mir das LCD-Modul mal nachgestellt.

Testaufbau.....
Mega16 ---> PCF8574A ---> 4x16


Hier mal der Testcode und die Anschlussbelegungen:
Code:
'
$regfile = "m16def.dat"
$crystal = 8000000                                          'intern !


$hwstack = 128
$swstack = 128
$framesize = 128


' ATmega16
'                 +---v---+
'    (XCK/T0) PB0 |1    40| PA0 (ADC0)------Taster1
'        (T1) PB1 |2    39| PA1 (ADC1)------Taster2
' (INT2/AIN0) PB2 |3    38| PA2 (ADC2)
'  (OC0/AIN1) PB3 |4    37| PA3 (ADC3)
'        (SS) PB4 |5    36| PA4 (ADC4)
'      (MOSI) PB5 |6    35| PA5 (ADC5)
'      (MISO) PB6 |7    34| PA6 (ADC6)
'       (SCK) PB7 |8    33| PA7 (ADC7)
'           RESET |9    32| AREF
'             VCC |10   31| GND
'             GND |11   30| AVCC
'           XTAL2 |12   29| PC7 (TOSC2)
'           XTAL1 |13   28| PC6 (TOSC1)
'       (RXD) PD0 |14   27| PC5 (TDI)
'       (TXD) PD1 |15   26| PC4 (TDO)
'      (INT0) PD2 |16   25| PC3 (TMS)
'      (INT1) PD3 |17   24| PC2 (TCK)
'      (OC1B) PD4 |18   23| PC1 (SDA)-------I2C
'      (OC1A) PD5 |19   22| PC0 (SCL)-------I2C
'      (ICP1) PD6 |20   21| PD7 (OC2)-------LED
'                 +-------+
'

' ================================================
' Bestimme die Ein- und Ausgänge
Ddra = &B_0000_0000                                         '1 ist Ausgang 0 ist Eingang
Porta = &B1111_1111

Ddrb = &B_0000_0000                                         '1 ist Ausgang 0 ist Eingang
Portb = &B1111_1111

Ddrc = &B_1111_1111                                         '1 ist Ausgang 0 ist Eingang
Portc = &B0000_0000

Ddrd = &B_1111_1111                                         '1 ist Ausgang 0 ist Eingang
Portd = &B0000_0000                                         'auf Hi oder Low setzen



Led Alias Portd.7
Taster Alias Pina.0
Taster2 Alias Pina.1


' ================================================
' Globale Interrupts einschalten
'Enable Interrupts

' ==============================================================================
' I2C-Config
Config Scl = Portc.0                                        'I2C SCL
Config Sda = Portc.1                                        'I2C SDA

Config I2cdelay = 1

I2cinit


'**************************************************************
' I2C LCD (Kent Andersson)-----------------------------------
$lib "Lcd_i2c-arduino2.lib"                                 'TEST-LIB für ein Arduino-I2C-LCD


Const Pca8574_lcd = &H70                                    'I2C-Adresse des PCx8574(A)

'!rcall _init_LCD
Dim _lcd_out As Byte

Const Bl_ein = 8
Const Bl_aus = 0

'          PCx8574(A)
'             __
'      A0  -o|1 |o-  Vdd
'      A1  -o|  |o-  SDA
'      A2  -o|  |o-  SCL
'      RS  -o|  |o-  n.c. (INT)
'      RW  -o|  |o-  DB7
'       E  -o|  |o-  DB6
'      BL  -o|  |o-  DB5
'     GND  -o|_9|o-  DB4



'       LCD 4x16
'    ---------------o  Vss----------+
'   |               o  Vdd          |
'   |               o  Vo           |
'   |               o  RS           |
'   |               o  R/W----------+
'   |     LCD       o  E            |
'   |               o  DB0----------+
'   |     4x16      o  DB1----------+
'   |               o  DB2----------+
'   |               o  DB3----------+
'   |               o  DB4          |
'   |   HD44780     o  DB5         ===
'   |               o  DB6         GND
'   |               o  DB7
'   |               o  LED+
'   |               o  LED-
'   |               |
'   |               |
'   |               |
'   |               |
'   |               |
'   |               |
'   |               |
'   |               |
'   |               |
'    ---------------


' ==============================================================================

Dim I As Byte                                               'Indexzähler
Dim Tb As Bit                                               'Toggle-Bit
Dim Ab As Bit                                               'Anzeige-Bit
Dim Licht As Bit                                            'Beleuchtungsbit


' #############################################################################
' Anfangswerte:
Cls

Tb = 0
Ab = 0
_lcd_out = Bl_aus


' ################################################
' #                                              #
' #---------------Arbeitsschleife----------------#
' #                                              #
' ################################################
Do                                                          'Hauptschleife-Beginn


If Taster = 0 Then                                          'Displayanzeige wechseln
   Toggle Tb
   Reset Ab
   Waitms 100
   Bitwait Taster , Set
Else
End If



If Taster2 = 0 Then
   Toggle Licht
      If Licht = 0 Then
         Reset Led
      Else
         Set Led
      End If
   Waitms 100
   Bitwait Taster2 , Set
      Reset Ab
Else
End If



If Tb = 0 Then
   If Ab = 0 Then
         If Licht = 0 Then
            _lcd_out = Bl_aus
         Else
            _lcd_out = Bl_ein
         End If
'      !rcall _init_LCD
      Locate 1 , 1
      Lcd "AVR-Praxis Forum"

      Locate 2 , 1
      Lcd "-----Cassio-----"

      Locate 1 , 17
      Lcd "++++01:10:36++++"

      Locate 2 , 17
      Lcd "****05.06.11****"

      Set Ab
   Else
   End If

Else
   If Ab = 0 Then
         If Licht = 0 Then
            _lcd_out = Bl_aus
         Else
            _lcd_out = Bl_ein
         End If
'      !rcall _init_LCD
      Locate 1 , 1
      Lcd "Dies ist Zeile 1Dies ist Zeile 3"

      Locate 2 , 1
      Lcd "Dies ist Zeile 2Dies ist Zeile 4"

      Set Ab
   Else
   End If
End If


Loop                                                        'Hauptschleife-Ende


End                                                         'end program


Es ist schon so, wie Wolf geschrieben hat......
Die Ansteuerung der Pins "RS", "E" und "BL" funktionieren wie gewünscht.
Leider ergeben die ausgegebenen Zeichen auf dem Display keinen Sinn.

Zahlen, Buchstaben und Sonderzeichen sind zu sehen.......
aber nicht in der vorgegebenen Reihenfolge sondern durcheinander. :cool:


Es wird wohl doch so sein wie ich es zu Beginn vermutet hatte...
Die Steuerpins kann man in der LIB anpassen, aber die 4Bit-Daten werden bestimmt an den falschen Pins ausgegeben.

In der Standard-LIB werden die Daten ja an P0-P3 am PCF ausgegeben.
Nun müssten die Daten aber an P4-P7 anliegen!
Mal eine Idee.....
Kann man VOR dem Senden der Daten diese nicht einfach in der LIB um 4-Bit nach Links schieben? :hmmmm:

Hey Dino, wie realisier man das in ASM? :cool:


Was ich jedoch nicht bestätigen kann ist die Tatsache,
dass ich immer wieder ein "INITLCD" oder ein "!RCALL _INIT_LCD" benötige um etwas angezeigt zu bekommen.
Ich denke mal, dass könnte am Programmcode von WerWolf liegen (z.B. Dauerfeuer an das LCD). :wink:


Grüße,
Cassio
 

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