I've got a thing for clocks... I wonder if it's because I'm not getting any younger.
Anyway, I had a day free over the weekend and decided It was clock building time.
There's not much to this clock really. A PIC18F25K22 running some simple firmware written in AMICUS18 BASIC. There's a Dallas DS1302 RTC chip with battery backup, and a handful of other components.
I've been experimenting with different firmware to see which makes the display the most readable.
The image on the left of the clock front is showing a time of 10:20:13UPDATE 29/10/13
I've created a construction project for this clock which can be found here.
I’ve been experimenting with using a PIC to control long chains of 7-segment LED displays, and to find an approach that I can use to replace the obsolete TIL311 displays. To that end, I’ve created a tech article that describes a simple way to do this. My prototype was 24 digits long; long enough for most applications I think, but could be extended. It’s all done with a PIC18F25K22 running from its own internal oscillator, accepts data from a serial device at 9600 baud, and supports 0 to 9, and A to F value display. The code is written in AMICUS18 BASIC which is free so you can change the software to suit your own application. All the fully documented source code is supplied as well as a schematic of the circuit.
The picure above shows 24 digits (6 x 4 digit modules). The display modules each contain a 4 x 7 segment Common Cathode display, a DIL resisor pack on the modules right-hand side, and there are 4 n-channel SMT MOSFETS underneath.
The advantage of using modules on breadboards is the vast amount of time, and wire that's saved. You can throw a quick circuit together in no-time if you already have the modules pre-built. It also saves a lot of breadboard space.
The PICKIT2 PIC Programmer from Microchip is a very common programmer, and is still on the Microchip active list and available for purchase. There are also clones available via auction sites.
Whilst the PICKIT2 won’t support some of the larger program memory PICs available because it’s own internal memory is limited, it is in my opinion a better programmer as it’s faster than the KIT3, cheaper, and you don’t have to keep reloading it’s operating firmware depending on the PIC range you want to use.
I have been asked on several occasions why the PICKIT2 doesn’t support the 18F25K22 PIC when it does seem to support the K20 variant, and the reason is simple. It does, but you do need to update your device file. The K22 variant was released after the K20 variant and that’s probably why it wasn’t included at the same time.http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en023805&redirects=pickit2
The above link in to the Microchip website will allow you to download the latest PICKIT2 software (currently v2.61) AND the Device file (1.62.14). Look on the right of the webpage under the heading "What's new !".
Upgrade your software if required, and then replace the device file with the one you’ve just downloaded and after this, the V22 device should be available for you to select.
It’s been a busy couple of days playing with the Nixie Clock but it’s been well worth it.
The firmware for the PIC is completed and running and the main logic board that contains the PIC, RS232 interface, Audio Amplifier, HT and +5v PSU is complete and working.
I had to make a few “modifications” to the wooden case as the display board PCB was slightly too wide and the 7-way Molex connector was catching on the side, preventing the board from sliding into place. Thank heavens for electric files !!
The chap who will be receiving this is a bit of a change freak and loves things that are configurable, so every parameter can be configured by hooking the clock to a dumb RS232 terminal.
There is provision for two temperature sensors to be connected, and you can set alarms if minimum or maximum temperatures on either channel are exceeded. Alarms are either flashing coloured LED’s and/or an audio alert (frequency configurable of course).
There is provision for the CPU to power down the Nixie tubes during a specified time window. This could be useful during the day when the owner will be at work and should help extend the life of the tubes.
The on board RTC (DS1802) can have its date / time set via a simple command over the serial port, and is also responsible for trickle-charging the on-board NiMH back up battery.
All that’s left to do is fit everything into the case and possibly make a few alterations to the firmware. I’m using just under 25% of the available program space, so theres lots of room available for additional features. I’ve also added an 8-way Molex connector to the top of the PCB that brings out +5v, 0v and the remaining unused I/O pins from the PIC; this will make hardware expansion simpler when it’s required; and it will be required at some point.
I've marked all the connectors so that when enquiring hands take the darn thing apart, it can be put back to gether... that's going to happen at some point as well I suspect.
Picture showing back wooden panel with interface connector, logic and driver board.
The organisation I work for have many buildings and most contain at least one computer or equipment room. In one particular building, the computer room air-conditioning is temperamental to say the least and because people don’t often need to go in there, one more than one occasion the air-conditioner has tripped and it’s been a while before anybody’s noticed the tropical heat wave going on in there.
Yesterday I designed and built a temperature alarm system. It’s nothing too clever, just three large LED displays in a box, with an 18F25K22 PIC running everything. A Dallas 18B20 sensor has been mounted in a small box and is connected via a piece of three-core cable to the main display unit that can be mounted outside the room.
You can set the maximum allowed temperature and this is stored in the PIC’s EEPROM.
If the temperature rises about the pre-set maximum, the display flashes and there are a couple of 5v buzzers inside the main unit to help attract attention. There are three additional indicator LEDs housed within the main display unit as well. One is a green LED that flashes indicating all is well, a yellow LED that indicates that the unit is in setup-mode (started by powering on the unit whilst depressing the external push-button switch mounted on the side), and a red LED that indicates the temperature alarm has been tripped at some point. Depressing the push-button switch once clears this indicator and the complete unit is powered from a small 9v plug-in mains transformer.
Inside the unit there are two PCBs. One is the top display board, and the other is the logic and PSU board.
If people are interested I’ll publish the design details for this unit.
Completed unit on the bench being soak-tested.
I recently posted details of a complete construction project for a digital thermometer and clock, partly in response to a request but also because I’d been thinking about building one for a while. Because I wanted this to be an easily maintainable project by anybody, I opted to use the new AMICUS18 free compiler from Crownhill (I already use their PROTON BASIC+ compiler but you have to purchase that though it supports most, if not all, 10F, 12F, 16F and 18F parts). In a nutshell, the AMICUS18 compiler and IDE allows you to write Proton BASIC programs for two specific Microchip PICs, and these PICs just happen to form the core of Arduino compatible CPU boards and shields, so this basically means that you no longer have to work with ATMEL CPU’s exclusively if you want to play with Arduino hardware, and because AMICUS18 is free, this opens up a whole pile of possibilities for project construction, for as long as you limit yourself to a couple of PICs (18F25K20 and 18F25K22), then you can write unrestricted and very powerful code in good old friendly BASIC.
I’ve also realised that whilst there are many web sites containing lots of projects to build, they tend to supply you just a circuit diagram and if you’re lucky, a .HEX files for the CPU. These are ok for seasoned constructors who in reality, probably just want to grab some circuit ideas and wouldn’t usually build the project in it’s entirety in the first place, but for beginners and novices, something more akin to what the great electronics magazines of yester-year used to produce is more appropriate and that’s why I’ve opted to try and provide full construction details for some of my projects.
So, with all this in mind, I’m currently working on another project – an Evaporator.
Ok, actually this is a device that produces a small amount of heat and has a thermometer and timer built in. You set the run time in minutes, maximum temperature you want, and the device attempts to maintain a “hot-zone” at the required temperature for the specified time. In this version of the project, I’m using a 12v / 20w halogen lamp has the heat source and it’s used to gently warm an evaporating basin (small porcelain dish) that’s full of liquid that in turn has a solid dissolved in it. You could use it to recover the salt (and the other solid material) from a few mL of sea-water for example. With a few changes to the physical hardware layout and perhaps a different heating element, you could use this as an incubator. The unit has an LCD display, some push button switches, a temperature sensor, a MOSFET that can switch around 35A if required, PSU section, and a PIC 18F25K22 running some firmware written using the AMICUS18 free compiler; this means you can customise the firmware as you please. One upgrade may be to fit a fan so that if it gets too warm it can cool; perhaps the addition of a Peltier module - the skys the limit when you start thinking about the possible options.
The prototype which is sat on a bread-board right now, works remarkably well. I use PWM (Pulse Width Modulation) to drive the heater (lamp) via the MOSFET. The heat from the lamp is detected by a DS18b20 1-wire temperature sensor (I had a couple spare from my digital thermometer project), and fed back to the PIC. The PIC constantly monitors the temperature and using a very simple algorithm attempts to maintain the temperature by adjusting the brightness of the lamp. Once it warmed up, it was maintaining the temperature to within 0.1 oC which for a first attempt was rather impressive I thought.
I’ll publish full construction details soon, probably when I get back from vacation.