lundi 30 avril 2012

infidélidé

Comment aurais-je pu résisté à la tentation, une platine de dévellopement complète incluant le cable USB et 2 microcontroleurs 16 bits pour moins de 5$ chez digikey.ca. Je l'ai reçu la semaine dernière. Le temps de téléchager et d'installer CCS5 et j'étais déjà prêt à programmer en C. tout ça pour moins de 5$, wow!! j'en reviens tout simplement pas. Texas Instruments veux vraiment conquérir le marché avec le MSP430. Curieusement sur le site de Digikey on montre 2 MCU 14 broches alors que ceux que j'ai reçu avec le kit ont 20 broches: MSP430G2553 et MSP430G2452

J'avoue que je n'en suis pas à ma première infidélité j'ai aussi un AVR butterfly qui traine quelque part. Mais ces 2 infidélités n'ont pas encore été consommées, j'ai encore plusieurs idées de projets pour les PIC, compléter MicroSimon. Fabriquer un capacitance-mètre. Fabriquer un outil de débogage simple utilisant 5 DEL et 1 PIC12F509 recevant l'information par une seule connexion du PIC en dévellopement au lieu de 2 comme mon afficheur binaire actuel. Aussi un jeux de TIC-TAC-TOC 3D de 4x4x4DEL bi-couleur. J'ai toujours plus d'idées que de temps pour les réaliser alors peut-être que l'AVR butterfly d'Atmel et le launchpad de TI vont attendre longtemps. Je devrai alors créé un blog avec un nom plus général ou changer le titre de celui-ci.

dimanche 29 avril 2012

Il faut s'adapté

Lorsque j'ai débuté en électronique ces petits composants en surface n'existaient pas encore, mais il faut s'adapté même lorsqu'on est un dinosaure. Mais parfois c'est le moderne qu'il faut adapté à l'ancien. Cet avant midi je me suis donc fabriqué (gossé comme on dirait au Québec) un adapteur pour utiliser un PIC10F202-I/OT (SOT23-6) sur une platine de prototypage sans soudure. Souvent les circuits imprimés des appareils électroniques ont de grandes surface en cuivre qui servent de ground plane. Comme je suis un récupérateur, et que j'avais en main un petit morceau d'un tel circuit, je me suis dis que c'était l'occasion de m'en servir. J'ai donc tracé avec un feutre à pointe ultra fine et une règle les lignes où je voulais couper le cuivre. Pour enlever le cuivre je me suis servie de la pointe d'un exacto1. Comme la couche de cuivre est mince et que le cuivre est un métal beaucoup plus moue que l'acier, le travail n'a pas été si difficile et je suis satisfait du résultat2. J'ai d'abord tracé une ligne centrale qui m'a servie de repère. Ensuite j'ai positionné les trous pour les broches des connecteurs 100Mil. 2 Rangées de 3 espacées de 300Mil. Pour le SOT23-6, je l'ai positionné au centre et j'ai marqué le vernis vert avec la pointe de l'exacto entre chaque broche pour me faire des repères. Une fois le cuivre coupé et la pièce de circuit imprimé coupé juste de la grandeur nécessaire, il ne restait plus qu'à souder le PIC10F202-I/OT et les connecteurs 100Mil. souder le MCU a été très facile. On positionne le MCU en place en le fixant avec du ruban adhésif en laissant un côté libre. Ensuite on se sert d'un fil d'étain très fin (moins de 0,5mm). On ne touche pas aux broches du MCU avec le fer à souder. On pose simplement la pointe du fer sur le cuivre et on met bout du fil d'étain en contact avec la broche et le cuivre. A piece of cake comme on dirait en anglais, beaucoup plus simple que de souder des fils aux pattes d'un SOT23-6. Lorsque le premier côté est fait il suffit d'enlever le ruban et souder l'autre côté.
Voici donc le résultat final. Il va s'en dire que tout ce travail a été fait sous une grosse loupe.

