Etude des PICs

Pour commencer rendons à César ce qui est à César et à mon frère ... la majeure partie de ce qui est sur cette page. Les kits de développement des PICs sont légions sur le net : qu'est ce qui différencie le nôtre ? Le PIC se programme in situ, il se trouve sur une carte différente du programmateur auquel il se trouve relié par un connecteur HE10-10 et toutes les E/S sont accessibles sur des borniers. Un simple interrupteur sur le programmateur permet de passer instantanément du mode « programmation » au mode « utilisation » : cela permet de charger un nouveau micro-programme en mémoire flash en un clin d'oeil sans rien bidouiller. Après mise au point du programme, le connecteur du programmateur est remplacé par des cavaliers.

Pour la réalisation des circuits, lisez déjà la page d'en-tête du chapitre.

PLATINE PIC 16 F 876

Voici tout d'abord la carte qui supporte un PIC 16F876 (ou 16F872). Nous verrons par la suite des cartes pour d'autres types de PIC.

Puis le tracé du circuit imprimé. Il y a de la place pour un condensateur de 10 µF sur l'alimentation mais qui n'est pas sur le schéma, il est inutile si l'alimentation est correcte et carrément interdit si la carte est alimentée par un bus USB. Il y a aussi de la place pour deux quartz ce qui permet de tester des PICs de différentes vitesses. Les condensateurs de 22 pF seront choisis au pas de 5,08. Un picot sur l'une des borne de l'oscillateur permettra éventuellement d'entrer un signal d'horloge provenant d'une autre carte. Attention les borniers sont au pas de 5 mm et non de 5,08 ! La réalisation pratique ne présente aucune difficulté.
 

Pour l'aspect mécanique du montage, se référer à la page des croquis côtés. 

La liste des composants :

3

bornier 2 vis pas de 5mm

6

bornier 3 vis pas de 5mm

1

connecteur HE10-10 mâle droit

1

support de C.I. 28 pattes largeur 7,62

1

PIC 16F876 (4 ou 20 Mhz)

1

quartz (4 ou 20 Mhz)

1

led 3mm

2

condensateur céramique 22pF au pas de 5,08

1

condensateur plastique 22nF au pas de 7,62

1

condensateur chimique vertical 1µF, 16V au pas de 2,54

1

résistance 1/4W 680 Ohms

1

résistance 1/4W 100 KOhms

0 ou 1

condensateur chimique vertical 10 à 50 µF, 16V au pas de 5,08 (Optionnel)

PLATINE PROGRAMMATEUR

Passons au programmateur. Il est compatible avec le « JDM programmer » et sera commandé par le logiciel IC-PROG (A télécharger sur le site d'IC-PROG). L'alimentation se fera à partir d'un « bloc secteur » fournissant environ 18v. L'inverseur permet de passer du mode « Programmation » au mode « Utilisation ». Des sorties 5 et 12 v. sont prévues pour une utilisation faible puissance. Le LM317LZ fournira le 13v. de programmation. Un magnifique PIC 12C508 trône au milieu de cette carte : mais comment allons-nous le programmer puisque nous n'avons pas encore de programmateur ? Il suffit pour l'instant de ne pas le monter et de relier ses pattes 2 & 7; il faudra aussi dans le menu  CONFIGURATION / HARDWARE d'IC-PROG (Que l'on obtient avec la touche F3) cocher la case « Inversion MCLR ». Le rôle de ce PIC est essentiellement de commander les LEDs. Lorsque ce PIC sera programmé avec son fichier HEX et installé sur la carte il ne faudra pas oublier de décocher la case « Inversion MCLR ». Les transistors Q1 et Q2 font en sorte que le 13v. ne soit appliqué que lorsque c'est nécessaire.

Puis viens le dessin de son circuit, quelques pistes sont trés rapprochées : sonnez les après gravure pour détecter les court-jus. Si vous n'avez pas les mêmes composants, notamment pour l'inverseur et la prise d'alimentation, retouchez le dessin. Il faudra entailler légérement l'une des équerres de fixation de la face avant au niveau de l'inverseur. (Montage mécanique)
 



