FRMD KL25Z <=i2c=> NXP PCF8563 (RTC) FRMD KL25Z SPI=> MCP23S17 => (GLCD) T6963C FRMD KL25Z Tsi => 3 button : <--> <enter> <++> FRMD KL25Z => Bip()

Dependencies:   TSI mbed

Fork of RTC8564NB_Clock by masa miya

Committer:
szjenter
Date:
Wed May 14 04:46:52 2014 +0000
Revision:
2:c271f83a69e4
FRMD KL25Z  <=i2c=>  NXP PCF8563  (RTC); FRMD KL25Z    SPI=> MCP23S17 => (GLCD  T6963C); FRMD KL25Z   Tsi => 3 button :           <-->     <enter>    <++>; FRMD KL25Z => Bip()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
szjenter 2:c271f83a69e4 1 #ifndef RTC_H
szjenter 2:c271f83a69e4 2 #define RTC_H
szjenter 2:c271f83a69e4 3
szjenter 2:c271f83a69e4 4 #include "mbed.h"
szjenter 2:c271f83a69e4 5 #include "GLCD_spi.h"
szjenter 2:c271f83a69e4 6 #include "TouchMenu.h"
szjenter 2:c271f83a69e4 7
szjenter 2:c271f83a69e4 8 #define RTC8563 0xA2
szjenter 2:c271f83a69e4 9
szjenter 2:c271f83a69e4 10 #define CONTROL1 0x00
szjenter 2:c271f83a69e4 11 #define CONTROL2 0x01
szjenter 2:c271f83a69e4 12 #define SECONDS 0x02
szjenter 2:c271f83a69e4 13 #define MINUTES 0x03
szjenter 2:c271f83a69e4 14 #define HOURS 0x04
szjenter 2:c271f83a69e4 15 #define DAYS 0x05
szjenter 2:c271f83a69e4 16 #define WEEKDAYS 0x06
szjenter 2:c271f83a69e4 17 #define MONTHS 0x07
szjenter 2:c271f83a69e4 18 #define YEARS 0x08
szjenter 2:c271f83a69e4 19 #define MINUTE_ALARM 0x09
szjenter 2:c271f83a69e4 20 #define HOUR_ALARM 0x0A
szjenter 2:c271f83a69e4 21 #define DAY_ALARM 0x0B
szjenter 2:c271f83a69e4 22 #define WEEKDAY_ALARM 0x0C
szjenter 2:c271f83a69e4 23 #define CLOCKOUT_FREQ 0x0D
szjenter 2:c271f83a69e4 24 #define TIMER_CINTROL 0x0E
szjenter 2:c271f83a69e4 25 #define TIMER 0x0F
szjenter 2:c271f83a69e4 26 #define _READ 0x01
szjenter 2:c271f83a69e4 27
szjenter 2:c271f83a69e4 28 I2C i2c(PTE0, PTE1); //SDA, SCL
szjenter 2:c271f83a69e4 29 TouchRun TchR2;
szjenter 2:c271f83a69e4 30 DigitalOut K_LED(LED1), P_LED(LED3), Z_LED(LED2);
szjenter 2:c271f83a69e4 31
szjenter 2:c271f83a69e4 32
szjenter 2:c271f83a69e4 33 char year, month, day, week, hour, minute, sec;
szjenter 2:c271f83a69e4 34 int iyear, imonth, iday, iweek, ihour, iminute, isec;
szjenter 2:c271f83a69e4 35 char ntp_year[3], ntp_month[3], ntp_day[3], ntp_week[4];
szjenter 2:c271f83a69e4 36 char ntp_hour[3], ntp_minute[3], ntp_sec[3];
szjenter 2:c271f83a69e4 37 char week_val;
szjenter 2:c271f83a69e4 38
szjenter 2:c271f83a69e4 39 char week_chr[7][4] = {"Vas","Het","Ked","Sze","Csu","Pen","Szo"};
szjenter 2:c271f83a69e4 40 //-------------------------------------------------------------------
szjenter 2:c271f83a69e4 41 void rtc_write(char address, char value){
szjenter 2:c271f83a69e4 42 i2c.start();
szjenter 2:c271f83a69e4 43 i2c.write(RTC8563);
szjenter 2:c271f83a69e4 44 i2c.write(address);
szjenter 2:c271f83a69e4 45 i2c.write(value);
szjenter 2:c271f83a69e4 46 i2c.stop();
szjenter 2:c271f83a69e4 47 }
szjenter 2:c271f83a69e4 48 //-------------------------------------------------------------------
szjenter 2:c271f83a69e4 49 char rtc_read(char address){
szjenter 2:c271f83a69e4 50 char value;
szjenter 2:c271f83a69e4 51 i2c.start();
szjenter 2:c271f83a69e4 52 i2c.write(RTC8563);
szjenter 2:c271f83a69e4 53 i2c.write(address);
szjenter 2:c271f83a69e4 54 i2c.start();
szjenter 2:c271f83a69e4 55 i2c.write(RTC8563 | _READ);
szjenter 2:c271f83a69e4 56 value = i2c.read(0);
szjenter 2:c271f83a69e4 57 i2c.stop();
szjenter 2:c271f83a69e4 58
szjenter 2:c271f83a69e4 59 return value;
szjenter 2:c271f83a69e4 60 }
szjenter 2:c271f83a69e4 61 //-------------------------------------------------------------------
szjenter 2:c271f83a69e4 62 void time_just(){
szjenter 2:c271f83a69e4 63 char _min, _hour;
szjenter 2:c271f83a69e4 64 //test_led = !test_led;
szjenter 2:c271f83a69e4 65 _min = rtc_read(MINUTES);
szjenter 2:c271f83a69e4 66 if (_min >= 0x30) {
szjenter 2:c271f83a69e4 67 _hour = rtc_read(HOURS);
szjenter 2:c271f83a69e4 68 if (_hour == 0x23)
szjenter 2:c271f83a69e4 69 _hour = 0x00;
szjenter 2:c271f83a69e4 70 else if ((_hour & 0x0F) == 0x09)
szjenter 2:c271f83a69e4 71 _hour = (_hour & 0xF0) + 0x10;
szjenter 2:c271f83a69e4 72 else
szjenter 2:c271f83a69e4 73 _hour = _hour + 0x01;
szjenter 2:c271f83a69e4 74 rtc_write(HOURS, _hour);
szjenter 2:c271f83a69e4 75 }
szjenter 2:c271f83a69e4 76 rtc_write(MINUTES, 0x00);
szjenter 2:c271f83a69e4 77 rtc_write(SECONDS, 0x00);
szjenter 2:c271f83a69e4 78 }
szjenter 2:c271f83a69e4 79 //------------------------------------------------------------------
szjenter 2:c271f83a69e4 80 void rtc_reset(){
szjenter 2:c271f83a69e4 81 //just_button.rise(&time_just);
szjenter 2:c271f83a69e4 82
szjenter 2:c271f83a69e4 83 lcd_cls();
szjenter 2:c271f83a69e4 84 lcd_string(2,1,"RTC8563 CLOCK RESET" );
szjenter 2:c271f83a69e4 85 wait(1);
szjenter 2:c271f83a69e4 86
szjenter 2:c271f83a69e4 87 rtc_write(CONTROL1, 0x20); //stop
szjenter 2:c271f83a69e4 88 rtc_write(CONTROL2, 0x00);
szjenter 2:c271f83a69e4 89 rtc_write(YEARS, 0x36); //((ntp_year[0]-0x30)<<4)+(ntp_year[1]-0x30));
szjenter 2:c271f83a69e4 90 rtc_write(MONTHS,0x02); //((ntp_month[0]-0x30)<<4)+(ntp_month[1]-0x30));
szjenter 2:c271f83a69e4 91 rtc_write(DAYS, 0x03); //((ntp_day[0]-0x30)<<4)+(ntp_day[1]-0x30));
szjenter 2:c271f83a69e4 92 rtc_write(HOURS, 0x04); //((ntp_hour[0]-0x30)<<4)+(ntp_hour[1]-0x30));
szjenter 2:c271f83a69e4 93 rtc_write(MINUTES,0x05); //((ntp_minute[0]-0x30)<<4)+(ntp_minute[1]-0x30));
szjenter 2:c271f83a69e4 94 rtc_write(SECONDS,0x00); //((ntp_sec[0]-0x30)<<4)+(ntp_sec[1]-0x30));
szjenter 2:c271f83a69e4 95 rtc_write(WEEKDAYS, week_val);
szjenter 2:c271f83a69e4 96 rtc_write(CLOCKOUT_FREQ, 0x00); // 0x83 = TE on & 1Hz
szjenter 2:c271f83a69e4 97 rtc_write(TIMER_CINTROL, 0x00);
szjenter 2:c271f83a69e4 98 rtc_write(CONTROL1, 0x00); //start
szjenter 2:c271f83a69e4 99 }
szjenter 2:c271f83a69e4 100 //------------------------------------------------------------------
szjenter 2:c271f83a69e4 101 void rtc_data_read(){
szjenter 2:c271f83a69e4 102 i2c.start();
szjenter 2:c271f83a69e4 103 i2c.write(0xA2);
szjenter 2:c271f83a69e4 104 i2c.write(0x02);
szjenter 2:c271f83a69e4 105 i2c.stop();
szjenter 2:c271f83a69e4 106 i2c.start();
szjenter 2:c271f83a69e4 107 i2c.write(0xA3);
szjenter 2:c271f83a69e4 108 sec = i2c.read(SECONDS) & 0x7F;
szjenter 2:c271f83a69e4 109 minute = i2c.read(MINUTES) & 0x7F;
szjenter 2:c271f83a69e4 110 hour = i2c.read(HOURS) & 0x3F;
szjenter 2:c271f83a69e4 111 day = i2c.read(DAYS) & 0x3F;
szjenter 2:c271f83a69e4 112 week = i2c.read(WEEKDAYS) & 0x07;
szjenter 2:c271f83a69e4 113 month = i2c.read(MONTHS) & 0x1F;
szjenter 2:c271f83a69e4 114 year = i2c.read(YEARS);
szjenter 2:c271f83a69e4 115 i2c.stop();
szjenter 2:c271f83a69e4 116
szjenter 2:c271f83a69e4 117
szjenter 2:c271f83a69e4 118 //lcd.locate(0,0);
szjenter 2:c271f83a69e4 119 sprintf(buffer,"%c%c/%c%c/%c%c %s",
szjenter 2:c271f83a69e4 120 ((year >> 4) & 0x0F) + 0x30, (year & 0x0F) + 0x30, //int((year >> 4)& 0x0F)*10 + int(year & 0x0F),
szjenter 2:c271f83a69e4 121 ((month >> 4) & 0x01) + 0x30, (month & 0x0F) + 0x30,
szjenter 2:c271f83a69e4 122 ((day >> 4) & 0x03)+ 0x30, (day & 0x0F) + 0x30,
szjenter 2:c271f83a69e4 123 week_chr[week & 0x07]);
szjenter 2:c271f83a69e4 124 lcd_string(0,0,buffer);
szjenter 2:c271f83a69e4 125 //lcd.locate(0,1);
szjenter 2:c271f83a69e4 126 sprintf(buffer,"%c%c:%c%c:%c%c",
szjenter 2:c271f83a69e4 127 ((hour >> 4) & 0x03) + 0x30, (hour & 0x0F) + 0x30,
szjenter 2:c271f83a69e4 128 (minute >> 4) + 0x30, (minute & 0x0F) + 0x30,
szjenter 2:c271f83a69e4 129 (sec >> 4) + 0x30, (sec & 0x0F) + 0x30 );
szjenter 2:c271f83a69e4 130 lcd_string(0,13,buffer);
szjenter 2:c271f83a69e4 131 }
szjenter 2:c271f83a69e4 132 //--------------------------------------------------------------
szjenter 2:c271f83a69e4 133 void rtc_data_set(){
szjenter 2:c271f83a69e4 134
szjenter 2:c271f83a69e4 135 rtc_data_read();
szjenter 2:c271f83a69e4 136 //--------------------------------------------------
szjenter 2:c271f83a69e4 137 year = (int)((((year >> 4)& 0x0F)*10) + (year & 0x0F));
szjenter 2:c271f83a69e4 138
szjenter 2:c271f83a69e4 139 sprintf(buffer,"Year: ");
szjenter 2:c271f83a69e4 140 year = SetBox(year, 0, 99);
szjenter 2:c271f83a69e4 141 Bip(1,1);
szjenter 2:c271f83a69e4 142
szjenter 2:c271f83a69e4 143 sprintf(buffer,"%d",year);
szjenter 2:c271f83a69e4 144 if(year > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 145 year = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 146 year = (year<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 147 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 148 year = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 149 }
szjenter 2:c271f83a69e4 150 // a visszaalakítás azonos mint a beolvasásnál
szjenter 2:c271f83a69e4 151 //sprintf(buffer,"Year:%c%c", ((year >> 4) & 0x0F) + 0x30, (year & 0x0F) + 0x30);
szjenter 2:c271f83a69e4 152 //lcd_string(5,0,buffer);
szjenter 2:c271f83a69e4 153 //--------------------------------------------------
szjenter 2:c271f83a69e4 154 month = (int)((((month >> 4)& 0x01)*10) + (month & 0x0F));
szjenter 2:c271f83a69e4 155
szjenter 2:c271f83a69e4 156 sprintf(buffer,"Month: ");
szjenter 2:c271f83a69e4 157 month = SetBox(month, 1, 12);
szjenter 2:c271f83a69e4 158 Bip(1,1);
szjenter 2:c271f83a69e4 159
szjenter 2:c271f83a69e4 160 sprintf(buffer,"%d",month);
szjenter 2:c271f83a69e4 161 if(month > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 162 month = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 163 month = (month<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 164 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 165 month = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 166 }
szjenter 2:c271f83a69e4 167 //--------------------------------------------------
szjenter 2:c271f83a69e4 168 day = (int)((((day >> 4)& 0x03)*10) + (day & 0x0F));
szjenter 2:c271f83a69e4 169
szjenter 2:c271f83a69e4 170 sprintf(buffer,"Day: ");
szjenter 2:c271f83a69e4 171 day = SetBox(day, 1, 31);
szjenter 2:c271f83a69e4 172 Bip(1,1);
szjenter 2:c271f83a69e4 173
szjenter 2:c271f83a69e4 174 sprintf(buffer,"%d",day);
szjenter 2:c271f83a69e4 175 if(day > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 176 day = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 177 day = (day<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 178 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 179 day = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 180 }
szjenter 2:c271f83a69e4 181
szjenter 2:c271f83a69e4 182 //--------------------------------------------------
szjenter 2:c271f83a69e4 183 week = (int)((((week >> 4)& 0x03)*10) + (week & 0x0F));
szjenter 2:c271f83a69e4 184
szjenter 2:c271f83a69e4 185 sprintf(buffer,"Week: ");
szjenter 2:c271f83a69e4 186 week = SetBox(week + 1, 1, 7);
szjenter 2:c271f83a69e4 187 Bip(1,1);
szjenter 2:c271f83a69e4 188
szjenter 2:c271f83a69e4 189 sprintf(buffer,"%d",week - 1);
szjenter 2:c271f83a69e4 190 if(week > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 191 week = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 192 week = (week<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 193 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 194 week = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 195 }
szjenter 2:c271f83a69e4 196
szjenter 2:c271f83a69e4 197 //--------------------------------------------------
szjenter 2:c271f83a69e4 198 hour = (int)((((hour >> 4)& 0x03)*10) + (hour & 0x0F));
szjenter 2:c271f83a69e4 199
szjenter 2:c271f83a69e4 200 sprintf(buffer,"Hour: ");
szjenter 2:c271f83a69e4 201 hour = SetBox(hour, 0, 23);
szjenter 2:c271f83a69e4 202 Bip(1,1);
szjenter 2:c271f83a69e4 203
szjenter 2:c271f83a69e4 204 sprintf(buffer,"%d",hour);
szjenter 2:c271f83a69e4 205 if(hour > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 206 hour = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 207 hour = (hour<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 208 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 209 hour = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 210 }
szjenter 2:c271f83a69e4 211
szjenter 2:c271f83a69e4 212 //--------------------------------------------------
szjenter 2:c271f83a69e4 213 minute = (int)((((minute >> 4)& 0x07)*10) + (minute & 0x0F));
szjenter 2:c271f83a69e4 214
szjenter 2:c271f83a69e4 215 sprintf(buffer,"Minute: ");
szjenter 2:c271f83a69e4 216 minute = SetBox(minute, 0, 23);
szjenter 2:c271f83a69e4 217 Bip(1,1);
szjenter 2:c271f83a69e4 218
szjenter 2:c271f83a69e4 219 sprintf(buffer,"%d",minute);
szjenter 2:c271f83a69e4 220 if(minute > 9){ // két helyiértékesetén
szjenter 2:c271f83a69e4 221 minute = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 222 minute = (minute<<4) + (buffer[1] & 0x0F);
szjenter 2:c271f83a69e4 223 }else{ // egy helyiérték esetén
szjenter 2:c271f83a69e4 224 minute = buffer[0] & 0x0F;
szjenter 2:c271f83a69e4 225 }
szjenter 2:c271f83a69e4 226 //-------------------------------------------------
szjenter 2:c271f83a69e4 227
szjenter 2:c271f83a69e4 228 rtc_write(CONTROL1, 0x20); //stop
szjenter 2:c271f83a69e4 229 rtc_write(CONTROL2, 0x00);
szjenter 2:c271f83a69e4 230 rtc_write(YEARS, year); //((ntp_year[0]-0x30)<<4)+(ntp_year[1]-0x30));
szjenter 2:c271f83a69e4 231 rtc_write(MONTHS,month);
szjenter 2:c271f83a69e4 232 rtc_write(DAYS, day);
szjenter 2:c271f83a69e4 233 rtc_write(WEEKDAYS,week);
szjenter 2:c271f83a69e4 234 rtc_write(HOURS, hour);
szjenter 2:c271f83a69e4 235 rtc_write(MINUTES, minute);
szjenter 2:c271f83a69e4 236 rtc_write(SECONDS,0x00);
szjenter 2:c271f83a69e4 237 rtc_write(CONTROL1, 0x00); //start
szjenter 2:c271f83a69e4 238 }
szjenter 2:c271f83a69e4 239
szjenter 2:c271f83a69e4 240
szjenter 2:c271f83a69e4 241
szjenter 2:c271f83a69e4 242
szjenter 2:c271f83a69e4 243
szjenter 2:c271f83a69e4 244
szjenter 2:c271f83a69e4 245
szjenter 2:c271f83a69e4 246 #endif