Skip to main content

Analog clock torture test

After playing around with things a bit, I find that I am able to run the clock forward at 8x speed (125ms/tick), but only able to do so reliably in reverse at 4x speed (250ms/tick).

So here is the "torture test" I have devised. It fastforwards the clock for 60 ticks, then reverse the direction for another 60 ticks. At the end of it, the second hand should return to the original position. By running this in a loop for many hours, I can confirm that there is no slippage for a given set of parameters.

The parameters for this particular clock (another $2 clock I picked up from KMart after I accidentally stepped on and broke the Ikea one) are:
  • Forward : 32ms pulse (9ms on, 1ms off)
  • Reverse : 12ms pulse, 12ms wait, 28ms pulse

The high-level code to implement the above looks like this:

void forward_tick() {
  for (int i=0; i<32; i++) {
    digitalWrite(tickpin, HIGH); delayMicroseconds(900);
    digitalWrite(tickpin, LOW); delayMicroseconds(100);
} tickpin = (tickpin == 25 ? 27 : 25); } void reverse_tick() { digitalWrite(tickpin, HIGH); delay(12); digitalWrite(tickpin, LOW); delay(12); tickpin = (tickpin == 25 ? 27 : 25); digitalWrite(tickpin, HIGH); delay(28);
  digitalWrite(tickpin, LOW);

It is actually OK for the reverse tick to run slower because if you are trying to catch up to a certain time by running in reverse, the clock is still ticking ahead. So say if it's 3am now and I am trying to reverse back to 2am, that's 60 minutes worth of path to backtrace. At 4x speed, it will take me 60/4 = 15 minutes to do so. But in that 15 minutes, the clock has also moved ahead 15 minutes, so that's actually more like 45 minutes worth of time to backtrace.

Whereas if it's 2am and I am trying to fastforward to 3pm, again that's 60 minutes worth of time to traverse. At 8x speed, it will take me 60/8 = 7.5 minutes. But in that time, the clock has also moved ahead 7.5 minutes, so it will take me more than 7.5 minutes to catch up with the clock.

I need to come out with a function to calculate given the current and target time, how much time it will take me to fastforward or reverse to the desired position. Then it will provide an objective measure for the optimal route to take when the clock needs to catch up with the actual time.


  1. I never thought I would see someone as addicted to this stuff as me.

    Countless hours poured into making a dashboard of meters using the hacked clocks.

    After many futile attempts only now managed to get a clock going forward (the wires would come off with my limited soldering skills)

    Thanks for posting your discoveries. Helps many a lot.

    Going to try your PWM method.

  2. Ha ha! Nice to see someone working on this as well. I have been working on this clock stuff on-and-off for a few years now, mainly to see if it's possible that make a WiFi analog clock that works reliably and reasonably well on batteries. My friends just think I am wasting my time.

    I was elated when I discovered I could make the clock go in reverse. Didn't think it was possible! And quite reliably as well. Now I have to go back and rip up my ULP code to incorporate the reverse logic.

  3. With your advanced electronic skills wouldn't it be possible to make the clock use the esp32 only for time sync purposes and let the clock run "normally" otherwise ?


Post a Comment

Popular posts from this blog

Adding "Stereo Mixer" to Windows 7 with Conexant sound card

This procedure worked for my laptop (Thinkpad E530) with a Conexant 20671 sound card, but I suspect it will work for other sound cards in the Conexant family. I was playing with CamStudio to do a video capture of a Flash-based cartoon so that I can put it on the WDTV media player and play it on the big screen in the living room for my kids. The video capture worked brilliantly, but to do a sound capture, I needed to do some hacking. Apparently, there was this recording device called "Stereo Mixer" that was pretty standard in the Windows XP days. This allowed you to capture whatever was played to the speaker in all its digital glory. Then under pressure from various organizations on the dark side of the force, Microsoft and soundcard makers starting disabling this wonderful feature from Windows Vista onwards. So after much Googling around, I found out that for most sound cards, the hardware feature is still there, just not enabled on the software side. Unfortunately, to

Attiny85 timer programming using Timer1

This Arduino sketch uses Timer1 to drive the LED blinker: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 /* * Program ATTiny85 to blink LED connected to PB1 at 1s interval. * Assumes ATTiny85 is running at 1MHz internal clock speed. */ #include <avr/io.h> #include <avr/wdt.h> #include <avr/sleep.h> #include <avr/interrupt.h> bool timer1 = false , led = true ; // Interrupt service routine for timer1 ISR(TIMER1_COMPA_vect) { timer1 = true ; } void setup() { // Setup output pins pinMode( 1 , OUTPUT); digitalWrite( 1 , led); set_sleep_mode(SLEEP_MODE_IDLE); // Setup timer1 to interrupt every second TCCR1 = 0 ; // Stop timer TCNT1 = 0 ; // Zero timer GTCCR = _BV(PSR1); // Reset prescaler OCR1A = 243 ; // T = prescaler / 1MHz = 0.004096s; OCR1A = (1s/T) - 1 = 243 OCR1C = 243 ; // Set to same value to reset timer1 to

Hacking an analog clock to sync with NTP - Part 5

This is how it looks after I have put everything together. The Arduino sketch is available here . The 2 jumper wires soldered to the clock mechanism are connected to pins D0 and D1 on the ESP-12 (in any order). When the device first boots up, it presents an access point which can be connected to via the PC or smartphone. Once connected, the captive portal redirects the web browser to the configuration page:     A custom field has been added to the WiFi configuration page to enter the current clock time in HHMMSS format. Try to set the clock time to as close to the current time as possible using the radial dial at the back of the clock so the clock will have less work to do catching up. In the config page, the HTML5 Geolocation API is also used to obtain your current location (so if your web browser asks if you would like to share your location, answer "yes"). This is then passed to the Google Time Zone API to obtain the time and DST offset of your time z