PIC10F202-I/OT (pas de produit chimique pour dissoudre le cuivre, juste la pointe d'un exacto pour gruger le cuivre. La séparation centrale plus large a été faite avec la lame de couteau de poche.)
L'adapteur installé sur la platine de prototypage sans soudure.
Dimension de l'adapteur: 400Mil x 400Mil.
C'est environ la moitié de la surface des adapateurs vendus par Schmartboard.

Pour m'assurer que c'était fonctionnel j'ai fait un test en y programmant hello-del avec succès.


NOTES:
1) Exacto est le nom couramment utilisé au Québec pour désigner un petit couteau à lame triangulaire très fine. Cet outil est fréquemment utilisé par les artistes pour découper des feuilles de papier pour faire du montage photo par exemple.
2) Il ne faut pas chercher à couper le tracé en le suivant d'un bout à l'autre. La technique qui fonctionne le mieux est de faire un aller retour très court avec la pointe de l'exacto jusqu'à ce que cette partie du cuivre soit complètement disparue. On progresse ainsi par segments très courts jusqu'au bout du tracé.

samedi 28 avril 2012

MicroSimon schéma et montage

Le schéma électronique est encore plus simple que celui du PocketSimon. Pas de transistor, mis à part le MCU seulements des composants passifs.

vous vous étonnerez peut-être de voir que les boutons utilisent les même broches que les DELs. Ne risque-t'il pas d'y avoir court-circuit sur la broche lorsque la DEL est éteinte et que l'utilisateur presse un bouton. L'astuce ici est que la broche n'est jamais en sortie haute. Pour éteindre la DEL on met simplement la broche en mode entrée ce qui permet en même temps de faire la lecture du bouton. Donc la broche prend seulement 2 états: Sortie niveau bas ou entrée haute impédance. Évidemment chaque fois que l'utilisateur presse un bouton la DEL en série avec le bouton s'allume mais celà ne pose pas de problème pour cette application.

montage

Au départ j'avais prévu faire le montage sur une minuscule platine d'un pouce de côté, mais cette espace s'est avéré insuffisant. Le montage final est sur une platine 1-1/2" de çôté. Ce qui m'a permis d'utiliser de gros boutons de couleurs différentes. Malheureusement je n'avais pas de bouton jaune. J'ai donc opté pour un blanc. Encore un fois le plus difficile aura été de souder des fils au pattes du PIC12F675 format SOIC-8. Quand même plus facile que sur un SOT23-6. Il faut que je trouve une meilleure méthode pour ce travail.

C'est la première fois que je fais le dévellopement logiciel sur un montage final. Habituellement je fais un montage sur platine sans soudure. Première remarque j'aurais du inclure des points de test sur la platine pour brancher multimètre, sonde logique ou oscilloscope au besoin.
Je suis donc rendu à la dernère étape, concevoir le logiciel.

mardi 24 avril 2012

projet MicroSimon

Voici mon prochain projet, inspiré de celui de Simon Inns. Une nouvelle version du jeux Simon mais encore plus compacte.
Alors que celui de Simon Inns est construit autour d'un PIC12F683, programmé en C et monté sur un circuit imprimé spécifique, le mien sera construit autour d'un PIC12F675, progammé en assembleur et monté sur une platine de 1" de côté acheté chez Robotshop.ca.
Je vais essayer d'utiliser un mininum de composants:

  • 4 DELs de couleurs différentes
  • 4 résistance 1k 1/8 watt en série avec les DEL
  • 4 petits boutons poussoirs
  • 1 petit haut-parleur de 8ohm
  • 1 condensateur 10uF en série avec le haut-parleur
  • 1 résistance de 100ohm 1/8watt en série avec le haut-parleur
  • 1 support pour pile lithium CR2024
  • 1 condensateur céramique de 100nF pour le filtrage alimentation
  • 1 platine de prototypage Sparkfun PRT-08808
  • 1 PIC12F675 en boitier SOIC

présentation du PIC12F675

Le PIC12F675 est un microcontrolleur de milieu de gamme (mid-range). Voici un tableau comparatif avec un PIC de base:

paramètregamme de basemilieu de gamme
longueur instruction12 bits14 bits
nombre d'instructions3335
pile des retours2 niveaux8 niveaux
interruptionnonoui
Les caractéristiques spécifiques au PIC12F675 sont les suivantes:
  • oscillateur interne 4Mhz précision 1%
  • 1024 instructions machine
  • 64 octets de SRAM
  • 128 octets de EEPROM
  • 1 timer 8 bits
  • 1 timer 16 bits
  • 1 comparateur
  • 1 convertisseur A/N 10bits sur 4 entrées
  • 5 broches programmables comme entrée ou sortie digitale, GP0,GP1,GP2,GP4,GP5
  • 1 broche en entrée digitale seulement GP3


Puisque le PIC12F675 a 2 fois plus de mémoire programme que le PIC10F202 je vais ajouter une fonctionnalité supplémentaire sous la forme d'une deuxième option jeux. Dans cette option à chaque étape une séquence aléatoire complète sera générée plutôt qu'une seule note supplémentaire ce qui va rendre le jeux plus difficile. Le support d'interruption va me permettre de créer une minuterie incrémentée à chaque milliseconde et la fréquence des notes musicale sera aussi contrôlée par interruption. La mélodie de victoire sera enregistrée dans la mémoire EEPROM plutôt que dans la mémoire programme. Je vais possiblement ajouter une interface RS-232 permmettant de modifier le contenu de cette mémoire EEPROM (à voir).

Au niveau matériel le nombre E/S va me permettre d'utiliser une sortie dédié pour le haut-parleur contrairement à mon projet pocketSimon qui partageais cette sortie avec le transistor de vidage du condensateur de lecture des boutons.

Je vais installer un connecteur ICSP1 pour la programmation directement sur la platine. si j'implémente le RS-232 pour la programmation eeprom, je pourrais utiliser GP3 et une autre broche qui va sur le connecteur ICSP pour la sortie RS-232. Avec cette configuration je n'aurais pas besoin d'un connecteur supplémentaire pour assurer la communication RS-232. Il suffirait alors d'utiliser un adapteur comme celui-ci et un cable USB pour faire le branchement avec l'ordinateur.

prochaines étapes

  1. desssiner le schéma électronique dans kiCAD
  2. dessiner le schéma de montage sur platine dans msPaint
  3. faire le montage sur la platine
  4. développer le logiciel et programmer en circuit


NOTES:
1) ICSP signifie In Circuit Serial Programming. Ce qui se traduie par Programmation sérielle En Circuit.

samedi 21 avril 2012

montages des circuits

Ajourd'hui je vais présenter les différent types de platines de prototypage disponible sur le marché. Certains fabriquent leur propre circuit imprimé mais personnellement je ne vois pas l'intérêt de faire ça si c'est pour fabriquer un seul exemplaire du circuit. Et si vous voulez fabriquez plusieurs exemplaires, des compagnies comme BatchPCB peuvent vous les fabriquer en double face à un prix très abordable. Quoi qu'il en soit si vous voulez le faire vous trouverez dans l'internet toute l'information qu'il faut. Il y a de nombreux vidéos sur youtube à ce sujet.
Je ne parlerai pas ici des platines de prototypage sans soudure ni des adapteur CMS/DIP1 mais seulement celles qu'on utilise pour faire un montage final.

Pour faire un montage sur platine de prototypage et joindre les composants entre eux il faut soit ajouter des conducteurs ou en soustraire. Donc je parlerai ici de platine additive ou soustractive.


Platine à bandes

Les platines à bandes (stripboard) de cuivre percé d'un trou à tout les 100mil ont été popularisé par la compagnie Vector electronics & technologies dans les années 197x et sont d'ailleurs popularisées sous le nom de Vectorboardr même si ajourd'hui elles sont vendues sous différentes marques.

