Recently I needed to revist the code for a project I did back in 2012 Navigation Lights for Models. In doing so I discovered that the latest version of MPLAB X (5.45) has dropped the old MPASM assembler and the version of assembler now being used doesn’t play well with source code written for the old MPASM assembler. I still have MPLAB X IDE V5.30 installed with support for MPASM and this works fine.
The reason I revisited this project was because over the years many people have contacted me having trouble getting it to work. A common cause is the calibration word in the PIC16F629 getting erased. Even I get caught out with it 🙁
Since the original code attempts to read the calibration word after power-on, if it’s not present the code just loops and the PIC appears to be dead. Since the timing is in no way critical for this application, I have reassembled the original code, skipping the bit that attempts to read the calibration word and instead writing a default 0x7F into the OSCCAL register of the 12F629/675. This way, it doesn’t matter if the calibration word gets erased or overwritten, the program will still happily run.
You can download the programmer ready HEX file for this new version below.
A few months ago I came across a post on the Hackaday website that showed a clock made using an instrument cluster for a motorbike. The clock featured in the article was based on an Arduino but I thought it would be interesting to do something similar using a PIC microcontroller. I had a look on eBay and found them being sold under the description of “Universal Motorcycle LCD Digital Speedometer Odometer Motorbike Tachometer Gauge”, or something similar and going for around £20.00
A couple of weeks back I decided to re-vist the F1 Gantry Race Start Lights project that I originally did back in 2009.
The new PCB has an extra header to make connection to relay modules easier and uses a double-sided PCB. It is functionaly the same as the original and uses the same firmware which is now free to download.
This is just a quick update to say I’ve been working on this steadily for the last few weeks. The PCB finally arrived earlier this week and I’ve got a board assembled and working.
This project is proving somewhat of a challenge. I’ve now bought two Universal LCD instrument clusters to test with and this is where things got interesting.
The second one I bought came without any instructions, I contacted the seller and they said sorry, we don’t have instructions for it. Now you might ask why did I need instructions for this one if I’d already got one? The answer is that while they look identical, the second unit is different, you enter setup mode in a different way, it configures differently although it has the same options and the 20 pin connector on the back of the unit is wired completely differently. The four connectors on the other end are wired the same but I’d bought some 20 pin connectors so I could make my own connector cable up. This second unit also seems to be more consistent at converting speed to minutes compared to the other one.
Anyway, I’m just working through what I hope are the last few little issues and a more detailed write up is coming…
I recently saw a feature on the Hackaday website for a clock that had been made from a multifunction instrument cluster using the analogue tachometer for the hours and digital speed readout for minutes. This was implemented using an Arduino, so I thought perhaps I could do something using a PIC. I found the gauges on eBay, they’re usually described something like “LCD Digital Motorcycle Speedometer” and sell for around 20GBP so I bought one to play with.
Once I’d worked out what signals and voltages it required to operate I put things together on the breadboard with a PIC16F1823. Early on I figured it would need more I/O pins so got hold of some PIC16F18345 to work with.
For the actual time keeping I’ve used a DS3231 RTC. I found some really cheap modules on banggood.com, shipped from China. Three modules worked out cheaper than buying one from a UK distributor. I don’t know if they’re genuine parts or not but they certainly keep time accurately.
I’ve now got the software pretty much complete using Microchip XC8 C compiler and also a PCB designed and on order from JLC PCB. Once all the bits are together and working I’ll do an update here with all the code and other information.
In mid December last year I put together a switch conditioner circuit to address the issue I had with the Exposure Strada light I was using on my MTB. I ran it on the bike until the end of March 2018 when the evenings had enough daylight not to need lights.
So how did it perform? The weather in the UK at the beginning of 2018 was cold, wet and even a couple of weeks of snow. Throughout the three months of use in the cold and rain it worked reliably. I had no more issues with either the switch not responding or going into flash mode, in a fact it eliminated all the issues I had previously. It’s still running on the CR2025 battery that was fitted in December and that battery wasn’t new.
The original version was assembled on an SMD-to-DIP adapter PCB and was a bit of a hack. Since it worked so well I designed a PCB for it which has the same profile as the CR2025/2032 battery holder. The photo below shows the new PCB below next to the original hack. Since I had 10 boards made I assembled the first one for testing before making up a second to go on the bike.
The PCB was designed using EasyEDA and I had 10 boards manufactured by JLC PCB for $2 + shipping which worked out at about £6.00 for the boards shipped to the UK.
The new PCB has been profiled to fit under the coin cell battery holder and has an ICSP header so the PIC micro-controller can be programmed on the PCB.
The assembled PCB was sprayed with conformal coating to protect from moisture and fitted into the same case I used for the original circuit. Cable ties provide strain relief, the pink foam stops it moving inside the case, and some silicone grease was used between the case and cover.
You can find the schematic and PCB Gerber files along with a link to order your own boards from JLC PCB below. The MPLABX source code and HEX firmware file is also available on the easyEDA site.
I like cycling and regularly go out after work for a ride, so over the winter I use an Exposure Strada front light. This particular light has a multi-function ‘SmartPort‘ that allows it to be charged, or power other devices, or by connecting a simple remote push button switch you can control the light output power, change from constant to flashing mode, and turn it off and on.