Bootloader - Programmateur de PIC 16F87X et 16F87XA
Introduction
Le bootloader est un microprogramme qui s'installe dans le pic et qui évite de le sortir, à chaque fois, de son système pour le reprogrammer (ISP In-System Programmer).
Il utilise une l'interface RS232 pour le transfère de programme, donc il faut en plus un max232 dans votre système.
Ca augmente le nombre de composants mais ça facilite énormément la programmation (Idéal pour les cartes de développement).
Il suffit de brancher le câble série sur votre carte, lancer la programmation et voilà votre pic est programmé.
Il est compatible avec tous les PIC 16F87X(A)
Le site officiel
Vous y trouverez un pack
.
Il contient différents microprogrammes bootloader (sources et .hex) en fonction des pic et de leurs quartz.
Dans le répertoire Downloader Windows, il y a le downloader qui permet de transférer vos programmes dans le pic grâce au bootloader
Schéma de base du programmateur

Le site de JP Mandon
C'est un site francophone qui regroupe de nombreuses informations sur la programmation des PIC et surtout une traduction du bootloader.A ne pas manquer : http://jmandon.free.fr/bootloader/bootloader.htm
Le créateur du site a aussi fait un article dans l'électronique pratique de juin 2002 mais faites attention, j'ai trouvé une erreur le RX et le TX au niveau du DB9 sont inversés.
Télécharger le Bootloader de JP Mandon

Le site de Bigonoff
Vous trouverez une variante du bootloader que je n'ai pas eu l'occasion de tester mais vu la qualité de tous les autres projets qu'il a réalisé elle doit être excellente donc à voir aussi:Le site de Bigonoff "Cours sur les PICs - Part3 - les secrets de PIC16F87x - Techniques du bootloader"
Les étapes de programmation
1 - Modifiez la configuration de votre bootloader (bootldr.asm ou bootldra.asm) compilez le avec MPLAB ou utilisez le fichier .hex déjà tout fait fournit dans le pack ex: bootldr-16F876A-20MHz-19200bps.HEXIl existe 2 versions différentes du bootloader pour les pic version A et les non A donc ne prenez pas un source bootloader (bootldr.asm) pour un 16F876A et ne mettez pas simplement list p=16f876A ça ne marchera pas.
Utilisez le bootldra.asm ou un .hex pour la version A. La programmation des "A" se fait par groupe de 4 mots contrairement aux non-A.
Voici la configuration de mon source pour un pic 16F876A avec un 20Mhz :
;================== User setting section ============================== ========
list p=16f876a ; <<< set type of microcontroller (16f873a or 16f876a)
; set same microcontroller in the project
#define ICD_DEBUG 0 ; <<< if using MPLAB ICD Debugger, moves bootloader down 256 bytes to make room for it [0|1]
#define FOSC D'20000000' ; <<< set quartz frequence [Hz], max. 20 MHz
#define BAUD D'19200' ; <<< set baud rate [bit/sec]
#define BAUD_ERROR D'4' ; <<< set baud rate error [%]
#define TIME ; <<< set method of bootloader start PIN/TIME
; PIN : start on low level of trigger pin
; TIME: start on receive IDENT byte in TIMEOUT
#define TRIGGER PORTC,5 ; <<< only for PIN - set PORT_X,PIN_NR
#define TIMEOUT D'2' ; <<< only for TIME - set time [0.1s], max. 25 sec
#define WATCHDOGTIMER 0 ; <<< Watchdog timer default OFF/ON [0|1]
2 - Programmez votre pic avec un programmateur "standard".
3 - Démarrez le programme PIC downloader et branchez le câble série entre votre carte et le PC.
4 - Sélectionnez votre programme dans le downloader en cliquant sur search.
Votre programme doit avoir cette structure :
LIST p=16F876A #include <p16F876A.inc> ORG 0x0000 goto init nop nop nop ORG 0x0004 init ;----------- ;Votre Code ;----------- END
Programme exemple qui met le PortB à l'état haut :
LIST p=16F876A #include <p16F876A.inc> ORG 0x0000 goto init nop nop nop ORG 0x0004 init bcf STATUS,RP0 ;PortB en sortie bsf STATUS,RP0 movlw 0x00 movwf PORTB bcf STATUS,RP0 ; PortB a FF movlw 0xFF movwf PORTB nop ; permet de faire un fichier .hex multiple de 4 mots ENDTélécharger ce code, Led.zip
(le fichier .asm, le .hex, le projet MPLAB)ATTENTION pour la série A:
Vu que la programmation se fait par groupes de 4 mots la taille du code doit être un multiple de 4 mots. Si votre code n'est pas un multiple de 4 mots vous pouvez simplement rajouter un ou quelques nop comme je l'ai fais pour le programme led.
Pour vérifier, il suffit d'utilier IC-Prog qui groupe automatiquement le code en mots.
EX pour led:
Sans le nop, la dernière ligne est composée de 3 mots donc le code n'est pas multiple de 4 mots :
Dans ce cas, Pic Downloader transfèrera le programme dans le PIC mais il ne s'exécutera pas.
Avec le nop, la dernière ligne est composée de 4 mots donc le code est bien multiple de 4 mots :
5 - Cliquez sur Write

Le Downloader se met en attente de transfère "Searching for bootloader"
6 - Pour lancer le transfère, il faut alimenter le pic.
A la mise sous tension, le downloader va transférer le code dans le pic si le code ne détecte pas le downloader le code déjà présente dans le pic sera exécuté.
Soit la barre de progression va jusqu'à la fin et votre pic est programmé (All OK !)

Soit vous avez (erreur d'écriture) et là il y a eu un problème lors du transfère peut être votre quartz qui n'est pas à la bonne fréquence ou votre débit par défaut, 19200Bd, dans le downloader n'est pas le même que celui du bootloader dans votre pic.
Plaquette de dévelopement
J'ai fais une plaquette de développement bootloader avec de l'i2c, un connecteur clavier PC un connecteur pour une manette de jeux DB15, etc.
Schéma
Typon

/!\ Si vous utilisez Acrobat Reader, vous devez désactiver la mise à l'échelle automatique dans Fichier -> Imprimer ... -> Mise à l'échelle : Aucune.
Si ce n'est pas fait, le typon ne sera pas à la taille réelle.