Et enfin la liste des composants :

1

prise DB9 femelle à 90°

1

prise alimentation diamètre 5,5mm à broche de 2,1mm

1

double inverseur à 90°

2

relais DIL - 2 RT 12v.

1

connecteur pour câble en nappe 10 points

1

câble en nappe 10 fils d'environ 20cm

1

connecteur HE10 femelle 10 points

1

support de C.I. 16 pattes

1

support de C.I. 14 pattes

1

support de C.I. 8 pattes

1

MAX 232

1

74LS05

1

12C508A

1

régulateur 7805

1

régulateur 7812

1

régulateur LM317LZ

2

transistor TUN (BC547 ou équivalent)

1

transistor TUP (BC557 ou équivalent)

1

diode 1N4007

3

led de 3mm (rouge, vert, jaune)

1

condensateur plastique 100nF au pas de 7,62

1

condensateur plastique 220nF au pas de 10,16

5

condensateur chimique vertical 1µF, 16V au pas de 2,54

1

condensateur chimique vertical 10µF, 63V au pas de 2,54

1

condensateur chimique vertical 47µF, 63V au pas de 5,08

1

résistance 1/4W 270 Ohms

2

résistance 1/4W 560 Ohms

1

résistance 1/4W 1,8 KOhms

1

résistance 1/4W 2,2 KOhms

3

résistance 1/4W 10 KOhms

1

résistance 1/4W 12 KOhms

3

résistance 1/4W 47 KOhms

2

résistance 1/4W 100 KOhms

1

résistance ajustable multitours verticale 470 Ohms

Règlages et utilisation :

Alimentez le montage et vérifiez les tensions 5 et 12v. Ajustez le multitours de 470 Ohms pour avoir 13,1 v. en sortie du LM317LZ. Repérez les positions « Programmation » et « Utilisation » de l'inverseur : en mode« Utilisation » on doit avoir 5 et 12 v. sur le bornier. Reliez la prise DB9 au port série d'un PC à l'aide d'un cordon NON croisé. Réalisez de quoi programmer le 12C508; pour cela montez directement un support 8 pins sur le câble plat en provenance de la carte programmation de la manère suivante :

- Fil N° 2 à la patte 7
- Fil N° 4 à la patte 6
- Fil N° 6 à la patte 4
- Fil N° 8 à la patte 1
- Fil N° 10 à la patte 8

Vérifiez que les pattes 2 & 7 du support du 12C508 (Le support qui est sur la carte !) sont reliées et que IC-PROG est configuré avec « Inversion MCLR ». Basculez l'inverseur sur « Programmation » et envoyez le fichier HEX. Par curiosité vous pouvez regarder le fichier source. Il reste à monter le 12C508 sur la carte et à décocher la case « Inversion MCLR » dans IC-PROG.
Pour programmer un PIC comme le 16F876 :
- S’assurer que l'inverseur est sur « Utilisation ».
- Connectez la fiche HE10 à la carte supportant le PIC à programmer.
- Alimentez la carte programmateur : pendant 2s. les voyants « Mode » et « Clock » restent allumés fixes puis le voyant « Mode » reste seul allumé. En cas de problème, les voyants «  Mode » et « Clock » clignotent en alternance, vérifiez alors que l'inverseur est en position « Utilisation », que le signal « Clock » est absent, que le signal « MCLR » est absent, que la configuration d'IC-PROG est correcte.

- Il est alors possible de mettre l'inverseur sur « Programmation ». Ce changement de mode impose les mêmes conditions que ci-dessus. Si les conditions sont correctes, le voyant « Mode » clignote (1Hz).
- Effectuez la lecture et/ou l’écriture du microcontrôleur : le voyant « Vpp » s’allume par intermittences, et le voyant « Clock » clignote (4Hz) indiquant l’échange entre l’ordinateur et le microcontrôleur. Le voyant « Vpp » s’éteint à la fin.
- S’assurer que l’opération de lecture et/ou écriture est terminée avant de remettre le programmateur sur « Utilisation ».
- Après les essais, et hors-tension, retirez la fiche HE10 et mettre des cavaliers dans le connecteur.

