- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 10

Thema: 4 zeilen LCD-display an der m32

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180

    4 zeilen LCD-display an der m32 (KS0066 / HD44780 kompatibel)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    @TrainMen:

    ich kann mich ganz matt daran erinnern, dass Du in irgend einem thema (ich glaube die solar-ladestation) erwähnt hast, dass Du ein 4zeilen-display verwendest. War es zufällig dieses hier? Kompatibel zu HD44780?

    gab es probleme mit dem anschluss?

    was ich habe, ist folgendes:

    1 (GND)
    2 (+5V)
    3 (Kontrast)
    4 (RS)
    5 (R/W)
    6 (E)
    11 (Daten 4)
    12 (Daten 5)
    13 (Daten 6)
    14 (Daten 7)
    15 (LED +5V)
    16 (LED GND)

    musstest Du die lib anpassen?

    wäre schön, wenn Du ein paar infos hättest
    Geändert von inka (20.11.2013 um 13:39 Uhr)
    gruß inka

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    Hi inka,
    ich habe mein 4x16 Display aus einem Bedienpult ausgebaut, was das mal war weiß ich nicht. Jedenfalls ist das Display HD44780 kompatibel. Probleme mit dem Anschluss gab es keine. Wenn Du soweit bist wähle das Kabel nicht zu kurz aus, wähle es so das es auf beiden Seite passt und in verschiedene Ebenen. Denke auch an ein Zugentlastung auf der Display Seite.
    Die RP6ControlLib.h und die RP6ControlLib.c muß natürlich auf 4 Zeilen angepasst werden.
    Gruß TrainMen

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi,

    sollte der harwareseitiger anschluss der kontakte (1-14) 1:1 durchgezogen werden, also so?


    HD-44780 RP-DSP88 M32
    2 zeilen 4 zeilen LCD connector

    1 GND) VSS GND
    2 +5V VDD (5V) VDD
    3 Kontrast Vo Vo
    4 RS RS RS
    5 R/W RW RW
    6 E E EN
    7
    DB0 D0
    8
    DB1 D1
    9
    DB2 D2
    10
    DB3 D3
    11 Daten 4 DB4 D4
    12 Daten 5 DB5 D5
    13 Daten 6 DB6 D6
    14 Daten 7 DB7 D7
    15 LED +5V LED A (5V) -
    16 LED GND LED K -
    gruß inka

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hallo allerseits,

    in einem anderen thread wurde eigeninitiative verlangt. sicher zurecht, die muss man haben. Meine eigeninitiative bewegt sich im bereich try & error, wie hier bei dem display auch ....

    ich habe das 4-zeilen display (es ist lt. datenblatt kompatibel zu HD44780) wie im vorhergehendem post angeschlossen, die LCD bleibt dunkel (das 2-zeilen funktioniert aber nach wie vor) .
    ..

    Wahrscheinlich habe ich mir das wieder viel zu einfach vorgestellt. Nach der tabelle im letzten post hätte eigentlich die verdrahtung des 4-zeilen displays mit dem M32 displaystecker genauso sein müssen, wie die des 2-zeilen...


    das es nicht funktioniert,
    hängt es zusammen:


    - mit der noch nicht angepassten lib, oder sollten hier zumindest die ersten beiden zeilen gehen?

    - mit den nicht angeschlossenen kontakten 15/16 (die aber beim 2-zeilen display auch nicht angeschlossen sind)?

    - mit irgendwelchen vertauschten / verwechselten / zuviel angeschlossenen kontakten?


    ich bin einfach ratlos...
    Geändert von inka (19.11.2013 um 07:55 Uhr)
    gruß inka

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    Anschluß müßte so ok sein.
    Die fehlenden LED-Anschlüsse sind nicht das Problem.

    Die RP6ControlLib muss natürlich auf 4x20 geändert werden (Tipps z.B. hier!), wobei sie aber eigentlich auf deinem LCD auch so etwas zeigen könnte.

    Ausnahme: Wenn dein 4x20-LCD eine andere Initialisierung braucht, müßte man die Funktion initLCD() anpassen. Das geht nur mit Datenblatt.

    In dem o.g. Thread ist eine an den KS0073 angepaßte Init-Funktion enthalten. Probier die evtl. mal aus.
    Sonst hilft nur: Datenblatt vom KS0066 lesen und passende Init-Funktion schreiben. Mir hilft auch immer diese Seite mit vielen Infos rund um LCDs.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    @Dirk,

    ich habe noch einmal überlegt:

    der RP weiss doch beim einschalten nichts von der controllib.c oder h? trotzdem wird das 2-zeilen display beleuchtet und der RP meldet sich...

    Und das 4-zeilen display blebibt dunkel - deutet soetwas nicht eher auf ein hardwareproblem?
    gruß inka

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    das RP6-LCD wird beleuchtet, weil ja die Hintergrundbeleuchtung funktioniert.

    Bei deinem 4x20-LCD hast du ja LED +5V/GND nicht angeschlossen, also bleibt es dunkel. Daraus kann man noch kein "Hardwareproblem" schließen.
    Du kannst ja LED +5V/GND anschließen, dann müßte die Hintergrundbeleuchtung funktionieren.

    Vielleicht entdeckst du dann ja auch, dass sich doch etwas auf dem 4x20-LCD tut. Wenn ja: Beschreib das mal!
    Übrigens: Es kann sein, dass du das Kontrast-Poti auf der M32 ganz an einen Anschlag (Richtung GND) drehen must, um überhaupt was zu sehen.
    Gruß
    Dirk

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    Hi Dirk,

    also hardwaremässig geht es jetzt:
    - die hintergrundbeleuchtung funktioniert
    - nach dem hinweis auf den poti (habe den noch nie verwendet / verwenden müssen) sind auch die ausgaben auf den ersten beiden zeilen sichtbar.

    ich habe hier noch einmal die änderungen in der controLib.c + h, die den treiberchip KS0073 betreffen) zusammengefasst:
    (Ich würde ganz gerne die änderungen für den KS0066 hier an einem platz festhalten wollen, sollten fehler drinn sein, bitte um einen hinweis)


    die initalisierung
    Code:
    von:
    void initLCD(void)
    {
        //delayCycles(34000); No need for Power ON delay as usually the
        // Bootloader should have been executed before...
        setLCDD(0b0011);
        delayCycles(18000);
        setLCDD(0b0011);
        delayCycles(5500);
        setLCDD(0b0011);
        delayCycles(5500);
        setLCDD(0b0010);
        delayCycles(5500);
        writeLCDCommand(0b00101000);
        delayCycles(5500);
        writeLCDCommand(0b00001000);
        delayCycles(5500);
        writeLCDCommand(0b00000001);
        delayCycles(5500);
        writeLCDCommand(0b00000010);
        delayCycles(5500);
        writeLCDCommand(0b00001100);
        delayCycles(5500);
    }
    
    in:
    void initLCD(void)
    {
        //delayCycles(34000); No need for Power ON delay as usually the
        // Bootloader should have been executed before...
        setLCDD(0b0011);
        delayCycles(18000);
        setLCDD(0b0011);
        delayCycles(5500);
        setLCDD(0b0011);
        delayCycles(5500);
        setLCDD(0b0010);
        delayCycles(5500);
        writeLCDCommand(0b00101100); //0=0: reverse off, 1=0: scroll off, 2=1: RE=1, 3=0: Lines = 1, 4=1: Set 4-Bit Mode,
        delayCycles(5500);
        writeLCDCommand(0b00001001); //4 Lines
        delayCycles(5500);
        writeLCDCommand(0b00101000); //RE wieder auf 0
        delayCycles(5500);
        writeLCDCommand(0b00001000); //0=0: Blink off, 1=0: cursor off, 2=0: display off
        delayCycles(5500);
        writeLCDCommand(0b00000001); //Clear display
        delayCycles(5500);
        writeLCDCommand(0b00000010); //Home Pos
        delayCycles(5500);
        writeLCDCommand(0b00001100); //Display on
        delayCycles(5500);
    }

    showScreenLCD_P:
    Code:
    von:
    void _showScreenLCD_P(const char *line1, const char *line2)
    {
        clearLCD();
        writeNStringLCD_P(line1);
        setCursorPosLCD(1, 0);
        writeNStringLCD_P(line2);
    }
    
    in:
    void _showScreenLCD_P(const char *line1, const char *line2, const char *line3, const char *line4)
    {
        clearLCD();
        writeNStringLCD_P(line1);
        setCursorPosLCD(1, 0);
        writeNStringLCD_P(line2);
        setCursorPosLCD(2, 0);
        writeNStringLCD_P(line3);
        setCursorPosLCD(3, 0);
        writeNStringLCD_P(line4);
    }

    setCursorPosLCD:
    Code:
    
    von:
    void setCursorPosLCD(uint8_t line, uint8_t pos)
    {
        pos |= 128;
        if(line==1) pos += 0x40;
        writeLCDCommand(pos);
    }
    
    in:
    void setCursorPosLCD(uint8_t line, uint8_t pos)
    {
       pos |= 128;
        if(line==1) pos += 0x40;
        else if(line==2) pos += 0x14;
        else if(line==3) pos += 0x54;
        writeLCDCommand(pos);
    }


    showScreenLCD_P:
    Code:
    von:
    //void _showScreenLCD_P(const char *line1, const char *line2);
    in:
    void _showScreenLCD_P(const char *line1, const char *line2, const char *line3, const char *line4);

    define showScreenLCD:
    Code:
    von:
    //#define showScreenLCD(__line1,__line2); ({_showScreenLCD_P((PSTR(__line1)),(PSTR(__line2)));})
    in:
    #define showScreenLCD(__line1,__line2,__line3,__line4); ({_showScreenLCD_P((PSTR(__line1)),(PSTR(__line2)),(PSTR(__line3)),(PSTR(__line4)));})

    char lcd_tmp_buffer:
    Code:
    von:
    char lcd_tmp_buffer[17];
    in:
    char lcd_tmp_buffer[21];
    hier die char buffer[17]; in char buffer[21];
    Code:
    void writeIntegerLengthLCD(int16_t number, uint8_t base, uint8_t length)
    {
        char buffer[21];
        itoa(number, &buffer[0], base);
        int8_t cnt = length - strlen(buffer);
        if(cnt > 0) {
            for(; cnt > 0; cnt--, writeCharLCD('0'));
            writeStringLCD(&buffer[0]);
        }
        else
            writeStringLengthLCD(&buffer[0],length,-cnt);
    }

    dieses testprogrämmchen:

    Code:
    #include "RP6ControlLib.h"
    
    
    int main(void)
    {
    
    
    initRP6Control();
    
    initLCD();
    
    while(true)
    {
    
    clearLCD();
    //showScreenLCD(" RP6Control M32", " ladestation_1", "test zeile 3", "test zeile 4");
    showScreenLCD(" test_zeile_1", " test_zeile_2", "test_zeile_3", "test_zeile_4");
    
    mSleep(1500);
    clearLCD();
    mSleep(1500);
    
    
    }
    
    
        return 0;
    }

    bringt diese ausgabe:
    Klicke auf die Grafik für eine größere Ansicht

