Electronique > Réalisations > Programmateur PIC 002 (PK2-RM)

Dernière mise à jour : 23/05/2021

Présentation

Voici un nouveau clone de PICkit2, qui s'ajoute à la longue liste de ceux qu'on trouve déjà à travers le monde.

pickit2-rm_001_pcb_3d_a  pickit2-rm_001_pcb_3d_b  pickit2-rm_001_pcb_3d_c  

Projet réalisable par les débutants ;)

Quel intérêt de développer un nouveau clone, vue la quantité déjà en circulation ?

Quel intérêt, en effet ? Mais pour le plaisir, seulement pour le plaisir !

Pour tout dire, cela faisait plusieurs années que je projetais de réaliser un clone de PICkit2. Dès le lancement du PICkit2, Microchip avait décidé de diffuser librement le schéma original et le firmware du PIC 18F2550 (qui est le coeur du PICkit2), dans le but de promouvoir sa famille de microcontrôleurs PIC10/12/16/18 auprès d'un large public. Il semble que sa stratégie se soit révélée efficace ;)

Deux options se présentaient à moi lors de l'élaboration du circuit imprimé (PCB) de ce nouveau programmateur: utilisation de composants traversants ou composants montés en surface (CMS). J'ai choisi la première option, qui facilite le travail des débutants... même si le circuit que je propose est en double face.


Avertissements

Comme beaucoup de clones de PICkit2, le mien présente des limitations par rapport à l'original de Microchip - non pas en terme de performances, mais en terme de fonctions. Comme la majorité des concepteurs de clone, j'ai en effet estimé que ce type de produit était avant tout destiné aux débutants, à qui on conseille généralement de faire leurs premiers pas avec des PIC d'entrée de gamme.Voici donc les fonctions que j'ai retirées [-] :

En contrepartie, j'ai inclus [+] un connecteur ICSP pour la programmation du microcontrôleur du programmateur ;)


Schéma

Structure semblable à beaucoup d'autres clones de programmateurs PICkit2...


pickit2-rm_001
Sur mon prototype, les BC548 ont été remplacés par des BC547...


Dans les lignes qui suivent, j'utiliserai les termes "PIC_Prog" et "PIC_Target" :
- PIC_Prog = PIC du programmateur, programmé avec le firmware de Microchip
- PIC_Target = PIC cible, à programmer


Dialogue entre ordinateur et PIC du programmateur

