Dernièrement j'ai entrepris d'étudier les particularités du PIC10(L)F3221. J'ai commencé par me fabriquer un platine d'expérimentation. Il y a quelques temps j'ai vue sur le site Hackaday.com2 une platine d'expérimentation conçu avec une platine à oeillets 100mil et un MCU ARM en format QFN. Je me suis dit que le gars qui avait fait ça devait-être très patient. Mais aussi que s'il l'a fait je devrais être capable de le faire aussi. Mais pour un premier essai j'ai choisi un MCU beaucoup plus modeste, soit un PIC10LF322-E/MC en format 8 DFN. Le DFN est semblable au QFN sauf que les contacts ne sont que sur 2 côtés au lieu des 4. Le boitier mesure à peine 2x3 mm et l'espace entre le centre d'un contact et son voisin n'est que de 0,5mm.
La pointe de mon fer à souder fait plus d'un mm au plus étroit, difficile de ne pas faire de pont d'étain entre les contacts. Je me suis donc retrouvé avec 1 pont d'étain de chaque côté qui reliait tous les contacts. Pas de panique, que je me suis dit, la pompe à dessouder va régler ça. Et effectement j'ai réussi à enlever le surplus d'étain simplement avec la pompe à dessouder.
J'ai installé sur la platine côté MCU des broches qui vont me permette de brancher le pickit 3 ainsi que de relier avec des cavaliers les E/S à différents composants comme la LED RGB et le bouton momentané installé sur l'autre face de la platine.
Ma méthode pour souder le MCU est la suivante.
- Collé le MCU sur la platine avec une goûte de colle rapide locktite.
- Souder 6 fils no. 30 AWG sur les oeillets entourant le MCU.
- Couper les fils juste de la longueur nécessaire pour qu'ils touchent le contact qui leur est destiné.
- Mettre du tack flux sur les contacts
- Souder avec un fil d'étain ultra fin.
- Utiliser la pompe à dessouder pour enlever le surplus d'étain qui fait pont entre les contacts
- Souder un fil sur la plaque de métal au centre du boitier et à un oeillet qui sera relié au V- de l'alimentation.
schéma de la platine
Des périphériques spéciaux
Le PIC10(L)F322 possèdent des périphériques qu'on ne voit pas souvent sur les MCU:
- 1 générateur de fréquence numériquement programmable NCO
- 1 cellule logique configurable CLC
- 1 générateur d'onde complémentaire CWG
objet de cette expérience:
- exemple d'utilisation du périphérique CLC
- exemple d'utilisation du périphérique NCO
- exemple d'utilisation du périphérique CWG
CLC
Le périphérique CLC est celui qui m'a demandé le plus de réflexion qu'en à l'usage que je pourrais en faire. Dans cette première expérience. J'ai branché l'anode rouge de la LED RGB sur RA0, la verte sur RA1 et le bouton momentané sur RA2. le programme s'appelle ColorSweep car il s'agit de faire varier progressivement l'intensité des 2 couleurs à l'inverse l'une de l'autre. C'est à dire que lorsque l'intensité de l'une augmente celle de l'autre diminue. On a donc un balayage de couleur qui passe progressivement du rouge au vert en passant par le jaune. Mais le logiciel comprend aussi un mode flipflop ou on passe du vert au rouge alternativement sans progression. Le rôle du bouton momentané est de faire passé le logiciel d'un mode à l'autre.
Dans cette expérience le CLC est utilisé pour filter les rebonds du bouton plutôt que ce soit fait en software. Pour configurer le CLC j'ai utilisé l'outil graphique fournis par Microchip: CLC designer. La capture d'écran suivante présente la configuration utilisé.
table de vérités | |||||
---|---|---|---|---|---|
GATE 1 | GATE 3 | ||||
RA2 | NCO | Fb | RA2 | NCO | Fb |
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 1 |
Par application du théorème de De Morgan
Fb(GATE 1) = ~RA2 ET ~NCO = ~( RA2 OU NCO )
Fb(GATE 3) = RA2 ET NCO = ~ ( ~RA2 OU ~NCO)
Dans cette configuration la CLC est configuré comme un SR lacth le signal du bouton qui est branché sur RA2 passe par GATE 1 et le gate OU pour atteintre l'entrée S(et) du SR latch. L'entrée R(eset) et activé par un pulse qui provient du périphérique NCO qui est programmé pour produire ce pulse à toutes les 50msec.
Cependant dans le cas d'un SR lacth les entréres S et R ne doivent jamais se retourvé au niveau 1 en même temps sinon l'état de la sortie Q serait imprévisible. Donc j'utilise une configuration logique sur GATE 1 et GATE 3 pour que les 2 signaux se bloquent mutuellements. Cette configuration fait en sorte que pour que le S(et) passe à 1 il faut que les 2 entrées du GATE 1 soient à zéro. Mais je ne veut pas non plus que le pulse en provenance du NCO R(eset) le latch tant que le bouton est enfoncé (RA2=0) la sortie du GATE 3 doit donc passé à 1 seulement lorsque RA2=1 et que la sortie du NCO=1.
NCO
Le générateur de fréquence numériquement programmable utilise un accumulateur, un additionneur et un incrément et est alimenté par un signal d'horloge. A chaque impulsion reçu de l'horloge la valeur de l'incrément est ajouté au contenu de l'accumulateur et lorsque l'accumulateur déborde la sortie du NCO génère un pulse.
La fréquence de ce pulse dépend de la fréquence du signal d'horlogue et de la valeur de l'incrément. Plus l'incrément est petit plus il faut d'additions pour faire déborder l'accumulateur et vice-versa. On modifie donc la fréquence des pulses en modifiant la valeur de l'incrément. Ce pulse de sortie peut-être utilisé pour faire basculer un flipflop. Dans ce mode la sortie du flipflop est une onde carré (duty cycle = 50%) dont la fréquence est la moitié de celle à la sortie NCO. Mais le NCO peut aussi être programmé en mode impulsion. Dans ce cas chaque débordement produit une impulsion dont la durée est programmable de 1 à 128 périodes d'horloge.
Dans cette exemple le NCO est été programmé en mode impulsion dont période de répétition est de 50msec. Sa fonction est de remettre à zéro la sortie du SR latch dans le CLC.
CWG
Le générateur d'onde complémentaire prend simplement à son entrée un signal rectangulaire et produit 2 sorties complémentaires, c'est à dire lorsqu'une sortie est à 1 l'autre est à zéro et vice-versa. Mais en plus il est possible de programmer un temps mort au début et à la fin des changements d'états. Temps mort pendant lequel les 2 sorties sont dans le même état. Ce type de générateur est utile pour généer des signaux en opposition de phase pour alimenter des moteurs pas à pas ou encore des ponts en H et autres applications du genre.
Dans cette exemple je m'en sert en conjonction avec le périphérique PWM1 dont la sortie alimente le CWG pour contrôler l'intensité de 2 LED de façon complémentaire. C'est à dire que lorsque l'intensité de la LED verte augemente celle de la rouge diminue et vice-versa.
le code assembleur pour réaliser cette expérience se retrouve ici.
NOTES:
1) Attention le PicKit 2 ne semble pas en mesure de programmer le PIC10F322, en tout cas ça n'a pas fonctionné pour moi dans mplabx, j'ai du utilisé le pickit 3.
2) Je ne retrouve malheuresement pas cette entrée sur le site.
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.