the program have one sensor acs712 and moduleds1302
Dependencies: FATFileSystem mbed
DS1302.cpp@0:b82abca089ac, 2017-06-08 (annotated)
- Committer:
- RUBENTEC
- Date:
- Thu Jun 08 20:17:34 2017 +0000
- Revision:
- 0:b82abca089ac
ds1302-bluetooth-acs712
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RUBENTEC | 0:b82abca089ac | 1 | #include "DS1302.h" |
RUBENTEC | 0:b82abca089ac | 2 | |
RUBENTEC | 0:b82abca089ac | 3 | DS1302::DS1302(PinName SCLK, PinName IO, PinName CE) : _SCLK(SCLK), _IO(IO), _CE(CE) |
RUBENTEC | 0:b82abca089ac | 4 | { |
RUBENTEC | 0:b82abca089ac | 5 | _CE = 0; |
RUBENTEC | 0:b82abca089ac | 6 | _SCLK = 0; |
RUBENTEC | 0:b82abca089ac | 7 | _IO.input(); |
RUBENTEC | 0:b82abca089ac | 8 | writeProtect = true; |
RUBENTEC | 0:b82abca089ac | 9 | } |
RUBENTEC | 0:b82abca089ac | 10 | |
RUBENTEC | 0:b82abca089ac | 11 | void DS1302::set_time(time_t t) |
RUBENTEC | 0:b82abca089ac | 12 | { |
RUBENTEC | 0:b82abca089ac | 13 | struct tm *_t = localtime(&t); |
RUBENTEC | 0:b82abca089ac | 14 | writeReg(Seconds, (_t->tm_sec % 10) + ((_t->tm_sec / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 15 | writeReg(Minutes, (_t->tm_min % 10) + ((_t->tm_min / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 16 | writeReg(Hours, (_t->tm_hour % 10) + ((_t->tm_hour / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 17 | writeReg(Dates, (_t->tm_mday % 10) + ((_t->tm_mday / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 18 | writeReg(Months, ((_t->tm_mon + 1) % 10) + (((_t->tm_mon + 1) / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 19 | writeReg(Days, _t->tm_wday + 1); |
RUBENTEC | 0:b82abca089ac | 20 | writeReg(Years, ((_t->tm_year - 100) % 10) + (((_t->tm_year - 100) / 10) << 4)); |
RUBENTEC | 0:b82abca089ac | 21 | } |
RUBENTEC | 0:b82abca089ac | 22 | |
RUBENTEC | 0:b82abca089ac | 23 | time_t DS1302::time(time_t *t) |
RUBENTEC | 0:b82abca089ac | 24 | { |
RUBENTEC | 0:b82abca089ac | 25 | char regs[7]; |
RUBENTEC | 0:b82abca089ac | 26 | _CE = 1; |
RUBENTEC | 0:b82abca089ac | 27 | wait_us(4); |
RUBENTEC | 0:b82abca089ac | 28 | writeByte(ClockBurst | 1); |
RUBENTEC | 0:b82abca089ac | 29 | for (int i = 0; i<7; i++) |
RUBENTEC | 0:b82abca089ac | 30 | regs[i] = readByte(); |
RUBENTEC | 0:b82abca089ac | 31 | _CE = 0; |
RUBENTEC | 0:b82abca089ac | 32 | |
RUBENTEC | 0:b82abca089ac | 33 | struct tm _t; |
RUBENTEC | 0:b82abca089ac | 34 | _t.tm_sec = (regs[0] & 0xF) + (regs[0] >> 4) * 10; |
RUBENTEC | 0:b82abca089ac | 35 | _t.tm_min = (regs[1] & 0xF) + (regs[1] >> 4) * 10; |
RUBENTEC | 0:b82abca089ac | 36 | _t.tm_hour = (regs[2] & 0xF) + (regs[2] >> 4) * 10; |
RUBENTEC | 0:b82abca089ac | 37 | _t.tm_mday = (regs[3] & 0xF) + (regs[3] >> 4) * 10; |
RUBENTEC | 0:b82abca089ac | 38 | _t.tm_mon = (regs[4] & 0xF) + (regs[4] >> 4) * 10 - 1; |
RUBENTEC | 0:b82abca089ac | 39 | _t.tm_year = (regs[6] & 0xF) + (regs[6] >> 4) * 10 + 100; |
RUBENTEC | 0:b82abca089ac | 40 | |
RUBENTEC | 0:b82abca089ac | 41 | // convert to timestamp and display (1256729737) |
RUBENTEC | 0:b82abca089ac | 42 | return mktime(&_t); |
RUBENTEC | 0:b82abca089ac | 43 | } |
RUBENTEC | 0:b82abca089ac | 44 | |
RUBENTEC | 0:b82abca089ac | 45 | void DS1302::storeByte(char address, char data) |
RUBENTEC | 0:b82abca089ac | 46 | { |
RUBENTEC | 0:b82abca089ac | 47 | if (address > 30) |
RUBENTEC | 0:b82abca089ac | 48 | return; |
RUBENTEC | 0:b82abca089ac | 49 | char command = RAMBase + (address << 1); |
RUBENTEC | 0:b82abca089ac | 50 | writeReg(command, data); |
RUBENTEC | 0:b82abca089ac | 51 | } |
RUBENTEC | 0:b82abca089ac | 52 | |
RUBENTEC | 0:b82abca089ac | 53 | char DS1302::recallByte(char address) |
RUBENTEC | 0:b82abca089ac | 54 | { |
RUBENTEC | 0:b82abca089ac | 55 | if (address > 30) |
RUBENTEC | 0:b82abca089ac | 56 | return 0; |
RUBENTEC | 0:b82abca089ac | 57 | char command = RAMBase + (address << 1) + 1; |
RUBENTEC | 0:b82abca089ac | 58 | return readReg(command); |
RUBENTEC | 0:b82abca089ac | 59 | } |
RUBENTEC | 0:b82abca089ac | 60 | |
RUBENTEC | 0:b82abca089ac | 61 | char DS1302::readReg(char reg) |
RUBENTEC | 0:b82abca089ac | 62 | { |
RUBENTEC | 0:b82abca089ac | 63 | char retval; |
RUBENTEC | 0:b82abca089ac | 64 | |
RUBENTEC | 0:b82abca089ac | 65 | _CE = 1; |
RUBENTEC | 0:b82abca089ac | 66 | wait_us(4); |
RUBENTEC | 0:b82abca089ac | 67 | writeByte(reg); |
RUBENTEC | 0:b82abca089ac | 68 | retval = readByte(); |
RUBENTEC | 0:b82abca089ac | 69 | wait_us(4); |
RUBENTEC | 0:b82abca089ac | 70 | _CE = 0; |
RUBENTEC | 0:b82abca089ac | 71 | return retval; |
RUBENTEC | 0:b82abca089ac | 72 | } |
RUBENTEC | 0:b82abca089ac | 73 | |
RUBENTEC | 0:b82abca089ac | 74 | void DS1302::writeReg(char reg, char val) |
RUBENTEC | 0:b82abca089ac | 75 | { |
RUBENTEC | 0:b82abca089ac | 76 | if (writeProtect) { |
RUBENTEC | 0:b82abca089ac | 77 | writeProtect = false; |
RUBENTEC | 0:b82abca089ac | 78 | writeReg(WriteProtect, 0); |
RUBENTEC | 0:b82abca089ac | 79 | } |
RUBENTEC | 0:b82abca089ac | 80 | _CE = 1; |
RUBENTEC | 0:b82abca089ac | 81 | wait_us(4); |
RUBENTEC | 0:b82abca089ac | 82 | writeByte(reg); |
RUBENTEC | 0:b82abca089ac | 83 | writeByte(val); |
RUBENTEC | 0:b82abca089ac | 84 | wait_us(4); |
RUBENTEC | 0:b82abca089ac | 85 | _CE = 0; |
RUBENTEC | 0:b82abca089ac | 86 | } |
RUBENTEC | 0:b82abca089ac | 87 | |
RUBENTEC | 0:b82abca089ac | 88 | |
RUBENTEC | 0:b82abca089ac | 89 | /*********************PRIVATE***********************/ |
RUBENTEC | 0:b82abca089ac | 90 | void DS1302::writeByte(char data) |
RUBENTEC | 0:b82abca089ac | 91 | { |
RUBENTEC | 0:b82abca089ac | 92 | _IO.output(); |
RUBENTEC | 0:b82abca089ac | 93 | for (int i = 0; i<8; i++) { |
RUBENTEC | 0:b82abca089ac | 94 | _IO = data & 0x01; |
RUBENTEC | 0:b82abca089ac | 95 | wait_us(1); |
RUBENTEC | 0:b82abca089ac | 96 | _SCLK = 1; |
RUBENTEC | 0:b82abca089ac | 97 | wait_us(1); |
RUBENTEC | 0:b82abca089ac | 98 | _SCLK = 0; |
RUBENTEC | 0:b82abca089ac | 99 | data >>= 1; |
RUBENTEC | 0:b82abca089ac | 100 | } |
RUBENTEC | 0:b82abca089ac | 101 | _IO.input(); |
RUBENTEC | 0:b82abca089ac | 102 | } |
RUBENTEC | 0:b82abca089ac | 103 | |
RUBENTEC | 0:b82abca089ac | 104 | char DS1302::readByte(void) |
RUBENTEC | 0:b82abca089ac | 105 | { |
RUBENTEC | 0:b82abca089ac | 106 | char retval = 0; |
RUBENTEC | 0:b82abca089ac | 107 | |
RUBENTEC | 0:b82abca089ac | 108 | _IO.input(); |
RUBENTEC | 0:b82abca089ac | 109 | for (int i = 0; i<8; i++) { |
RUBENTEC | 0:b82abca089ac | 110 | retval |= _IO << i; |
RUBENTEC | 0:b82abca089ac | 111 | wait_us(1); |
RUBENTEC | 0:b82abca089ac | 112 | _SCLK = 1; |
RUBENTEC | 0:b82abca089ac | 113 | wait_us(1); |
RUBENTEC | 0:b82abca089ac | 114 | _SCLK = 0; |
RUBENTEC | 0:b82abca089ac | 115 | } |
RUBENTEC | 0:b82abca089ac | 116 | return retval; |
RUBENTEC | 0:b82abca089ac | 117 | } |