trucs

Quelques petits trucs utiles




cable pour programmer les mcu directement sur la plaquette de dévellopement sans soudure

Les plaquettes de prototypage sans soudure sont basées sur un grille à pas de 0,1po. (2,54mm) en utilisant des header pins de même espacement, 2 sections de 6 broches qu'on soude à chaque extrémité d'un cable plat de 15cm on peut connecter le pickit directement sur la plaquette de montage. J'ai enrobé les soudures sur les connecteurs avec de la colle chaude pour éviter que ça brise continuellement (strain relief). Il ne reste qu'à relié les broches du mcu aux broches du connecteur avec des jumpers comme illustré ici.

J'utilise aussi ce genre de connecteur pour différent composants comme les hauts-parleurs que je branche à la plaquette de prototypage. C'est plus propre et plus fiable que de planter des jumpers dans la plaquette relié au composant par des fils à pince alligator.



overclocking

Les MCU PIC qui ont un oscillateur interne ont aussi un registre de calibration de cet oscillateur appellé OSCCAL. Hors j'ai vérifié à quelle fréquence l'oscillateur fonctionne si on met la valeur maximale dans OSCCAL. A ma surprise j'a découvert que ça dépassait la valeur nominale de 29% sur un PIC10F202, l'oscillateur fonctionnait au dessus de 5Mhz au lieu de 4Mhz. Pas mal comme overclocking.



Modulation de fréquence

Puisque la valeur de OSCCAL peut-être modifiée lors de l'exécution d'un programme, ça ouvre la porte à de la modulation de fréquence. Par exemple pour les PIC10F2xx si le bit 0 de OSCCAL est 1 Fosc/4 est sortie sur GP2. En modifiant la valeur de calibration de l'oscillateur en gardant le bit 0 à 1 on peut moduler en fréquence la sortie sur GP2. En connectant une antenne sur GP2 on obtient ainsi un émetteur FM à 1Mhz. Un circuit LC accordé sur cette fréquence va supprimer les harmoniques.



Comment souder des composants ultra-miniatures

Le PIC10F202-I/OT est une version en boitier SOT23-6 du PIC10F202. Ce boitier en fait sans toute le plus petit microcontroleur sur le marché, à peine 3mm de longueur. Essayer de souder ces micro-composants de surface avec un fer avec une pointe conique de 5mm est pratiquement impossible. Confronté à ce problème j'ai eu l'idée d'enrouler un fil de cuivre 24 AWG atour de la pointe et de souder avec l'extrémité du fil.

Voici la photo d'un PIC10F202-I/OT soudé sur un schmartboard, la règle en mm illustre bien la petiteste du composant. J'ai aussi utilisé une loupe sur pied avec éclairage intégré pour faire le travail. Même de cette façon ce n'était pas si facile.

mise à jour 2012-04-20

Hier j'ai découvert un site très intéressant en anglais. Il y a entre autre 3 vidéo sur les outils et techniques de soudure. Même si vous ne comprenez pas l'anglais vous pouvez visionner les 2 derniers, ça vous sera très utile si vous êtes un débutant dans la soudure de composants électroniques.

vidéo 1 sur les outils et produits à utiliser

vidéo 2 sur la soudure des composants classique (à travers trou).

vidéo 3 sur ls soudure des composants montés en surface.





rangement des pièces miniatures

Je me demandais dans quel genre de classeur je pourrais mettre les composants miniatures tel que ceux utilisé en montage en surface. Il m'est venu à l'idée qu'un classeur de médicaments ferait très bien l'affaire. Pour moins de 5$ j'en ai trouvé un à 14 comportiments.


Un autre bon truc que j'ai découvert sur le site Hackaday.com est l'utilisation d'envelloppes #10. Avec les composants miniatures comme les SMD c'est très pratique et ça coûte pas cher. dans une boite de plastique rectangulaire de la largeur d'une enveloppe et de 12" (30cm) de profondeur on peut classer une grande quantité d'enveloppes.





déboguer sans débogueur

vous débutez et vous n'êtes pas encore certain de persévérer dans la programmation des MCU, donc vous ne voulez pas investir trop d'argent. Vous avez acheter le programmeur le moins coûteux ou bien vous en avez construit un à partir d'un schéma trouvé dans l'internet. Mais comment allez-vous déboguer votre code?. Si vous travaillez sous windows je vous suggère d'utiliser MPLAB plutôt que MPLABX1 car le premier à un simulateur que n'a pas le deuxième et c'est très utile comme outil de déboguage. Mais il y a d'autre façons de se débrouiller sans débogueur ou simulateur. Utilisez ce qui vous avez sous la main dans votre projet. Si votre projet contrôle une DEL par exemple, en phase de déboguage utilisez là comme indicateur. D'abord définissez une constante DEBUG comme ceci au début de votre fichier source.
#define DEBUG
Ensuite encadrez vote code de déboguage comme ceci:
#ifdef DEBUG2
;code de déboguage ici
#endif
Lorsque vous avez terminer le devellopement vous commentez la ligne #define DEBUG de sorte que toutes les lignes de codes qui sont entre des #ifdef DEBUG et #endif ne seront pas inclus dans la version finale.

Si une broche E/S est disponible vous pouvez l'utiliser aussi temporairement pour contrôler une DEL ou encore écrire une routine de communication sériel et envoyer de l'information à un émulateur de terminal RS-232 installé sur votre PC. Ça demande plus d'espace code mais c'est l'outil le plus utile après un débogueur en circuit. Les PIC les plus simples sont les plus difficiles à déboguer car il n'y a pas beaucoup d'espace programme disponible pour écrire du code de déboguage ni d' E/S pour envoyer de l'information vers votre ordinateur de dévellopement. Mais il y a toujours moyen de se débrouiller.3





