1-04-2012:Updated SourceBoost plugins for Version 7 SourceBoost Plugins12-12-2011:New project added named Touch Screen Keypad which uses a Nintendo DS touch screen to implement a hex keypad.8-28-2011:New project added named Duck House Controller which is used to log temperature inside and outside the duck house. This project also includes a numeric 2 digit LED display which is controlled by a synchronous serial interface to display the inside temperature so that it can be seen from the house using a spotting scope.12-03-2010:Brand new logic analyzer with better specs using the 18F2620. The new project can be found at Cheap Logic Analyzer. Note that if you have built the previous version using a 16F series device, it should be possible to pull out the microcontroller and replace it with a programmed 18F2620 and change the crystal from 20 MHz to 10 MHz and be up and running using the new PC side software. Microchip was nice enough to make these devices pin compatable. I also added a 5 channel voltmeter to the PC side software using the 5 analog channels of the chip. The new PC software works with the old 16F parts as well but the code on the 16F parts only uses 1 analog channel so the volt meter mode will only display one channel.11-30-2010:The code for the 18F2620 is structured so that it can be upgraded by the PC side software so it should never need to be pulled off your board.
Updated boot loader software to support 18F devices and also added 18F bootloader code for 18F1230, 18F1330, 18F2620 and 18F4620 devices. The new code can be found at Serial Port PIC Boot Programmer. Also added a link to my project that uses a PIC processor to emulate a 1970s microprocessor at the bus level. It runs 30 year old software. This project can be found at 1976 Popular Electronics COSMAC Elf Clone.Development Tools:
- Microchip website that has nice (and free) development environment www.microchip.com
- Get this one!. SourceBoost Technologies www.sourceboost.com/home.html offers a free limited code size C compiler with a very low cost upgrade policy for a unlimited memory size which support the 16 and 18 series processors. They also offer a Basic and C++ compiler. The simulation/debug environment is very good.
Links:
- The main Microchip web site www.microchip.com
- Where to go for help and example code www.piclist.com or www.sourceboost.ipbhost.com
- Where to buy www.digikey.com , www.mypioneer.com or www.mouser.com
All Projects:SourceBoost Plugins Completed Projects:
Library of C Routines
Serial Port PIC Programmer
Serial Port PIC Boot Programmer
Digital Clock
Funky Digital Clock
Lego Robot Controller
LCD Terminal
Cheap Logic Analyzer
Temperature Logger
Camera Controller
Cassette Interface
1976 Popular Electronics COSMAC Elf Clone
Duck House Controller
Touch Screen Keypad
SourceBoost Plugins:
Description Plugin V6 Example V6 Plugin V7 Example V7 Active Low push buttons BoostDigIO.zip CButtonTest.zip 4 Channel Pulse Width Modulation monitor BoostPWM.zip CPWMTest.zip BoostPWM7.zip CPWMTest7.zip Value Change Dump (VCD) sampler. This plug in allows all the ports (A through E) of a PIC to be sampled into a file during simulation. This file is formated to allow it to be read by ECAD tools in order to display a graphical representation of the signals over the length of the simulation. For a VCD viewer, click this link to get one I wrote a few years back: VcdView V0.2
1-21-2010CBSimple2.zip V0.2
1-04-2012 Library of C Routines:Library of C routines: CBLib.zipThis zip file contains the following files:
clock.c clock.h Code to implement a real-time clock plus functions to perform math on time in day, hour, minute, second format. This code also includes the ability to trim the clock to make up for crystal errors. I've tuned to a 1 second error ever 3 or 4 days. Without triming, the error can be as high as 10 to 20 seconds per day. Most crystals are accurate but have a fixed error from their stamped frequency of 20 parts per million. Do the math. It is a big error when being used as a clock. ExtEeprom.c ExtEeprom.h Code to interface to an external serial EEPROM. Just change the defines at the top of ExtEeprom.c to use any two pins for the interface. Lcd2Line.c Lcd2Line.h Code to interface to a 2 line by 16 character LCD module using 6 pins. Lcd.h Header file for interfacing to a the serial 4 line by 20 character LCD terminal. legocore.c legocore.h Code to implement PWM conrtrol and direction of 4 motors as well as sampling 8 analog channels. This code is used for the Lego Robot Controller project. Serial.c Serial.h Code to implement RS-232 interface using PIC hardware. String.c String.h Code to implement a limited version of sprintf (sprintf1, sprintf2 .. sprintfx) Timer.c Timer.h Code to implement delays using hardware timers and interrupts Camera Controller:
Serial Port PIC Programmer:Just get a PICkit 2 or PICkit 3 to program devices.![]()
Click on picture for larger viewPC side Code: picprog.zip (Source code: HostPicProg.zip Lib Code: common.zip)Serial Port PIC Boot Programmer:
PIC project: SerialProg.zip (just the source serprog.asm )
Schematic: PicProgrammer.jpg
Device: 16F84A or 16F628This project allows flash based PIC microcontrollers to be programmed using the serial port on a PC. The serial interface runs at 115K baud. I found parallel port connection solutions to be flaky and dependent on which PC/OS was used so I made my own. The only bummer is that you need to program a 16F84A to build this programmer. Only locations that need to be modified are programmed to limit the erase/program cycles and speed up programming.This updated version now supports 16F87xA as well as the non A versions.
PC side Code: PicBootProg.zip (Source code: PicBootProgSource.zip [V 2.0 11-22-2010])Digital Clock:
Lib Code: common.zip
18F PIC project: BootLoader_18F.zip (just the source Bootload_18F.asm ) [11-22-2010]
16F PIC project: BootLoader.zip (just the source bootload.asm ) [9-22-2008]
Schematic: None. Just software
16F Devices: 16F87x and 16F87xA and 16LF versions
18F Devices: 18F1230, 18F1330, 18F2620 and 18F4620This project allows flash based PIC microcontrollers to be programmed using a simple in circuit serial interface once the device has been programmed with the code supplied. The RS-232 interface needs to be connected to the standard RS-232 pins of the device PORTC[TX] and PORTC[RX]. In addition to this connection, PORTC[2] is used to select, at power up, whether to run the user program (low) or to run the boot loader code (high). The 16F device must be running with a 20MHz crystal but other frequencies could be used with a slight modification to the baud rate value in the boot loader. The serial transfer rate is 115K baud. Slower frequencies may require the baud rate to be reduced which would require the PC code to change as well. The 18F devices require a 10 MHz crystal with the PLL enabled (40 MHz operation). Refer to the assembler code to figure out which pin is the boot pin.Note that the last 256 words or less of program memory are used by the boot loader depending on the device. The first 4 word locations of the user program can be used as they are copied into the bootloader space by the loader while it then puts a jump into the first few locations.
This bootloader works with code produced from BoostC for both the 16F and 18F devices.
![]()
Click on picture for larger viewPIC project: Clock.zip (just the source clockasm )Funky Digital Clock:
Schematic: Clockjpg
Device: 16F84AThis project uses a 3 and a half digit 7-segment LED display from a broken bread machine to show the time of day. The non-resetable TRM0 timer (if it is reset time drifts) is used to generate interrupts at a rate of 610 and 45/128 Hz using a 20 MHz crystal (488 and 9/32 Hz using a 4 MHz crystal). This is the display refresh rate. The interrupts are counted to get seconds, minutes and hours using some games to implement the fractions. The time is set using two push button switches that are scanned using the digit drive enables and sampled using a free input pin. This circuit consumes less than 20mA at 5V using a 20 MHz crystal.Lego Robot Controller:PIC project: FunkyClock.zip (just the source funkyclk.asm )![]()
Click on picture for larger view
Schematic: FunkyClockjpg
Device: 16F84AThis project uses the same circuit as the Digital Clock but runs at 4 MHz and uses different software to add some visual effects. The time is displayed for a random amount of time followed by one of several effects for a random amount of time. This loop is repeated.The stand is made from the metal brackets of a file folder.
![]()
Click on pictures for larger viewLibrary of C routines: Library of C
LCD Terminal:
SourceBoost project 1: CBLegoBumper.zip (just the source Bumper.c )
SourceBoost project 2: CBLegoCrane.zip (just the source Crane.c)
Schematic: LegoController.jpg
Device: 16F877
This project controls Lego robots in a way similar to Lego Mindstorms. Two dual H-bridge chips(L283) are used with the PIC microcontroller to control 4 motors. Each motor has speed, direction, float and brake control. Eight A/D inputs are sampled sequentially and the motor PWM control is done in an interrupt routine so that user code can treat the inputs and outputs as continuous values.
User level control is done in C (compiled with the SourceBoost compiler). The controller is packaged with 8 Lithium-Ion AA batteries in a brick of legos using no glue or special parts. Programming is done through a RS-232 port using the Serial Port PIC Boot Programmer described above.
This is really cool stuff.
![]()
Click on pictures for larger viewPIC project: LcdTerminal.zip (just the source LcdTerminal.asm )
Cheap Logic Analyzer:
Schematic: LcdTerminal.jpg
Device: 16F628
This project controls a 20 character by 4 line LCD display so that a simple serial RS-232 or TTL interface can treat the display as an ASCII terminal. The source code explains all the control characters and escape sequences to control scrolling the display, clearing the display, downloading custom characters and other features. The interface runs at 115K baud by using a software FIFO to handle input characters during a vertical scroll. A select pin is provided that allows the interface to run at 9600 baud.
Demo:
SourceBoost Project: CBMeter.zip (just the source CMeter.c )
Library of C routines: Library of C
This is a demo program that uses a 16F873 and the LCD Terminal to implement a volt meter. The CBLib.zip file is required as well as the SourceBoost C compiler. See the Lego Robot Controller for details.
Old Version New Version New Voltmeter mode Click on Right two images for larger versions
Latest VersionPIC project: CheapLA_18F.zip (just the source CheapLA_18F.asm ) (Version 4.00: 12-03-2010)
Old Version
PC side Code: LogicAnalyzer.zip (Version 3.00: 12-03-2010)
Schematic: CheapLogicA.pdf
Device: 18F2620
This is a very cheap logic analyzer that can be built for about $10. The hardware is simply a 18F2620 with 10 MHz crystal and an RS-232 interface. The specs are not great but it can be used to solve many problems. I found it very useful for debugging an antique computer. There are 5 analog inputs that can be used a volt meters that are displayed on the screen in real-time. Run length encoding was implemented for a simple compression scheme to get faster updates now that nearly 4K bytes of data has to be transfered over a 10 Kbyte/second serial interface. A menu pick under Settings allows the compression to be disabled in case problems are detected with it. So far it seems pretty good. There is some built in error checking to make sure that the samples are not corrupted.
The low channel count modes have not yet been implemented as the need for them is lower with the extended sample memory.
Number of Channels Number of Samples Max Sample Rate Min Sample Rate 8 3936 200ns/sample 250us/sample PIC project: CheapLA.zip (just the source CheapLA.asm ) (Version 2.01: 12-21-2008)
PC side Code: LogicAnalyzer.zip (Version 3.00: 12-02-2010 Note that this is the same as the new version above)
Schematic: CheapLogicA.pdf
Device: 16F873, 16F873A or 16F876A
This is a very cheap logic analyzer that can be built for about $10. The hardware is simply a 16F873 with 20 MHz crystal and an RS-232 interface. The specs are not very good but it can be used to solve many problems. I found it very useful for debugging an interface to a serial EEPROM.
My other logic analyzer: CDP1802CD CMOS processor built in 1985 using 1970's Technology
Number of Channels Number of Samples Max Sample Rate Min Sample Rate 8 96 400ns/sample - 8 160 1us/sample 20ms/sample 4 320 2us/sample 20ms/sample 2 640 2us/sample 20ms/sample 1 1280 2us/sample 20ms/sample ![]()
Click on pictures for larger viewPIC project: CBTimelapse.zip (just the main source TimeLapse.c)
Cassette Interface:
Schematic: TimeLapse.jpg
Device: 16F876A
This project controls my old cannon S10 digital camera using a soleniod to take pictures during a specified time at a specified rate. The images are then processed to create a movie that can be played on a computer or authored onto a DVD. A serial port is included to allow the firmware to be upgraded or used for direct computer control or to allow custom time tables to be downloaded. My dream is to hook ups some stepper motors to be able to control the view as well one day.
PIC project: CBCassetteInt.zip (just the source CassetteInt.c ) (V1.0 1-31-2007)
Clone of 1976 Popular Electronics COSMAC Elf using two PICs:
PC Side Code: CassetteInt.zipcommon.zip
Schematic: CassetteInt.jpg (V1.0 7-16-2007)
Device: 16F876A
This project replaces a cassette recorder which was used for program and data storage for a vintage computer with a box and an RS-232 interface to a modern computer. This allows old programs and data to be saved as ASCII hex files and then later played back. The PIC processor A/D block is used to sample the REC input and convert the serial data to 8-bit binary numbers. These values are saved in RAM and then set to the modern computer via the RS-232 interface. The speaker out jack is driven out to the vintage computer in response to commands sent from the modern computer from the RS-232 interface. The timing and voltage settings have been hard wired for my first computer using constants but a slight change to the PIC code could be made to allow the values to be changed via host PC side software.
Here is a link to my first computer that uses this machine.
Device: 18F4620 to emulate CDP1802 processor and 18F2620 to emulate CDP1861 video chip.Duck House Controller:
This is a bus accurate full speed Elf created without an 1802 or 1861. This project is able to load a programs via dip switches (and now a hex keypad) and execute it. More details can be found here ElfClone.
PIC project for Controller: CBDuckHouse.zip (just the source CBDuckHouse.c ) (V1.0 3-10-2011)Touch Screen Keypad:
PIC project for Display: CBDuckDisp.zip (just the source CBDuckDisp.c ) (V1.0 12-21-2010)
Schematic: DuckHouse.pdf
Device: 18F4620 for controller and 16F628 for display (source compiled with SourceBoost C compiler). Also uses two TC77 serial temperature sensors.
Host Code to download and display temperature data: TempLog.zipThis project is used to log temperature inside and outside our duck house. The project also includes a numeric 2 digit LED display which is controlled by a synchronous serial interface to display the inside temperature so that it can be seen from the house using a spotting scope. The samples and time are saved into the flash memory of the 18F4620. The Host code connects to the controller via RS-232 and is able to set the current time and sampling rate. The host code is able to download samples and clear memory after the sample have been recorded. In the display above, the purple wave shows the outside temperatures and the white wave shows the inside temperatures.
PIC project: CBTouchHex.zip (just the source CBTouchHex.c ) (V1.0 11-24-2011)
Schematic: TouchKeypad.pdf (V1.0 11-24-2011)
Device: 18F4620
This project implements a hex keypad using a Nintendo DS touch screen which I purchased from Sparkfun Electronics. I use this keypad to interface to a clone of my first computer which can be found here ElfClone. The touch screen is clear so I printed out my desired virtual keypad onto a piece of paper (the Microsoft Word document is included in the zip file) and placed this under the touchscreen. To add some visual feedback, I placed an array of LEDs under this piece of paper. The LEDs are inserted into a thin piece of plywood which can be seen in the photo on the right (click it to see a larger view). I used Elmer's glue to hold the LEDs in place and hot glue to hold the PIC in place. I bent the pins out to solder it up. It is ugly but pretty stable. The case is just an old picture frame that I found which fit nearly perfectly. This could all be done on a double sided board using surface mount parts to make it very skinny. My keypad ended out being about one half inch thick.
The top four buttons as well as the DEBUG button are toggle buttons so the LED under them will toggle between on and off when the corresponding button is pressed. All the other buttons just flash the LED when they are pressed.
Last Updated December 14th, 2011
Home
Send Comments