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); }