-
        

Ergebnis 1 bis 5 von 5

Thema: LCD am RP6 Control M32

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2006
    Beiträge
    12

    LCD am RP6 Control M32

    Anzeige

    Hallo,

    ich würde gern ein LCD-Display LCM 20x4 STN am RP6 Control M32 betreiben. Welche Änderungen und wo sind dafür notwendig.

    Vielen Dank

    mfg tobuc0

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.02.2006
    Alter
    31
    Beiträge
    140
    Hallo, ich habe vor 2 Tagen ebenfalls ein solches Display auf meinen RP6 montiert, mein LCD-Display verwendet einen KS0073 Controller (die Änderungen hängen immer mit dem eingebauten Controller zusammen, also falls du nicht den gleichen hast, gieb das bitte auch noch an, sonst kann dir keiner helfen)

    Ich habe folgendes geändert:
    In void initLCD:

    Code:
    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);
    }
    Damit ist das Display für den 4-Zeilenmodus eingestellt.

    Nun kann man sich noch Spielen und die anderen Funktionen auf 4 Zeilen einpassen, das wäre einmal setCursorPosLCD:

    Code:
    void setCursorPosLCD(uint8_t line, uint8_t pos)
    {
    	pos |= 128;					//Schreib 1 auf Bit 7 um in DD RAM zu schreiben
    	if(line==1) pos += 0x00;	
    	if(line==2) pos += 0x20;	//+ 00100000
    	if(line==3) pos += 0x40;	//+ 01000000
    	if(line==4) pos += 0x60;	//+ 01100000
    	writeLCDCommand(pos);
    }
    Nun kann man z.b mit
    setCursorPosLCD(2,5); in die 2te Zeile auf Position 5 mit dem Cursor springen

    und dann noch _showScreenLCD_P auf 4 Zeilen erweitern:

    Code:
    void _showScreenLCD_P(const char *line1, const char *line2, const char *line3, const char *line4)
    {
    	clearLCD();
    	writeNStringLCD_P(line1);
    	setCursorPosLCD(2, 0);
    	writeNStringLCD_P(line2);
    	setCursorPosLCD(3, 0);
    	writeNStringLCD_P(line3);
    	setCursorPosLCD(4, 0);
    	writeNStringLCD_P(line4);
    }
    Bei der eingeabe musst du das folgendermaßen schreiben:
    _showScreenLCD_P(PSTR("Das ist die Zeile 1"),PSTR("...Zeile2"),PSTR("... Zeile 3"),PSTR("...e' scho wissn..."));

    Ok, ich glaub das war alles was ich geändert habe, wenn du jetzt den gleichen, bzw. einen kompatiblen Controller also z.b HD44780 hast, dann müsste das funktionieren.

    mfg Gerko

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2006
    Beiträge
    12

    LCD am RP6 Control M32

    Hallo,

    erstmal vielen Dank für die Antwort.
    Es handelt sich natürlich um einen KS0066.
    Dies vergaß ich zu erwähnen.
    Aber die Init-Sequenzen von Gerko helfen mir schon weiter, da mir
    der Umfang der Änderungen nicht ganz klar war, das Prinzip schon.
    also vielen Dank nochmal.

    mfg tobuc0

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Bei der eingeabe musst du das folgendermaßen schreiben:
    _showScreenLCD_P(PSTR("Das ist die Zeile 1"),PSTR("...Zeile2"),PSTR("... Zeile 3"),PSTR("...e' scho wissn..."));
    Dafür gibt es ja in der RP6ControlLib.h ein Makro, das man noch so ändern könnte:
    Code:
    #define showScreenLCD(__line1,__line2,__line3,__line4); ({_showScreenLCD_P((PSTR(__line1)),(PSTR(__line2)),(PSTR(__line3)),(PSTR(__line4)));})
    ... ich glaub das war alles was ich geändert habe
    Man sollte noch 2 Dinge anpassen:
    a) char lcd_tmp_buffer[17]; in char lcd_tmp_buffer[21]; ändern
    b) char buffer[17]; in char buffer[21]; ändern (in der Funktion writeIntegerLengthLCD)

    In der Funktion setCursorPosLCD wäre mir sympatischer, bei den Zeilennummern von 0..3 zu bleiben wie bei der ursprünglichen Lib, die die Zeilen auch ab 0 zählt (Geschmackssache!). Dann würde das so aussehen:
    Code:
    void setCursorPosLCD(uint8_t line, uint8_t pos)
    {
    	pos |= 128;
    	if(line==1) pos += 0x20;
    	if(line==2) pos += 0x40;
    	if(line==3) pos += 0x60;
    	writeLCDCommand(pos);
    }
    _showScreenLCD_P müßte man dann auch entsprechend ändern.

    Gruß Dirk

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    20.02.2009
    Ort
    Lübbecke
    Alter
    33
    Beiträge
    8
    @ tobuc0
    In wie weit hast Uu die Dateien RP6ControlLib.c und RP6ControlLib.h geändert? (hab das gleiche LCD)
    Kannst Du die mal hier posten, ich krieg die Äderungen selber nicht hin.
    Ich kann zwar in den ersten 2 Zeilen 20 Zeichen schreiben aber die 3. und 4.
    Für die Hilfe wäre ich dankbar.

Berechtigungen

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