PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD am RP6 Control M32



tobuc0
11.02.2009, 19:18
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

Gerko
11.02.2009, 21:43
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:


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:


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:


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

tobuc0
12.02.2009, 14:46
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

Dirk
14.02.2009, 13:50
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:

#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:

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

Peter84
02.10.2009, 20:34
@ 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.