Ces platines sont addivitive/soustractive. Les ronds noirs sur la photo représentent les endroits où une bande a été coupée (soustraction de conducteur). De plus pour la majorité des montages il faut ajouter des ponts conducteurs (jumpers) d'une bande à l'autre. Si le montage utilise des circuits intégrés DIP ils doivent-être montés perpendiculairement aux bandes et il faut couper toutes les bandes entre les broches d'un côté du CI et celles de l'autre. Il est préférable de faire un dessin sur papier quadrillé du montage en indiquant bien la position des composants, l'endroit où on coupe les bandes ainsi que l'endroit ou on doit ajouter des ponts.
Personnellement je ne suis pas un fan de ce genre de platine. Il y a trop de coupage de bande à faire et un oubli peut causé un court-circuit. Par contre il est facile de se faire des bus d'alimentation avec ce genre de platine.

platine à bus

Ce que j'appelle des platines à bus sont des platines à bandes organisées de façon particulières pour facilité le montage des circuits intégrés de type DIP. Ces platines sont essentiellement additives. Il est rare qu'on a besoin de couper un bande.

droids.it 990.101

La configuration est très semblable à celle d'un platine de prototypage sans soudure avec des bus d'alimentation de chaque côté et au centre un endroit pour mettre les CI. Ce modèle comprend à chaque extrémité des pads double trou très utile pour installé des connecteurs 100mil. Ce modèle est de bonne qualité car les pads de soudure sont disponible sur chaque face de la plaquette. On peut donc monter des composants sur les 2 faces.
Seul inconvénient si on doit remplacé ou déplacé un composant il difficile de le désoudé sans endommagé le pad.
Personnellement je préfère ce genre de platine au modèles à bandes qui font la longueur de la platine.

platine à pads disjoints

Ces platines sont constituées d'un ensemble de trou généralement espacés de 100mil et entourés d'un pad pour la soudure. Sur les platines de meilleurres qualité il y a un pad de soudure sur chaque face avec le conducteur traversant la plaque. Ces platines sont totalement additives puisque tous les pads de soudures sont isolés les uns des autres. Il y différente disposition pour les trous. Sur certains modèles les trous sont tous alignés comme un quadrillage sur d'autres chaque rangé est décalée de la suivante par 50mil.

Sparkfun PRT-08619


Ce type de platine est celle qui permet la plus grande souplesse dans la disposition des composants mais elle requière beaucoup plus de travail au montage. Tous les ponts entre composants doivent-être créés à la main et les bus de la même façon. Cependant si les conducteurs des composants à travers trous sont suffisamment petits on peut en insérés deux dans le même trou. Une autre technique consiste à replié le conducteur du composant sur la surface et à le soudé sur le nombre désiré de pads adjacents sans pour autant bouché les trous.

platine à quadillage

Ces platines sont exactement à l'opposé des précédentes, tous les pads de soudures sont reliés entre eux par un conducteur et l'ensemble forme un quadrillage. Ces platines sont donc soustractives.

Sparkfun lilypad DEV-09101

La majorité des soudures à faire sur ces platines sont celles des composants mais il faut couper de nombreux conducteurs pour isoler les différentes parties du circuit. Il est possible qu'il faille aussi créer des ponts puisque le système est simple face.
Le danger est de créer des court-circuits en oubliant de couper certains conducteurs. Il est essentiel de se faire un plan sur une feuille quadrillée en repérant tous les liens à couper.

Pour ceux qui préfèrent le coupage de conducteurs à la soudure...

platine pour composants en surface

Il existe aussi des platines pour le montage de composants en surface ou encore mixte. Schmartboard en offre une grande variétée.

Schmartboard 202-0004-01

La photo illustre un modèle pour les SOIC à espacement de broche de 50mil. Cette platine a aussi des pads pour les composants 0603 et à travers trou. Ce système est esentiellement additif.
Il existe aussi des modèles pour les CI au format QFP.
Schmartboard 202-0009-02

C'est un produit intéressant. Ce système a cependant un inconvénient, les pads de soudure du CI sont tellement long qu'on perd une bonne partie de l'avantage des montages en surface qui est la densité élevé des composants.
Beaucoup d'espace perdue de chaque côté du CI et si c'est un QFP c'est encore pire.



notes

