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
Druckbare Version
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
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:
Damit ist das Display für den 4-Zeilenmodus eingestellt.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);
}
Nun kann man sich noch Spielen und die anderen Funktionen auf 4 Zeilen einpassen, das wäre einmal setCursorPosLCD:
Nun kann man z.b mitCode: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);
}
setCursorPosLCD(2,5); in die 2te Zeile auf Position 5 mit dem Cursor springen
und dann noch _showScreenLCD_P auf 4 Zeilen erweitern:
Bei der eingeabe musst du das folgendermaßen schreiben: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);
}
_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
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
Dafür gibt es ja in der RP6ControlLib.h ein Makro, das man noch so ändern könnte:Zitat:
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..."));
Code:#define showScreenLCD(__line1,__line2,__line3,__line4); ({_showScreenLCD_P((PSTR(__line1)),(PSTR(__line2)),(PSTR(__line3)),(PSTR(__line4)));})
Man sollte noch 2 Dinge anpassen:Zitat:
... ich glaub das war alles was ich geändert habe
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:
_showScreenLCD_P müßte man dann auch entsprechend ändern.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);
}
Gruß Dirk
@ 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. :-k
Für die Hilfe wäre ich dankbar.