Hello,
I am connecting TIVA C Launchpad with 20x2 LCD. when I turn on the power only I can see is the pixel blinking on the first row . Below is my connection details:
PB0 to PB7 : Data pins
PD0 : RS
PD1: E
R/W :GND
I have referred the below post and made corrections accordingly :
http://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/385440
#include <stdint.h> #include <stdbool.h> #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "utils/uartstdio.h" //***************************************************************************** // // The error routine that is called if the driver library encounters an error. // //***************************************************************************** #ifdef DEBUG void __error__(char *pcFilename, uint32_t ui32Line) { } #endif //LCD code //PB0 to PB1 Data Lines //PD0 = RS //PD1 = E //R/W = GND void LCD_command(unsigned char data) { GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1,0x00); // PD0=RS=0, PD1=E=0 GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,data); // DATA Pins GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1,0x00); // PD0=RS=0, PD1=E=0 SysCtlDelay(SysCtlClockGet()/03); // 1 sec delay GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1,0x02); // enabling LCD by high to low pulse E=1, PD1 high SysCtlDelay(SysCtlClockGet()/03); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1,0x00); // RS=0, E=0 } void LCD_data(unsigned char data) { GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1,0x00); // PD0=RS=0, PD=E=0 GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,data); // DATA Pins //GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1,0x01); // PD0=RS=1, PD1=E=0 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,1); // PD0=RS=1, PD1=E=0 SysCtlDelay(SysCtlClockGet()/03); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1,0x02); //PD0=RS=0, PD1=E=1 SysCtlDelay(SysCtlClockGet()/03); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1,0x03); //PD0=RS=1, PD1=E=1 } void LCD_Init() { SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x038); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x038); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x038); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x038); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x06); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x0c); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x41); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x41); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x43); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x44); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0xC0); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x41); SysCtlDelay(SysCtlClockGet()/03); LCD_command(0x03); SysCtlDelay(SysCtlClockGet()/03); } void LCD_String_Display(unsigned char*str) { while(*str); { LCD_data(*str); str++; } } int main(void) { //SysCtlClockSet (SYSCTL_SYSDIV_16|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); ROM_SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1); LCD_Init(); LCD_String_Display("A"); }
Please let me know what am I missing..? I have kept the system clock delay 1 sec, and verified with the scope.
Let me know if there is something wrong.