update on 16-08-2014
LEDs matrix


Schematics and explanation
The Sparkfun I2C Real Time Clock is used to keep the time. Its 1Hz SQW output triggers the MCU to read hours, minutes and seconds via I2C bus every second.
All the components take place in a very compact way on a perfboard, connected with the wire-wrap cable.

Many of the circuits found on the Net use a series of LEDs connected together in order to compose the words using few I/O lines. I wanted to have a general purpose circuit, usable for different languages. This leds of course to a LEDs matrix driven by X-Y I/O scanning with enough speed, to allow different languages just changing software and letters mask.

To drive the LEDs matrix directly with the PICs I/Os you need some drivers, both high side and low side. The high side drivers are used for the columns, the low side ones for the rows. The serial scanning is applied to the rows because they are less. The signals to the columns are parallel. This divides the frame period by ten instead of twelve, enabling an higher brightness of the LEDs: 10% of duty cycle instead of 8.3%.

To manage the I/Os and the different peripherals with the right speed and, first of all, with an exact timing you need to have the full control of the hardware. Because of the easiness of the Arduino IDE that masks out many of the boring peripherals configuration, it is not suitable to drive a 100Hz scanning on 10 lines (i.e.: 1ms timing) while exchanging data via I2C bus with Real Time Clock and serially with WiFLy. So? A well known and experimented PIC18F4620 at 10 MIPS is the right compromise between power and complexity.

To correct the long term drift of the RTC, the time is synchronized via Internet to the INRIM reference through a Sparkfun WiFLy module.

The generic wall adapter voltage (9 to 36V) is lowered down and stabilized to 6.5V with a very high efficiency through a switching regulator. Two linear regulators are used to supply WiFly at 3.3V and PIC18F4620 at 5V.