- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: Verhalten LCD am I2C nach Reset und "initlcd"

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    22

    Verhalten LCD am I2C nach Reset und "initlcd"

    Anzeige

    Powerstation Test
    Hallo,

    ich betreibe am RN-Board (ATMega16) ein 2x16 Zeichen Standard-LCD Display (4Bit-Modus) über einen PCF8574 Porterweitungsbaustein am I2C-Bus.
    Ein beispielhaftes Programm könnte so aussehen:

    Code:
    $regfile = "m16def.dat"
    $lib "Lcd_i2c.lib"
    
    Dim _lcd_e As Byte
    Dim Count As Integer
    
    $crystal = 16000000
    $baud = 9600
    
    Config Adc = Single , Prescaler = Auto
    Config Scl = Portc.0
    Config Sda = Portc.1
    Config I2cdelay = 15
    
    Const Pcf8574_lcd = &H40
    Const Ref = 5 / 1023
    
    Sound Portd.7 , 400 , 450
    _lcd_e = 128
    Initlcd
    
    Count = 0
    
    Do
       Count = Count + 1
       If Count > 5000 Then
         Count = 0
       End If
    Upperline
    Lcd "counter:" ; Count ; "        "
    Loop
    End
    Das Problem:
    Bei einem Reset (egal ob ISP oder Taster) ist die Wahrscheinlichkeit sehr hoch, dass sich der LCD-Controller verhaspelt, weil ich ihn genau bei einem Zugriff erwische. Nach meinem Verständnis müsste er aber durch den initlcd-Befehl wieder auf die Füße fallen, was er aber leider nicht tut. Vielmehr bekommt man ihn nur durch mehrere Resets zufällig oder durch poweroff wieder zur Raison. Gibt es einen Weg das LCD auch ohne poweroff per Software zu einem wirksamen Reset zu bewegen?

    Im Beispielcode zur LCD_i2c.lib wird das Problem durch wait 1 statistisch entschärft. Man hat einfach weniger Gelegenheit, bei LCD Zugriffen zu stören. Aber das ist ja keine Lösung!
    Ich überlege das LCD nur bei Änderungen von Anzeigedaten zu triggern, aber auch das empfinde ich eher als Krücke. Bei jedem Neustart sollte das LCD in einen definierten Zustand gebracht werden aber scheinbar tut das der lcdinit-Befehl so nicht.

    Danke für jeden Hinweis

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

    wenn ein LCD direkt angebunden ist, wird immer die Resetleitung des LCDs benutzt, bei der I2C-Version gibts das nicht, deshalb wird das LCD nicht zurückgesetzt.

    Wenn Du ein LCD mit nur einem Controller benutzt, könntest Du die 2. Enable-Leitung für den Reset verwenden, und somit selbst einen Reset auslösen.


    Edit:
    war käse, denn Reset gibts nur bei GLCDs !

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    22
    leider kann ich Dir noch nicht ganz folgen. Welche Leitung ist die Reset-Leitung ?
    Ich habe mal die Schaltung meines I2C-Bausteins mit LCD und das der normalen LCD Schaltung angehängt. Für mich unterscheiden sich die Schaltungen nicht?
    Aber wie Du sagst, ist mir bei der direkten Beschaltung des LCD am AVR dieses Verhalten auch nicht aufgefallen.

    Bild hier  

    Bild hier  

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hui,
    Reset gibts ja nur bei GLCDs.

    Dann könntest Du evtl. einen FET in die Stromversorgung einbauen und bei bedarf das LCD ganz abschalten

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    22
    verflixt, da hat mir die Serverauslastung einen Streich gespielt, oder besser mein nervöser Zeigefinger ist Schuld

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    22
    Leider gibt es die Schaltung schon fix und fertig und eine wirklich saubere Lösung mit einem FET ist das auch nicht.

    Es gibt gibt doch das Steuerkomando: Display ON/OFF, könnte man das nicht per I2Csend an das LCD schicken? Hat das eine Reset-Wirkung? Warum gibt es eigentlich kein Reset-Steuerkommando??

    Fragen über Fraqen..

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2005
    Beiträge
    22
    Leider gibt es die Schaltung schon fix und fertig und eine wirklich saubere Lösung mit einem FET wäre das auch nicht. Dann wäre eine getriggerte Ansteuerung bei Änderung der Anzeigewerte bzw. eine Aktualisierung der Anzeige z.B. alle 500 Programm Zyklen (kann man sich bei den meisten Anwendungen ja erlauben) eine einfachere Möglichkeit, die Statistik auf seine Seite zu bringen, so häufig kommen ja Resets auch nicht vor.

    Aber:
    Es gibt gibt doch das Steuerkomando: Display ON/OFF, könnte man das nicht per I2Csend an das LCD schicken? Hat das eine Reset-Wirkung? Warum gibt es eigentlich kein Reset-Steuerkommando??

    Fragen über Fraqen..

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Das Problem ist ja, wenn der µC mitten während einer Übertragung im 4-Bit-Modus neu anfängt, kommt der LCD-Controller durcheinander, weil er die nächsten 4Bit als 2. Teil der letzten Übertragung interpretiert.
    Deshalb kommt es auch vor, das es nach einigen Resets wieder geht. Nämlich dann, wenn gerade das ganze Byte beim 4-Bit-Modus ans LCD gesendet wurde.

    Das Commando Display OFF schaltet nur die Pixel aus, ein Reset ist das nicht.

    Im DB zum HD44780 steht nur was von internem Reset, und der ist nur nach dem aktivieren der Stromquelle.
    Also scheint es nur mit dem deaktivieren derselbigen zu gehen, wenn man das LCD im 4-Bit-Modus betreibt, um sicherzustellen, das nach einem Reset des µC das LCD auch einen definierten Zustand hat.

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress