2 * Battery required: CR1225 3V
3 * Board v1.7 needs changes: D11=RED LED, R4=4.7k
4 * To enter sleep mode, D18 (GREEN LED) should be OFF
5 * D18 is OFF by default when FT231x usb-serial is not enumerated
6 * Either plug FPGA into 5V USB charger
7 * or reprogram FT231x to drive D18 OFF:
8 * ftx_prog --cbus 3 drive_0
9 * to restore default D18 state:
10 * ftx_prob --cbus 3 sleep
13 #include <SoftwareWire.h>
14 SoftwareWire Wire(32+29,32+28);
16 #define I2CADDR 0x6F // Microchip MCP7940N
18 void regwrite(uint8_t reg, uint8_t value)
20 Wire.beginTransmission(I2CADDR);
21 Wire.write(byte(reg));
22 Wire.write(byte(value));
23 Wire.endTransmission();
26 int regread(uint8_t reg, int8_t n)
28 Wire.beginTransmission(I2CADDR);
29 Wire.write(byte(reg));
30 Wire.endTransmission();
32 Wire.requestFrom(I2CADDR, n);
33 if(Wire.available()) // slave may send less than requested
38 void rtc_clear_interrupts()
45 regwrite(0x06, 0x17); // year
46 regwrite(0x05, 0x12); // month
47 regwrite(0x04, 0x31); // day
48 regwrite(0x03, 0x07 | 8); // weekday | battery_backup
49 regwrite(0x02, 0x23); // hour
50 regwrite(0x01, 0x59); // minute
51 regwrite(0x00, 0x00 | 0x80); // second | start_oscillator
56 // set alarm (in 2 minutes)
57 regwrite(0x10, 0x18); // year
58 regwrite(0x0F, 0x01); // month
59 regwrite(0x0E, 0x01); // day
60 regwrite(0x0D, 0x01 | 0x70); // weekday | match_condition full timedate
61 regwrite(0x0C, 0x00); // hour
62 regwrite(0x0B, 0x00); // minute
63 regwrite(0x0A, 0x00); // seconds
67 Wire.setClock(100000L); // 100000-400000 Hz i2c bus clock
68 Wire.begin(); // join i2c bus (address optional for master)
70 // set control register, enable only alarm0
73 // set oscillator digital trim
77 void rtc_read(char *a)
80 uint8_t yr = regread(0x06,1) & 0x3F;
81 if(yr >= 0x17 && yr <= 0x18)
82 eval = regread(0x0D,1) & 8 ? " OK " : "WAIT";
85 sprintf(a, "20%02x-%02x-%02x %02x:%02x:%02x %s *-%02x %02x:%02x:%02x\n",
86 regread(0x06,1) & 0x3F, // year
87 regread(0x05,1) & 0x7F, // month
88 regread(0x04,1) & 0x7F, // day
89 regread(0x02,1) & 0x3F, // hour
90 regread(0x01,1) & 0x7F, // minute
91 regread(0x00,1) & 0x7F, // second
92 eval, // time evaluation and alarm flag
93 regread(0x0E,1) & 0x3F, // alarm day
94 regread(0x0C,1) & 0x3F, // alarm hour
95 regread(0x0B,1) & 0x7F, // alarm minute
96 regread(0x0A,1) & 0x7F // alarm second