Le schéma comporte également un connecteur ICSP ... mais que j'ai décidé de ne pas placer sur ma platine finale.
https://www.fruttenboel.nl/pic/picJDM.html
La gamme de processeurs Microchip PIC est largement disponible dans toutes sortes de variétés.
Pour chaque application, il existe un PIC. C'est un grand avantage mais qui présente l'inconvénient de devoir connaître les nombreuses spécificités de chacun d'eux.
Les PIC sont de bons processeurs largement utilisés pour lesquels il existe beaucoup de programmateurs bon marché.
L'un des plus connus est le JDM Programmer, conçu par Jens D Madsen.
Son site www.jdm.homepage.dk a malheureusement disparu mais il en susbsite de nombreuses traces sur le WEB.
( http://web.archive.org/web/20080203162849/http:/users.tpg.com.au/btkelly/jdm_b.htm )
1. Voici le schéma initial du JDM Programmer
Ce circuit du système JDM de première génération, qui ne comporte qu'un transistor, est le plus facile pour comprendre son focntionnement puisque le condensateur principal C1 (qui génère les 13v VPP)
est directement couplé sur l'entrée /MCLR.
Principe de fonctionnement.
Lorsque TxD passe à -9 Volt, C1 et C2 se chargent à 9 Volts.
En raison de Dz2, C2 ne se charge pas au delà de 5,1 Volts.
Lorsque TxD devient positif à +9 volts, les 9 volts déjà présents stockés dans C1 sont augmentés de 9 volts supplémentaires de sorte que C1 contient maintenant 18 volts.
Dz1 se charge alors limiter la tension VPP à 3 Volts.
Shéma simplifié et réduit pour la programmation des anciens Pic16F84 et 16C84
2. Version 2 du JDM Programmer
Principe de fonctionnement.
Si RTS présente une tension positive C3 se charge à 5 Volts et C2 à environ 13 Volts
Pour RTS négatif, les tensions sur les condensateurs sont augmentées.
Le niveau de masse du PIC flotte à 5,1 volts sous la masse du signal RS 232
Lorsque TXD devient positif, il ouvre Q1, donc les 13 Volts vont à la broche Vpp du PIC (/MCLR)
En manipulant RTS et DTR (pour RB6-CK et RB7-Data), les données sont pompées dans et hors du PIC
La situation autour de RB7 est assez complexe.
La règle semble être : CTS = DTR sauf si RB7 est nul.
[ IF RB7=High Then : CTS =DTR : ELSE : CTS =RB7 : Endif ]
Explication détaillée
La convention normale de conception de circuit est de mettre en commun toutes les masses, mais la caractéristique clé de JDM est que la masse du port série (GND) est connectée au VDD !
Cela crée une confusion car les signaux du port série sont mesurés par rapport à GND, les signaux PIC par rapport à la masse logique (VSS).
Lorsque TX passe au niveau haut, Q1 se comporte comme deux diodes polarisées en direct.
(Le collecteur Q1 n'est pas polarisé en inverse comme avec le fonctionnement normal du transistor).
Le collecteur Q1 charge C2, qui est fixé à VDD+8V2 par Zener (D6).
L'émetteur Q1 fournit 13 V au MCLR pour le mode de programmation/vérification.
Lorsque TX devient bas, C3 est chargé via D5 et VSS est bloqué à VDD-5V par zener (D2).
TX est également fixé à (VSS-0.6) par D5.
Q1 est éteint, C1 conserve sa charge pour la prochaine impulsion de programmation.
MCLR est bloqué à 0V par D7, donc le PIC est maintenant réinitialisé.
Lorsque RTS est haut, l'horloge est transmise à PGC.
D4 fixe PGC au niveau logique VDD haut.
Lorsque RTS est bas, C3 est chargé via D3 et VSS est bloqué à VDD-5V par zener (D2).
D3 bloque PGC à VSS ou logique 0.
Lors de la programmation, les données envoyées sur DTR sont lues sur PGD, que le PIC configure en entrée.
Lorsque DTR est haut, Q2 agit comme un "émetteur suiveur" et la tension PGD est d'environ (VDD-0.6) ou logique 1.
Lorsque DTR est bas, Q2 agit comme un mauvais transistor (broches d'émetteur et de collecteur inversées).
Q2 tire PGD vers le bas.
Pendant la vérification, le PIC configure PGD comme sortie pour envoyer des données au port série.
DTR doit être réglé sur haut et les données sont lues sur CTS.
Lorsque la sortie PGD est élevée, Q2 est désactivé, CTS = DTR = +12V.
Lorsque la sortie PGD est faible, Q2 est activé.
Le collecteur Q2 tire le courant (12V + 5V)/(1k + 1k5) = 7mA de DTR, et tire CTS bas, vers VSS.
3. Modifications à la version 2 du JDM Programmer
Le JDM (ou Ludipipo) semble être parmi les PIC Programmers les plus utilisés, et à juste titre !
En effet, il est simple, bon marché et facile à construire.
Il peut être piloté avec l'excellent logiciel gratuit IC Prog de Bonny Gijzen, et programmera à peu près n'importe quel microcontrôleur PIC du marché.
Cependant, un problème semble survenir avec certains "nouveaux" PIC, tels que les PIC12F675, 12F629 et quelques autres qui comportent un oscillateur interne.
Lorsque ces puces sont programmées la première fois, tout se passe bien.
Cependant, si vous essayez ultérieurement de les lire ou de les réécrire, elles sont lues comme vides et ne peuvent pas être écrites !
Le problème ne se produit que lorsque le PIC a déjà été programmé pour 'CONFIG' réglé à la fois sur INTOSC et MCLR_OFF.
Shigerunosuke a soulevé ce problème pour la première fois sur le forum du Japon à propos du programmeur JDM.
A noter cependant que ce défaut dépend parfois du programme et ne se produit pas nécessairement suivant toutes les conditions !?
Il semble y avoir une autre dépendance au programme lui-même ou à celui précedemment chargé !.
Certains se se sont alors penchés sur la séquence qui fait passer le programmateur en mode Programmation ou en mode lecture/Vérification... et en ont tiré des enseignements.
Le mode de programmation/vérification est obtenu en maintenant les broches CLOCK et DATA au niveau bas tout en élevant la broche MCLR de VIL à VIHH (haute tension).
On applique alors VDD et les Data.
Une fois dans ce mode, la mémoire de programme utilisateur, la mémoire de données et la mémoire de configuration peuvent être accédées et programmées en série.
La broche MCLR doit donc être relevée de VIL à VIHH avant l'application de VDD.
Cela permet de s'assurer que le PC de l'appareil n'est pas incrémenté alors qu'il se trouve dans une plage de fonctionnement valide.
N'alimentez pas GP2, GP4 ou GP5 avant l'application de VDD.
MAIS le programmeur JDM alimente l'appareil en permanence et ne peut pas contrôler VDD !
Par conséquent, le PIC est directement alimenté par le système JDM, et il démarre en exécutant le code déjà écrit dans le PIC !
Diverses solutions
Il suffirait simplement de faire en sorte d'appliquer Vdd après que survienne Vpp..
Voici alors proposé un circuit de retard de Vdd à l'aide d'un photocoupleur.
Il existe aussi une autre solution connue, proposée par BT Kelly. JDM Programmer Modification
Toutes les solutions mentionnées ci-dessus sont efficaces pour les 12F629 ou 12F675.
Il semble aussi que l'OSCCAL puisse être perdu dans certaines conditions. N'oubliez donc JAMAIS de bien le lire et le noter sur le boîtier avant toutes programmation !
PIC12F629/675, PIC16F630/676
Le PIC12F675 ne peut être programmé qu'avec HVP (High Voltage Programming).
Cela signifie qu'il nécessite une tension Vpp (supérieure à Vdd) pour la programmation.
Les spécifications de programmation Microchip HVP pour PIC12F675 exigent que VPP soit appliqué à MCLR avant VDD.
Le programmateur JDM peut bien programmer ces dispositifs, mais ne peut pas lire/vérifier/effacer lorsque le mot de configuration est réglé sur "oscillateur INTOSC" et "la fonction MCLR est désactivée en interne"
Ce qui suit est une citation de "PIC12F629/675/PIC16F630/676 Memory Programming" (Programmation de la mémoire des PIC12F629/675/PIC16F630/676).
On entre dans le mode Program/Verify en maintenant les broches Clock et Data à un niveau bas tout en faisant passer la broche MCLR de VIL à VIHH (haute tension).
Appliquer VDD et les données.
PIC12F635/683, PIC16F636/639, PIC16F684/688, PIC16F685/687/689/690
Appliquer Vpp en premier et Appliquer ensuite Vdd.
Le programmateur JDM peut bien programmer ces dispositifs, mais ne peut pas lire/vérifier/effacer lorsque le mot de configuration est réglé sur "oscillateur INTOSC" et "la fonction MCLR est désactivée en interne".
5 Le RCD Programmer de Feng San |
Source: http://feng3.nobody.jp/en/rcd.html
Je pense que le "JDM Programmer" est un programmeur PIC bon marché et très utile.
Cependant, comme le "JDM Programmer" ne peut pas contrôler VDD, l'algorithme "VPP avant VDD" est inapplicable.
Pour cette raison, la reprogrammation d'un PIC peut être erronée si l'on utilise des paramètres de configuration tels que "Oscillateur interne" "MCLR OFF".
Ces PICs sont alimentés par le "programmateur JDM" et exécutent immédiatement le code du programme.
Une erreur peut également apparaître lors de la vérification, ou il peut être impossible de l'effacer et de le reprogrammer.
Afin de résoudre ce problème, j'ai conçu un programmateur basé sur le "programmateur JDM" mais apportant les aménagements nécessaires.
Comme ce programmateur était composé de résistances, de condensateurs et de diodes, je l'ai simplement appelé "programmateur RCD".
Les "réglages matériels" de l'IC-Prog sont les mêmes que ceux du "programmateur JDM".
Vous trouverez, ci-dessous, la conception du programmateur RCD.
Ce système charge le condensateur principal durant la phase TxD négative et lorsqu'il TxD devient positif, la tension est à peu près doublée.
Cette conception fonctionnera donc parfaitement avec des ordinateurs portables et similaires qui ont des bas niveaux RS 232 de +/- 7 volts.
Le fonctionnement est plutôt simple. Mais Feng a mieux pris soin de protéger RB6 et RB7 au moyen des diodes D1 .. D4.
La rétroaction RB7 se fait sans transistor et cela semble bien fonctionner.
Principe de fonctionnement:
C1 est un condensateur de pompe de charge* .
Il fonctionne comme un doubleur de tension.
Lorsque TxD est sous tension négative, C1 est chargé par D7 à partir de GND.
Si TxD est activée, comme elle devient positive, la tension chargée dans C1 est augmentée.
La haute tension créée est régulée par D7 à environ 13V.
Si TxD est activé, les deux tensions d'alimentation sont créées.
CTS et RTS participent également à la création de la tension d'alimentation.
Cette VDD est retardée et est appliquée par C2 et R4.
Les diodes D1-D5 sont des diodes d'agrégation.
Puisque la chute de tension est dans les limites qui peuvent être ignorées, un petit redresseur d'usage général est suffisant comme diode à utiliser, par exemple 1N4148, 1S1588 (Toshiba),
1S2076A (Renesas ou Hitachi), 1S133 (ROHM).
Si un PIC qui a besoin d'un courant de programmation plus important comme pour le 16F84(A), la valeur de R3 est réduite.
Il sera utile et pratique d'utiliser une résistance ajustable pour R3.
Des mois se sont écoulés depuis que j'ai publié le premier RCD Programmer sur mon site Web.
De nombreuses personnes m'ont posé des questions sur le programmateur RCD.
Et Microchip a récemment développé des PIC à faible nombre de mots qui intègrent une mémoire de plus de 1 000 mots.
Je recommande donc maintenant de changer la capacité de C1 à 470uF pour une programmation stable.
*En ce qui concerne la description générale de la pompe de charge, veuillez vous référer à DC/DC Conversion without Inductors(Maxim/Dallas Application Note 725)
Un point important n'est pas la pompe de charge mais le contrôle de VDD dans le circuit du programmateur RCD.
Si ce point est exclu, le programmateur JDM est bien plus excellent que le programmateur RCD.
Comme le programmateur RCD ne fonctionne qu'une seule fois par impulsion, l'alimentation du condensateur ne peut pas être maintenue pendant une longue période.
Considération pour les ordinateurs qui ont une mauvaise protection contre les surtensions (ajouté : 2005-02-06 JST)
Lorsque vous insérez un programmateur RCD dans le port COM de votre ordinateur pendant le fonctionnement ("Hot Plug-in" ou "Hot Socketing"), un courant d'appel est généré.
Il semble qu'il soit faible pour une surintensité et un court-circuit bien que "EIA/TIA -562" soit économe en énergie et compatible avec "EIA/TIA-232-E".
J'ai donc ajouté une résistance de limitation de courant de 200 ohms.
Cette résistance limite le courant de crête et aide les ordinateurs dont le circuit de protection contre les surtensions est médiocre.
Cependant, le programmateur RCD ne fonctionnera pas bien avec un tel ordinateur car la tension du port COM peut être extrêmement basse.
RCD v2.3 by Feng San
http://feng3.nobody.jp/en/rcd.html
https://www.fruttenboel.nl/pic/picJDM.html
C'est l'une des dernières versions du programmateur RCD de Feng San.
Il est préférable de programmer les puces PIC les plus récentes, car celles-ci nécessitent que le Vpp soit activé avant que le Vdd ne soit activé.
(Voir ci-dessous: Entrer dans le Mode Programmatio,n / lecture des PICs)
Feng San a résolu ce problème avec une ligne à retard RC. Très pratique.
(1) WinPic - Lorsque les options IntOSC et MCLR interne sont sélectionnées, la programmation est satisfaisante.
Cependant, après avoir quitté le mode Program/Verify, l'appareil peut être incapable d'être lu (ou vérifié) correctement. Ne vous inquiétez pas ! L'appareil peut être reprogrammé.
(2) L'ID du PIC12F683 est 0x0460. La valeur ID "0x1280" indiquée dans la fiche technique (DS41204C) n'est pas corrigée pour l'instant (corrigée à l'automne 2004, DS41204D).
(3) Utilisez un adaptateur ou la méthode ICSP pour ces dispositifs ! Adaptateur pour SOT23 PIC10F2xx(exemple), pour PIC16F57(exemple), pour PIC16F627A/628A/648A( Voir photo ci-dessous).
(4)WinPic-- Activer l'option WinPic 'raise Vdd before MCLR=Vpp' !
(5)WinPic-- N'utilisez pas WinPic pour programmer le PIC16F84A avec le programmateur RCD ! Utilisez IC-Prog ou PICProg4U !
Note:WinPic--L'effacement et la reprogrammation peuvent devenir impossibles comme pour les appareils suivants lorsque les options IntOSC et MCLR interne sont sélectionnées en plus de l'utilisation
de WinPic qui règle "InterfaceType" sur "JDM Programmer 2". Dans ce cas, veuillez essayer après avoir décoché toutes les cases dans "Interface Test".
Important !
Il est préférable de lire le mot "OSCCAL (Internal OSCillator CALibration)" et les bits "BG (BandGap calibration)" dans un appareil et de les noter sur une feuille de papier
avant de commencer à programmer, afin d'éviter tout effacement accidentel.
Tous les appareils OTP (One Time Programmable) et les appareils de plus de 18 broches ne sont pas pris en charge !