http://www.iki.fi/hyvatti/pic/picprog.html
Picprog 1.0.1 documentation
2001-05-06
- Background reading
- Requirements
- Hardware
- Installation
- Usage
- Burning PICs
- Reading PICs
- Internals
- Changes
- Other available programmers
- Available languages
- Other software
- Patches
- Copyright notice
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.
You really should take a look at the Microchip www-pages and read the
appropriate device datasheets and the programming
specification (30189d.pdf) there.
A good collection of links and software for PIC is in David Tait's PIC links page
and in Rick Miller's GNUPIC pages. I
have also documented here the software I took a look at. I have
focused into Linux support, so I have never used any DOS software
mentioned below.
- Serial port pic16c84 programming hardware
- 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.
The schemantics diagram:
The 300 dpi pcb mask:
First, if you have not yet done so, download the picprog-1.0.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. I use glibc-2.0.2, make-3.75, linux-2.0.30 and gcc-2.7.2.1.
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 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.
Simple instructions:
- Compile your program into a hex file.
- Insert the pic16c84 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.
- Burn the program with command:
picprog --burn --input file.hex --pic /dev/ttyS1
- If the above command produces error output that suggests that the
chip was in the code protection state, retry with the following
command:
picprog --erase --burn --input file.hex --pic /dev/ttyS1
The burning options are:
-
--erase
- 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-hexfile
path, -i
path
- Specifies the input hex file. The file can be either in IHX16 or
IHX8M formats, the format is automatically recognized.
-
--cc-hexfile
path, -c
path
- Only necessary for debugging. Outputs the same data as was read
from the input hex file.
-
--pic-serial-port
device, -p
device
- The device name of the serial port the programmer is connected
to. Default is
/dev/ttyS0
.
The hex file addresses (in IHX16 format) used are the ones specified by Microchip:
- 0x0000-0x03FF
- Program memory, 1024 words * 14 bits.
- 0x2000-0x2003
- ID locations.
- 0x2007
- Control word fuses
- 0x2100-0x213F
- Data memory, 64 bytes * 8 bits.
Simple instructions:
- Insert the pic16c84 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-hexfile
path, -o
path
- 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-port
device, -p
device
- The device name of the serial port the programmer is connected
to. Default is
/dev/ttyS0
.
Source files and their contents:
- picport.cc, .h
- 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 been revised after first released with the 1.0
programmer. The changes include some information about new software
and more accurate links to PIC information. Also information about
Linux kernels has been updated - the current kernels no more need a
patch to implement the necessary ioctl functionality.
Version 1.0.1 release of the software comes after four years of
silence. It only contains some simplifications of code and fixes
that are needed for updated compilers.
- serp-0.5
(serp-0.5.tgz)
- A serial port programmer software for Linux, written in c++,
author Ralph Metzler,
rjkm@thp.uni-koeln.de. It
directly handles the serial hardware, standard 16450/16550 compatible
uarts, and needs root priviledges for that.
- jdm84v23 (jdm84v23.zip, pgm84v23.zip)
- 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, Jens.Madsen@post3.tele.dk.
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.
- pip-02/com84 (pip-02.zip)
- A serial port programmer, schema (gif)
and DOS software. Needs +12V rs-232 positive voltage level.
- prog84-0.9
(prog84-0.9.tar.gz)
- A parallel port programmer, schema
(postscript) and software for Linux, Written by Wim Lewis: wiml@netcom.com or wiml@hhhh.org. This is based to the
dvtait84 package.
- dvtait84, pic84faq
(dvtait84.zip, pic84faq.zip)
- A parallel port programmer, schema
(ascii) and DOS software with basic and turbo-C sources included.
Author David
Tait, david.tait@man.ac.uk. He has a
lot more stuff, and some new designs to program other PICs in his PIC links page.
- mjcox84 (mjcox84.zip)
- A parallel port programmer, no schema, written in assembler for
DOS with 486/33 timings. Very limited. Author: Mark J Cox, m.j.cox@bradford.ac.uk.
- ngoodw84
(ngoodw84.zip)
- 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.
- Minimized
PIC16C84 Programmer
- Parallel port programmer, DOS software, needs external 13V power
source. Author Stephen
M. Nolan, nolan@isc-durant.com.
- picasm105
(picasm105.tar.gz)
- Assembler in ANSI-C by Timo Rossi. Outputs both
IHX16 and IHX8M. Looks pretty nice. You can also find disassemblers
for 12 bit
and 14 bit
PIC's.
- asm_c84
(asm_c84.zip)
- Assembler in ANSI-C by James Cleverdon, jamesc@sequent.com. No INCLUDE,
no IF, outputs IHX8M. The
manual.
- SIL
- I have heard of free SIL language (something like Pascal/M2)
compiler for PIC. GNU GPL version for Linux is under construction and
should be available in Internet soon.
- HI-TECH Software C compiler
- A demo is available of their currently beta version compiler.
- PSIM
- PIC simulator for 16Cxx
- picprog-1.0-picprog870.diff
- Fuszenecker Robert <hg8lhs@bsd.hu> sent me this diff to
make picprog-1.0 work with PIC16F870. I have not tested this but
please give it a try if you like.
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.
The author may be contacted at:
Email: Jaakko.Hyvatti@iki.fi
URL: http://www.iki.fi/hyvatti/
Phone: +358 40 5011222
Please send any suggestions, bug reports, success stories etc. to the
Email address above.
Jaakko Hyvätti/Jaakko.Hyvatti@iki.fi/+358 40 5011222