PLATINE INTERFACES

Passons maintenant à une carte d'interfaces permettant de faire quelques essais. Cette carte supportera 2 interrupteurs, 2 poussoirs et 8 LEDs. Les LEDs sont directement alimentées à travers une résistance. Les interrupteurs et poussoirs envoient sur les entrées du PIC le 5v. à la fermeture du contact. Lorsque les contacts sont ouverts, des résistances de rappel rammenent la masse sur les entrées du PIC. C'est tellement simple qu'il n'y a pas besoin de schéma; voici le dessin du circuit :

Et la liste des composants qui va bien :

4

bornier 3 vis pas de 5mm

1

bornier 2 vis pas de 5mm

8

led 3mm

2

interrupteur miniature

2

bouton poussoir, contact normalement ouvert

8

résistance 1/4W 680 Ohms

4

résistance 1/4W 100 KOhms

ESSAIS

Pour commencer à programmer un PIC il vous faut l'assembleur de Microchip et un éditeur de texte. Maintenant on peux passer aux essais avec ce petit programme de chenillard. (Fichier assembleur et fichier hex) Les 8 LEDs sont reliées au port C, l'un des poussoir est relié au port A0 et un interrupteur est relié au port A1. L'action sur le poussoir fait varier la vitesse de défilement des LEDs tandis que la position de l'interrupteur permet de choisir entre deux types de défilement : LED unique qui avance ou colonne de LED. Le fichier assembleur contient tous les commentaires nécessaires à une bonne compréhension du programme et notamment du système pour éliminer les rebonds du poussoir. Les temporisations sont calculées pour un processeur à 4 Mhz.

PLATINE PIC 16 F 508

Maintenant il est temps de réaliser une carte pour porter un autre type de PIC : le 12C508. C'est un petit 8 pattes programmable une seule fois d'un coût dérisoire et bien pratique pour mettre des fonctions intelligentes sur toute sorte d'appareil. Nous l'avons déjà utilisé sur le programmateur pour commander les LEDs et inverser un signal. On va encore se passer de schéma tellement c'est simple. Un cavalier permet de choisir la fonction de la patte 4 : reset ou port.

Les composants :

2

bornier 3 vis pas de 5mm

1

bornier 2 vis pas de 5mm

1

led 3mm

1

connecteur HE10-10 mâle droit

1

support de C.I. 8 pattes

1

PIC 12C508

1

résistance 1/4W 680 Ohms

1

condensateur chimique horizontal 1 µF, 16V

1

condensateur chimique vertical 10µF, 16V au pas de 2,54

PLATINE INTERFACE SERIE

Pour pouvoir tracer et donc débugger nos programmes il serait souhaitable d'avoir une sortie écran. Nous allons donc réaliser une carte d'interface série qui permettra d'envoyer du texte sur un terminal. La prise DB9 sera reliée à un port COM du PC par un câble non croisé (Même câble que pour le programmateur) On trouve à nouveau un petit PIC pour faire clignoter nos LEDs, c'est pas indispensable mais ça fait toujours plus joli ! Voici les fichiers ASM et HEX pour le programmer. Le schéma est par ailleurs ultra simple :

Le circuit imprimé tout autant :

Et comme d'hab. la liste des composants :

2

bornier 2 vis pas de 5mm

1

support de C.I. 16 pattes

1

support de C.I. 8 pattes

1

prise DB9 femelle à 90°

1

MAX 232

1

PIC 12C508

2

led de 3mm

2

résistance 1/4W 680 Ohms

4

condensateur chimique vertical 1 µF, 16V au pas de 2,54

1

condensateur chimique vertical 10µF, 16V au pas de 2,54

1

condensateur plastique 22nF au pas de 7,62

