why lcd works through time or not working at all?
i am using next schems
PE.0(72)->DB4(11)
PE.1(73)->DB5(12)
PE.2(74)->DB6(13)
PE.3(75)->DB7(14)
PB.0(66)->E(6)
PB.1(67)->RS(4)
GND->RW(5)
#include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/sysctl.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #ifdef DEBUG void __error__(char *pcFilename, unsigned long ulLine) { } #endif #define cursor_at_1stline 0x80 #define cursor_at_2ndline 0xC0 #define display 0x28 // DL - Set Data Interface Length /4(0) // N - Number of Display Lines /2(1) //F - Character Font /5x7(0) #define cursor_disp_off 0x08 #define cursor_disp_on_coff 0x0C #define cleardisp 0x01 #define cursorhome 0x02 #define incr_address_shift_cursor_with_eachcharacter_right 0x06 #define EN_HI GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_PIN_0) #define EN_LO GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, 0x00) #define RS_HI GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, GPIO_PIN_1) #define RS_LO GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1, 0x00) void delay_lcd(void) { unsigned long ulLoop; for(ulLoop = 0; ulLoop !=2000; ulLoop++) { } } void LCD_COMMAND(char cmd) { RS_LO; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, (cmd>>4)&0x0F); EN_HI; delay_lcd(); EN_LO; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, cmd&0x0F); EN_HI; delay_lcd(); EN_LO; delay_lcd(); } void LCD_DATA(char dat) { RS_HI; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, ((dat>>4)&0x0F)); EN_HI; delay_lcd(); EN_LO; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, (dat&0x0F)); EN_HI; delay_lcd(); EN_LO; delay_lcd(); } void Clear(void) { LCD_COMMAND (cleardisp); // clear the display delay_lcd(); // insure at least 2 msec } void LCD_Line1(void) { LCD_COMMAND (cursor_at_1stline); // set RAM address to Line 2 //note: this value may vary for different displays delay_lcd(); } // End of void Line1(void) void LCD_Line2(void) { LCD_COMMAND (cursor_at_2ndline); // set RAM address to Line 2 //note: this value may vary for different displays delay_lcd(); } int main(void) { // Set the clocking to run directly from the crystal. SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); // // Initialize ports //GPIOPortIntRegister(GPIO_PORTD_BASE, PortDIntHandler); GPIODirModeSet(GPIO_PORTD_BASE, GPIO_PIN_0 , GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0xff); SysCtlDelay(10000000); //********************************************************* // включили порты GPIODirModeSet(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3, GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTE_BASE, 0x0F, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1 , GPIO_DIR_MODE_OUT); GPIOPadConfigSet(GPIO_PORTB_BASE, 0x03, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); SysCtlDelay(3000000); RS_LO; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //0x03 //first command as in manual on lcd GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); delay_lcd(); SysCtlDelay(1000000); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28 // DL - Set Data Interface Length /4(0) // N - Number of Display Lines /2(1) //F - Character Font /5x7(0) GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; SysCtlDelay(1000000); delay_lcd(); /* GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28 GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd();*/ GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x28 replay last command GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x0f 1DCB display,cursor,blinky - on GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, GPIO_PIN_2); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, GPIO_PIN_3); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x01 clear display GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); //0x06 cursor options GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, GPIO_PIN_2); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); RS_HI; GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '1' GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '2' GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); //output '3' GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0, GPIO_PIN_0); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_2, 0x00); GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_3, 0x00); EN_HI; SysCtlDelay(1000000); EN_LO; delay_lcd(); LCD_DATA(' '); LCD_DATA('S'); LCD_DATA('K'); LCD_DATA('L'); LCD_DATA('A'); LCD_DATA('D'); LCD_DATA(' '); LCD_DATA('1'); LCD_DATA('2'); LCD_DATA('3'); LCD_DATA('4'); LCD_DATA('5'); LCD_DATA(' '); LCD_COMMAND(0xC0); LCD_DATA('S'); LCD_DATA('K'); LCD_DATA('L'); LCD_DATA('A'); LCD_DATA('D'); LCD_DATA(' '); LCD_DATA('1'); LCD_DATA('2'); LCD_DATA('3'); LCD_DATA('4'); LCD_DATA('5'); while(1) { SysCtlDelay(2000000); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0x01); // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0x01); SysCtlDelay(2000000); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0x00); // GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_0, 0x00); } }