1) adapteurs de composants en surface à composant à travers trou espacement 100mil. Comme ceux vendu par Schmartboard.

samedi 14 avril 2012

vérificateur de continuité

Un vérificateur de continuité peut-être réalisé simplement avec 3 transistors et quelques composants passif comme ici. On peut faire encore plus simple avec seulement 2 transistors. Dans le circuit ci-haut si on supprime le BC547 de gauche et qu'on branche les fils de la sonde entre la résistance de 100k et la base du BC547 qui reste la constante de temps devient 10nF*(100k+Rsonde). Cependant le fonctionnement sera différent. La version 3 transistors indique véritablement la continuité à faible réristance par une tonalité de fréquence fixe. La version à 2 transistors donne une tonalité variable dont la fréquence varie à l'inverse de Rsonde. Tonalité haute à basse résistance et qui décrois lorsque la résistance au bornes des sondes augmente.

Le projet que je décris ici propose les 2 modèles de vérificateur en un seul appareil. J'ai utilisé un PIC10F202-I/OT (boitier SOT23-6) monté sur un schmartboard pour travailler sur la plaquette de prototypage sans soudure. Le vérificateur double mode compacte est conçu pur fonctionnier avec 3 piles boutons LR44.
caractéristiques
  • bouton de sélection de mode:
    1. conitinuité faible résistance, tonalité ~1Khz
    2. conversion résistance/fréquence inversement proportionnel
  • indicateur visuel à DEL
  • mise en mode sommeil faible consommation automatique après 1 minute d'inactivité.
shéma du circuit

On évalue la résistance aux bornes de la sonde en comptant le temps de charge du condensateur C2. La constante de temps étant C2*(R3+Rsonde). Pour évaluer la conductivité à une faible valeur de résistance il fallait que R3 soit suffisamment petit ce qui impliquait de grossir la valeur de C2 pour avoir une constante de temps d'au moins 1 milliseconde. D'après mes expérimentations, avec une alimentation de 5Volt et les valeurs du schéma on obtient un temps de déclenchement de 330 micro-secondes lorsque les connecteurs de la sondes sont en court-circuit. La résistance de 100ohm en série avec le haut-parleur de 8 ohm limite le courant sur la sortie GP0. Il est inutile d'avoir sur cette sortie une résistance plus faible car de toute façon le circuit de protection du PIC limite le courant à 25Ma. Avec cette résistance le niveau sonore est suffisant. Je songe à installer le montage dans un tube de 20mm ou 25mm de diamètre.
code source

lien google docs vers la dernière révision vérificateur-de-continuité.asm

En mode continuité (MODE 1), la constante SHORT détermine le temps de charge maximal pour la détection d'un court-circuit. Malheureusement cette valeur est déterminée par essaie-erreur et chaque fois qu'elle est changée on doit reprogrammé le PIC. Cette valeur dépend de la valeur du condensateur ainsi que du voltage d'alimentation. Il faut donc prévoir l'usure des piles. Lorque le voltage des piles diminuent le temps de charge augmente. Cette valeur est un compromis. Si on met une valeur trop grande on va détecter un court-circuit pour une valeur de résistance non négligeable, par exemple 100 ohm. Si on la met trop basse le circuit ne détectera pas le court-circuit lorsque le voltage de la pile va diminuer. Il m'a donc fallu modifier plusieurs fois la valeur avant d'arriver à un résultat que je considère comme satisfaiant. Avec la valeur que j'ai choisi, à 4,5Volt la résistance aux bornes de la sonde doit-être inférieure à 33 ohm pour signaler un court-circuit en mode 1. Un court-circuit véritable est signalé jusqu'à ce que la tension d'alimentation baisse à 3,85Volt.

En mode 2 il n'y a pas de seuil de détection donc même si le voltage baisse en bas de 3,85volt il y a détection. Je n'ai pas testé en bas de 3,57Volt. Mon alimention ne descent pas plus bas que ça.

Montage