On va faire un petit programme pour essayer ça. 1 poussoir sera relié sur le port A0 et deux LEDs sur les ports B0 & B1. Le programme contient 3 phrases qui sont envoyées à tour de rôle lorsque l'on appui sur le poussoir. La LED sur B0 s'allume pendant l'envoi. S'il y a réception d'un caractère, celui-ci est renvoyé en écho vers le PC; la LED B1 change d'état à chaque caractère reçu.  Les temporisations sont calculées pour un processeur à 4 Mhz. Si vous avez monté le 12C508 sur la carte interface, les LEDs de celle-ci signalent le trafic entrant et sortant; elles doivent aussi s'allumer un instant à la mise sous tension. Voici les fichiers ASM et HEX. Coté PC il vous faut un programme style « terminal » ou le petit programme de test que je vous ais concocté en Visual Basic 6. Le fichier ZIP (1596 Ko) contient le nécessaire pour l'installer et les fichiers sources !

PLATINE INTERFACE A TRIACS

Pour pouvoir commander des appareils en 220v il est indispensable d'avoir une interface secteur; voici donc une platine supportant 4 triacs. Un inter sur chaque entrée permet de faciliter les test avec une position ON permanente.

7

bornier 2 vis pas de 5mm

1

support de C.I. 16 pattes

1

support de C.I. 8 pattes

4

Inter inverseur

4

led de 3mm

4

