PIC Microcontrollers

Latest News:
12-21-2008:
Bug fix for PC side code and PIC code for Cheap Logic Analyzer to get it to work again with sample rates slower than 250 us.  I blew my computed goto tables by letting them strattle a 256 byte page when I added the 400ns code.  Sorry about that.  Also, fixed triggering bug in host code where it was not possible to change from a 1 back to an X.
12-17-2008:
Updated PC side code and PIC code for Cheap Logic Analyzer to add 96 sample 2.5M sample per second mode (400ns sample rate) and to allow firmware to be downloaded and verified from the PC application.  The window can now be resized to fill the screen with the waveform.
10-31-2008:
Added 4 channel PWM plugin to SourceBoost Plugins
10-20-2008:
Added example active low button plugin to SourceBoost Plugins
9-22-2008:
Updated Serial Port PIC Boot Programmer project to fix version typo in PIC boot code for 16F877A device.  I left the version as 1 instead of 2 which prevented this device from working with the latest PC side code.

Development Tools:

Links:

All Projects:
SourceBoost Plugins
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


Completed Projects:
 
SourceBoost Plugins:
 
Description Plugin Example
Active Low push buttons BoostDigIO.zip CButtonTest.zip
4 Channel Pulse Width Modulation monitor BoostPWM.zip CPWMTest.zip
Library of C Routines:
Library of C routines: CBLib.zip
This 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
 
Serial Port PIC Programmer:

Click on picture for larger view
PC side Code: picprog.zip (Source code:  HostPicProg.zip   Lib Code:  common.zip)
PIC project: SerialProg.zip (just the source serprog.asm )
Schematic: PicProgrammer.jpg
Device: 16F84A or 16F628
This 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.

Serial Port PIC Boot Programmer:
PC side Code: PicBootProg.zip (Source code:  PicBootProgSource.zip  [V 1.8 1-14-2008])
Lib Code: common.zip
PIC project: BootLoader.zip (just the source bootload.asm )  [9-22-2008]
Schematic: None.  Just software
Device:  16F87x and 16F87xA and 16LF versions
This project allows flash based PIC microcontrollers (16F87x and 16F87xA parts) to be programmed using a simple in circuit serial interface once the device has been programmed with the code in bootload.asm.  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 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.

Note that the last 256 words of program memory are used by the boot loader.  The first 4 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 3 locations.

Note:  Since the 4-28-2006 version, PORTC[2] is used instead of PORTC[5] for the mode pin.  Also, the sense is was inverted at that time.  Grounding PORTC[2] will run the user code instead of the boot code.  Previous versions required a pull up resistor.  The PC side software does not support the pre-4-28-2006 version of bootload.asm so keep an old version or reflash your PICs.

Digital Clock:

Click on picture for larger view
PIC project: Clock.zip (just the source clockasm )
Schematic: Clockjpg
Device: 16F84A
This 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.
Funky Digital Clock:

Click on picture for larger view
PIC project: FunkyClock.zip (just the source funkyclk.asm )
Schematic: FunkyClockjpg
Device: 16F84A
This 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.

Lego Robot Controller:

Click on pictures for larger view
LCD Terminal:

Click on pictures for larger view
Cheap Logic Analyzer:


Just a little thing

Camera Controller:

Click on pictures for larger view
Cassette Interface:




Half Baked Projects:
Temperature Logger:
PIC project: DataLog.zip (just the source datalog.asm )
Schematic:  DataLogger.jpg
Device: 16F873
This project uses a LM325Z temperature sensor to measure the temperature once an hour and save the value into internal RAM, then internal EEPROM then internal flash memory as more samples are taken (an external EEPROM may be used instead).  The temperature is converted using the on chip analog to digital converter.  The data can be uploaded using an RS-232 connection.

The project is battery powered so games will be played to conserve power.



Future Projects:

Last Updated December 22nd, 2008
Home
Send Comments
1