
FRMD KL25Z <=i2c=> NXP PCF8563 (RTC) FRMD KL25Z SPI=> MCP23S17 => (GLCD) T6963C FRMD KL25Z Tsi => 3 button : <--> <enter> <++> FRMD KL25Z => Bip()
Fork of RTC8564NB_Clock by
Diff: main.cpp
- Revision:
- 2:c271f83a69e4
- Parent:
- 1:7c1d3790f08d
diff -r 7c1d3790f08d -r c271f83a69e4 main.cpp --- a/main.cpp Wed Apr 27 11:03:21 2011 +0000 +++ b/main.cpp Wed May 14 04:46:52 2014 +0000 @@ -1,182 +1,45 @@ -/* -This is the clock which used highly quality RTC module RT8564NB. -This module is I2C controllable. At the time of poweron/reset, the start -time received from ntp server. - -Revision History: -Rev. 0.01A 2011/04/26 New -Rev. 0.01B 2011/04/27 Add time justify function, sec LED - */ #include "mbed.h" -#include "TextLCD.h" -#include "EthernetNetIf.h" -#include "NTPClient.h" - -#define RTC8564NB_ADR 0xA2 +#include "GLCD_spi.h" +#include "TouchMenu.h" +#include "RTC.h" -#define CONTROL1 0x00 -#define CONTROL2 0x01 -#define SECONDS 0x02 -#define MINUTES 0x03 -#define HOURS 0x04 -#define DAYS 0x05 -#define WEEKDAYS 0x06 -#define MONTHS 0x07 -#define YEARS 0x08 -#define MINUTE_ALARM 0x09 -#define HOUR_ALARM 0x0A -#define DAY_ALARM 0x0B -#define WEEKDAY_ALARM 0x0C -#define CLOCKOUT_FREQ 0x0D -#define TIMER_CINTROL 0x0E -#define TIMER 0x0F -#define _READ 0x01 -TextLCD lcd(p24, p26, p27, p28, p29, p30); -EthernetNetIf eth; -NTPClient ntp; -I2C i2c(p9, p10); -DigitalOut sec_led(LED1); -DigitalOut test_led(LED2); -InterruptIn just_button(p15); -int offset_JAPAN = 32400; -char year, month, day, week; -char hour, minute, sec; -char ntp_year[3], ntp_month[3], ntp_day[3], ntp_week[4]; -char ntp_hour[3], ntp_minute[3], ntp_sec[3]; -char week_val; - -char week_chr[7][4] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"}; +//char buffer[12]; +int m_value,b; +//------------------------------------------------- +void Start(){ + SPI_init(); + lcd_init(); -void rtc_write(char address, char value) -{ - i2c.start(); - i2c.write(RTC8564NB_ADR); - i2c.write(address); - i2c.write(value); - i2c.stop(); + K_LED=1; + Z_LED=1; + P_LED=1; + lcd_cls(); + lcd_string(2,6,"RTC Start"); + Bip(2,3); // 1 kHz * freki, 0.1 s * time + //rtc_reset(); + rtc_data_set(); + lcd_cls(); + //a=0; + b=0; } - -char rtc_read(char address) -{ - char value; - i2c.start(); - i2c.write(RTC8564NB_ADR); - i2c.write(address); - i2c.start(); - i2c.write(RTC8564NB_ADR | _READ); - value = i2c.read(0); - i2c.stop(); - - return value; -} - -void time_just() -{ - char _min, _hour; - test_led = !test_led; - _min = rtc_read(MINUTES); - if (_min >= 0x30) { - _hour = rtc_read(HOURS); - if (_hour == 0x23) - _hour = 0x00; - else if ((_hour & 0x0F) == 0x09) - _hour = (_hour & 0xF0) + 0x10; - else - _hour = _hour + 0x01; - rtc_write(HOURS, _hour); - } - rtc_write(MINUTES, 0x00); - rtc_write(SECONDS, 0x00); -} +//------------------------------------------------- int main() { - just_button.rise(&time_just); + Start(); + //rtc_reset(); + while(1){ + rtc_data_read(); + if(sec != b){ + //Bip(1,1); + b=sec; + Z_LED =0; + wait(.1); + Z_LED=1; + } + } + //for(;;){} - lcd.cls(); - lcd.printf("RTC8564NB CLOCK" ); - wait(2.0); - - /* Set up Ethernet */ - lcd.cls(); - lcd.printf("Setting up Eth\n"); - EthernetErr ethErr = eth.setup(); - if (ethErr) { - lcd.cls(); - lcd.printf("Error with Eth\nNum: %d", ethErr); - return -1; - } - - /* Set up NTP */ - lcd.printf("Setting up NTP\n"); - Host server(IpAddr(), 123, "ntp1.jst.mfeed.ad.jp"); - ntp.setTime(server); - - time_t seconds = time(NULL)+offset_JAPAN; - - lcd.cls(); - strftime(ntp_year, 16, "%y", localtime(&seconds)); - strftime(ntp_month, 16, "%m", localtime(&seconds)); - strftime(ntp_day, 16, "%d", localtime(&seconds)); - strftime(ntp_week, 16, "%a", localtime(&seconds)); - strftime(ntp_hour, 16, "%H", localtime(&seconds)); - strftime(ntp_minute, 16, "%M", localtime(&seconds)); - strftime(ntp_sec, 16, "%S", localtime(&seconds)); - - switch (ntp_week[0]){ - case 'S': - switch (ntp_week[1]) { - case 'u': week_val = 0x00; break; - case 'a': week_val = 0x06; break; - } - break; - case 'M': week_val = 0x01; break; - case 'T': - switch (ntp_week[1]) { - case 'u': week_val = 0x02; break; - case 'h': week_val = 0x04; break; - } - break; - case 'W': week_val = 0x03; break; - case 'F': week_val = 0x05; break; - } - - rtc_write(CONTROL1, 0x20); //stop - rtc_write(CONTROL2, 0x00); - rtc_write(YEARS, ((ntp_year[0]-0x30)<<4)+(ntp_year[1]-0x30)); - rtc_write(MONTHS, ((ntp_month[0]-0x30)<<4)+(ntp_month[1]-0x30)); - rtc_write(DAYS, ((ntp_day[0]-0x30)<<4)+(ntp_day[1]-0x30)); - rtc_write(HOURS, ((ntp_hour[0]-0x30)<<4)+(ntp_hour[1]-0x30)); - rtc_write(MINUTES, ((ntp_minute[0]-0x30)<<4)+(ntp_minute[1]-0x30)); - rtc_write(SECONDS, ((ntp_sec[0]-0x30)<<4)+(ntp_sec[1]-0x30)); - rtc_write(WEEKDAYS, week_val); - rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz - rtc_write(TIMER_CINTROL, 0x00); - rtc_write(CONTROL1, 0x00); //start - - while(1) { - year = rtc_read(YEARS); - month = rtc_read(MONTHS); - day = rtc_read(DAYS); - week = rtc_read(WEEKDAYS); - hour = rtc_read(HOURS); - minute = rtc_read(MINUTES); - sec = rtc_read(SECONDS); - lcd.locate(0,0); - lcd.printf("20%c%c/%c%c/%c%c %s", - ((year >> 4) & 0x03) + 0x30, (year & 0x0F) + 0x30, - ((month >> 4) & 0x01) + 0x30, (month & 0x0F) + 0x30, - ((day >> 4) & 0x03)+ 0x30, (day & 0x0F) + 0x30, - week_chr[week & 0x07]); - lcd.locate(0,1); - lcd.printf("%c%c:%c%c:%c%c", - ((hour >> 4) & 0x03) + 0x30, (hour & 0x0F) + 0x30, - (minute >> 4) + 0x30, (minute & 0x0F) + 0x30, - (sec >> 4) + 0x30, (sec & 0x0F) + 0x30 ); - - sec_led = !sec_led; - wait(0.5); - } }