MANOJ NARAYANAN
/
RTC_Sample
The program sets the hr/min/sec and run continuously
main.cpp@0:fca1e63ed338, 2016-06-12 (annotated)
- Committer:
- manojn
- Date:
- Sun Jun 12 11:39:22 2016 +0000
- Revision:
- 0:fca1e63ed338
RTC DS1307 Sample program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
manojn | 0:fca1e63ed338 | 1 | #include "mbed.h" |
manojn | 0:fca1e63ed338 | 2 | |
manojn | 0:fca1e63ed338 | 3 | const int addr=0xD0; |
manojn | 0:fca1e63ed338 | 4 | unsigned char var1,var2,var3,var4,var5,var6; |
manojn | 0:fca1e63ed338 | 5 | int i; |
manojn | 0:fca1e63ed338 | 6 | |
manojn | 0:fca1e63ed338 | 7 | Serial pc(USBTX, USBRX, "pc"); |
manojn | 0:fca1e63ed338 | 8 | |
manojn | 0:fca1e63ed338 | 9 | I2C i2c(p28, p27); |
manojn | 0:fca1e63ed338 | 10 | |
manojn | 0:fca1e63ed338 | 11 | void read_rtc_sec() |
manojn | 0:fca1e63ed338 | 12 | { |
manojn | 0:fca1e63ed338 | 13 | i2c.start(); |
manojn | 0:fca1e63ed338 | 14 | i2c.write(0xD0); |
manojn | 0:fca1e63ed338 | 15 | i2c.write(0x00); |
manojn | 0:fca1e63ed338 | 16 | |
manojn | 0:fca1e63ed338 | 17 | i2c.start(); |
manojn | 0:fca1e63ed338 | 18 | i2c.write(0xD1); |
manojn | 0:fca1e63ed338 | 19 | var1=i2c.read(0x00); |
manojn | 0:fca1e63ed338 | 20 | |
manojn | 0:fca1e63ed338 | 21 | var2=var1; |
manojn | 0:fca1e63ed338 | 22 | var1=var1&0x0f; |
manojn | 0:fca1e63ed338 | 23 | var2=var2>>4; |
manojn | 0:fca1e63ed338 | 24 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 25 | |
manojn | 0:fca1e63ed338 | 26 | } |
manojn | 0:fca1e63ed338 | 27 | |
manojn | 0:fca1e63ed338 | 28 | void read_rtc_min() |
manojn | 0:fca1e63ed338 | 29 | { |
manojn | 0:fca1e63ed338 | 30 | i2c.start(); |
manojn | 0:fca1e63ed338 | 31 | i2c.write(0xD0); |
manojn | 0:fca1e63ed338 | 32 | i2c.write(0x01); |
manojn | 0:fca1e63ed338 | 33 | |
manojn | 0:fca1e63ed338 | 34 | i2c.start(); |
manojn | 0:fca1e63ed338 | 35 | i2c.write(0xD1); |
manojn | 0:fca1e63ed338 | 36 | var3=i2c.read(0x00); |
manojn | 0:fca1e63ed338 | 37 | |
manojn | 0:fca1e63ed338 | 38 | var4=var3; |
manojn | 0:fca1e63ed338 | 39 | var3=var3&0x0f; |
manojn | 0:fca1e63ed338 | 40 | var4=var4>>4; |
manojn | 0:fca1e63ed338 | 41 | |
manojn | 0:fca1e63ed338 | 42 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 43 | } |
manojn | 0:fca1e63ed338 | 44 | |
manojn | 0:fca1e63ed338 | 45 | |
manojn | 0:fca1e63ed338 | 46 | void read_rtc_hrs() |
manojn | 0:fca1e63ed338 | 47 | { |
manojn | 0:fca1e63ed338 | 48 | i2c.start(); |
manojn | 0:fca1e63ed338 | 49 | i2c.write(0xD0); |
manojn | 0:fca1e63ed338 | 50 | i2c.write(0x02); |
manojn | 0:fca1e63ed338 | 51 | |
manojn | 0:fca1e63ed338 | 52 | i2c.start(); |
manojn | 0:fca1e63ed338 | 53 | i2c.write(0xD1); |
manojn | 0:fca1e63ed338 | 54 | var5=i2c.read(0x00); |
manojn | 0:fca1e63ed338 | 55 | |
manojn | 0:fca1e63ed338 | 56 | var6=var5; |
manojn | 0:fca1e63ed338 | 57 | var5=var5&0x0f; |
manojn | 0:fca1e63ed338 | 58 | var6=var6>>4; |
manojn | 0:fca1e63ed338 | 59 | var6=var6&0x01; |
manojn | 0:fca1e63ed338 | 60 | |
manojn | 0:fca1e63ed338 | 61 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 62 | } |
manojn | 0:fca1e63ed338 | 63 | |
manojn | 0:fca1e63ed338 | 64 | void write_rtc_min(unsigned char mn) |
manojn | 0:fca1e63ed338 | 65 | { |
manojn | 0:fca1e63ed338 | 66 | i2c.start(); |
manojn | 0:fca1e63ed338 | 67 | i2c.write(addr); |
manojn | 0:fca1e63ed338 | 68 | i2c.write(0x01); |
manojn | 0:fca1e63ed338 | 69 | i2c.write(mn); //write min |
manojn | 0:fca1e63ed338 | 70 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 71 | |
manojn | 0:fca1e63ed338 | 72 | } |
manojn | 0:fca1e63ed338 | 73 | |
manojn | 0:fca1e63ed338 | 74 | void write_rtc_sec(unsigned char sc) |
manojn | 0:fca1e63ed338 | 75 | { |
manojn | 0:fca1e63ed338 | 76 | i2c.start(); |
manojn | 0:fca1e63ed338 | 77 | i2c.write(addr); |
manojn | 0:fca1e63ed338 | 78 | i2c.write(0x00); |
manojn | 0:fca1e63ed338 | 79 | i2c.write(sc); // write sec |
manojn | 0:fca1e63ed338 | 80 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 81 | } |
manojn | 0:fca1e63ed338 | 82 | |
manojn | 0:fca1e63ed338 | 83 | |
manojn | 0:fca1e63ed338 | 84 | void write_rtc_hrs(unsigned char hr) |
manojn | 0:fca1e63ed338 | 85 | { |
manojn | 0:fca1e63ed338 | 86 | i2c.start(); |
manojn | 0:fca1e63ed338 | 87 | i2c.write(addr); |
manojn | 0:fca1e63ed338 | 88 | i2c.write(0x02); |
manojn | 0:fca1e63ed338 | 89 | i2c.write(hr); //write hrs |
manojn | 0:fca1e63ed338 | 90 | i2c.stop(); |
manojn | 0:fca1e63ed338 | 91 | |
manojn | 0:fca1e63ed338 | 92 | } |
manojn | 0:fca1e63ed338 | 93 | |
manojn | 0:fca1e63ed338 | 94 | |
manojn | 0:fca1e63ed338 | 95 | int main() |
manojn | 0:fca1e63ed338 | 96 | { |
manojn | 0:fca1e63ed338 | 97 | |
manojn | 0:fca1e63ed338 | 98 | char sec=0x45; // second field value |
manojn | 0:fca1e63ed338 | 99 | char min=0x59; // min field value |
manojn | 0:fca1e63ed338 | 100 | char hrs=0x52; // hrs field value |
manojn | 0:fca1e63ed338 | 101 | |
manojn | 0:fca1e63ed338 | 102 | |
manojn | 0:fca1e63ed338 | 103 | i2c.frequency(100000); |
manojn | 0:fca1e63ed338 | 104 | i2c.start(); |
manojn | 0:fca1e63ed338 | 105 | wait(1); |
manojn | 0:fca1e63ed338 | 106 | |
manojn | 0:fca1e63ed338 | 107 | i2c.start(); |
manojn | 0:fca1e63ed338 | 108 | write_rtc_min(min); |
manojn | 0:fca1e63ed338 | 109 | write_rtc_sec(sec); |
manojn | 0:fca1e63ed338 | 110 | write_rtc_hrs(hrs); |
manojn | 0:fca1e63ed338 | 111 | |
manojn | 0:fca1e63ed338 | 112 | |
manojn | 0:fca1e63ed338 | 113 | |
manojn | 0:fca1e63ed338 | 114 | while(1) |
manojn | 0:fca1e63ed338 | 115 | { |
manojn | 0:fca1e63ed338 | 116 | read_rtc_hrs(); |
manojn | 0:fca1e63ed338 | 117 | read_rtc_min(); |
manojn | 0:fca1e63ed338 | 118 | read_rtc_sec(); |
manojn | 0:fca1e63ed338 | 119 | |
manojn | 0:fca1e63ed338 | 120 | pc.printf("Current time = (%d%d:%d%d:%d%d)\n\r",var6,var5,var4,var3,var2,var1); |
manojn | 0:fca1e63ed338 | 121 | |
manojn | 0:fca1e63ed338 | 122 | wait(1); |
manojn | 0:fca1e63ed338 | 123 | |
manojn | 0:fca1e63ed338 | 124 | } |
manojn | 0:fca1e63ed338 | 125 | |
manojn | 0:fca1e63ed338 | 126 | } |