Pour le montage du circuit j'ai opté pour une platine à quadrillage. Comme le montage est simple j'ai décidé d'expérimenter ce type de platine que je n'ai jamais utilisé auparavant. J'ai opté pour la plus petite Lilypad de Sparkfun, soit le modèle DEV-10515. Il n'y a pas de place sur cette platine pour installé un DIP à 8 broches avec les autres composants. J'ai donc décidé d'utiliser un SOT23-6 même si la platine n'est pas faite pour le montage en surface. Pour monter le PIC10F202-I/OT sur la plaquette j'ai commencer par souder des bouts de fils calibre 30 AWG sur les broches du PIC. Travail qui demande une bonne loupe et beaucoup de patience. L'autre extrémité des fils est soudé aux oeillets sur la platine. Le corps du PIC lui-même ne touche pas à la platine, il y est join avec de la colle chaude. Notez que le condensateur C2 est un CMS 0603. Ce format est juste de la bonne dimension pour être soudé entre 2 oeillets adjacents.

Première constatation, travailler avec une platine à quadrillage est beaucoup plus d'ouvrage qu'une platine à oeillets non connectés. Ça demande plus de préparation. J'ai fait une plan du quadrillage dans msPaint en indiquant les conducteurs à couper avec une étoile rouge.

Lorsque j'ai entrepris de couper les conducteurs j'ai d'abord utilisé un couteau mais ça ne travaillait pas bien. J'ai eu l'idée d'essayer avec un foret d'un millimètre que j'ai fait tourné entre mes doigts. Ça fonctionne beaucoup mieux avec cet outil. Après avoir terminé le découpage des conducteurs j'ai vérifié avec un ohmètre que le circuit était conforme au plan.

La plus grande difficulté de ce montage a été de souder des fils aux minuscules pattes du PIC10F202-I/OT. Il faut faire très attention car les minuscules broches MCU sont très fragiles. Une fois le montage complété j'avais hâte de programmer le PIC pour savoir si ça allais fonctionné. J'ai été soulagé de voir que c'était fonctionnel du premier coup. Il ne me restait plus qu'à ajuster la valeur de la constante SHORT pour un fonctionnement optimal.



En conclusion je dirais que ce type de platine demande beaucoup plus de temps de préparation qu'une à oeillets disjoints. Je ne crois pas que je vais réutilisé ce système.

Ne me reste plus qu'à trouver un boitier adéqua pour le montage final.

samedi 7 avril 2012

lecture de contacts

Ajourd'hui je discute de différentes méthodes pour lire des contacts ouvert/fermé en utilisant un minimum d'E/S. La méthode la plus simple et la plus évidente de lire un contact est de le brancher directement entre broche du PIC et le négatif de l'alimentation. On programme cette broche en mode entrée avec pull-up activé. Économique mais sur un petit MCU avec très peut d'E/S ça limite les possibilitées. Les diverses méthodes expliquées dans cette chronique étendrent les possibilitées.

méthode 1, lecture du temps de charge d'un condensateur

J'ai présenté cette méthode dans le projet PocketSimon ainsi que dans la chronique Lecture d'un clavier sur entrée en logique TTL. Je ne reviendrai donc pas sur cette méthode du temps de charge d'un condensateur à travers un circuit RC sauf pour mentionner que cette méthode fonctionnerait mieux sur une entrée avec comparateur. Le PIC10F206 a un comparateur, il est donc plus avantageux que le PIC10F202 pour l'utilisation de cette méthode. L'avantage du comparateur se situe à 2 niveaux, le premier est qu'il y a un voltage de référence précis auquel la tension du condensateur est comparée, ce qui n'est pas le cas pour une entrée TTL ce qui complique les calculs lors de la conception il faut même utiliser une méthode empirique pour déterminer les valeurs de seuil. Le deuxième avantage est l'hystérésie (dead band) sur l'entrée. Une fois que le comparateur a atteint son seuil de déclenchement, même si le voltage redescent légèrement il va resté enclenché. Cette hystérérie représente une immunité contre les fluctuations causé par le bruit. Il est vrai que le condensateur lui-même filtre les interférences hautes-fréquences.
inconvénient: Ne permet la lecture que d'un seul bouton à la fois, quoique en modifiant légèrement le montage pour mettre les résistances en parrallèles plutôt qu'en série, une combinaison de contact pourrait-être lue.

