Hello,
I am trying to connect 20x2 LCD, in 4 bit mode with tm4c129gxl Launchpad. Earlier I have done connected this LCD with tm4c123gxl Launchpad and it was working. I have used Hello example from the TIVAWARE and modified it as per requirement.
The problem is LCD does not display anything, I have checked on oscilloscope the EN and RS pins does not get high. Both the pins remains continuously in low state.
Is there any special care I need to take while porting the code from TM4C123 to TM4C129.
Please share your view. I am attaching my code for reference.
Thank you.
Regards,
Anup.
//*****************************************************************************
//
// hello.c - Simple hello world example.
//
// Copyright (c) 2012-2014 Texas Instruments Incorporated. All rights reserved.
// Software License Agreement
//
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
//
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 2.1.0.12573 of the EK-TM4C123GXL Firmware Package.
//
//*****************************************************************************
#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/gpio.c"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
//#include "driverlib/sysctl.c"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "inc/hw_gpio.h"
#include "inc/hw_sysctl.h"
#include "inc/tm4c1294ncpdt.h"
#include "drivers/pinout.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom_map.h"
//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif
// System clock rate in Hz.
//
//*****************************************************************************
uint32_t g_ui32SysClock;
//*****************************************************************************
//LCD code
//PE0 to PE3 Data Lines
//PD6 = RS
//PD7 = E
//R/W = GND
//#define databits GPIO_PORTE_AHB_DATA_R
#define databits GPIO_PORTE_AHB_DATA_R
void LCD_command(unsigned char data)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
SysCtlDelay(400);
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,data); // DATA Pins for 4 bit mode
SysCtlDelay(400);
databits=data>>4;
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x80);
SysCtlDelay(400);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
databits=data;
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x80);
SysCtlDelay(400);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
}
void LCD_command_8bit(unsigned char data)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
SysCtlDelay(15000);
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,data); // DATA Pins for 4 bit mode
SysCtlDelay(15000);
databits=(data);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x80);
SysCtlDelay(15000);
databits=(data);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
}
void LCD_data(unsigned char data)
{
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6|GPIO_PIN_7,0x00);
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,data); // DATA Pins for 4 bit mode
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6,GPIO_PIN_6);
SysCtlDelay(400);
databits=data>>4;
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7,GPIO_PIN_7);
SysCtlDelay(400);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7,0);
databits=data;
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7,GPIO_PIN_7);
SysCtlDelay(400);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_7,0);
}
void clear (void)
{
LCD_command(0x01);
SysCtlDelay(30000);
}
void LCD_Init()
{
// clear();
SysCtlDelay(SysCtlClockGet()/30);
LCD_command_8bit(0x30);
LCD_command_8bit(0x30);
LCD_command_8bit(0x30);
LCD_command_8bit(0x20);
LCD_command(0x28);
LCD_command(0x0C);
clear();
LCD_command(0x06);
}
void LCD_String_Display(unsigned char *str)
{
while(*str)
{
LCD_data(*str);
str++;
}
return;
}
int main(void)
{
g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
// SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE,GPIO_PIN_6|GPIO_PIN_7);
LCD_Init();
clear();
LCD_String_Display("WELCOME");
LCD_command(0xC0);
LCD_String_Display("WORLD");
SysCtlDelay(50000);
GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6,0x00);
}