Section TOP Specs Power Arduino Pin Outs Switches PS100 mod PJ42 Movement Movement Operation Sound Module Add Sound Files H Bridge Step Up Module TFT Speaker Summer Advance Winter Retard DCF77 Repeater Vero Board Schematic Arduino Code
Arduino Pragotron Master Clock & Slave Driver
Many Pragotron clocks supplied from antique shops or architectural salvage dealers have had their original 1 minute drive movements removed and replaced by quartz movements. This is because they were designed to be driven off a Master Clock from a 12v to 60v supply.
Although they work perfectly well and keep reasonable time these quartz modified clocks lose their original look and feel as they now tick once a second and no longer have the animated step forward of the hands and soft "clunk" sound once every minute.
This circuit enables the original movement to be used, powered from an Arduino Microprocessor from 5 volts and has a modular design to keep the design simple and build time short.
below left 49cm Pragotron PJ42 mounted on a wall with the backlight controller mounted underneath below & right 44cm Pragotron C401 mounted in the other end of the same room
Both clocks are synchronized to the DCF77 "Atomic" Clock and will step forward on the minute in unison as they where originally designed to.
below looped animation shows the restored clock stepping forward 1 minute at 00 seconds. Note the 5cm TFT display has been enlarged for clarity against the large 44cm Pragotron dial
This clock circuit uses an Atmega 328 microprocessor to drive Pragotron type clock movements from a 5 volt supply.
The Arduino Code is based on my Master Clock code and has been completely re-written for Udo Klein's V3 library by Peter Hillyer.
Peter has added code for a 2.2" TFT SPI display and sound via a JQ6500 sound module controlled over the serial port.
It should also be able to drive other clock movements that require a 1 minute alternating pulse to drive them.
Pragotron movements have different drive voltages so a step up voltage module is used to set the correct voltage for the movement is use.
A DCF77 receiver module is used to synchronize time to the "Atomic" Clock in Germany and clock functions and controls are monitored on a 2.2" TFT display.
The circuit is built onto Vero Board and can be located remote from the clock movement that is being driven.
An off the shelf Arduino Uno can be used but will required a 16MHz quartz crystal added in place of it's built in 16MHz resonator.
Other Arduino boards can also be used but must use a quartz crystal for the microprocessor timings as this clock design uses Udo Klein's DCF77 library.
See details here UNO Mod
Switches are mounted on the Vero Board to start Auto summer advance and also winter retard.
Full Westminster Chimes including volume are controlled by the Arduino and played through a JQ6500 sound module and chimes can be set to On, Off and timed.
Battery backup is provided by 3 x 1.5v Alkaline batteries and will keep the clock running without chimes during power cuts.
This circuit also includes a DCF77 "repeater" and "multiplier" circuit and can provide DCF77 pulses at 5volts to other clocks.
This and the Westminster chimes cam be omitted if not required.
From v2.5 I have added Summer/Winter output on A3 to automatically set my Word Clock to summer time.
Full details can be found in the sections below.
below completed Vero Board layout with all modules mounted and 1 min cycle of TFT display
I use a common 12 volt power supply unit to drive many different types of clocks. This 12 volt supply is then stepped down locally at each clock with a 5 volt module to supply power for the control board and various modules. If you are running just this one clock then any regulated 5volt supply
will do as long as it can supply the current for your circuit use.
below my common power supply has 18 individually fused 12v circuits each with a 2A fuse. 9 of these are battery backed up.
Clock boards also have their own on board fuse.
The configuration of modules in my particular circuit requires approximately 300mA to run at max power. This is with a 24v movement connected and chimes at a volume loud enough for a single room without disturbing other rooms in the house. If you are
driving higher voltage movements and or sounding chimes at very high volumes then current draw will go up. As can be seen from the table below normally with the display off, the clock not stepping and not chiming the clock will draw 59mA.
Once per minute for around 0.5sec while the clock advances 1 minute the current will rise to 174mA. If the chime is set then every 15 minutes for a few seconds as the Westminster Chime quarters are sounded the current will rise to 64mA to 174mA (depending on set volume).
Max current of upto 300mA is drawn on the hour for 0.5 seconds as the clock advances 1 minute and chimes out the hours.
I have fitted a 650mA fuse on the main board and also a thermal fuse in the clock movement as my common power supply can output many amps.
below measured current draw
|Options||Normal||Clock stepping||Chiming Low||Chiming High||Stepping & Chiming Low Vol||Stepping & Chiming High Vol|
|Initial Sync Sound On Display On||85||NA||NA||NA||NA||NA|
|Initial Sync Sound On Display Off||75||NA||NA||NA||NA||NA|
|Initial Sync No Sound Display On||68||NA||NA||NA||NA||NA|
|Initial Sync No Sound Display Off||59||NA||NA||NA||NA||NA|
|Sync'd, Sound On Display On||85||200||90||200||212||300|
|Sync'd, Sound On Display Off||68||183||73||183||195||283|
|Syn'd No Sound Display Off||59||174||NA||NA||NA||NA|
The clock has 9 switches all mounted on the main circuit board
|Reset||1 way non locking press On||Reset Atemega 328 & TFT display|
|Chime Mode||1 way non locking press On||Selects Chime mode between On Green, On preset times only Yel and Off|
|Advance||1 way non locking press On||Advances the clock by 1 hour|
|Retard||1 way non locking press On||Retards the clock by 1 hour|
|Cancel Adv/Rtd||1 way non locking press On||Cancels advance or retard|
|Motor Sync||1 way non locking press On||When first powered up or if the clock hands have been manually adjusted synchronises the motor with the H Bridge output|
|Volume- / Prev||1 way non locking press On||Press to play previous sample on sound module Press and hold while playing to lower volume|
|Play/Stop||1 way non locking press On||Press to play current sample on sound module Press again to stop playing|
|Volume+ / Next||1 way non locking press On||Press to play next sample on sound module Press and hold while playing to increase volume|
below mouse over to show switch locations on main Vero board
Atmega 328 Pin connections
|IC Pin||IDE Pin||Function|
|1||Reset||Reset DCF77 Analyzer & TFT Display|
|3||1||Tx & Tx for sound module|
|12||6||30 second pulse|
Removing the old quartz movement
To get to the old movement to remove it place the clock on it's face on a soft cloth to protect it from damage, see picture below.
Remove four bolts highlighted by yellow arrows and take out the four L shaped brackets and single hanging bracket on the top.
Carefully remove the dial with the quartz movement attached from the clock case.
The dial is very thin and is easily bent if
handled incorrectly. First remove the minute hand by undoing the brass grub
screw under the minute hand holding it to the minute shaft. See red arrow.
The hour hand should be a friction fit and can be gently pulled off. Now unscrew the collar holding the quartz movement to the dial and remove the movement.
On my clock the old Pragotron fixing bolts were filled down and glued over the fixing holes on the dial. Remove these bolts and discard.
Pragotron PS100 Movement Modification - adding a thermal fuse
I use a common power supply to drive my many clocks and these can deliver 8 amps of current. Each clock has it's own fuse but as a failsafe I have fitted a thermal fuse inside the PS100 movement in case the coil overheats.
To fit the fuse the case will need to be taken apart and this means drilling out the welded studs in the case with the possibility of destroying your movement.
If you don't want/need to fit the thermal fuse then just ignore the following.
The PS100 movement case measures 60mm x 80mm x 20mm the terminals at the bottom of the movement are 10mm long and the minute shaft protrudes around 15mm
from the face of the case. The hand adjuster a further 5mm from the back of the movement.
The case is not designed to be opened and is secured with welded plastic studs in the four corner holes
seen from the the front of the case. To take the movement apart the plastic welds are drilled out using a 4mm drill.
The top and bottom of the case can then be carefully prised apart.
Once the case is apart you find the movement is split in two.
Below, the hour drive cog and shaft with adjustment cog along with the drive coil, rotor, stator and connector terminals.
Below the top half of the movement containing the minute shaft drive and rotor/adjustment cog.
Behind the minute shaft cog is a sprung metal plate that pushes the minute cog away from the plate ensuring engagement with the plastic hour drive cog.
Below thermal fuse fixed to the drive coil with a twisted length of wire. In the event of the drive coil overheating the fuse will trip disconnecting the coil.
The fuse wire (slate white) is connected in series to one of the brown coil wires near the terminal block.
Re-fitting the case is a bit tricky.
Put the spring plate under minute shaft cog and press in under the rotor cog and it should hold in place.
With a finger holding the hour shaft in place from the outside gently press the two parts together and with a bit of wiggling they should click into place.
Turn the hand adjuster to ensure the movement is free.
The two case parts can then be secured with plastic tape or some hot melt glue.
Pragotron PS100 Lavet Type Stepper Motor Movement Operation
|This movement uses the
Lavet type stepping motor action.
Minute hand shaft, attached cog and rotor drive cog removed for clarity.
The rotor is a permanent magnet with it's opposing poles shown by the red and green dots.
With the stator coil non energised the stators have no magnetic field and the rotor will be stationary in it's last energised position.
When the 1 minute pulse of 24volts is applied with an opposite polarity to the previous pulse
the stators become magnetised with their North and South matching the rotor poles.
The rotor is then forced around clockwise and stops with it's North and South poles opposite the North and South poles of the stator.
The rotation of the rotor drives the movement forward 1 minute.
The 24 volt 1 minute pulse is then removed also removing the stator magnetic field. The rotor stays where is was.
The next minute the another 1 minute pulse is received with the opposite polarity to the previous pulse.
The stator is then energised with it's poles reversed matching the polarity of the stationary rotor.
The rotor is again forced around clockwise and stops with it's North and South poles opposite the North and South poles of the stator.
The rotation of the rotor drives the movement forward 1 minute.
The 24 volt 1 minute pulse is then removed also removing the stator magnetic field.
The rotor stays where is was and it has now turned 1 full revolution ready for the whole process to repeat from the start: above.
Pragotron PJ42. This large clock has a 42cm diameter dial and measures nearly half a meter total diameter and is 11cm deep. Case is of black Bakelite with a concave plastic dial.
To give an indication of the size of this clock I have shown it placed on a Tub chair for comparison.
Below, to backlight this clock dial see Pragotron Dial backlight controller
JQ6500 Sound Module
The device (appears to) accepts commands at any time. Commands consist of 4 or more bytes,
Each command starts with byte 0x7E
Followed by a byte indicating the number of bytes which follow including the terminating byte (including termination)
Followed by a byte indicating the command to execute
Followed by an optional first argument byte
Followed by an optional second argument byte
Followed by the byte 0xEF as the termination byte
for example, the command ”PLAY” (0x0D) is constructed with the following 4 bytes
0x7E – Start Byte
0x02 – 2 Bytes Follow
0x0D – Command Byte
0xEF – Termination Byte
and the command to play a specific file (0x012) has two arguments (folder number and file number) so it looks like this
0x7E – Start
0x04 – 4 Bytes Follow
0x12 – Command
0x02 – 1st Argument (in this case, “Folder 02”)
0x03 – 2nd Argument (in this case, “File 003”)
0xEF – Termination Byte
Please note that you are not sending ASCII characters here, but those raw bytes (ie 0x7E is 8 bits, not 4 characters!).
Normal commands provide potential response of two ascii characters “OK” and maybe “ERROR”, but generally ignore responses to normal commands (it’s best to clear your serial buffer before and after issuing a normal command).
Query commands return an unsigned integer as hexadecimal characters (ie if the response is the integer 1234, then the response is the 4 ASCII characters “04D2”, so yes, the commands are sent as raw bytes, and the response is ASCII).
0x0D – Play, No Arguments
0x0E – Pause, No Arguments
0x01 – Next, No Arguments
0x02 – Prev, No Arguments
0x03 – Play file by index number, 2 Arguments. The index number being the index in the FAT table, or upload order. Argument 1 = high 8 bits of index number, Argument 2 = low 8 bits of index number.
0x0F – Change folder. 1 Argument. Argument 1 = 0x01 for Next Folder, 0x00 for Previous Folder.
0x12 – Play file by folder and name, 2 Arguments. This applies to SD Card only where you have folders named 01 through 99, and files in those folders named 001.mp3 through 999.mp3. Argument 1 = folder number, Argument 2 = file number. Note that arguments are a single byte, so effectively I think you can only access up to file 255.mp3 in any folder.
0x04 – Vol Up, No Arguments
0x05 – Vol Dn, No Arguments
0x06 – Set Volume, 1 Argument. Argument 1 = byte value from 0 to 30
0x07 – Set Equalizer Mode, 1 Argument. Argument 1 = byte value 0/1/2/3/4/5 for Normal/Pop/Rock/Jazz/Classic/Bass (actually “Base” in the datasheet but I think they mean Bass)
0x11 – Set Loop Mode, 1 Argument. Argument 1 = byte value 0/1/2/3/4 for All/Folder/One/Ram/One_Stop – I don’t know what “Ram” is, it’s not Random, it seems the same as “One”.
0x09 – Set the source, 1 Argument. Argument 1 = 0x01 for SDCard and 0x04 for the on board flash memory.
0x0A – Sleep mode, No Arguments. Supposedly a low power mode.
0x0C – Reset, No Arguments. It’s advisable to wait 500mS or so after issuing this.
None of the query commands have arguments.
0x42 – Get Status. Response integer (as hexadecimal ascii characters) 0/1/2 for Stopped/Playing/Paused. Note that built in memory never “Stops”, it only “Pauses” after playing a track. And when playing you occasionally seem to get the odd erroneous “Paused” response, it may be power issues, but in the Arduino library I sample this command several times to get a “consensus” of results!
0x43 – Get Volume. Response integer (as hexadecimal ascii characters) from 0 to 30.
0x44 – Get Equalizer. Response integer (as hexadecimal ascii characters) from 0 to 5 (see set equalizer above for definitions).
0x45 – Get Loop. Response integer (as hexadecimal ascii characters) from 0 to 4 (see set loop above for definitions).
0x46 – Get Version. Response appears to be an integer (as hexadecimal ascii characters).
0x47 – Count files on SD Card. Response integer (as hexadecimal ascii characters).
0x49 – Count files in on board flash memory. Response integer (as hexadecimal ascii characters).
0x53 – Count folders on SD Card. Response integer (as hexadecimal ascii characters).
0x4B – Get the index number (FAT table) of the current file on the SD Card. Response integer (as hexadecimal ascii characters).
0x4D – Get the index number MINUS ONE (!!) of the current file on the on board memory. Response integer (as hexadecimal ascii characters).
0x50 – Get the position in seconds of the current playing file. Response integer (as hexadecimal ascii characters).
0x51 – Get the total length in seconds of the current playing file. Response integer (as hexadecimal ascii characters).
0x52 – Get the name of the current file on the SD Card. Response ASCII characters. Note that this will return a name even if the file is not playing, even if a file from the on board memory is playing, even if the SD Card has been removed… ! It’s also not really the file name, it lacks the file extenstion separator for a start (.), and is probably 8[nodot]3 max length.
Adding Sound to the Module
Plug the module into your PC and run the file MusicDownloader.exe on the module.
Click on the 2nd tab then clock on the button to the right of the black box
A file requester will open. Select your sound files and clock on Open
Go back to the first tab and click the button after a short delay the files will start to be copied
When complete you will get this message
Further info on this module can be found here JQ9500 info
Download the sound files here
001.mp3 to 012.mp3 are the hour chimes including the 4th qtr Westminster chime, 013.mp3 is the 1st Qtr chime, 014.mp3 is the 2nd Qtr chime and 015.mp3 is the 3rd Qtr chime.
below example of clock quarter & full chimes
below clock stepping to 09:00hrs and chiming the hours
Dual H Bridge Module
I have connected my clock movement to connection 02.
Important remove link from the onboard regulator as shown as this is not used.
5v is derived from the Arduino power supply to the screw terminal marked "5v Arduino"
Ground is common ground and 24v is the stepped up supply from the step up module
Remove the link from ENA and ENB as the H bridge is enabled from the Arduino.
I have connected ENB to my Arduino as I am using output 2. Whenever ENB is set to 5v from the Arduino whatever 5v voltage polarity set on IN3 & IN4 pins
from the Arduino is sent out at 24v from the H bridge module to step the clock on 1 minute.
H bridge Module specifications
L298N as main chip
Low heat,outstanding anti-interference performance.
High working power to 46v,large current can reach 3A MAX and continue current is 2A, power to 25w.
Can drive one 2-phase stepper motor, one 4-phase stepper motor or two DC motors.
Built-in 78M05,get power from drive power,however, when drive power over 12V, please use the external 5v power as power supply.
Large capacity filter capacitance,afterflow protection diode, more stable and reliable.
Double H bridge drive
Chip: L298N (ST NEW)
Logical voltage: 5V
Drive voltage: 5V-35V
Logical current: 0mA-36mA
Drive current: 2A(MAX single bridge)
Max power: 25W
Size:43 x 43 x 26mm(LxWxH)
This module has a built-in 5v power supply, when the driving voltage is 7v-35v, this supply is suitable for power supply
DO NOT input voltage to +5v supply interface, however leading out 5v for external use is available.
When ENA enable IN1 IN2 control OUT1 OUT2
When ENB enable IN3 IN4 control OUT3 OUT4
Voltage Step up Module
This module takes the 5 volts from the Arduino power rail and steps it up to the 24volts required to drive the Pragotron movement coil via the H Bridge module.
The exact step up voltage is adjusted by turning the preset resistor.
The 2.2" LCD in the TFT01 is a IL19341 and has a 240 * 320 resolution.
§ SDO: Serial clock output
§ LED: 3.4V Power Supply pin
§ SCL: Serial clock input
§ SDA / SDI: Serial data input
§ DC: Data / Command selection
§ RST: Reset, Low level active
§ CS: Chip Selection, Low level active
§ GND: Ground
§ VDD33: 3.3V Power Supply pin
A level converter is used between the Arduino and some of the TFT display pins as they require 3.3v.
See schematic for details.
The display is split into 5 sections.
The first shows the current decoded time and date from the DCF77 transmitter
The 2nd row shows the following information:
Makers name and S/W version
Time first synchronised. This will show you the length of time the clock has been running.
Quartz accuracy and Quartz frequency. The quartz crystal is only used when the DCF77 signal is lost and while the clock is in sync the quartz crystal in continuously "tuned" to the highly accurate DF77 signal.
This row will show the actual "tuned" frequency of the quartz crystal along with the accuracy in Htz with 1Htz being the best.
Seconds lost or gained. This will show the number of times the clock has been out of sync with the DCF77 clock and auto corrected for more and less than 1 second.
This is useful if the clock is driving 1 second slave clocks as they could be out of sync if the auto correction fails. The auto correction adds or removes a 1 second pulse to maintain sync of the 1 second slaves.
You would expect a 1 second loss to be registered for example when a leap second is injected.
The 3rd row shows the DCF77 signal status and quality
The 4th row has the BST (british summer time) indicator and slave pulse output monitor
The 5th row is the chime status monitor. Chime is green when chimes are always on, yellow when on timer and off when chimes are off.
below TFT display over 1 minute in normal clock mode
The JQ6500 sound module can directly drive an 8Ω speaker of up to 3watts.
I have mounted a small speaker it is a piece of plywood and added a Pragotron Logo with Lazertrans inkjet paper.
The speaker is then mounted on the wall behind the clock to sound the chimes. The speaker can be mounted remote from the clock if required.
To correct the clock for summer time (advance by 1 hour) just press the advance button on the main control panel. The Pragotron clock will start to advance and the display will show "BST advance count" and will count down as the clock advances an hour.
During summer advance if the current seconds get to 0 the advance count will stop for 1 count to ensure the clock advances exactly 1 hour.
Once the advance count reaches 0 the clock stops advancing and the TFT display reverts to normal.
The video below shows the clock advancing with the enlarged TFT display on the left showing current time and advance count.
These clock movements can not be stepped backwards so they are retarded by stopping the drive pulses for 1 hour.
To correct for winter time (retard by 1 hour) press the retard button on the main control panel. The TFT display will show "BST Retard count:60" and the Pragotron clock will stop.
As each minute passes the Retard count will decrease by 1 until it reaches 0 when the Pragotron Clock will restart and the TFT display reverts to normal . The clock will be exactly 1 hour retarded.
The time-lapse animation below speeded up 180 times shows the retard count decreasing to 0 as an hour of current time passes.
DCF77 Signal Repeater/Multiplier
This is optional and is only required is you want to feed many DCF77 clocks from 1 DCF77 signal and is mounted on the main vero board.
The circuit uses a 6 way inverter. The 3.3v DCF77 signal from the receiver comes into the 1st inverter
and is inverted and changed to 5v. This is then fed to the remaining 5 inverter inputs. The output from each of these 5 inverters is then exactly the same as the
incoming 3.3v DCF77 signal but is at 5v. Each output can be then sent to different DCF77 clocks.
The circuit is designed around prebuilt modules and is very easy to build onto Vero Board. The board below shows all components mounted ready for final wiring.
The white temporary labelling strips helps position wires and components and is removed once they are all in place. The modules plug into the installed headers on the board once wiring is complete.
below actual Vero Board showing wiring (mouse over for module labels) note 3.3v PSU module is not plugged in as I use the 3.3v supply from my Regulator clock housed in the same case
Clearing your EEPROM
If your DCF77 library held on your Arduino has become corrupted the Arduino will not "Synchronize" to a good signal and will display a low "Signal Quality %" even though the signal is perfect.
Load this small bit of code to your Arduino to erase the EEPROM then reload the clock code below. This will allow the library to restart from fresh.
Download Code V2.4 v2.5 With summer winter output on A3 pin to drive automatic summer winter correction on my Word Clock
A standard Arduino Uno can be used but must have a Quartz Crystal added instead of a resonator to work with Udo Klein's DCF77 Library. See details here UNO Mod
Requires Udo Klein's V3 library https://blog.blinkenlight.net/2015/08/01/dcf77-library-release-3-0-0/