Le dialogue entre l'ordinateur et le programmateur s'effectue par les deux broches de données Data+ (USB_DP) et Data- (USB_DN) du connecteur USB J1 respectivement reliées aux broches RC5/D+ et RC4/D- du PIC. Le logiciel de programmation PICkit2 de Microchip (sur l'ordinateur) envoie les données du programme à flasher dans le PIC à programmer (PIC_Target) et c'est le PIC du programmateur (PIC_Prog) qui se charge de la procédure de programmation en elle-même, avec le respect des contraintes de timing


Liaison entre PIC du programmateur (PIC_Prog) et PIC à programmer (PIC_Target)

La liaison entre les deux PIC est assurée par le connecteur J2/ICSP_Target qui reprend le mode de câblage du programmateur matériel PICkit2 de Microchip :

Nota 1 : La tension de programmation Vpp est généralement comprise entre 12 V et 14 V. Il existe aussi un mode de programmation "basse tension" LVP (Low Voltage Programming) pour lequel une tension de +5 V suffit, mais nous n'en parlerons pas ici.


Elaboration de la tension de programmation Vpp

En mode de programmation normale (non LVP), le PIC à programmer (PIC_Target) nécessite une tension de programmation Vpp de valeur comprise entre +12 V et +14 V. Comme la tension provenant du port USB de l'ordinateur n'est que de +5 V, un circuit convertisseur/élévateur de tension DC/DC est requis. Un tel convertisseur repose sur le principe du découpage d'une tension continue (ici +5 V) en vue de l'élever avec une bobine présentant une certaine inductance (L1 de 680 uH sur le schéma). La tension "surélevée" disponible au collecteur du transistor Q1 est redressée par la diode D2 (BAT41 de préférence, mais certains utilisent une 1N4148) et est filtrée par le condensateur C2 de 47 uF. La régulation (l'asservissement) de la tension de programmation Vpp est assurée par une lecture périodique de celle-ci, à travers le pont diviseur résistif R8/R9 qui délivre une tension abaissée dans un rapport d'environ 2/3 avant d'arriver sur la broche RA0/AN0 configurée en entrée analogique (FB = FeedBack). Le rapport cyclique du signal de commande (CdeA délivré sur la ligne RC1/CCP2 du PIC) pilotant le transistor Q1 est ajusté en fonction de la tension lue sur RA0/AN0.

Le point de commande CdeB permet d'appliquer ou de couper la tension de programmation VPP destinée au PIC à programmer, par le biais de la broche MCLR_Target. 

Le point de commande CdeC permet quant à lui de relier à la masse (à travers R12) cette même broche MCLR_Target du PIC à programmer, là encore au moment adéquat durant la phase de programmation du PIC cible.

Remarque : la tension de programmation Vpp n'est disponible que lors de la phase de programmation, inutile d'essayer d'en vérifier la valeur quand le programmateur relié à l'ordinateur est au repos. On peut noter au passage qu'une valeur aussi basse que 9 V permet tout de même de programmer la plupart des PIC...


Alimentation

Le système tire son alimentation du connecteur USB J1 qui amène une tension de +5 V entre ses broches 1 et 4 (+5 V sur broche 1 et masse sur broche 4). Cette tension de +5 V alimente en permanence le PIC du programmateur (PIC_Prog) et peut également alimenter le PIC à programmer (PIC_Target) à travers la diode D1/1N5817. Pour un courant max voisin de 100 mA, cette diode D1 qui est de type Schottky présente une chute de tension moindre (environ 0,4 V sous un courant de 100 mA) que la classique 1N4148 (environ 0,6 V). Cette différence peut sembler légère et beaucoup se contenterons de la 1N4148, plus répendue et moins chère. Je conseille toutefois la diode Schottky, car si vous utilisez un câble USB long et de piètre qualité entre l'ordinateur et le programmateur, la consommation liée à l'alimentation simultanée des deux PIC peut faire chuter la tension au point de provoquer une programmation erratique (rare mais possible). Il suffit parfois d'un malheureux dizième de volt pour faire la différence!

Vérification tension : pour une programmation réussie de vos PIC reliés à ce programmateur, la tension d'alimentation fournie par ce dernier doit être comprise entre 4,5 V et 5,5 V, pour une consommation totale (programmateur + PIC à programmer) comprise entre 30 mA et 100 mA. Pour vérifier si cet impératif est respecté, branchez le programmateur sur un port USB et câblez une résistance de 47 ohms entre les broches Gnd et Vdd_Target (et donc après D1), cette résistance a pour seul but de tirer un courant voisin de 100 mA et de voir "si ça tient". La tension lue aux bornes de cette résistance de 47R ne doit pas descendre sous 4,5 V :


pickit2-rm_001_power-supply-test
(Implantation des composants proposée en fin d'article)

Microcontrôleurs PIC supportés

Les microcontrôleurs PIC pouvant être programmé avec le programmateur PICkit2 et ses clones "complets" sont listés ci-après (PIC24 et dsPIC non listés).


PicKit2_uC_List
Liste des PIC 10F/12F/16F/18F supportés par le PICkit2 (PIC 24F et dsPIC non listés)

Cette liste énumère des PIC 10F/12F16F/18F devant être alimentés (et programmés) en 5V (la majorité) et d'autres devant être alimentés (et programmés) en 3V3 (quelques-uns dont le nom comporte le terme "LF" - par exemple PIC 16LF1527, et ceux dont le nom comporte la lettre "J", par exemple PIC18F26J11). 

A noter : mon clone (comme les autres clones simplifiés) ne peut pas programmer les PIC 3V3, à moins de déconnecter la diode D1 et d'alimenter le PIC à programmer avec sa propre tension d'alimentation de 3V3. La présence du cavalier JP1 (qu'on peut mettre ou retirer) en série avec la diode D1 permet d'effectuer cette opération sans sortir le fer à souder. Cette façon de faire est toutefois un peu risquée si vous essayez de programmer un PIC 3V3 et que vous oubliez de retirer ledit cavalier... Je vous conseille donc, dans un premier temps tout du moins, de laisser ce cavalier JP1 en place et de faire vos armes avec des PIC 5V.

Remarque : la diode D1 permet d'alimenter le PIC à programmer avec la tension de 5 V provenant du bus USB, en évitant tout problème si le PIC à programmer est déjà alimenté de son côté avec une tension de 5 V. En effet, dans le cas où les deux tensions de 5 V sont présentes de chaque côté de la diode, cette dernière reste bloquée.


Prototype

Un seul prototype assemblé pour l'instant.


Prototype 001 (le mien)

Réalisé (à peu de chose près) selon l'implantation des composants proposée un peu plus loin.  


pickit2-rm_001_proto_rm_001a  pickit2-rm_001_proto_rm_001b  pickit2-rm_001_proto_rm_001c    

Le PCB mis à disposition a bénéficié de quelques retouches cosmétiques après validation de ce prototype. J'avais entre autre sous-estimé la place occupée par la self L1 de 680 uH (photo du centre ci-devant).

Comme je n'avais pas l'intention d'utiliser la broche Aux_Target du connecteur ICSP_Target, j'aurais pu ne pas souder R3. Mais cela faisait un trou disgracieux que je me suis empressé de colmater. 

Ce clone de PICkit2 a programmé avec succès des PIC 16F et 18F alimenté par le programmateur lui-même, grâce au logiciel original PICkit2 de Microchip. A noter qu'au démarrage du programme de Microchip, la mention "ID = OIHoss" apparaît avec le clone et pas avec le programmateur officiel :


pk2-rm_001_soft-comparison_001a


Notez le côté exotique de l'opération "CMS/traversant" dont ont fait l'objet les résistances R16 et R17.


pickit2-rm_001_pcb_proto_rm_001t  pickit2-rm_001_proto_rm_001d  


Juste avant d'envoyer le PCB en fabrication, je me suis rendu compte que j'avais oublié ces deux résistances R16 et R17. Comme je n'avais pas le courage de modifier le routage existant (cela m'aurait pris au moins 3 minutes), j'ai fait au plus vite et ai ajouté deux emplacements CMS 1206... en me disant qu'on pouvait toujours y souder des résistances traversantes couchées sur le PCB (en mode "radial", avec une broche pliée comme si on voulait les monter verticalement).


Circuit imprimé (PCB)

Réalisé en double face avec composants traversants, avec un bon gros connecteur USB type B et non un mini-USB (bien que ce dernier soit prévu pour un nombre plus élevé de manipulations). Le connecteur J2 (ICSP_Target) que j'ai choisi de type "mâle droit" pourra bien sûr être remplacé par un modèle "femelle coudé à 90 degrés".


pickit2-rm_001_pcb_components_top pickit2-rm_001_pcb_overlay

Typon au format PDF


Logiciel du PIC (firmware)

Le logiciel (firmware) du PIC utilisé pour ce programmateur n'est pas de moi, mais de Microchip (page PICkit2) :
https://ww1.microchip.com/downloads/en/DeviceDoc/PK2V023200.zip

Le logiciel windows PICkit2 permettant de piloter le programmateur PICkit2 (et ses clones) est lui aussi disponible sur le site de Microchip :
https://ww1.microchip.com/downloads/en/DeviceDoc/PICkit%202%20v2.61.00%20Setup%20A.zip

Si ces liens venaient à mourir (ils sont encore actifs à la date du 17/04/2021), tout n'est pas perdu :
archives\microchip\PK2V023200.zip (*.hex du 14/07/2008)
archives\microchip\PICkit2_v2.61.00_Setup_A (*.exe du 24/03/2009)
archives\microchip\PK2DeviceFile.zip (*.dat du 04/11/2011)


Historique

23/05/2021
- Première mise à disposition.