|
Bootloader for 16F87x PIC Microcontrollers |
|
A bootloader enables download of hex-files directly into the flash-memory of a PIC or other microcontroller. The bootloader receives the user program via the PIC's UART and writes it directly to the program memory (self programming). This feature greatly speeds up the development process, because the chip remains in the target circuit and need not be moved between the target circuit and the programmer.
When no bootloader is installed, all memory in the PIC can be utilized for user programs. That is 4 K for the 16F873 (0x000 to 0xFFF). Installing a bootloader means, that some part of the memory is occupied by the bootloader. The user can download his program into the remaining memory space. The bootloader in figure 1 occupy 256 words (0xF00 to 0xFFF), that is 6 % of the memory in a 16F873. The disadvantage of loosing 6 % memory is little compared to the advantage of fast program download and more friendly development routines.
The first 4 words in the flash memory (0x000 to 0x003) contain a jump to the bootloader. The original 4 words are recognized during download and reallocated to the memory space of the bootloader. At boot time, the bootloader waits 200 ms for a download to begin. If no download is detected, the bootloader activates the user program, starting with the first 4 reallocated words and then jumping to the remaining user program.
Programming the bootloader
The bootloader package contains all the software needed. I'll explain the procedure by giving an example how to program the bootloader version 8.23 into a 16F873.
Choose the hex-file with the right crystal oscillator frequency and the desired download speed. I chose the file 30419-bootldr-v26-16F873-74-04Mhz-19200bps.hex for my 16F873 with 4 MHz oscillator and 19200 bps download.
Load the hex-file into the PIC-programmer and check the fuse settings before programming. I did not want the Low Voltage programming to be on (which it is in the hex-file). If the Low Voltage programming fuse is on, the PIC may become unstable during operation. My recommended fuse settings are shown in figure 2.
Fig. 2. Fuse settings for programming the bootloader
into a 16F873 with 4 MHz oscillator
The fuses selected when programming the bootloader can not be changed later by the downloaded user program. This is because the bootloader does not change the configuration word of the PIC.
Downloading a user program
A PIC downloader is contained in the bootloader software package. The PIC downloader is used for transferring the hex-file from your PC to the bootloader in the target chip. After having programmed the bootloader into the PIC, the download procedure is tested by downloading a suitable program into the PIC. An UART test program for 16F873 and a description of a testboard for 16F873 can be found elsewhere on this site. A test program is also included in the bootloader software package.
Fig. 3. The PIC downloader writing to the target PIC
Load the hex-file into the PIC downloader (click Search or press F2), activate the downloader (click Write or press F4) and reset the PIC. The reset activates the bootloader and makes it listen for a new download on the serial port. The bootloader and PIC downloader shake hands and then the hex-file is downloaded. After a few seconds - viola - the new user program is running in the PIC.
If the downloaded program is going to use the serial port of the PIC, the PIC downloader must be closed and a terminal program (e.g. HyperTerminal) started. In my case, the PIC downloader and HyperTerminal both use COM2 - but never at the same time!
Memory reservation
Memory reservation is necessary to preserve the code space used by the bootloader. For the 16F873, memory reservation is done like this in CCS C (PCM 3.060):
#org 0x0F00,0x0FFF {} //16F873 bootloader resides here
Memory reservation in Microchip MPASM is done like this for a 16F873:
ORG 0x0000 ;User program starts here
...
ORG 0x0F00 ;Bootloader starts here
NOP
END
The last lines will generate a compiler error if the user program goes higher than 0x0EFF.
Hint #1
The bootloader reallocates the program words between 0x000 and 0x003. This means, that the first 4 words in the user program must contain a GOTO (long jump) pointing to the remaining user program. This is usually the case when using a compiler, for example the C-compiler PCM from CCS. If you are using an assembler, for example MPASM from Microchip, you must insert the GOTO manually as shown below:
ORG 0x000
GOTO Begin
ORG 0x004
Begin User program starts here
Hint #2
If the PIC's serial port is used by the downloaded program and you want to download a new program, the PIC downloader might not be able to reach the PIC due to traffic on the port. In that case, you must first press and hold the PIC's reset button while clicking Write (or press F4) on the PIC downloader. The downloader will now start searching for the PIC. Releasing the PIC's reset button will start the download.
For more information please see
http://www.microchipc.com/PIC16bootload/
Related Links
Downloads
Bootloader for 16F87x PIC Microcontrollers - Link
|
|
|
|
Accurate LC Meter
Build your own Accurate LC Meter (Capacitance Inductance Meter) and start making your own coils and inductors. This LC Meter allows to measure incredibly small inductances making it perfect tool for making all types of RF coils and inductors. LC Meter can measure inductances starting from 10nH - 1000nH, 1uH - 1000uH, 1mH - 100mH and capacitances from 0.1pF up to 900nF. The circuit includes an auto ranging as well as reset switch and produces very accurate and stable readings. |
|
PIC Volt Ampere Meter
Volt Ampere Meter measures voltage of 0-70V or 0-500V with 100mV resolution and current consumption 0-10A or more with 10mA resolution. The meter is a perfect addition to any power supply, battery chargers and other electronic projects where voltage and current must be monitored. The meter uses PIC16F876A microcontroller with 16x2 backlighted LCD. |
|
|
|
60MHz Frequency Meter / Counter
Frequency Meter / Counter measures frequency from 10Hz to 60MHz with 10Hz resolution. It is a very useful bench test equipment for testing and finding out the frequency of various devices with unknown frequency such as oscillators, radio receivers, transmitters, function generators, crystals, etc. |
|
1Hz - 2MHz XR2206 Function Generator
1Hz - 2MHz XR2206 Function Generator produces high quality sine, square and triangle waveforms of high-stability and accuracy. The output waveforms can be both amplitude and frequency modulated. Output of 1Hz - 2MHz XR2206 Function Generator can be connected directly to 60MHz Counter for setting precise frequency output. |
|
|
|
BA1404 HI-FI Stereo FM Transmitter
Be "On Air" with your own radio station! BA1404 HI-FI Stereo FM Transmitter broadcasts high quality stereo signal in 88MHz - 108MHz FM band. It can be connected to any type of stereo audio source such as iPod, Computer, Laptop, CD Player, Walkman, Television, Satellite Receiver, Tape Deck or other stereo system to transmit stereo sound with excellent clarity throughout your home, office, yard or camp ground. |
|
USB IO Board
USB IO Board is a tiny spectacular little development board / parallel port replacement featuring PIC18F2455/PIC18F2550 microcontroller. USB IO Board is compatible with Windows / Mac OSX / Linux computers. When attached to Windows IO board will show up as RS232 COM port. You can control 16 individual microcontroller I/O pins by sending simple serial commands. USB IO Board is self-powered by USB port and can provide up to 500mA for electronic projects. USB IO Board is breadboard compatible. |
|
|
|
|
ESR Meter / Capacitance / Inductance / Transistor Tester Kit
ESR Meter kit is an amazing multimeter that measures ESR values, capacitance (100pF - 20,000uF), inductance, resistance (0.1 Ohm - 20 MOhm), tests many different types of transistors such as NPN, PNP, FETs, MOSFETs, Thyristors, SCRs, Triacs and many types of diodes. It also analyzes transistor's characteristics such as voltage and gain. It is an irreplaceable tool for troubleshooting and repairing electronic equipment by determining performance and health of electrolytic capacitors. Unlike other ESR Meters that only measure ESR value this one measures capacitor's ESR value as well as its capacitance all at the same time. |
|
Audiophile Headphone Amplifier Kit
Audiophile headphone amplifier kit includes high quality audio grade components such as Burr Brown OPA2134 opamp, ALPS volume control potentiometer, Ti TLE2426 rail splitter, Ultra-Low ESR 220uF/25V Panasonic FM filtering capacitors, High quality WIMA input and decoupling capacitors and Vishay Dale resistors. 8-DIP machined IC socket allows to swap OPA2134 with many other dual opamp chips such as OPA2132, OPA2227, OPA2228, dual OPA132, OPA627, etc. Headphone amplifier is small enough to fit in Altoids tin box, and thanks to low power consumption may be supplied from a single 9V battery. |
|
|
|
|
|
Arduino Prototype Kit
Arduino Prototype is a spectacular development board fully compatible with Arduino Pro. It's breadboard compatible so it can be plugged into a breadboard for quick prototyping, and it has VCC & GND power pins available on both sides of PCB. It's small, power efficient, yet customizable through onboard 2 x 7 perfboard that can be used for connecting various sensors and connectors. Arduino Prototype uses all standard through-hole components for easy construction, two of which are hidden underneath IC socket. Board features 28-PIN DIP IC socket, user replaceable ATmega328 microcontroller flashed with Arduino bootloader, 16MHz crystal resonator and a reset switch. It has 14 digital input/output pins (0-13) of which 6 can be used as PWM outputs and 6 analog inputs (A0-A5). Arduino sketches are uploaded through any USB-Serial adapter connected to 6-PIN ICSP female header. Board is supplied by 2-5V voltage and may be powered by a battery such as Lithium Ion cell, two AA cells, external power supply or USB power adapter. |
|
200m 4-Channel 433MHz Wireless RF Remote Control
Having the ability to control various appliances inside or outside of your house wirelessly is a huge convenience, and can make your life much easier and fun. RF remote control provides long range of up to 200m / 650ft and can find many uses for controlling different devices, and it works even through the walls. You can control lights, fans, AC system, computer, printer, amplifier, robots, garage door, security systems, motor-driven curtains, motorized window blinds, door locks, sprinklers, motorized projection screens and anything else you can think of. |
|
|
|