The main changes in hardware so far are the addition of a LDR, some transistors and a relay, to enable the clock to dim its lights.
The rest of the changes are in software. I extended the original firmware from Christian Aschoff to support the dim feature.
[Update Oct. 05, 2011: There are new and better schematics available. Please see the Update section at the end of this page!]
Here are the extended schematics:
I built the electronics on two stripboards, a larger one, holding the microcontroller (an Arduino clone), the real time clock, the dim circuits and the matrix’ cathode drivers, and a smaller one holding the anode drivers.
The whole project is still in works, so no guarantees. The whole thing might change in the future, use it at your own risk…
Please note, that the firmware uses a slightly different pin assignment than the original firmware from Christian Aschoff. This is mainly because the new firmware uses the Arduino SPI library to send the data to the multiplexers.
I also added a relay to the electronics. This relay is connected to pin 4 of the Arduino. This pin formerly was used for a status LED, showing the 1Hz signal from the RTC. To use the firmware with the standard hardware (i.e. not with the electronics above), you can switch of the relay support by removing the “HAS_BRIGHTNESS_RELAY” define the constants.h.
And finally here’s the reason why there’s a relay in the first place: When changing the design to feature brightness control for the LEDs, I needed to use a transistor to drive the 200-300mA for the LEDs from the Arduino PWM pin. Doing so unfortunately results in a drop of voltage, even when the PWM pin is set to 255 (“full power”). In my case, only about 4.7V (instead of 5V) arrived at the LEDs, causing an unwanted loss in brightness.
Since most of the day you want the clock to shine at it’s full brightness, the easiest solution was to add the relay to switch the LED’s power from “constant 5V” (full brightness) to “PWM” (dimable brightness) – at least for me, having a relay laying around…
Unfortunately, the printing service still didn’t delivered the front panel for my clock, so I wasn’t able to test the clock in it’s real world environment. So I definitely need to tweak with the dimmer settings (and the trigger points when to switch to PWM and back again) when the clock is finished.
Update October 5th, 2011:
I finally had the time to “repair” my word clock after I had some trouble with burned out LEDs. I also designed much better (simpler) schematics:
I drive the clock with a slightly modified version of the Qlock23 Firmware (a merge of the “official” firmware from Christian and the dimming code from my firmware). This firmware is available here at GoogleCode.
The modifications I made support the buttons, using the Arduino’s internal pullup resistors. Buttons using the internal pullup resistors are pulled up to HIGH when not pressed and going down to LOW when pressed. This is exactly the oposite to the states the old button schematics (with external pull-down resistors) worked.
In the changed firmware, it’s possible to switch between pull-up and pull-down button logic with a single define in the Constants.h file (INTERNAL_BUTTON_PULLUP).
I try to send the changes as soon as possible to Christian, who’s also hosting the Qlock23 firmware. So look out for the Qlock23_v1.1.zip package .