Kello version 4

Being slightly annoyed that NXP obsoleted the SAA1064 chips used
in clock version 3, I decided to design fourth, and maybe final
version. I wanted to to retain all good features of version 3 and
add some new. I also targeted to lower the cost of parts, as the
Maxim DS3231 is very expensive and the SAA display drivers were
not too cheap either. So the LED drivers are replaced with
TLC5925, and RTC is changed to PCF2129. On circuit design the swap
of these parts was quick, but on FW side a little slower, as I had
to write the drivers.

Meanwhile the cost of factory made PCB from China has dropped
also for bigger boards, so there wasn't need for single sided
design anymore, as used in my previous version clocks.

Features

58 mm (2.3") 7-segment displays

Adjustable brightness

Both 'clock-dots' and decimal points for different display
modes

Shows time, date, day of week, inside and outside
temperature, atmospheric pressure, relative humidity and dew
point

Time and date formatting and temperature unit can be changed
to suit all regions

Master / slave functionality via IR signaling

Hardware

The version 4 uses same 58 mm (2.3") displays as version 3. There
are compatible displays available from several manufacturers. The
displays must be common anode type. Suitable displays are e.g.
Sharlight CM1-2302 series, Kingbright SA23-11 series, Wenrun
LSD230B series and also most
of the 2.3" displays from eBay.

The best matching flat top LED for the cheap eBay displays that
I've found is Kingbright WP483SRSGW (or older code Kingbright
L-483SRSGW). This is actually bi-color LED but when mounted as in
assembly drawing, it lights red. When mounted the other way round,
it will light green. The green is a good match for Wenrun
LSD230BAG-101-01 green display which is available from TME at a
very affordable price. The picture on top of this page shows the
green Wenrun display. I've also used shrink tube around the LEDs
to prevent light leakage from side.

Previous clock used the internal temperature sensor of the DS3231
RTC to show temperature. This wasn't however giving accurate
readings since the power dissipated by displays and drivers was
heating the RTC. Version 4 has connectors to fit two external NTC
thermistors to measure inside and outside temperatures. Suitable
thermistors are available from eBay. They have 10 kohm
resistance beta value of 3950. The thermistors have an XH
connector at one end, which is a Chinese copy of JST
XH series connector. You can use either the genuine JST or
the Chinese replica on the PCB. According to my measurements these
thermistors follow very closely to this
chart on Adafruit website. I measured one thermistor in ice
water 31.87 kohm and in boiling water 652 ohm. The firmware has an
array based on the Adafruit table and in practice the displayed
temperature value seems to follow very closely to a commercial
digital thermometer.

The remote control support is improved. The firmware supports
Nec, Nec42, Samsung, SIRC, Kaseikyo, Matsushita, JVC and RC-5
protocols. It also has a learn function which can be used to teach
it to work with any remote which uses one of the supported
protocols. You can use e.g. an old TV or DVD remote control to
control the clock. The IR receiver should be chosen based on the
carrier frequency used by the protocol. SIRC uses 40 kHz, RC-5
uses 36 kHz and the rest use 38 kHz. However, the 38 kHz works
quite well also for SIRC and RC-5. An example of suitable 38 kHz
receiver is Vishay TSOP53438. It is cheap, sensitive and has good
noise rejection.

Time base of the clock is derived from PCF2129AT. It also
provides battery back-up. The power consumption of the RTC is 2.15
µA when in backup mode. A CR2032 battery has a typical capacity of
190 mA so it should last for over 10 years. Of course when clock
is getting power, the battery is not drained. The PCF2129AT is
temperature stabilized and the accuracy is very similar to DS3231
for only fraction of price.

A piezoelectric buzzer can be used to give audible alerts.
Currently there is possibility to configure it to hourly beep
and/or wake-up alarm. There is also an IR emitter LED which is
used in master / slave setup to transmit time and date from master
clock to slaves. It could also be used for alarm, so the clock
would e.g. turn on TV when the alarm activates, but this is not
currently supported.

There is also a footprint for U-blox CAM-M8 GPS / Glonass /
Galileo / BeiDou module. The firmware has automatic recognition
for GPS module and PCF2129 RTC. It works with eiher one, or both.
The firmware only uses the time and date from GPS, derived from
GPRMC message.

Schematics

The schematics are pretty straight forward. The PIC16F1788
firmware makes most job.

Input voltage is fed to connector X1. It should be high enough to
be able to drive the chain of 4 LEDs in each segment. For red
displays this is typically around 7.5 V. Then the output stage of
TLC5925 needs an additional 1.0 V to maintain regulation. A 12 V
power supply is OK for most display types. To save some power, 9 V
supply is usually also OK. Voltages up to 17 V can be used (or up
to 16 V if using MCP1703-3302E/DB as regulator IC6), but this
causes just more power wasted and heat generated in the display
drivers. Diode D1 protects from incorrect supply polarity, but for
over voltage there is no protection.

The displays are driven by three TLC5925 constant current LED
drivers. They are controlled via SPI bus from PIC. The LED current
is set with a resistor in R-EXT pin on the TLC5925. Current at
each output is 18 times the R-EXT pin current. Now a little trick
is used to allow global brightness control of all segments. The
integrated DAC and integrated op-amp of PIC is used to control the
low sides of R-EXT resistors. This allows easy brightness control
without using PWM and without all the disadvantages associated
with PWM.

The PCF2129AT RTC has possibility to use either SPI or I²C. Here the
I²C is used. The PCF2129AT is configured to output 1 Hz output clock
to PIC. This generates interrupts to update the time. The I²C bus is
also available at option connector X4.

On the schematics the IR receiver is marked as TSOP53438. Also many
other types should work, some are proposed in circuit diagram. IR
decoding is done in firmware. The IR emitter LEDs are connected in
series. Two drive transistors Q1 and Q2 are paralleled to share the
heat load. Constant drive current for transistors Q1 and Q2 are set
by Vbe of Q3 divided by resistors R1 and R2, respectively, yielding
a total of 130 mA. The drive current is too high for continuous
operation, so the LEDs must be pulsed with a duty cycle of 1/3 to
1/4.

Joystick switch readout uses internal pull-up of PIC so it can be
connected directly. Thermistors are connected to connectors X2 and
X3. They form voltage divider with resistors R6 and R7, and the
divided voltage is measured with PIC ADC. The buzzer is driven from
input supply of the clock via Q4 to generate loud enough sound.

GPS module CAM-M8 is configured to use it's internal antenna, so
the only external component it needs is a bypass capacitor. It is
connected to the PIC via UART. Main purpose of the module on this
clock is to provide automatic and accurate time setting.

Board

The PCB for the clock is again designed using Cadsoft Eagle
version 5.12. The design is double sided, and design rules are
quite relaxed. Most of the components are SMD and on bottom side
of board. Only the parts which need to be visible or are too high
for bottom side are on top. This minimizes board area since the
displays fill up the top side of board almost completely. Segment
order for display drivers is same as in previous version. It
allows simple routing of all segment signals in one layer. This
causes some more work in display driver source code, since the
segment order is different for the two displays controlled by one
chip.

I have produced the boards at seeed studio. They have
the best price for this size of board. The quality of boards was
flawless. Also a very nice addition was that they sent a photo of
the ready boards to email when they were shipped. The boards have
black solder mask which makes the clock look very sleek if you use
smoke tinted plexiglass over it. You can order these boards from
Seeed from here.
(Sorry, currently only version v4.0 board available from Seeed,
version v4.1 will be uploaded in future. Meanwhile grab gerbers
below and order from your favorite board house)

A Digi-Key shared cart which has all the parts except joystick
switch, click here.
The Alps SKQUCAA010
joystick switch is available from RS (P/N 516-316) and Farnell (P/N 1435775).
You
can also order it from seeed
at same time you order the boards. Digi-Key
also lists the seeed joystick switch but it has high MOQ. A
directly compatible substitute is available from eBay.

Note when ordering parts; you can save costs by leaving out
functions you don't need. Many of the parts can just be left out
without affecting other features of the clock. The GPS module is
the most expensive component and it doesn't bring that much
advantage because the PCF2129 is very accurate. On the other hand,
if you use GPS, you can leave PCF2129 and battery holder out. If
you use the master / slave functionality, the slave clocks don't
require either PCF2129 nor GPS since they will run from internal
PIC oscillator and get synced from master clock every minute. You
can also leave out IR LEDs and their drive components if you don't
need master / slave functionality, or leave out buzzer and drive
components if you don't need alarm / hour beep etc.

Firmware

The firmware for the clock is written with CCS PIC-C Compiler. The
source files package including compiled .HEX file are available
for download below.

The IR receiver code was originally based on San
Bergmans's NEC reveiver code and RC-5
receiver code. I have thus simplified them a bit and
converted to C. Also the RC-5 code is improved such that it syncs
the receiver on each received bit. This makes it much more
tolerable to different remotes which may have slightly different
timings. The JVC, Samsung, SIRC, Kaseikyo and Matsushita receiver
codes are written by me but basically they work with same
operating principle (timer interrupt driven state machine). I have
also added auto recognition, so the IR decoder state machine
identifies the code it receives and processes accordingly.

The code for Bosch BME280 temperature, atmospheric pressure and
relative humidity module comes with the CCS compiler. For PIC16
series of chips, the compiled code can be too big to fit in memory
segments if all code is inline. This can be solved by adding a
#separate directive before int32 _bme280_compensate_H_int32
function. This forces the compiler to realize this function as
separate, not inline, and allows the code to fit in the memory
segments. I also noticed that there was one incorrect register
address in the CCS provided driver, which was causing oversampling
settings not properly set. I have reported this to CCS so it will
probably get fixed in future. The fw v0.91 package below includes
a .diff file which can be used to patch the bme280.c file to fix
this bug and add the #separate directives.

All the rest of the code, including drivers for TLC5925 and
PCF2129 chips is developed by me. You can freely use and modify
them for your own use, but use of them for commercial purposes is
prohibited without written permission from me. You can find
contact info at beginning of the source files or at bottom of this
web page.

kello_v40_fw_v06.zip
26.12.2017 Source files for HW v4.0, FW v0.6. Contains .HEX compiled
with CCS version 5.054.kello_v40_fw_v09.zip
3.2.2018 Source files for HW v4.0, FW v0.9. Contains .HEX compiled
with CCS version 5.076. This version adds support for GPS module,
time zones, daylight savings time, BME280 barometer / humidity
module and lots of small optimizations.kello_v40_fw_v091.zip
7.9.2018 Source files for HW v4.0, FW v0.91. Contains .HEX compiled
with CCS version 5.080. This version adds support for master/slave
function, alarm, dew point calculation, Kaseikyo and Matsushita IR
protocols, date / time / temperature formatting and day of week
displaykello_v4x_fw_v092.zip
16.10.2018 Source files for HW v4.0 and v4.1, FW v0.92. Contains
.HEX compiled with CCS version 5.081. This version adds
compatibility for PCB version 4.1. The only difference in board v4.1
requiring firmware change is different baud rate of U-blox CAM-M8C
compared to Fastrax UC530M used in v4.0. The baud rate defaults to
9600 for CAM-M8C but you can change it to 115200 baud for UC530M via
a menu setting. Also some other small fixes.