Other Parts Discussed in Thread: EK-TM4C123GXL
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.