Rewrite on libavr
Same driver surface as the yazoalfa version — clock and alarm get/set, alarm interrupts, flag check/clear — plus oscillator-stop detection and die temperature. One source for tiny85 (software I2C) and mega328P (TWI), built against libavr in both generated and reflect mode, byte-identical .text across modes. Errors surface as std::expected instead of being dropped; weekday-rate alarms now really set the DY bit (legacy cleared it); multi-register access is one coherent bus transaction. Legacy stays on master. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
29
README.md
Normal file
29
README.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# ds3231
|
||||
|
||||
Maxim DS3231 RTC driver on [libavr](https://git.blackmark.me/avr/libavr):
|
||||
clock and alarm read/write, alarm interrupts, oscillator-stop detection,
|
||||
die temperature. One source runs on every libavr chip — TWI hardware on
|
||||
the mega328P, open-drain software I2C on the tinies. All bus errors
|
||||
surface as `std::expected`.
|
||||
|
||||
```cpp
|
||||
using bus = dev::i2c<{.frequency = 100_kHz}>;
|
||||
using rtc = ds3231::device<bus>;
|
||||
|
||||
auto now = rtc::read_clock(); // result<date_time>
|
||||
(void)rtc::set_alarm1({}, ds3231::alarm1_rate::once_per_second);
|
||||
```
|
||||
|
||||
`example/main.cpp` is the full tour. Build with a libavr checkout:
|
||||
|
||||
```sh
|
||||
LIBAVR_ROOT=/path/to/libavr cmake --preset attiny85-generated
|
||||
cmake --build --preset attiny85-generated
|
||||
```
|
||||
|
||||
Presets cover attiny85/atmega328p in both libavr modes (generated and
|
||||
reflect). The legacy yazoalfa-based driver lives on the `master` branch.
|
||||
|
||||
Differences from legacy: weekday-rate alarms now actually set the DY bit
|
||||
(the old `setAlarmHelper` always cleared it), reads/writes are single
|
||||
coherent bus transactions, and errors are reported instead of ignored.
|
||||
Reference in New Issue
Block a user