Quand on manque de RAM


Vous écrivez un programme sur un MCU qui a très peut de RAM et vous vous rendez-compte qu'il manque d'espace pour une variable que faire.

classe de variables

Avez-vous vraiment besoin de toutes ces variables? Il y a 2 types de variables, celle qu'on appelle globales, on une durée de vie égale à celle du programme. Il y a les variables locales qui sont utilisées pour enregistrer des états temporaires par une sous-routine ou une partie du code. Pour ces variables il faut réserver 2 ou 3 octets appellés temp.

.appvar udata
temp res 3 ; réserve 3 octets pour les variables temporaires.

On réutilise toujours les mêmes variables locales dans les différentes sous-routines en s'assurant évidemment que 2 sous-routines différentes n'utilisent pas la même variable en même temps. Si sr1 utilise temp et que sr1 appelle sr2
il ne faut pas que sr2 utilise temp mais plutôt temp+1.

Des bits pour les booléens

On n'utilise pas un octet complet pour un seul indicateur booléen. Un variable qui n'a que 2 états (variable booléenne) doit-être conservée dans seul bit. Ainsi on peut avoir jusqu'à 8 variables par octet.

;;; variables booléennes
F_MTRON EQU 0 ; moteur en rotation
F_BTNDN EQU 1 ; bouton enfoncé.
;... etc.
.appvar udata
flags res 1 ; octet réservé pour les variables booléennes
.appcode code
;; ....
btfss flags, F_MTRON ; est-ce que le moteur est en rotation
goto motor_off ; non il et en arrêt.
; oui il est en rotation
arrete_moteur
bcf PORTA, RA0 ; sortie moteur sur RA0
bcf flags, F_MTRON ; on indique que le moteur est maintenant arrêté.
;...

Registes spéciaux non utilisés

Certains périphériques ont des registres spéciaux qui peuvent-être écris et lu.
Par exemple si votre MCU a de la mémoire EEPROM mais que votre programme ne l'utilise pas vous pouvez utiliser les registres EEADR et EEDATA pour stocker 2 variables de 1 octet chacune.



Échanger le contenu de 2 registres

S'il arrive que dans un programme écris en assembleur on veuille échanger le contenu de 2 registres RAM la première idée qui vient à l'esprit est la suivante:

movfw r1
movwf r3
movfw r2
movwf r1
movfw r3
movwf r2

6 instructions et l'utilisation d'un 3ième registre. Il y a une meilleure façon de faire qui n'utilise que 5 instructions et pas de 3ième registre.

movfw r1
xorwf r2, F
xorwf r2, W
xorwf r2, F
movwf r1




NOTES:
1) Cette information n'est plus valide. Depuis que MPLAPX est sortie en version finale il possède un simulateur de plus il fonctionne aussi bien sous linux que windows. MPLABX est disponible gratuitement et je le recommande.

2) Il existe déjà une variable __DEBUG de defini dans MPLABX lorsque le projet est compilé pour le débuggage donc inutile de définir DEBUG utilisez plutôt #ifdef __DEBUG

3) Microchip vend des version avec support matériel pour déboggage de ces MCU qui n'en possède pas d'emblé même le plus petit d'entre le PIC10F200 a un version avec support pour débuggage en circuit. Évidemment pour l'utilisé il faut un débugger en circuit $$.




Branchement conditionnel en assembleur

Pour quelqu'un qui a l'habitude de travailler en 'C' ou autre langage de haut niveau, il peut-être embêtant de reproduire les structures décisionnelles qu'on retrouve dans ces langages en assembleur. Prenons l'exemple du switch en 'C'. Comment le reproduire lorsqu'on programme en mpasm.

On peut se faire 2 petites macros pour rendre ça plus lisible.



carton ondulé comme support

Vous cherchez un support pour servir de plateforme à un montage. Avez-vous pensez au carton ondulé utilisé pour fabriquer les grandes boites? Ce type de carton est résistant à la flexion dans un seul sens mais si on colle 2 morceaux l'un sur l'autre en prenant soin de mettre les ondulations d'un carton perpendiculaire à l'autre carton on obtient une bonne résistance à la flexion dans les 2 sens tout en conservant la légèreté. Cependant ce matériau n'est pas très résistant à la compression mais il y a moyen d'augmenter cette résistance en remplissant les alvéoles avec de la paraffine. Je fais fondre de la paraffine dans une assiette d'aluminium et je trempe le carton dans celle-ci. La paraffine fondue emplie les alvéoles et lorsqu'elle durcie on obtient une bonne résistance à la compression. Voici un disque destiné à servir de plateforme robot construit de cette façon.



Enroulée une inductance avec uniformité

Petite découverte que j'ai faite aujourd'hui en regardant un film sur youtube (a 2:20minutes). J'ai eu souvent à enrouler une inductance (self) pour fabriquer un circuit radio-fréquence. Je me suis toujours demander comment les enrouler pour que les spires soient espacées régulièrement. Ce vidéo m'a appris comment le faire. C'est tellement simple que je me demande pourquoi je n'y avais pas pensé. Il suffit de prendre un boulon du diamiètre que doit avoir l'inductance et d'enrouler le fil émaillé dans le creux des filets du boulon. Une fois la self de la longueur voulue il suffi de dévisser le boulon.