

A 4x20 or perhaps 2x40 would do the job as well, but I wouldn't go smaller than that.

The LED is absolutely necessary on the front for feedback. I had just enough space for the LED, the reset button and the volume button. There was not much space left next to the display. Other than these two points, porting the code was straightforward and no major changes have been made. (This is all done through preprocessing #define statements so it does not slow down the code.) My HD44780_PIC C library can deal with this, as well as with 4- and 8-bit interface. It is HD44780-based but has two control chips, which can be turned on and off using two enable lines. The same functionality can be achieved with a timer and an interrupt service routine (which is, I assume, the way it works on Arduino as well).įor the LCD I used a 4x40 display with green backlight. This is part of the Arduino bootstrapping code, which we do not have on PIC, so a small wrapper for this function had to be written. On Arduino, this returns the number of milliseconds since startup. The only complication is the millis() function. Porting the Arduino code (which is a C++ dialect) to C is relatively easy. I went with the PIC16F88 which has 5MIPS, for the simple reason that I had it in stock. The only thing we need to look out for is that the clock is fast enough. For this project, a simple 8-bit chip is more than enough. PIC is a wide range of microcontrollers developed by Microchip. Hence, I decided to port the project to a PIC microcontroller. Worst of all, they fail to learn principles of electrical engineering and programming on minimal architectures. Arduino is nice for prototyping, but too many people use it as an end product, wasting space and resources. While the project is great, I was unable to resign myself to use an Arduino. My own source code, for a PIC16F88, is on GitHub. The base is taken from Budd Churchward WB7FHC's Arduino-based decoder. We discuss a small PIC-based CW decoder, a great help for a beginning ham.
