Mise en place de TinyBootLoader avec l’oscillateur interne du PIC et la PLL

Dans la plupart de mes montages je rajoute un FTDI FT232R pour avoir une liaison USB-série. Cela engendre un léger surcoût (environ 5€) et une difficulté supplémentaire lors de la soudure car le circuit n’est disponible qu’en SSOP. Mais par contre cela me facilite grandement la communication avec un PC et la programmation du PIC par l’intermédiaire du bootloader TinyBootLoader. J’ai fait une présentation de TinyBootLoader sur le site de l’académie de Limoges (à lire avant cet article). Cependant, je n’abordais pas la problématique de l’utilisation de l’oscillateur interne avec le bootloader. Je présente donc dans cet article la mise en place de TinyBootLoader dans un PIC18F2520 en utilisant l’oscillateur interne avec ou sans la PLL.

Je commence donc par télécharger la dernière version de TinyBootLoader sur le site de Claudiu Chiculita (version 198). Extraire l’archive ZIP puis allez dans le répertoire « picsource/18f ». Vous trouvez tout un ensemble de programmes sources en assembleur et des fichiers pré-compilés pour certains cas courants. Nous allons nous intéresser au fichier « TinyB18F32.asm ». Copiez ce fichier et les fichiers « bankswitch.inc », « icdpictypes.inc » et « spbrgselect.inc » dans un nouveau dossier. Du coté logiciel, il faut que MPASMWIN (l’assembleur de Microchip) soit installé, celui-ci est disponible avec MPLab ou en installant le compilateur C C18.

Éditez alors le fichier « TinyB18F32.asm », les modifications que l’on va apporter se situe au début du code :

Vous avez donc ci-dessus les lignes qui nous intéresse. Nous allons modifier ce source pour l’adapter à un PIC18F2520 avec l’oscillateur interne à 8MHz sans PLL avec une vitesse de la voie série à 57600 bauds/s. Les fusibles de configuration sont visibles dans le fichier « P18F2520.INC » dans le répertoire de MPASM (faire une recherche de fichier !). J’obtiens donc le fichier suivant :

Je compile le tout avec MPASMWIN et j’obtiens un fichier hex que je programme dans le PIC 18F2520. Je lance le programme « tinybldwin.exe », je choisis le port série auquel est relié le PIC ainsi que sa vitesse (dans notre cas 57600) et appuie sur le bouton « Check PIC ». J’alimente le PIC. TinyBootLoader doit alors vous renvoyer le type de PIC trouvé dans sa fenêtre « messages ».

J’ai ensuite testé avec un oscillateur interne à 4MHz et une vitesse de 19200 bauds/s. La encore le test est concluant. Par contre ca se gate lorsque je tente d’utiliser la PLL. J’effectue les modifications suivantes dans le code source du bootloader, je prends comme base de départ: oscillateur interne à 8MHz, PLL x4 activée donc Fosc=32Mhz et une vitesse du port série à 115200 :

La compilation avec MPASMWIN se passe correctement. Je programme le fichier HEX dans le PIC. Quand je fait le test « Check PIC » depuis le logiciel « TinyBldWin » à 115200 bauds/s, le pic est reconnu. Je fais donc une modif du code source CCS pour avoir l’oscillateur interne activé à 8MHz ainsi que la PLL. Cela se traduit par la modification des lignes suivantes dans un code de test : #use delay(clock=32M,internal=8M) et #use rs232(baud=115200, parity=N, xmit=PIN_C6, rcv=PIN_C7, STOP=1, BITS=8). Je compile et je lance la programmation avec TinyBldWin. La programmation se passe comme il faut et le pic redémarre avec le nouveau programme. Problème, lorsque je fais un « Check PIC », les pre-codes sont bien reçus par le PIC qui fait un reset pour passer la main au bootloader mais celui-ci ne répond plus !!! Je fais une modif du code asm du bootloader pour repasser à une longueur de 100mots en supprimant 2 nop en début de prog. La encore tout fonctionne jusqu’à la programmation par TinyBldWin mais ensuite le bootloader ne répond plus !! Pour l’instant je suis bloqué ici…je remarque que malgré la ligne device ICD = True, le compilateur n’insère pas un NOP à l’adresse 0 mais un goto vers la fonction main() donc à priori il écrase le goto du bootloader ! Pour l’instant pas de solution…

En reprenant à zéro et en regardant à chaque fois le code HEX dans le pic, je me suis apercu que les deux dernières instructions (désactivation de l’USART et saut à la zone réservé de 4 mots pour sauvegarder l’adresse du main) n’existait pas dans le cas ou j’activais le PLL. En décalant le début du bootloader en lui donnant une taille de 102 mots cela fonctionnait mais une fois que l’on avait programmé un programme avec tinybootloader celui-ci m’écrasais les quatre mots à l’adresse maxflash-100 et pas maxflash-102 ! donc la première programmation était correct mais ensuite les deux premières instructions du bootloader était écrasé ! Il fallait donc que je gagne deux instructions dans le code source original…j’ai supprimé un NOP et la désactivation de l’USART (avant dernière ligne). Et depuis cela fonctionne !!!

Je pense qu’il faut dans les programmes désactiver la voie série car le bootloader la laisse activé ! Donc je termine avec un bootloader qui tourne à 115200 bauds/s avec l’oscillateur interne à 8MHz et la PLL activé donc Fosc = 32MHz.

Je mets ci-dessous les lignes que j’ai modifié (cette solution fonctionne !) :

Je mets en téléchargement les fichiers sources et les fichiers HEX que j’ai testé et qui fonctionne…

TinyBootLoader pour 18F2520 oscillateur interne a 4MHz, PLL désactivé, 19200bps, Fichier ASM
Titre: tinyb18f2520-i4mhz-19200 (634 clics)
Légende: TinyBootLoader pour 18F2520 oscillateur interne a 4MHz, PLL désactivé, 19200bps, Fichier ASM
Nom du fichier: tinyb18f2520-i4mhz-19200.asm
Taille: 7 KB
TinyBootLoader pour 18F2520 oscillateur interne a 4MHz, PLL désactivé, 19200bps, Fichier HEX
Titre: tinyb18f2520-i4mhz-19200 (619 clics)
Légende: TinyBootLoader pour 18F2520 oscillateur interne a 4MHz, PLL désactivé, 19200bps, Fichier HEX
Nom du fichier: tinyb18f2520-i4mhz-19200-2.hex
Taille: 698 B
TinyBootLoader pour 18F2520 oscillateur interne a 8MHz, PLL activé, 115200bps, Fichier ASM
Titre: tinyb18f2520-i8mhzx4pll-115200 (741 clics)
Légende: TinyBootLoader pour 18F2520 oscillateur interne a 8MHz, PLL activé, 115200bps, Fichier ASM
Nom du fichier: tinyb18f2520-i8mhzx4pll-115200.asm
Taille: 7 KB
TinyBootLoader pour 18F2520 oscillateur interne a 8MHz, PLL activé, 115200bps, Fichier HEX
Titre: tinyb18f2520-i8mhzx4pll-115200 (642 clics)
Légende: TinyBootLoader pour 18F2520 oscillateur interne a 8MHz, PLL activé, 115200bps, Fichier HEX
Nom du fichier: tinyb18f2520-i8mhzx4pll-115200-2.hex
Taille: 698 B

Une réflexion au sujet de « Mise en place de TinyBootLoader avec l’oscillateur interne du PIC et la PLL »

  1. Ping : Electronique Innovante » Robot hexapode - Robot “Fourmi”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *