Edit: Scroll down, the updated code is in another later post.
hi,
Does the reset button or debugging remove power from the microcontroller?
I'm trying to debug a problem using the Hibernation module on the Connected Launchpad. I'm working on a RTC program that displays date and time on a Nokia5110 LCD. I'm using the button 1 & 2 on the launchpad to interact with the setup mode. I have a function that sets the time and one that displays it. I'm using all local variables in functions.
Everything works good after, I set the time in setup. But reset on the board or flashing screws it all up again.
It's like the Hibernation module is losing power or I'm programming it wrong.
I have some cleaning up to do. but here is the code:
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>
#include "inc/hw_gpio.h"
#include "inc/hw_hibernate.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_sysctl.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/hibernate.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
static char *textMonth[12] =
{
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
};
void Nokia5110_Init();
void Nokia5110_Clear();
void Nokia5110_SmallDec(unsigned short n);
void Nokia5110_OutString(char *ptr);
void SetTime();
void DisplayTime ();
void Nokia5110_SetCursor(unsigned char newX, unsigned char newY);
int main(void) {
unsigned long ui32SysClock;
struct tm sTime;
ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000);
SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
HibernateEnableExpClk(ui32SysClock);
HibernateClockConfig(HIBERNATE_OSC_LOWDRIVE);
HibernateRTCEnable();
HibernateCounterMode(HIBERNATE_COUNTER_12HR); //use 12 hour AM/PM calender mode
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
GPIOPinTypeGPIOInput(GPIO_PORTJ_BASE,GPIO_PIN_0 | GPIO_PIN_1);
//setup internal pull up resistors page 119
GPIOPadConfigSet(GPIO_PORTJ_BASE,GPIO_PIN_0 | GPIO_PIN_1, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
Nokia5110_Init();
Nokia5110_Clear();
HibernateCalendarSet(&sTime);
while(1){
DisplayTime ();
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){
SysCtlDelay(200000000); //40 million is 1 Second
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){
SetTime();
}
}
}
}
void DisplayTime (){
struct tm sTime;
char AMPM[3] = "AM";
int lastUpdate = 100;
HibernateCalendarGet(&sTime);
if(lastUpdate == sTime.tm_sec){return;}
if(sTime.tm_hour == 0)
{
sTime.tm_hour = 12;
strcpy(AMPM, "AM");
}
else if(sTime.tm_hour == 12)
{
strcpy(AMPM, "PM");
}
else if(sTime.tm_hour > 12)
{
sTime.tm_hour -= 12;
strcpy(AMPM, "PM");
}
Nokia5110_SetCursor(0,0);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(0,0);
Nokia5110_OutString(textMonth[sTime.tm_mon]);
Nokia5110_OutString(":");
Nokia5110_SmallDec(sTime.tm_mday);
Nokia5110_OutString(":20");
Nokia5110_SmallDec(sTime.tm_year - 100);
Nokia5110_SetCursor(0,1);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(0,1);
Nokia5110_SmallDec(sTime.tm_hour);
Nokia5110_OutString(":");
Nokia5110_SmallDec(sTime.tm_min);
Nokia5110_OutString(":");
Nokia5110_SmallDec(sTime.tm_sec);
Nokia5110_OutString(" ");
Nokia5110_OutString(AMPM);
}
void SetTime(){
struct tm sTime;
int dayOfWeek = 0;
int hour = 1;
int minute = 0;
int dayOfMonth = 1;
int month = 0;
int year = 0;
unsigned long Check = 0;
Nokia5110_Clear();
Nokia5110_OutString(" SET TIME");
SysCtlDelay(60000000);
//---Set Year---
Nokia5110_Clear();
Nokia5110_SetCursor(2,1);
Nokia5110_OutString("SET YEAR");
Nokia5110_SetCursor(4,3);
Nokia5110_OutString("20");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = year;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
year++;
}
if (year > 30){year = 0;}
if (Check != year){
Nokia5110_SetCursor(6,3);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(6,3);
}
Nokia5110_SetCursor(6,3);
Nokia5110_SmallDec(year);
}
SysCtlDelay(40000000);
//---Set Month---
Nokia5110_Clear();
Nokia5110_SetCursor(2,1);
Nokia5110_OutString("SET MONTH");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = month;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
month++;
}
if (month > 11){month = 0;}
if (Check != month){
Nokia5110_SetCursor(1,3);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(1,3);
}
Nokia5110_SetCursor(1,3);
if (month == 0){Nokia5110_OutString("JANUARY");}
if (month == 1){Nokia5110_OutString("FEBRUARY");}
if (month == 2){Nokia5110_OutString("MARCH");}
if (month == 3){Nokia5110_OutString("APRIL");}
if (month == 4){Nokia5110_OutString("MAY");}
if (month == 5){Nokia5110_OutString("JUNE");}
if (month == 6){Nokia5110_OutString("JULY");}
if (month == 7){Nokia5110_OutString("AUGUST");}
if (month == 8){Nokia5110_OutString("SEPTEMBER");}
if (month == 9){Nokia5110_OutString("OCTOBER");}
if (month == 10){Nokia5110_OutString("NOVEMBER");}
if (month == 11){Nokia5110_OutString("DECEMBER");}
}
SysCtlDelay(40000000);
//---Day of the Month---
Nokia5110_Clear();
Nokia5110_SetCursor(1,1);
Nokia5110_OutString("SET DAY OF");
Nokia5110_SetCursor(1,2);
Nokia5110_OutString("THE MONTH");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = dayOfMonth;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
dayOfMonth++;
}
if (dayOfMonth > 31){dayOfMonth = 1;}
if (Check != dayOfMonth){
Nokia5110_SetCursor(5,3);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(5,3);
}
Nokia5110_SetCursor(5,3);
Nokia5110_SmallDec(dayOfMonth);
}
SysCtlDelay(40000000);
//---Day of the Week---
Nokia5110_Clear();
Nokia5110_SetCursor(1,1);
Nokia5110_OutString("SET DAY OF");
Nokia5110_SetCursor(1,2);
Nokia5110_OutString("THE WEEK");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = dayOfWeek;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
dayOfWeek++;
}
if (dayOfWeek > 6){dayOfWeek = 0;}
if (Check != dayOfWeek){
Nokia5110_SetCursor(1,4);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(1,4);
}
Nokia5110_SetCursor(1,4);
if (dayOfWeek == 0){Nokia5110_OutString("SUNDAY");}
if (dayOfWeek == 1){Nokia5110_OutString("MONDAY");}
if (dayOfWeek == 2){Nokia5110_OutString("TUESDAY");}
if (dayOfWeek == 3){Nokia5110_OutString("WEDNESDAY");}
if (dayOfWeek == 4){Nokia5110_OutString("THURSDAY");}
if (dayOfWeek == 5){Nokia5110_OutString("FRIDAY");}
if (dayOfWeek == 6){Nokia5110_OutString("SATURDAY");}
Nokia5110_SetCursor(1,4);
}
SysCtlDelay(40000000);
//---Hour of the Day---
Nokia5110_Clear();
Nokia5110_SetCursor(1,1);
Nokia5110_OutString("SET HOUR");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = hour;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
hour++;
}
if (hour > 23){hour = 0;}
if (Check != hour){
Nokia5110_SetCursor(5,3);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(5,3);
}
Nokia5110_SetCursor(5,3);
Nokia5110_SmallDec(hour);
}
SysCtlDelay(40000000);
//---Minute of the Hour---
Nokia5110_Clear();
Nokia5110_SetCursor(1,1);
Nokia5110_OutString("SET MINUTE");
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_0) == 1){ //check SW1 Enter
Check = minute;
if (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){//read SW2 Adjust
while (GPIOPinRead(GPIO_PORTJ_BASE,GPIO_PIN_1) == 0){}
minute++;
}
if (minute > 59){minute = 0;}
if (Check != minute){
Nokia5110_SetCursor(5,3);
Nokia5110_OutString(" ");
Nokia5110_SetCursor(5,3);
}
Nokia5110_SetCursor(5,3);
Nokia5110_SmallDec(minute);
}
SysCtlDelay(40000000);
sTime.tm_year = 100 + year;
sTime.tm_mon = month;
sTime.tm_mday = dayOfMonth;
sTime.tm_wday = dayOfWeek;
sTime.tm_hour = hour;
sTime.tm_min = minute;
HibernateCalendarSet(&sTime);
Nokia5110_Clear();
}
I can post the Nokia5110 files If anyone wants. But I think there is any bugs in them. I use them all the time in other programs with no problems.
Thanks for any help;
Dan