-         

Ergebnis 1 bis 9 von 9

Thema: LCD-Anzeige funktioniert nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    5

    LCD-Anzeige funktioniert nicht

    Anzeige

    ich benutze eine Dot Matrix LCD (4 x 20) angesteuert von einem
    PCF 8574 T (I2C - Bus ) als Controller benutze ich den AT-Mega 32
    bei 4 MHz Taktfrequenz gibt es keine probleme aber bei 16MHz Taktfrquenz stimmt die LCD-Anzeige nicht mehr (es läuft eine Zeichenfolge ab und dann nichts mehr , es ist auch nur die erste und dritte Zeile aktiv)

    Wie kann ich das Problem beheben ?

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

    evtl. stimmen dann die Zeiten nicht mehr, die Daten werden zu schnell an den PCF und somit LCD gesendet

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    5
    Vielen dank für die Info. )
    Ich hätte noch eine Frage, mit was für einem Befehl kann die
    Übertragungsrate verlangsamt werden? ("Wait" Befehl? )

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hier könnten wir mal einen Ausschnitt aus Deinem Programm brauchen, wie Du den PCF ansteuerst.
    Wenn das mit einer Bascom-Lib passiert, kann man mit Wait nicht soviel ausrichten, da die Wartezeiten intern geregelt werden.
    Normalerweise sollte Bascom aber die Zeiten richtig ausrechnen, wenn man die richtigen Frequenzen im Programm angibt ($crystal)

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    5
    Danke nochmals !
    hier der Programmausschnitt :

    $lib "Lcd_i2c.lib" 'I2C-Bus Treiber für LCD
    $regfile = "m32def.dat" 'Controller Dateien
    $crystal = 16000000 'Quarzfrequenz XTAL
    $baud = 19200 'Übertragungsrate



    $prog &HFF , &HEF , &HD9 , &HFF ' generated. Take care that the chip supports all fuse bytes.( 101111 16MHz)


    Enable Interrupts

    Const Pcf8574_lcd = &H40 'Defines the address of the I/O expander for LCD


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

    Dim _lcd_e As Byte 'Needed to control 4 line LCD
    _lcd_e = 128 'Upper half of 4-line display is selected
    Config Lcd = 20 * 4 'Konfigurationsdatei LCD 20*4
    Config Lcdbus = 4
    Config Lcdmode = Bus


    Config Date = Mdy , Separator = / 'ANSI Format
    Config Clock = Soft

    Date$ = "11/04/07"

    Time$ = "23:55:00"


    Config Porta = Input 'Port A = Eingang
    Config Porta = 255 'PullUp aktiv (Eingang auf High)

    Config Portd.7 = Output 'Port D.7 = Ausgang Gerät Ein/Aus
    Config Portd.6 = Output 'Port D.6 = Ausgang OK - Taste
    Config Portd.5 = Output 'Port D.5 = Ausgang Rec - Taste
    Config Portd.4 = Output 'Port D.4 = Ausgang Stop - Taste
    Config Portd.3 = Output
    Config Portd.2 = Output



    Config Pinb.0 = Output 'Port b.0 = Ausgang
    Config Pinb.1 = Output 'Port b.1 = Ausgang
    Config Pinb.2 = Output 'Port b.2 = Ausgang
    Config Pinb.3 = Output 'Port b.3 = Ausgang
    Config Pinb.4 = Output 'Port b.4 = Ausgang

    Config Pinc.2 = Output 'Port c.2 = Ausgang (LCD-Beleuchtung Ein-Aus)
    Config Pinc.3 = Output 'Port c.3 = Ausgang (Nf-Verstärker-Eingang -> Alarmton)
    Config Pinc.4 = Output 'Port c.4 = Ausgang (Relais)
    Config Pinc.5 = Output 'Port c.5 = Ausgang (Relais)

    Speaker Alias Portc.3 'Tonausgabe

    Const Keys = 8 '8 x Eingänge

    Dim I As Byte
    Dim Key As Byte 'Variable mit Tastennummer
    Dim Var As Byte

    Dim X As Byte
    Dim Y As Byte
    Dim Z As Byte

    Deflcdchar 0 , 23 , 20 , 20 , 30 , 20 , 20 , 20 , 20 'Sonderzeichen HF

    'Initlcd



    '----------------------------Programmbeginn-------------------------------------


    Starte:
    'Sprungmarke 1
    X = 0

    Y = 0

    Cls

    Set Portc.2 'Port c.2 = Ausgang (LCD-Beleuchtung Ein )



    Initlcd

    Lcd " Alarmanlage - " ; Chr(0)
    Lowerline
    Lcd "Alle Schleifen aktiv"
    Thirdline
    Lcd " Starte Programm "
    Fourthline
    Lcd "--------------------"


    Wait 3

    Reset Portc.2 'Port c.2 = Ausgang (LCD-Beleuchtung Aus )


    Weiter: 'Sprungmarke 2

    Set Portc.2 'Port c.2 = Ausgang (LCD-Beleuchtung Ein )

    Cls

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

    auch wenn das Programm nicht ganz vollstädig ist,
    zum umschalten der 2 hälften des LCD musst Du die Variable _lcd_e ändern,
    so wie es in der Lib angegeben ist:

    Zitat Zitat von lcd-i2c.lib
    ;_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)
    Vor jedem LCD-Befehl, damit es die richtige Hälfte erreicht, bzw. immer wenn auf die andre umgeschaltet werden soll !

    Das Initlcd weiter oben angeben, bevor der erste LCD-Befehl vorkommt,

    PS:
    Programmausschnitte bitte immer mit Code-Tags versehen, dann liest es sich besser !

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    5
    Hallo,
    danke für denn Tipp !
    ich habe die Variable auf 192 geändert die Anzeige funktioniert aber so
    noch nicht, was ich noch versucht habe , die Frequenz mit 32 MHz anzugeben ($crystal = 32000000) der Quarz ist aber 16MHz , so funktioniert die Anzeige

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    17.11.2007
    Beiträge
    5
    Hallo Linux_80,
    danke nochmals für die Unterstützung =D>

    Ich habe es mit dem 'Config I2Cdelay = 10 ' Befehl versucht das Programm funktioniert jetzt einwanfrei (die Daten wurden zu schnell an
    an die LCDanzeige gesendet.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Wenns an diesem Befehle gelegen hat, war der PCF die Schwachstelle, der kann nur bis ca. 100kHz, wenn der AVR zu schnell sendet kann schon mal eine Übertragung verloren gehen, obwohl die lcd-i2c-lib alles dreimal sendet

Berechtigungen

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