ChronoDot - Ultra-precise Real Time Clock - v3
Qty | Discount |
---|---|
1-9 | $17.50 |
10-99 | $15.75 |
Description
The ChronoDot V3 is the latest version of macetech’s popular ChronoDot line of products. Designed during the Great Chip Shortage, it uses the newly-released MAX31328 temperature-compensated real-time clock chip. However, it remains pin- and code-compatible with the older DS3231-based ChronoDots, and has the same clock accuracy and drift specifications. The MAX31328 chip is also in a smaller package, which allowed a few additional enhancements to the design.
First of all, an often-requested feature is better compatibility with solderless breadboards. The dimensions of the ChronoDot V3 are now slimmed down to more easily allow wires to be inserted next to the pins when it’s plugged into a breadboard, but the pinout and pin spacing has not changed, so the ChronoDot V3 is still compatible with other boards that have headers for it, such as the EMSL BulbDial or Alpha Clock Five.
Second, the previous ChronoDot versions have a simple metal slide-in battery holder, which works fine but might be difficult to access when the ChronoDot is installed in a project. The ChronoDot V3 now has a snap-in top access battery holder that makes it much easier to change the battery…though it should be years before that is necessary.
Third, since the chip itself is much smaller, they were able to add an EEPROM chip. This provides 2 kilobytes of memory that will be preserved through a power outage, which is convenient when using microcontrollers without built-in EEPROM such as STM32 and ESP32. It can also be used to transport configuration information between devices, or register a unique ID to a datalogging device… how you end up using it is up to you!
Finally… this isn’t a feature of the ChronoDot V3 itself, but still pretty exciting. This is the first macetech product to be designed completely with open-source software. macetech used KiCad instead of Eagle and intends to use KiCad exclusively moving forward. It’s made remarkable progress in recent years, and they encourage all to check it out!
Technical Details
Documentation:
- Official macetech documentation page
- Arduino library written by mizraith
- DS3231 library (including alarm support) written by jarzebski
- Time.h library by PaulStoffregen is great for many time-based operations and supports an external RTC
- http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
Specifications:
- Controller: Maxim MAX31328
- Function: Temperature-compensated RTC
- Accuracy: ± 3.5ppm at -40C to +85C (~1 minute per year)
- Power Supply: 2.3 to 5.5 V DC
- Current: 200uA (active), 820nA (timekeeping)
- PCB Size: 1.2 x 1.0 inches (30.5 x 25.8 mm)
- Pin Spacing: 0.1 inches
- Header Spacing: 0.9 inches
Arduino Examples:
Very simple Arduino code to read and print the hours, minutes, and seconds from the ChronoDot:
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); // clear /EOSC bit // Sometimes necessary to ensure that the clock // keeps running on just battery power. Once set, // it shouldn't need to be reset but it's a good // idea to make sure. Wire.beginTransmission(0x68); Wire.write(0x0E); // select register Wire.write(0b00011100); // write register bitmap, bit 7 is /EOSC Wire.endTransmission(); } void loop() { // send request to receive data starting at register 0 Wire.beginTransmission(0x68); // 0x68 is DS3231 device address Wire.write((byte)0); // start at register 0 Wire.endTransmission(); Wire.requestFrom(0x68, 3); // request three bytes (seconds, minutes, hours) while(Wire.available()) { int seconds = Wire.read(); // get seconds int minutes = Wire.read(); // get minutes int hours = Wire.read(); // get hours seconds = (((seconds & 0b11110000)>>4)*10 + (seconds & 0b00001111)); // convert BCD to decimal minutes = (((minutes & 0b11110000)>>4)*10 + (minutes & 0b00001111)); // convert BCD to decimal hours = (((hours & 0b00100000)>>5)*20 + ((hours & 0b00010000)>>4)*10 + (hours & 0b00001111)); // convert BCD to decimal (assume 24 hour mode) Serial.print(hours); Serial.print(":"); Serial.print(minutes); Serial.print(":"); Serial.println(seconds); } delay(1000); }
Learn
See our Distributors page for a complete list of distributors.