- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: RN-LCD-Adapter und lcd_i2c.lib "Lcdpower Alias="

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2007
    Beiträge
    29

    RN-LCD-Adapter und lcd_i2c.lib "Lcdpower Alias="

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Fangemeinde,

    ich habe wieder einmal ein Problem, doch auch google war nicht hilfreich.

    Ich habe ein 16*2 LCD-Display, welches ich über einen RN-LCD-Adapter angeschlossen habe. Wenn ich es über den Mega8 direkt ansteuere funktioniert es tadellos. Jetzt wurden meine Ports etwas knapp und ich habe ein Adapterstecker und ein I2C (TWI) PCF8574 genommen um es per I2C über o.g. lib anzusteuern. Das funktioniert jetzt endlich auch.

    Jetzt mein Problem,
    über den RN-LCD-Adapter und Direkt-Verbindung zum AVR kann ich ja den Alias "LCDPOWER=(Stecker PIN-5 EN2) ansprechen. Also Licht ein/aus.

    Gibt es eine relativ einfache Möglichkeit (für Anfänger) über eine Anweisung dies über die I2C-Lib zu realisieren?

    Danke

    P.S.: Verkabelt ist alles nach RN-Norm und genauso wie es in der lcd_i2c.lib (mcs_AN#118_I2C-Display ) angeben ist.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    wie Du schon geschrieben hast, ist die Beleuchtung an EN2 angeschlossen.
    Dieses Bit kann man in dieser Lib vorgeben mit der Variablen _lcd_e

    siehe Beispielprog zu dieser Lib:

    Code:
    Dim _lcd_e As Byte
    '_lcd_e = 128 select E1, 64 select E2, 192 select both (for CLS or DefLCDChar etc.)
    _lcd_e = 128
    Musst nur die Werte durchprobiern, je nachdem wie Du es angeschlossen hast.
    Ich geh mal davon aus, das mit 192 das LCD und die Beleuchtung ausgewählt sind, musst nur den Wert ausprobieren, wenn die Beleuchtung aus ist, aber das LCD trotzdem geht.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2007
    Beiträge
    29
    Hallo Linux_80,

    leider funktioniert das nicht. Das habe ich schon versucht.

    Ich habe trotz alledem noch mal ein Versuch gestartet und folgendes "Fehlerbild" erhalten.

    Die LED (Hintergrundbeleuchtung) blinkt kurz auf, wenn der Displayinhalt aktualisiert wird. Also jedes mal bei LCD "xxx".

    Hier mal der Code.
    Code:
    $regfile "m8def.dat"
    $crystal = 16000000
    $baud = 9600
    
    $lib "i2c_twi.lbx"                                          'Für Hardware TWI
    $lib "lcd_i2c.lib"                                          'ersetzt die Standard LCD Library
    
    ' ---------------- I2C Bus ----------------------
     Config Scl = Portc.5                                       'I2C SCL Pin
     Config Sda = Portc.4                                       'I2C SDA Pin
     Config Twi = 400000                                        ' Init TWBR und TWSR
    ' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
    Twcr = &B00000100                                           ' nur TWEN setzen
     Waitms 300
    
     ' --------------- I2C Display -------------------
      Const Pcf8574_lcd = &H40                                  'I2C Adresse
     Dim _lcd_e As Byte
     '_lcd_e = 128                                               'LCD im 4-Bit Mode betreiben
     _lcd_e = 192
    
     Waitms 300                                                 'wichtig! Ggf. Erhöhen
     Config Lcd = 16 * 2
     Wait 1
     Initlcd
    Wait 1
    
    ----- Haupt ----
     Do
       Cls                                                      'loesche das LCD Display
      ' Display On                                               'schaltet das Display (Text) ein
       Locate 1 , 1                                             'Cursor auf 1 Zeile, 1 Spalte
       Lcd "Hello world."
       Wait 1
       Locate 2 , 1
       Lcd "************"                                       'String auf Display anzeigen
       Wait 5
       'Display Off                                              'schaltet das Display (Text) aus
       'Wait 2
     Loop
    
    End

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi,

    das Problem ist, dass beim letzten Byte ans LCD die beiden Enables gelöscht werden, damit das LCD nicht angewählt ist, aber auch die Beleuchtung aus ist.

    Also entweder die Lib anpassen, und E2 immer setzen,
    oder als Workaround, dem LCD immer ein Byte senden in dem nur das E2 gesetzt ist. Könnt aber etwas geblinke rauskommen.

    PS:
    Du kannst mal versuchen in der Lib eine Zeile einzufügen,
    nach dieser:
    Code:
    _send_3_times:
     sbr _temp1,&h40       ; hier nur das gewünschte Bit setzen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2007
    Beiträge
    29
    Hi,

    Danke für Deine Hilfe mit der lib.
    Ich habe die Zeile eingefügt und das Display ist "Dauerbeleuchtet".
    (&H40 = 64 = E2 enable)

    Das mit den immer "An" ist aber nicht wirklich das, was ich wollte, da ich dies ja auch über einen Jumper oder mit "direkt anschließen" machen könnte.

    Ich wollte bei "Nichtgebrauch" der Schaltung, unnötige Verbraucher abschalten um die Stromversorgung zu entlasten.

    Zum Bsp. bei einer Gewächshaussteuerung braucht ja das Display nicht Tag und Nacht "Dauerbeleuchtet" zu werden.

    Das mit den Byte mitsenden, weiß ich leider noch nicht wie ich das bewerkstelligen soll. Die absolute Notlösung wäre halt ein Pin vom AVR zu opfern (ist halt am einfachsten) aber ich wollte eigentlich das Display als "eigenständiges Modul" per I2C steuern und nicht noch neben den Bus eine weitere Leitung, welche "nur" die LED Beleuchtung einschaltet.

    Hättest Du evtl. noch ein Tip für mich?

    Danke erstmal für Deine Hilfe.

    P.S.: Ich dachte eigentlich das ich nicht der einzige/erster bin, der dieses Problem hat und ihr sagt "alter Hut" geht doch ganz einfach, mach dieses oder jenes und es geht.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hola,

    ja dann schau ma mal

    aber ich garantier für nix, wenns was zerreist, o.ä., ich wars ned
    Wenns klappt aber überall verkünden

    Bascom Teil:
    Code:
    Dim _lcd_e2 As Byte
    
    _lcd_e2 = &H40    ' nur 0 oder &H40
    lib, an die Stelle wie letztens auch:
    Code:
    _send_3_times: 
    * lds r27,{_lcd_e2}  ' Wert aus Basic-Variablen
      andi _temp1, &hbf  ' sicherstellen, dass das Bit 0 ist,
      or  _temp1, R27    ' um hier evtl. gesetzt zu werden

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2007
    Beiträge
    29
    =D> suuupi =D>

    ich verkünde nun feierlich, dass die Lösung von "linux_80" funktioniert \/

    Im "Kurztest" sind mir keine Auffaelligkeiten aufgefallen.
    (getestet mit einen Displaytech 162 / 16*2 LCD Display mit Hintergrundbeleuchtung)

    Ich danke Dir fuer deine Hilfe.

    Nun ist es moeglich, sein Projekt mit den RN-Standart-LCD Adapter aufzubauen und bei Bedarf (wenn die Anschluesse vom AVR benoetigt werden) einfach ueber eine I2C "Adapterplatine" zu betreiben ohne grosse Programmaenderung durchfuehren oder auf die zuschaltbare Displaybeleuchtung verzichten zu muessen.

    Grossen Dank an die jenigen, welche uns dies ermoeglichten "Linux_80" und "Kent Andersson" (Ersteller der Lib) =D>

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Dann kann ich ja beruhigt schlafen

    Die Beleuchtung ändert sich halt nur, wenn man was ans LCD sendet.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test