KS0066 LCD Problem (HD44780 kompatibel)

  • Hallo,

    ich habe hier ein 20x4 LCD mit KS0066 Controller, welches ich nach folgendem Schema angeschlossen habe:

    http://www.raspberrypi-spy.co.uk/2012/08/20x4-l…l-using-python/

    Den Code habe ich auch übernommen von der Seite.
    Beim Einschalten zeigen Zeile 1 und 3 volle Kästen, was so ja erstmal schon ok ist.

    Leider bekomm ich mit dem Code keine Anzeige. Die Hintergrundbeleuchtung wird per GPIO eingeschaltet, aber die Anzeige selbst verändert sich nicht. Ich finde im Netz leider kaum was hilfreiches. Eine Vermutung ist, dass das LCD_init nicht passt, aber da hab ich keine Ahnung. Hat vielleicht jmd. eine Idee?

    VG
    F.

    Einmal editiert, zuletzt von Fistandantilus (7. März 2014 um 06:31)


  • Wie Turbotoni schon andeutet, könnte es am Kontrast liegen. Wenn der zu schwach ist, erkennt man die Veränderung auf dem Display nicht.

    daran kann es unmöglich liegen weil :

    Beim Einschalten zeigen Zeile 1 und 3 volle Kästen, was so ja erstmal schon ok ist.

    es ist das Init, das ist beim KS0066 anders, siehe:

    http://homepage.hispeed.ch/peterfleury/lcdlibrary.zip

    Code
    #if LCD_CONTROLLER_KS0073
    #define KS0073_EXTENDED_FUNCTION_REGISTER_ON  0x2C   /* |0|010|1100 4-bit mode, extension-bit RE = 1 */
    #define KS0073_EXTENDED_FUNCTION_REGISTER_OFF 0x28   /* |0|010|1000 4-bit mode, extension-bit RE = 0 */
    #define KS0073_4LINES_MODE                    0x09   /* |0|000|1001 4 lines mode */
    
    
    #endif

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Danke für Eure Tipps. Kontrast würde ich ausschließen, der ist gut über den Poti regelbar.

    jar: reichen die 3 Zeilen? Beim HD44780 sind es diese:

    def lcd_init():
    # Initialize display
    lcd_byte(0x33,LCD_CMD)
    lcd_byte(0x32,LCD_CMD)
    lcd_byte(0x28,LCD_CMD)
    lcd_byte(0x0C,LCD_CMD)
    lcd_byte(0x06,LCD_CMD)
    lcd_byte(0x01,LCD_CMD)

    Ich kann es erst heute Abend testen, würde es dann nur mit den 3 probieren:
    lcd_byte(0x2C,LCD_CMD)
    lcd_byte(0x28,LCD_CMD)
    lcd_byte(0x09,LCD_CMD)

    Müssen noch irgendwelche delays berücksichtigt werden?


  • jar: reichen die 3 Zeilen? Beim HD44780 sind es diese:?

    weiss ich nicht, dazu müsste man den fleury quellcode durchsehen wo ich den Link gezeigt habe, ggffs. ändert sich ja auch was am Timing oder der Prozedur


    Müssen noch irgendwelche delays berücksichtigt werden?

    s.o.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ich komm nicht weiter :(

    Hab hier noch ein Datasheet gefunden, das passen müsste: http://www.display-elektronik.de/INITIALIZATION.PDF

    Ich weiß aber nicht, was ich hierfür im Code angeben muss:

    RS R/W DB7 DB6 DB5 DB4
    Ø Ø Ø Ø 1 Ø
    Ø Ø N F X X

    und

    RS R/W DB7 DB6 DB5 DB4
    Ø Ø Ø Ø Ø Ø
    Ø Ø Ø 1 I/D S

    Hmm, N, F, I/D und S hab ich jetzt gefunden. Läuft trotzdem nicht :( X hab ich einfach ignoriert und mit 0010 gerechnet, ist das richtig?

    time.sleep(0.03)
    lcd_byte(0x3,LCD_CMD)
    time.sleep(0.000004)
    lcd_byte(0x3,LCD_CMD)
    time.sleep(0.0001)
    lcd_byte(0x3,LCD_CMD)
    lcd_byte(0x2,LCD_CMD)
    lcd_byte(0x2,LCD_CMD)
    lcd_byte(0xE,LCD_CMD)
    lcd_byte(0x0,LCD_CMD)
    lcd_byte(0x2,LCD_CMD)
    lcd_byte(0xC,LCD_CMD)
    lcd_byte(0x0,LCD_CMD)
    lcd_byte(0x1,LCD_CMD)
    lcd_byte(0x6,LCD_CMD)

    Einmal editiert, zuletzt von Fistandantilus (7. März 2014 um 21:04)

  • Hallo,

    ich habe es mittlerweile aufgegeben und verwende jetzt ein grafisches Display (C-Berry). Das hat auf Anhieb funktioniert und ist zudem noch schöner :)
    Sorry dass ich Dir nicht weiterhelfen konnte. Aber mehr Zeit wollte ich damit nicht verschwenden.

    VG
    F.

  • Hallo.
    Also diesen Initroutine kommt mir etwas spanisch vor.
    Die 0x33 muss 3x aber mit unterschiedlichen Zeiten gesendet werden.
    Nach dem ersten mal 15 ms pause dann jeweils 1ms.
    Den Rest mach ich mit ~60 müsec.

    Auch finde ich die Anzahl komisch.

    hier mal meine.
    Ich hab 2 4-Zeiler a 20 Zeichen und fahre auch 4-bit Mode.
    Das sind die Parameter:

    Code
    #define LCDDUMMY   0b00110000						//lcd init sequence, must be send 3 times
    #define LCDFUNCT   0b00101100						//4 bit interface,4 lines,5x7 matrix
    #define LCDDISPCUR 0b00001100						//disp on,cur off,no blinc,shift cur right
    #define LCDCLS	 0b00000001						//clear disp
    #define LCDCURHOME 0b00000010						//set cur to home pos

    Das ist die eigentliche Routine:

    Diese "X" bedeuted "don't care", spielt also keine Rolle was da drin steht, da es eh nicht berücksichtigt wird.

    gruß root

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!