ATMega8 und LCD mittels I2C ansteuern

Dieses Thema im Forum "Programmierung und Bascom IDE" wurde erstellt von LK61, 10. Juli 2018.

Schlagworte:
  1. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    bisher steuerte ich meine LCD-Displays immer direkt im 4Bit Modus an den Portpins der ATMegas.
    Beim letzten Kauf lag dem LCD-Modul 16x2 ein I2C Baustein mit dem PCF8574T bei.

    Im Internet fand ich auch diesen Code zum Ansteuern des Displays.



    CodeBox BascomAVR
     $lib "Lcd_i2c.lib"                                         'ersetzt die Standard LCD Library
     $regfile = "m8def.dat"
     $crystal = 8000000
     Const Pcf8574_lcd = &H40                                   'I2C Adresse
     Led Alias Portd.5
     Config Led = Output
     Config Scl = Portc.5                                       'I2C SCL Pin
     Config Sda = Portc.4                                       'I2C SDA Pin
     Dim I As Byte
     Dim _lcd_e As Byte
     _lcd_e = 128                                               'LCD im 4-Bit Mode betreiben
     Cls
                                                          'loesche das LCD Display
     Locate 1 , 1                                               'Cursor auf 1 Zeile, 1 Spalte
     Lcd "Hello Welt"                                           'String auf Display anzeigen
     Do
       Wait 1
       Toggle LED
       Waitms 10
       toggle LED
     loop
     End
    


    A0-A2 habe ich auf Masse gelegt, damit ich die Adresse H40 verwenden kann. An SDA und SCL befinden sich jeweils 5K Widerstände gegen Ub. Wenn ich nun das Programm in den ATMega8 einspiele, blinkt der Cursor an Position 3. Das Display wird dunkel. (Die Hintergrundbeleuchtung geht aus). Mehr Effekt passiert nicht. Um das Programm und die Taktfrequenz zu kontrollieren, lasse ich dann in einer Endlosschleife eine LED im "SEKUNDENTAKT" blinken. Was diese auch erfolgreich tut.
    Wenn ich die Adresse 40 ändere, passiert mit der Anzeige nichts. Daher gehe ich schon mal davon aus, dass diese korrekt ist. Ich habe mir schon das Datenblatt des PCF8574 mehrmals durchgelesen. Ich kann den Fehler nirgends entdecken. Hat das etwas damit zu tun, dass es ein PCF8574T ist? Ich finde nur Hinweise über den Unterschied zum A. Vielleicht gibt es ja jemanden, der sich damit besser auskennt als ich. Ich weiß mir zur Zeit keinen Rat mehr. Das Ganze ist auf einem Experimentierboard aufgebaut, so dass ich kein Foto der Platine posten kann.

    Vielen Dank schon mal fürs Lesen.

    Gruß LK
     
  2. fredred

    fredred Mitglied

    Registriert seit:
    1. Oktober 2015
    Beiträge:
    53
    Zustimmungen:
    1
    Punkte für Erfolge:
    7
    Beim A Typ ist Adresse H70 wenn alle Adresspin auf GND.

    Gruß
    fredred
     
  3. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.982
    Zustimmungen:
    45
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Also wenn ich das so auf die Schnelle richtig aus dem Datenblatt gelesen habe...
    PCF8574 ist erstmal der eigentliche IC.
    Danach kann ein A folgen, oder eben nicht. Ohne A gilt als Adresse |0|1|0|0|A2|A1|A0|R/W. Mit A gilt 0|1|1|1|A2|A1|A0|R/W.
    Danach folgt das Package-Kürzel:
    • P für DIP16
    • T/3 für SO16
    • TS/3 für SSOP20
    Du hast also den ohne A (Adresse 0x40+[A2..A0]+R/W) als 16er SOIC...
     
  4. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    danke erst mal für die Info. Ja, es ist ein SO16 verbaut. In dem Datenblatt steht auch PCF8574T und PCF8574AT. Deshalb ging ich auch von der Annahme ohne A aus und verwende die Adresse H40 für die Ausgabe bei A0-A2=GND. Das habe ich zur Sicherheit auch gemessen. Nun besteht der Fehler aber immer noch und ich bin keinen Schritt weiter. Vielleicht liegt der Fehler ja in der Lcd_i2c.lib. Aber in dem Beispiel wurde nichts von einem BUG geschrieben. Hat denn schon mal jemand mit dieser Libary solch Anzeige zum Laufen bekommen?

    Gruß LK
     
  5. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.982
    Zustimmungen:
    45
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Es sind quasi identische ICs, nur die Basis-Adresse unterscheidet sich. Das sollte auch direkt auf dem Chip stehen. PCF8575T (ohne A bei Dir).
    Zu Deiner Bibliothek kann ich nichts sagen. Denkbar wäre, daß hier die 7bit-Adresse erwartet wird (also 0x20).
    AFAIR gabs hier im FAQ-Bereich schon mal versuche mit LCDs an Portexpandern - vielleicht suchst Du mal da (gibt bei den FAQs 'n Übersichts-Fred).
    Wir hatten vor kurzem auch mal jemanden hier, wo die Verdrahtung zwischen Display und PCF vom "Standard" abwich - da gabs auch irgend'ne anpaßbare Modifikation irgendeiner Bibliothek...
     
  6. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    die Bibliothek Lcd_i2c.lib ist eine mit installierte von BASCOM und befindet sich im Folder LIB. Ich habe jetzt mal die Kontaktierung der Ports vom I2C zum LCD kontrolliert. Das passt absolut nicht mit den Definitionen der Bibliothek.
    Ich habe 4 LCDs gekauft. Alle unterschiedliche Verkäufer.(China). Alle die gleiche Verdrahtung. Da das Zeug Massenware ist, dachte ich, das Ansprechen wäre einfacher und ich könnte auf die Erfahrungen anderer zurückgreifen. Sozusagen etwas "stibitzen" :)
    Na ja, ich mach das eigentlich bloß Interessenhalber. Ich hätte mich gefreut, wenn es einfache gewesen wäre.

    Danke für Deine Mühe. Ich werde jetzt versuchen, die Lib anzupassen. Wenn ich da scheitere, weiß ich auch nicht weiter.

    Ciao LK
     
  7. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    ich habe mal die Pins dieser Schaltung ausgemessen.

    PCF - LCD
    P0 = RS
    P1 = RW
    P2 = E
    P3 = (An Transitor Hintergrundbeleuchtung)
    P4 = D4
    P5 = D5
    P6 = D6
    P7 = D7

    Vielleicht interessiert es ja jemanden...

    Gruß LK
     
  8. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    2.982
    Zustimmungen:
    45
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Link schmeiß
    Im 2ten Beitrag ist im Code-Schnipsel die Verdrahtung PCF-LCD angedeutet
     
  9. fredred

    fredred Mitglied

    Registriert seit:
    1. Oktober 2015
    Beiträge:
    53
    Zustimmungen:
    1
    Punkte für Erfolge:
    7
    Noch was.
    $lib "i2c_twi.lbx" ist für Hardware TWI geschrieben. Somit deine Pin Belegung okay. Würde aber noch folgendes einfügen.
    Config Twi = 100000 ' Init TWBR und TWSR
    und
    TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
    TWCR = &B00000100 ' nur TWEN setzen

    Im Anhang noch ein Anschlussbildchen.

    Natürlich auch ein LCD- Text in die Hauptschleife einbinden.
    Gruß
     

    Anhänge:

    • Bild.jpg
      Bild.jpg
      Dateigröße:
      146,5 KB
      Aufrufe:
      6
  10. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    danke für den Tipp, aber die i2c_twi.lbx hab ich schon gesucht. Die finde ich nur für 13 EUR als Kaufversion. Dein Anschlußbildchen stimmt mit meiner Belegung leider nicht überein.

    @LotadaC Danke - da muss ich mich erst mal durcharbeiten. Sieht erst mal kompliziert aus...
     
  11. LK61

    LK61 Neues Mitglied

    Registriert seit:
    10. Juli 2018
    Beiträge:
    6
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo,

    ich möchte allen danken, welche mich hier so freundlich unterstützt haben.

    Die EBAY-Module weichen tatsächlich von der Standard-Verdrahtung ab.

    Es gibt eine Bibliothek, welche diese unterstützt.

    Dieser Code als Beispiel funktionierte auf Anhieb bei mir mit einem ATMega8



    CodeBox BascomAVR
    $regfile = "m8def.dat"                                      'ATMega8
    $crystal = 8000000                                          '8 MHz
    $lib "YwRobot_Lcd_i2c.lib"                                  'YwRobot Treiber für LCD
    $hwstack = 64
    $swstack = 10
    $framesize = 40
    
    '**********************************************************
    '******************* Deklarationen ************************
    Const Pcf8574_lcd = &H40                                    'Adresse des I2C-LCDs  A0 - A2 =0
    Dim Lcd_backlight As Byte                                   '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
    '****************** Initialisierung ***********************
    Config Scl = PortC.5                                        'Konfigurieren von I2C
    Config Sda = PortC.4
    Config Lcd = 16 * 2                                         'nicht unbedingt nötig
    Config I2cdelay = 1
    Waitms 300                                                  'warte bis LCD-Initialisiert ist!
    
    
    '******************** Hauptprogramm ***********************
    Cls
    Lcd "Hallo BASCOM LK"
    Wait 1
    Lcd_backlight = 0
    Locate 2 , 1
    Lcd "Thanks for help"
    Wait 2
    Lcd_backlight = 1
    Locate 1 , 1                                                'Damit Backlight-Zustand an LCD übermittelt wird
    Do
    nop
    Loop
    End
    


    Mittlerweile habe ich es auch mit einem 4x20 LCD getestet. Ebenfalls problemlos.
     
    #11 LK61, 10. Juli 2018
    Zuletzt bearbeitet: 10. Juli 2018
  • Über uns

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden