i2c ansteuerung mit PCF8574(ohne Bibliothek)

    • i2c ansteuerung mit PCF8574(ohne Bibliothek)

      Hallo,

      Ich bin neu im Forum, befasse mich z.Z. mit der LCD-Ansteuerung über i2C.

      Habe schon alles mögliche versucht, auch viel gegoogelt.

      Dazu habe ich im Lexikon o.g. Artikel gefunden. Damit scheint mein LDC zum ersten Mal stabil zu funktionieren (bisher über Bibliotheken nur sporadisch)

      Jedoch verstehe ich die Funktion folgender Programmteile nicht:

      [*]'toggle the E -line
      I2csend Pcf8574_w , &B0011_0100
      I2csend Pcf8574_w , &B0011_0000
      Waitms 4
      'set 8-bit mode (attention)
      I2csend Pcf8574_w , &B0011_0100
      I2csend Pcf8574_w , &B0011_0000
      Waitms 1
      'set 8-bit mode (attention)
      I2csend Pcf8574_w , &B0011_0100
      I2csend Pcf8574_w , &B0011_0000

      hier wird doch 3 mal das gleiche gesendet, wozu ?

      ----------------------------------------------------------------------------------------

      und dieses hier: (ist bei dir auch auskommentiert)


      ' Hintergrundbeleuchtung einschalten:
      ' set lcd_temp.3 = 1

      Bascom (Demo) quittiert das mit einer Fehlermeldung

      ich habe die Hintergrundbeleuchtung (Pin 4 am PCF8574 ) direkt mit einem "i2cw Adresse, &B 0000_1000" eingeschaltet.
      damit werden aber alle anderen Leitungen auf 0 gesetzt, was sicher Fehlfunktionen beim LCD auslösen kann.

      Kann ich die Leitung schalten, ohne die anderen zu beeinflussen, oder muss ich den aktuellen Stand erst abfragen, dann diese Leitung UND-verknüpft zuschalten
      und wieder senden?

      Ich hoffe, ich habe mich verständlich ausgedrückt.

      Mit freundlichen Grüßen

      DS1074
    • wie oben schon geschrieben, habe ich die Ansteuerung über verschiedene Bibliotheken versucht.
      Manchmal hat es funktioniert, aber oft kamen nur wirre Zeichen oder das LCD blieb leer.
      Bin jetzt dabei, die Funktion des PCF8574 zu analysieren, ob da was auf der Strecke bleibt.
      Auch die Frequenzeinstellung mit "I2cdelay" habe ich schon von 15-1 durchgetestet, leider auch nur mit sporadischem Erfolg.

      Vielleicht habt Ihr noch Ideen, die mir weiterhelfen können.

      Grüße ds1074
    • Erst mal Danke für die Infos,

      hatte schon im Netz nach der Schaltung zum PCF8574 gesucht, habe das Teil mit dem LCD über A.. bekommen (China)
      o.g. Schaltung hier scheint auch die zu sein, welche ich habe.

      Steuere das ganze zum Testen über einen Atmega8A auf einem Pollin - Board mit Portsplitter an.
      Soll später das Anzeigedisplay für die Fernsteuerung eines Roboters dienen (umgebauter 'Real Robot')

      Pullups sind auf der Platine bereits installiert (je 10k).

      Werde aber alles noch mal durchchecken. Hab mir mittlerweile einen Oszi geleistet, wie aus meinem Namen ersichtlich ist.
      Hoffe damit weiterzukommen.

      Hab mir auch die YwRobot-LIB mal mit dem Texteditor näher angesehen, komme nur nicht klar damit.
      Vielleicht kann die noch mal mehr erklärt werden. Damit hat die Anzeige wenigstens ab und zu mal funktioniert.

      Bin also dankbar für weitere Tipps.

      Bis dahin
    • Ich stelle mal einen Codeschnipsel für PCF8574 bzw.PCF8574A ein. Die Dezimalwerte gelten für gelieferte Platinen ohne das daran Lötarbeiten an A0,A1,A3 vorgenommen worden sind.Der einsatz eines I2C -Scanners
      ist ebenfalls sinnvoll.Siehe Bascomforum -Codeschnipsel.

      BASCOM-Quellcode: Attiny 85

      1. Config Lcd = 16x2
      2. Config Scl = Portb.2
      3. Config Sda = Portb.0
      4. $lib "YwRobot_Lcd_i2c.lib" 'YwRobot Treiber für LCD
      5. Const Pcf8574_lcd = 126 'Dezimaladresse des I2C-LCDs
      6. 'Pcf8574_lcd = 78 Dezimal
      7. 'Pcf8574A_lcd = 126 Dezimal
      8. Dim Lcd_backlight As Byte '1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt!
      9. Config I2cdelay = 1 '1=1Mhz,5=200Khz,10=100Khz,15=66,66Khz
      10. 'Wenn in Lcd keine Anzeige muß der Delaywert erhöht werden.Mit Wert 15 beginnen und dann langsam verringern , erspart.viel in der Fehlersuche.
      11. Waitms 300
      12. Cls
      13. Cursor Off
      Alles anzeigen
    • Hallo an alle,

      habe den Code bei mir eingebunden und getestet. Scheint z.Z. zu laufen. Teste weiter in meinen Programmen.
      Kann es sein, dass die Reihenfolge der Konfiguration eine Rolle spielt.
      Habe z.B. die $lib "YwRobot_Lcd_i2c.lib" immer mit als erstes bei den Einstellungen zum Chip gesetzt, später erst die
      Zeilen 1 - 13

      Also erst mal vielen Dank für Eure Hilfe. Werde weiter ausgiebig testen.

      Grüße ds1074
    • Tags