méthode 2, le convertisseur A/N

Une simple chaine de diviseurs de tension sur une entrée convertisseur analogue/numérique permet de faire la lecture de plusieurs boutons. Le nombre de boutons pouvant être lue par cette méthode dépend de la résolution du convertissseur et de la précision des résistances.

SW1SW2SW3SW4Vdiv
OOOO1/5Vcc
FOOO1/4Vcc
OFOO1/3Vcc
OOFO1/2Vcc
OOOFVcc
Inconvénient: ce montage ne permet la lecture que d'un seul bouton à la fois. Mais d'autres arrangements permettent la lecture de plusieurs boutons simultanément.

Avec cet arrangement chaque combinaison de contact (16) donne une valeur unique de lecture.

méthode 3, séquence entrée/sortie

Cette méthode fait appel à la programmabilité des E/S en passant du mode entrée au mode sortie. Si on dispose de 3+ E/S le nombre de contacts lisiblent est de N*(N-1). Donc pour 3 E/S on 3*2=6, pour 4 on obtient 12. Le gain est exponentiel, avec 5 E/S on est déjà rendu à 20.

L'algorithme
  • Mettre GP0 en mode sortie avec niveau bas
  • Mettre GP1 et GP2 en mode entrée avec pullup
  • faire la lecture de GP1 (SW2) et GP2 (SW6)
  • recommencer avec GP1 comme sortie pour faire la lecture de SW1 et SW4
  • recommencer avec GP2 comme sortie pour faire la lecture de SW3 et SW5
Notez qu'avec cette méthode, sur un PIC10F2xx, si on utilise GP3 aussi on peut aller jusqu'à 9 contacts.
avantage:Permet la lecture simultanée de plusieurs contacts.

méthode 4, codage binaire par diodes

Avec cette méthode des diodes de commutation (1N914,1N4148,etc) sont utilisées pour encoder une valeur binaire pour chaque contact. Le nombre de contact possible est de (2^^n) - 1, soit 2 exposant le nombre d'entrées moins 1. Donc si on utilise 3 entrées on peut coder 7 contacts comme illustré ici.


GP0,GP1 et GP2 sont configurés entré binaire. Ceci n'est que pour illustrer le principe car en pratique sur un PIC10F202 j'utiliserais GP3 au lieu de GP2 comme 3ième entrée question de me garder une sortie. Le code binaire résultant est inversé, 0xE au lieu de 1, etc.

Inconvénient un seul contact peut-être fermé à la fois.

méthode 5, la matrice de points (cross-points)

C'est la méthode utilisé avec les les keypad 12 ou 16 touches. Il s'agit d'utiliser un nombre X de broches configurées en sortie et un nombre Y configuré en entrée. à chaque intersection X,Y on place un contact. Pour faire la lecture on garde les sorties en haute impédance en configurant 1 seule sortie à la fois on fait la lecture des entrées. On obtient donc une coordonné x,y du contact qui est fermé. Le nombre de contacts possible est x*y.
Avantage plusieurs contacts peuvent-être fermés en même temps.



méthode 6, utilisation d'un registre à décalage

Cette méthode nécessite un registre à décalage du genre SN74HC164 de 2 E/S programmés en sortie et d'une programmé en entrée avec pullup. On fait circuler un bit LOW sur chaque sortie en faisant une lecture après chaque décalage.

Dans le circuit ci-haut GP1 est utilisé comme sortie CLK, GP2 comme sortie bit et GP3 comme entrée de lecture des contacts.
avantage:N'importe quelle combinaison de boutons peut-être enfoncée simultanément. GP0 demeure libre. On pourrait fabriquer un petit synthétiseur à 8 notes avec ce circuit simplement en ajoutant un haut-parleur sur GP0.
En branchant simplement un autre 74HC164 en série avec le premier, sortie QH de U1 sur entrée A du deuxième 74HCH164 et les 2 entrées clk reliées ensembles, on pourrait lire 16 contacts.

