- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 10

Thema: 4 zeilen LCD-display an der m32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    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

  2. #2
    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

Ä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
  •  

Solar Speicher und Akkus Tests