Name:	display.jpg
Hits:	14
Größe:	37,1 KB
ID:	26769

    beim anklicken des "http://ww1.myke.com/lcd.htm" kommt nur "http://ww2.qfind.net/?_inv", also gibt es die seite nicht (mehr?)?

    ich denke die initialisierung stimmt so nicht, ich glaube, ich habe die anderen änderungen korrekt übertragen, jetzt werde ich also das datenblatt des KS0066 wälzen...
    Geändert von inka (21.11.2013 um 08:04 Uhr) Grund: Edit bei "setCursorPosLCD"
    gruß inka

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi inka,

    Glückwunsch, das sieht schon sehr gut aus.

    Die Initialisierung stimmt auch.

    Anpassen must du nur noch die Funktion setCursorPosLCD:
    Probier mal:
    Code:
    	pos |= 128;
    	if(line==1) pos += 0x40;
    	else if(line==2) pos += 0x14;
    	else if(line==3) pos += 0x54;
    ... und achte darauf, dass jede Zeile richtig ausgegeben wird.
    Nimm dazu einen Text, der für alle 4 Zeilen unterschiedlich ist und alle 20 Zeichen füllt.
    Gruß
    Dirk

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    76
    Beiträge
    2.180
    hi Dirk,

    danke, es funktioniert!

    habe den code geändert (auch in der zusammenfassung)...
    Klicke auf die Grafik für eine größere Ansicht

Name:	display_1.jpg
Hits:	12
Größe:	53,7 KB
ID:	26776
    gruß inka

Ähnliche Themen

  1. Display zeigt (ab und zu) nur auf zwei Zeilen an ?!
    Von Skragan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 08.12.2008, 12:33
  2. KS0073 und 4 Zeilen LCD
    Von -tim- im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 03.12.2007, 19:32
  3. lcd zeilen vertauscht
    Von elektropro im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 04.05.2007, 18:36
  4. Lcd Zeilen vertauscht
    Von Mr-400-Volt im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 08.04.2007, 10:45
  5. LCD: 2 von 4 Zeilen kaputt?
    Von chrisK im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 22.02.2005, 16:39

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad