PIC84 is a fine chip that is especially easy to program with a simple
device attached to a parallel or serial port. Because of the EEPROM
memory, it is also easy and fast to erase and reprogram without need
for UV equipment. This makes it very popular among electronics
hobbyists.
At the moment this is the second implementation of an PIC programmer
for Linux that works with the very simple and cheap serial port
programmers. The first one I know was made by Ralph Metzler.
My programmer was originally designed for PIC16C84 and PIC16F84 chips
back in 1997, and since then I have implemented other chips without
access to actual hardware. I hope it works.
Today maybe the best source for PIC information is the home page of PICLIST discussion
group. Also historically a good collection of links and software for
PIC was in David Tait's
PIC links page and in Rick Miller'sGNUPIC pages. I
have also documented here the software I took a look at back in 1997.
I have focused into Linux support, so I haven't ever used any DOS
software mentioned.
See the hardware section. This device is connected to a usual
serial port of your PC, and is the same device as used with many DOS
PIC burning programs.
g++ compiler for Linux
This program is written in C++, so you need a C++ compiler to
compile it. This you should already have installed on your Linux
system.
Linux kernel version 2.0.32 or 2.1.45 or later.
This programmer needs some functionality in Linux serial driver
that as of kernel versions 2.0.32 and 2.1.45 is available in standard
kernels. The programmer uses TIOCSBRK and TIOCCBRK ioctl to control
the state of TxD serial port output accurately. These ioctl's are
standard on BSD flavor unixes, like SunOS 4, but they still are
unimplemented on many serial drivers in Linux kernel. Only the
standard serial port is known to work by me.
A compiler for PIC
Your assembler, or C compiler, or whatever, should produce either
Intel IHX16 or IHX8M format hex files. For assembler I recommend picasm105 by Timo Rossi.
Use a serial port programmer device with the following pinouts:
TxD
Programming voltage, pin /MCLR
RTS
Clock pulse, pin RB6
DTR (output), CTS (input)
Serial data, pin RB7
A very good programmer like this is for example jdm84v23
designed by Jens
Madsen.
I made a minor modification to the jdm84v23 schema and pcb mask,
because I thought D4 was stressed on positive clock pulses - it short
circuits the rs-232 RTS pin to GND. I added a 10k resistor there. I
believe it does not do any harm. But it also is not absolutely
required, as the clock pulses are short and rs-232 is protected for
short circuits anyway.
First, if you have not yet done so, download the picprog-1.1.tar.gz
package, if you do not already have it.
Check your system against the requirements mentioned above.
Untar the archive and change to the source file directory. You should
only have to type:
make
and the program should compile without errors or warnings. If it does
not, please check that your compiler, c and c++ libraries and
utilities like make are of a reasonably recent, bugfree and compatible
version.
After compilation you can, as a root user, just type:
make install
to install the program and manual page to /usr/local. Or just copy
the files picprog and picprog.1 manually.
To get information about the usage of the program, just type the
program name. These options give information about the program:
--warranty, --copyright, --help
Display warranty or copyright information or the help text.
--quiet, -q
Do not display the copyright notice.
The actual operation of the program is controlled by the options
--input-hexfile and --output-hexfile. If
the former is present, the program acts as a burner. If the
latter is specified, the program will read the contents of the PIC
device eeprom memories. Both may be specified on the same command
line, in which case the chip is first programmed and then read.
To be able to reprogram a PIC device that has previously been
programmed into Code Protection state (Control Word fuse bit 0x10
cleared), it is necessary to bulk erase the chip. It is done by
adding this option to the command line. The default is not to bulk
erase the chip.
--burn
Actually program the device. Without this option only the syntax
of input files and command line options is checked.
--input-hexfilepath, -ipath
Specifies the input hex file. The file can be either in IHX16 or
IHX8M formats, the format is automatically recognized.
--cc-hexfilepath, -cpath
Only necessary for debugging. Outputs the same data as was read
from the input hex file.
--pic-serial-portdevice, -pdevice
The device name of the serial port the programmer is connected
to. Default is /dev/ttyS0.
--devicechipname, -dchipname
The chip type. Currently supported by code are
pic16c84, pic16cr83, pic16cr84, pic16f83, pic16f84, pic16f84a,
pic16f87, pic16f88, pic16f89, pic16c61, pic16c62, pic16c62a,
pic16c62b, pic16c63, pic16c63a, pic16c64, pic16c64a, pic16c65,
pic16c65a, pic16c65b, pic16c66, pic16c66a, pic16c67, pic16cr62,
pic16cr63, pic16cr64, pic16cr65, pic16c620, pic16c620a, pic16cr620a,
pic16c621, pic16c621a, pic16c622, pic16c622a, pic16f627, pic16f628,
pic16ce623, pic16ce624, pic16ce625, pic16c641, pic16c642, pic16c661,
pic16c662, pic16c71, pic16c710, pic16c711, pic16c712, pic16c715,
pic16c716, pic16c717, pic16c72, pic16c72a, pic16cr72, pic16c73,
pic16c73a, pic16c73b, pic16c74, pic16c74a, pic16c74b, pic16c76,
pic16c77, pic16f73, pic16f74, pic16f76, pic16f77, pic16c432,
pic16c433, pic16c781, pic16c782, pic16c745, pic16c765, pic16c770,
pic16c771, pic16c773, pic16c774, pic16f870, pic16f871, pic16f872,
pic16f873, pic16f873a, pic16f874, pic16f874a, pic16f876, pic16f876a,
pic16f877, pic16f877a, pic16c923, pic16c924.
I do not know if they all work or if any other than pic16c84 and
pic16f84 works, these I have tested myself. Default is
pic16c84. To add a new supported chip type, just edit
the table in hexfile.cc. Only things to know about the chip are the
programmable program and data memory sizes.
The hex file addresses (in IHX16 format) used are the ones specified
by Microchip. This example is for pic16c84 / pic16f84:
Insert the pic16c84 / pic16f84 chip into the socket in the
programmer, or connect the in-circuit programming cable to your
device.
Connect the programmer device to a serial port.
Read the device with command:
picprog --output ofile.hex --pic /dev/ttyS1
The reading options are:
--output-hexfilepath, -opath
Specifies the output hex file. The file will be written in IHX16
format, unless otherwise specified by the --ihx8m option.
--skip-ones
When reading the PIC device, do not consider the all-ones memory
locations to be programmed, and skip them in the hex file output.
This skips the program memory locations that have hex value 0x3FFF and
data memory locations that have hex value 0xFF.
--ihx16, --ihx8m
Select the output hex file format to be either ihx16 or ihx8m,
respectively. The default is ihx16.
--pic-serial-portdevice, -pdevice
The device name of the serial port the programmer is connected
to. Default is /dev/ttyS0.
class picport: manipulates the serial port hardware. With this
class you can execute programming commands like read a word, program a
word, increment address etc. Look at picport.h for details.
hexfile.cc, .h
class hexfile: contains a PIC memory image. You can load and
save the contents of this class to a file, and you can program and
read it from the PIC chip. Programming uses class picport.
program.cc, h
class program: just some generic option handling.
main.cc
Just the main () to parse command line and call class hexfile to
do its job.
This document has not changed much since it was first released with
the 1.0 programmer. The changes include some information about new
software and more accurate links to PIC information. New options
to select type of device other than pic18c84 are also present.
A serial port programmer software for Linux, written in c++,
author Ralph Metzler. It
directly handles the serial hardware, standard 16450/16550 compatible
uarts, and needs root priviledges for that.
A serial port programmer, schema
(gif) and DOS software. The hardware manages with rs-232
interfaces with low voltage output, even as low as ±7V is fine.
300dpi layout and PCB masks available at the home
page. Author Jens
Madsen.
This is the programmer I use with linux with my own software.
I did a minor modification to the jdm84v23 schema and pcb
mask, because I thought D4 was stressed on positive clock pulses -
it short circuits the rs-232 RTS pin to GND. I added a 10k resistor
there. I believe it does not do any harm. But it also is not
absolutely required, as the clock pulses are short and rs-232 is
protected for short circuits.
A parallel port programmer, schema
(ascii) and DOS software with basic and turbo-C sources included.
Author David
Tait. He has a lot more stuff, and some new designs to program
other PICs in his links page.
A parallel port programmer and disassembler, no schema, seems to
use pins DATA1 = data and DATA2 = clock and needs external programming
voltage. From Everyday Practical Electronics, February 1996, author
Derren Crome. Disassembler by Nigel Goodwin nigelg@lpilsley.demon.co.uk.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.