mardi 3 avril 2012

les plus importantes limitations du CORE PIC10F2xx

Je trouve que ces petits PIC de base comme les PIC10F2xx et les PIC12F5xx sont parfait pour les petits projets écris en assembleur. J'aimes leur grande simplicité mais ça ne va pas sans inconvénients.

Le premier inconvénient celui qui m'a causé un bug lors du dévellopement de PocketSimon c'est la limitation de la pile des retours à 2 niveaux. Au départ j'avais écris display_count comme un procédure appellé par main. Je démarre le programme le POST exécute normalement le chase_led fonctionne je pèse sur un bouton et puis plus rien. Je regarde mon code, et je vois que display_count appelle la procédure light_led qui elle-même appelle led_gpio_table et led_tris_table. Woops! 3 niveaux d'appel alors que la pile des retours n'en supporte que 2.

La deuxième limitation c'est l'absence d'interruption. Avec une pile qui a seulement 2 niveaux on comprends que ce n'était pas possible d'inclure un système d'interruption. Mais une interruption sur expiration d'un TIMER c'est très pratique. Ça simplifit grandement la logique du code et surtout on peut faire travailler le MCU à autre chose pendant que le TIMER fait sont travail. Bien sur on peut aussi le faire sans interruption comme je l'ai fait dans mon projet lampe de poche programmable que je présenterai dans ce blog prochainement. Mais il faut s'assurer que la boucle complète s'exécute en moins de temps que le TIMER fait son cycle.

Mais on ne peut pas tout avoir, avec ces modèles de base on a une grande simplicité que personnellemnt j'aprécie.

dimanche 1 avril 2012

lampe de poche programmable

Ce projet est le premier que j'ai réalisé avec un PIC10F202. le schéma du circuit est ici et le code source

Cette lampe a plusieurs fonctions

  • 4 niveaux d'intensité 25%,50%,75%,100%.
  • clignotement rapide 3hz.
  • clignote le code morse S.O.S. international (...---...).
  • minuterie pour instinction automatique par tranche de 10 minutes.

J'ai monté ce circuit dans une lampe de poche acheté chez Dollorama.
J'ai choisi cette lampe car elle a un bouton poussoir au lieu d'un "slide switch". J'ai démonté le bouton et je l'ai trafiqué pour désactiver le cliquet de sorte que maintenant le bouton et momentané.

Le PIC10F202 sert de support principal pour le montage de tous les composants. Le transistor Q1 est coller directement sur le PIC10F202 avec de la colle instantané (Locktite). Pour avoir une alimentation permanente sur le MCU j'ai du soudé un fil en amont du bouton et sur la broche 7 (Vss) du PIC. La broche 2 (Vcc) est relié par un fil sur la plaque de métal qui fait contact avec le positif de la pile. Un autre fil part du bouton (côté momentané) pour aller sur la broche 8 (GP3). Tous ces fils sont un embarras lorsqu'on doit enlever le réflecteur pour remplacer les piles. Je croyais avoir pris des photos du montage mais je ne les retrouve pas et maintenant que tout est encastré dans la base de plastique je ne peut plus faire de photos du montage.

Vous trouverez d'autres informations en commentaire du fichier source.


2012-09-23 M.À.J.: Après avoir laissé cette lampe de poche dans un tiroir pendant quelques semaines, lorsque j'ai voulu l'utiliser les piles étaient à plat, ce qui n'est pas normal. Je vais donc reprendre ce projet pour cette raison et les 2 suivantes:

  1. Utilisation d'un SOT-23 au lieu d'un DIL-8 car ce format de boitier est trop gros pour une petite lampe de poche.
  2. Avec 2 piles AA une LED blanche n'atteint pas son intensité maximiale. Il faut donc que je trouve une façon simple d'augmenter le voltage en utilisant un miminum de composants supplémentaire. J'ai déjà une idée à ce sujet.
à suivre...