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

Update: Line adapter for Ozito Blade Trimmer

Update (Dec 2021): If you access to a 3D printer, I would now recommend this solution , which makes it super easy to replace the trimmer line. I have been using it for a few months now with zero issue.

Filament Joiner Part 2 (With Display and Knob)

Thanks to the current corona-virus crisis, the parts I ordered for the filament joiner project were taking forever to arrive. But now that they have finally arrived, I can put them to good use. These were the parts ordered: 0.96" OLED display SSD1306 Rotary switch encoder KY-040 Here is the final circuit diagram: The OLED display is connected to the SDA and SCL pins of the Nano (A4 and A5 respectively), and powered by 5V and GND. The rotary switch encoder is connected as follows: VCC => 5V GND = > GND CLK => D9 DT => D8 SW => D2 My prototype board now looks like this: The updated code for driving the knob and display is available in  heater-with-display.ino in the Github repository . We now have a fairly compact (about 7cm x 5cm) and independent filament joiner (no need to connect to PC) that is driven solely by a 12V power supply. Here's how to use it to join printer filaments. More usage details in my previous post .

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