oderlachs
12.07.2013, 15:36
Hallo !
Viielleicht ist es ja wieder mein "berühmtes Brett vorm Ko..", aber ich komme mit einem ser. LCD einfach nicht dazu ,dass es Zeichen ausgibt.
Hier die Angaben des Herstellers der seriellen Ansteuerung:
/* ================================================== ======================== */
/* */
/* Vom Hersteller 'Grove' vorgegebene Kommandovariablen */
/* */
/* */
/* ================================================== ======================== */
/* */
/* Initialisations Commands or Responses */
/* */
/* */
/* ================================================== ======================== */
#define UART_READY 0xA3
#define SLCD_INIT_ACK 0xA5
#define SLCD_INIT_DONE 0xAA
#define SLCD_INVALIDCOMMAND 0x46
/* ================================================== ======================== */
/* */
/* WorkingMode Commands or Responses */
/* */
/* */
/* ================================================== ======================== */
//
#define SLCD_CONTROL_HEADER 0x9F
#define SLCD_CHAR_HEADER 0xFE
#define SLCD_CURSOR_HEADER 0xFF
#define SLCD_CURSOR_ACK 0x5A
#define SLCD_RETURN_HOME 0x61
#define SLCD_DISPLAY_OFF 0x63
#define SLCD_DISPLAY_ON 0x64
#define SLCD_CLEAR_DISPLAY 0x65
#define SLCD_CURSOR_OFF 0x66
#define SLCD_CURSOR_ON 0x67
#define SLCD_BLINK_OFF 0x68
#define SLCD_BLINK_ON 0x69
#define SLCD_SCROLL_LEFT 0x6C
#define SLCD_SCROLL_RIGHT 0x72
#define SLCD_NO_AUTO_SCROLL 0x6A
#define SLCD_AUTO_SCROLL 0x6D
#define SLCD_LEFT_TO_RIGHT 0x70
#define SLCD_RIGHT_TO_LEFT 0x71
/* ================================================== ======================== */
/* */
/* ab Firmware 1.0b und höher benutzbar */
/* */
/* */
/* ================================================== ======================== */
#define SLCD_BACKLIGHT_ON 0x81
#define SLCD_BACKLIGHT_OFF 0x80
#define SLCD_POWER_ON 0x83
#define SLCD_POWER_OFF 0x82
/* ================================================== ======================== */
/* */
/* */
/* */
/* */
/* ================================================== ======================== */
Ich habe nun Funktionen geschrieben die damit arbeiten sollten:
/* ================================================== ======================== */
/* */
/* initialisierung des LCD */
/* */
/* ================================================== ======================== */
void lcd_begin(void)
{
usart_init();
wait_lcd(2000);
putchar(0x9F); // send CMD-Header
putchar(0x82); // send Power OFF
wait_lcd(1000); //1000ms
putchar(0x9F); // send CMD-Header
putchar(0x81); // send Backlight ON
wait_lcd(1000);
putchar(0x9F); // send CMD-Header
putchar(0xA3); // send LCD Init
wait_lcd(2000);
//wait_lcd(500);
}
/* ================================================== ======================== */
LCD lässt sich ein und ausschalten auch die Beleuchtung, gar kein Thema nun die Schreibfunktion:
/* ================================================== ======================== */
/* */
/* schreibe Text auf Display */
/* */
/* */
/* ================================================== ======================== */
void write_display(char *str)
{
putchar(0xFE); // send Char-Header
while(*str)
{
puts(*str); // sende Stringzeichen
str++;
}
}
//************************************************** **************************
//puts funktion hier:
//************************************************** **************************
/* ================================================== ======================== */
/* */
/* Sende String ohne CR/LF */
/* */
/* */
/* ================================================== ======================== */
void puts( char *s )
{
while( *s )
putchar( *s);
s++;
}
//************************************************** ****************************
putchar hier:
//************************************************** ****************************
/* ================================================== ======================== */
/* */
/* Sende Char ohne CR/LF */
/* */
/* */
/* ================================================== ======================== */
void putchar( char c )
{
while( (UCSRA & 1<<UDRE) == 0 );
UDR = c;
}
//************************************************** ****************************
Hier das Testprogr ohne Headerdetails
int main (void)
{
lcd_begin();
write_display("Test");
wait_lcd(2000);
SerialLCD_noBacklight();
}
Ich weiss nicht mehr wie ich dem Teil beibiegen soll endlich Zeichen auszugeben, es ist nicht defekt !! // Mit Arduino-Example getestet = OK!!
Hat wer bitte eine Idee ???
Gruss
Gerhard
Viielleicht ist es ja wieder mein "berühmtes Brett vorm Ko..", aber ich komme mit einem ser. LCD einfach nicht dazu ,dass es Zeichen ausgibt.
Hier die Angaben des Herstellers der seriellen Ansteuerung:
/* ================================================== ======================== */
/* */
/* Vom Hersteller 'Grove' vorgegebene Kommandovariablen */
/* */
/* */
/* ================================================== ======================== */
/* */
/* Initialisations Commands or Responses */
/* */
/* */
/* ================================================== ======================== */
#define UART_READY 0xA3
#define SLCD_INIT_ACK 0xA5
#define SLCD_INIT_DONE 0xAA
#define SLCD_INVALIDCOMMAND 0x46
/* ================================================== ======================== */
/* */
/* WorkingMode Commands or Responses */
/* */
/* */
/* ================================================== ======================== */
//
#define SLCD_CONTROL_HEADER 0x9F
#define SLCD_CHAR_HEADER 0xFE
#define SLCD_CURSOR_HEADER 0xFF
#define SLCD_CURSOR_ACK 0x5A
#define SLCD_RETURN_HOME 0x61
#define SLCD_DISPLAY_OFF 0x63
#define SLCD_DISPLAY_ON 0x64
#define SLCD_CLEAR_DISPLAY 0x65
#define SLCD_CURSOR_OFF 0x66
#define SLCD_CURSOR_ON 0x67
#define SLCD_BLINK_OFF 0x68
#define SLCD_BLINK_ON 0x69
#define SLCD_SCROLL_LEFT 0x6C
#define SLCD_SCROLL_RIGHT 0x72
#define SLCD_NO_AUTO_SCROLL 0x6A
#define SLCD_AUTO_SCROLL 0x6D
#define SLCD_LEFT_TO_RIGHT 0x70
#define SLCD_RIGHT_TO_LEFT 0x71
/* ================================================== ======================== */
/* */
/* ab Firmware 1.0b und höher benutzbar */
/* */
/* */
/* ================================================== ======================== */
#define SLCD_BACKLIGHT_ON 0x81
#define SLCD_BACKLIGHT_OFF 0x80
#define SLCD_POWER_ON 0x83
#define SLCD_POWER_OFF 0x82
/* ================================================== ======================== */
/* */
/* */
/* */
/* */
/* ================================================== ======================== */
Ich habe nun Funktionen geschrieben die damit arbeiten sollten:
/* ================================================== ======================== */
/* */
/* initialisierung des LCD */
/* */
/* ================================================== ======================== */
void lcd_begin(void)
{
usart_init();
wait_lcd(2000);
putchar(0x9F); // send CMD-Header
putchar(0x82); // send Power OFF
wait_lcd(1000); //1000ms
putchar(0x9F); // send CMD-Header
putchar(0x81); // send Backlight ON
wait_lcd(1000);
putchar(0x9F); // send CMD-Header
putchar(0xA3); // send LCD Init
wait_lcd(2000);
//wait_lcd(500);
}
/* ================================================== ======================== */
LCD lässt sich ein und ausschalten auch die Beleuchtung, gar kein Thema nun die Schreibfunktion:
/* ================================================== ======================== */
/* */
/* schreibe Text auf Display */
/* */
/* */
/* ================================================== ======================== */
void write_display(char *str)
{
putchar(0xFE); // send Char-Header
while(*str)
{
puts(*str); // sende Stringzeichen
str++;
}
}
//************************************************** **************************
//puts funktion hier:
//************************************************** **************************
/* ================================================== ======================== */
/* */
/* Sende String ohne CR/LF */
/* */
/* */
/* ================================================== ======================== */
void puts( char *s )
{
while( *s )
putchar( *s);
s++;
}
//************************************************** ****************************
putchar hier:
//************************************************** ****************************
/* ================================================== ======================== */
/* */
/* Sende Char ohne CR/LF */
/* */
/* */
/* ================================================== ======================== */
void putchar( char c )
{
while( (UCSRA & 1<<UDRE) == 0 );
UDR = c;
}
//************************************************** ****************************
Hier das Testprogr ohne Headerdetails
int main (void)
{
lcd_begin();
write_display("Test");
wait_lcd(2000);
SerialLCD_noBacklight();
}
Ich weiss nicht mehr wie ich dem Teil beibiegen soll endlich Zeichen auszugeben, es ist nicht defekt !! // Mit Arduino-Example getestet = OK!!
Hat wer bitte eine Idee ???
Gruss
Gerhard