triac isolé de 8A (Par exemple

4

opto-coupleur MOC3041

4

résistance 1/4W 39 Ohms

4

résistance 1/4W 330 Ohms

4

résistance 1/4W 360 Ohms

4

résistance 1/4W 2,2 KOhms

4

condensateur plastique 10nF au pas de 10,16

 1

condensateur plastique 100nF au pas de 10,16

Prochaine étape : une carte pour 16F628, mais .... c'est tout pour aujourd'hui, A tcha'o bonsoir ...

En attendant voici quelques liens sur des langages de programmation gratos pour PIC :

Le bus USB

Généralités

Le circuit d'interaface le plus documenté et apparaissant dans l'exemple de Beyond Logic est le PHILIPS PDIUSBD11. Il est introuvable en France.
Un certains nombre de composants sont disponibles aux USA chez
Arrow : PDIUSBD11D, PDIUSBD12, USBN960228M, AN2131SC, CY7C64013SC, CY7C64443PVC, CY7C64603 et 613 en plusieurs versions, embase de type B.
Pour les micro-controleurs, de nombreux livres et articles de magazine font que l'on pourrait être tenté par le PIC 16C745-JW mais l'effacement aux U.V. n'est pas des plus pratique. En France il est au catalogue d'au moins un distributeur mais environ trois fois plus cher qu'aux USA. Le AN2131SC de Cypress est également utilisé par quelques montages parus dans des revues; la documentation fournie par Cypress est impressionnante; l'U.C. est un 8051 également très connu. Ce circuit ne contient pas d'EPROM mais uniquement de la RAM. A la connexion un driver spécifique (Désigné par le VID et le PID du circuit) charge cette RAM avec le programme que l'on a écrit. Le rôle de ce driver est alors terminé, le circuit se déconnecte alors du bus puis se reconnecte avec vos propres VID et PID provoquant cette fois l'appel du driver correspondant à votre application. Cypress appelle celà la ré-énumération (On lit souvent re-numération qui me semble être une mauvaise traduction). Ce mécanisme permet un changement et une mise à jour ultra facile du firmware que vous voulez mettre dedans.
Le projet va se dérouler en quatre étapes :
- Le hard
- Le firmware
- Le pilote Windows
- Le programme d'application

C'est parti ...

1 - Le hard. ou "Etape du fer à souder"

Ayant à portée de la main un super kit d'évaluation des PICs et quelqu'un qui les maitrise (Mon frère ...) je vais commencer par une carte d'interface USB à base de PDIUSBD11 que j'interfaçerai à un PIC 16F876 (C'est l'exemple de Beylond Logic.)

D'abord le schéma; Craig conseille le pont diviseur R1 / R2 mais les entrées acceptant 5v., on pourra peut-être supprimer R2 et remplacer R1 par un strap. C5 devra peut-être passer à 6,8 µF si le bus alimente tout le montage car la norme veut que la capacité d'entrée de Vbus ne dépasse pas 10 µF au total. La ligne reset ne sera peut-être pas utilisé et dans ce cas on rammènera l'entrée "reset" à 5v. à l'aide d'un cavalier. Un autre cavalier permettra de réaliser un montage entièrement alimenté par le bus, mais attention car ce cavalier étant en place il ne faudra ABSOLUMENT PAS alimenter la platine; au contraire c'est elle qui pourra en alimenter d'autres.


 
Puis le tracé du circuit imprimé. La carte est aux mêmes dimensions que la carte du PIC. Le PDIUSBD11 étant généralement livré en boitier CMS il faudra utiliser ( ou réaliser) une petite platine de conversion CMS --> DIL. Les borniers sont au pas de 5mm (Et non de 5,08 mm)
 

La liste des composants :

3

bornier 2 vis pas de 5mm

1

bornier 3 vis pas de 5mm

1

support de C.I. 16 pattes

1

circuit USB PDIUSBD11N (Si boitier CMS, faire une platine de conversion)

1

régulateur LM 317 LZ

1

quartz 12 Mhz

2

condensateur céramique 22pF au pas de 2,54

3

condensateur plastique 100nF au pas de 7,62 ou 10,16

1

condensateur plastique 1µF au pas de 7,62 ou 10,16

1

condensateur chimique vertical 10µF, 16V au pas de 5,08

2

résistance 1/4W 22 Ohms

1

résistance 1/4W 110 Ohms

1

résistance 1/4W 180 Ohms

1

résistance 1/4W 330 Ohms

3

résistance 1/4W 4,7 kOhms

1

résistance 1/4W 10 kOhms

1

résistance 1/4W 330 kOhms

1

résistance 1/4W 680 kOhms

1

petite self d'antiparasitage torique ou perle de ferrite

1

prise USB type B

1

led 3mm

On peut commander des C.I. chez Arrow USA mais il y a environ 50 € de frais de port car ils ne savent faire que de l'express par DHL.

N'ayant pas trouvé
de PDIUSBD11 en boitier
DIL16; j'ai donc réalisé un
adaptateur pour le circuit en
boitier CMS.
Le fichier TCI

L'adaptateur se compose de deux minis circuits. Le premier reçoit après étamage le
C.I. puis on y soude 8 queues de résistance. On enfile alors le second circuit en
forçant les fils à faire un double pli et on soude ce deuxième circuit.

Le circuit est connecté de la manière suivante à un PIC 16F876 à 4 Mhz : SCL sur port RC3, SDA sur port RC4, INT sur port RB0, SUSPEND sur port RB1, RESET sur port RB2, la led sur port RB3 et un poussoir sur RB4 (Voir platine interfaces du kit PIC). Le cavalier « Power » n'est pas installé; le circuit sera donc alimenté par la même alimentation que le PIC. Notre appareil est donc de type « self-powered ».

2 - Le firmware ou "Etape de l'assembleur"

Nous pouvons maintenant charger dans le PIC le micro-programme dont voici les fichiers HEX et ASM.  (Version du 10/6/2003) Ce programme reprend pour l'essentiel la structure de l'exemple du site de Beyond Logic mais il a été écrit en assembleur (Plus exactement avec un genre de macro-assembleur, ce qui explique quelques bizarreries du fichier .ASM) et les messages envoyés sur le port série ont étés supprimés : ils prenaient trop de temps et empêchaient de respecter les délais donnés par la norme USB. Par ailleurs je me suis octroyé le VID 3333 et j'ai choisi le PID 0001. Cet exemple énumère correctement avec le driver de test tiré du DDK Windows 2000. Décompressez les fichiers testusb.sys et testusb.inf dans un répertoire de votre choix. Mettez sous tension et appuyez sur le bouton poussoir pour démarrer le PIC : Windows vous annonce qu'il a trouvé un nouveau périphérique et vous demande le driver; donnez alors le chemin du fichier .INF. Celui-ci s'installe et le bus envoie la requête « set configuration » : Miracle, la led de la carte USB s'allume. Vérifiez avec Regedit que dans la clé « HKEY_LOCAL_MACHINE\Enum\USB » vous avez bien une clé « VID_3333&PID_0001 ». Pour refaire un nouvel essai il faut supprimer cette clé, supprimer du répertoire « Windows\système32\drivers » le fichier testusb.sys, supprimer du répertoire « Windows\inf » le fichier testusb.inf et enfin supprimer du répertoire « Windows\inf\others » le fichier grandzebutestusb.inf
Microsoft nous fourni dans son DDK 2000 un programme (avec les fichiers sources) bien utile pour examiner les bus USB; voici l'exécutable en français.
Le petit programme rwbulk.exe tiré du DDK de Microsoft s'utilise dans une fenêtre DOS (Ben oui quoi !); il permet de communiquer avec notre montage. Tapez par exemple rwbulk -r 80 -w 80 -i 1 -o 0 -v pour lire et écrire 80 octets dans le tampon circulaire du PIC. Tapez rwbulk sans paramètres pour avoir une liste de ceux-ci.

3 - Le pilote ou "Etape du C++"

Pour entrer plus avant dans la réalisation d'un pilote spécifique il faut installer dans l'ordre : Visual C++ 5 (Surtout pas la version 6 !) puis le DDK de windows 2000 (Qui permet néanmoins d'écrire des drivers pour Windows 98 SE). Il semble que Microsoft ne propose plus le DDK en téléchargement; on le trouve facilement sous le nom de « Microsoft_Windows_2000_DDK_-_Driver_Development_Kit.exe » sur le réseau eDonkey. (N'installez pas eDonkey qui va planter sur votre machine des tas de pubs et de spywares très difficiles à retirer, mais utilisez plutôt eMule qui est un logiciel libre et sans pubs travaillant sur le même réseau) Visual C++ 5 devrait aussi se trouver de la même manière mais un peu plus difficilement car il ne s'agit pas de la dernière version et on trouve surtout la version 6 qui ne convient pas.
L'utilisation du DDK se fait en mode ligne de commande. Ouvrez une fenêtre DOS à l'aide du menu « Development Kits / Windows 2000 DDK / Free Build Environment » qui a été créé lors de l'installation du DDK; cela positionne des variables globales nécessaires au compilateur. A l'aide du DOS, déplacez vous vers le répertoire qui contient votre projet, puis tapez « BUILD ». Cela compile tous les projets du répertoire ET des sous-répertoires (Attention, si vous tapez BUILD en étant à la racine du DDK, vous allez compiler tous les exemples du DDK : compter une bonne demi-heure sauf interruption par Ctrl-C). N'utilisez que des noms courts (8 caractères) pour les répertoires et les fichiers. L'édition des fichiers se fait avec un simple éditeur (J'utilise Web Expert qui a l'avantage de numéroter les lignes et de supporter des signets bien pratiques ou Visual Studio qui offre l'avantage de la coloration syntaxique). Le fichier exécutable se retrouve dans le sous répertoire « objfre\i386 »
Deux points de départ sont possible : bulkusb, l'exemple du DDK de Microsoft ou EzUsb l'exemple de Cypress. Je vais utiliser celui-ci; il passe sous silence un certain nombre de fonction du "power management" et surtout évite l'emploi des horribles GUIDs inventés par un esprit tordu ! Je préfére en effet que mon driver ait un nom plus parlant qu'un nombre de 128 bits totalement abstrait.
Je suis en cours de traduction est d'écriture ..... vous pouvez aller vaquer à vos occupations habituelles car pour aujourd'hui c'est tout ...