4 zeilen LCD-display an der m32 (KS0066 / HD44780 kompatibel)
@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 :-)
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Anhang 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...
Liste der Anhänge anzeigen (Anzahl: 1)
hi Dirk,
danke, es funktioniert!
habe den code geändert (auch in der zusammenfassung)...
Anhang 26776