I used the Maxim DS3231 real-time clock chip once (see Datalogger 4 – Clock Design and Sleep Investigation), and I have a few left, but I have some ideas on how it could be easier to use.
The main thing, I think, is the battery backup. The DS3231 has an input pin for battery backup power, but since I didn’t have any suitable batteries, I had it tied to ground, as instructed by the datasheet. As a consequence, though, every time power was removed (when changing batteries, rearranging my prototype, or inserting a multimeter for current testing, etc.), I had to hook up the serial interface and set the clock again. Obviously, no good.
I had the idea to use the DS3231 in the first place while reading about Macetech‘s ChronoDot. The ChronoDot is a great breakout board for many reasons. First, of course, the built-in backup battery will allow the clock to keep time once set, whether you move it between systems, or cut and restore power frequently. Also, it’s got a nice look, with its round, symmetrical form-factor. The space for optional pull-up resistors is nice, too. Finally, they used their brains in designing the pin-out, so the VCC, GND, SDA, and SCL pins are all on the same side, and it’s easy to use those and ignore the other ones (if your application doesn’t need them).
Back in September, Macetech announced they were going to release the ChronoDot as open source. Since I admire the ChronoDot so much, I set out to make one, with a few improvements I wanted. Hence, the ChronoBlot, so named because the home-cut PCBs lack the elegance of the original, and because the traces and ground plane make it look a bit blobby. The name is also to distinguish it from the original ChronoDot, since they are not completely compatible, and to avoid confusion.
Since I still have some of both the DS3231 and the DS3232, my first change was to use the larger DS3232 footprint, which is SOIC-20W, instead of the SOIC-16W of the DS3231. Since the pinout of the DS3231 is a proper subset of the DS3232, I’ll be able to use either one for this board with out any modifications.
The ChronoDot uses a CR2016 lithium coin cell battery. I got some CR2032s with solder tabs from DigiKey, (part number P666-ND) since they were the only ones I could find with the style of tabs that I wanted, that would go through to the front of the board. The CR2032 offers more mAh than the CR2016 (about 220 mAh, as opposed to 90 mAh), and though it’s the same diameter, it’s twice as thick. When in timekeeping mode (Vcc = 0, VBAT > 0) with no I2C activity, the DS3231 draws around 1uA, which gives us roughly 20 years with the CR2032, vs roughly 8 years with the CR2016. So, either one would probably give you more than enough backup power, use whatever you have around or can get for less.
I chose to use 0805 package pull-up resistors, which will save some room. I don’t think 0805 is too tricky for the home user to deal with, it’s big enough to handle with tweezers, and the bypass capacitor is 0805 anyway, and it will keep everything nice and neat on the top of the board. You can get small batches of 0805 components on ebay, or you can buy a kit containing some of many different common values.
The original ChronoDot PCB design was two-sided, but I was looking for something that could be manufactured at home by someone with a low to intermediate level of experience (namely, me). That meant trying to make it one-sided, with no jumper wires if at all possible (since they would rather spoil the nice look of the thing). That also meant using 0805 SMD components for the bypass capacitor (0.1uF) and the optional pull-up resistors, both to save room, and to avoid having to place resistors on the underside of the ChronoBlot, to be soldered on the top. Since the SOIC-20W footprint of the CR3232 takes up a lot more space on this little board than the SOIC-16W of the CR3231, there was little space for full-size through-hole resistors anyway.
Making the board single sided meant that I had to choose a battery that had solder tabs for both terminals, since both would have to be soldered on the top. I found some on DigiKey that seemed to do the trick, though as you can see from the image, I forgot to allow for the wider tab that is present on one of the battery terminals. A little more work with the drill should be able to put that right, or I might try and trim the terminal a bit. As you can see (below) the battery does fit in between the header pins on the lower side, which was a lucky break, because I forgot to allow for it.
Reducing the board to a single side made for some adventures in manually routing traces. Because I was intending to make this with the toner transfer method, I wanted the traces to be as wide as possible, which meant I couldn’t route any beneath the 0805 components. The additional NC pins at the top of the DS3232 also made things tricky, since they needed to be tied to ground. I tried to get a good shot of the 0805 bypass cap in place, but it wasn’t too great, anyway, here it is:
I ended up routing the VCC trace almost all the way around the board, to the far side (where the VCC pin on the chip connects) and back again to the pads for the pull-up resistors. The trace running around the circle looks cool, but I am worried (mainly out of ignorance) whether that will cause any problems with the I2C signals (if the pullups are used and current is flowing around like that).
In order to make the VBAT available, I had to rearrange the order of the pins on the less-used header side. I moved VBAT from the top around to the bottom, which breaks footprint compatibility with the ChronoDot. I couldn’t see any elegant way around this, considering my design constraints, but since I was making this for my own purposes, I could design the target circuit to match. Be advised if you try to make this that it will not be a drop-in replacement for the ChronoDot if any of the pins on that side of the board are hooked up.
I rotated the battery a bit so that the holes for the pins wouldn’t get in the way of the mounting holes. I am pleased with the way the curved traces look. I attempted to use the toner transfer to put the label and artwork on the board, but as you can see (refer to unpopulated PCB image, above), it didn’t take very well. I hadn’t tried that with the labeling and artwork layers before, and I probably won’t mess around with it again, though it is really handy having pins labeled when prototyping.