KubuntuBlog

A computer program does what you tell it to do, not what you want it to do. Greer's Third Law

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 11 septembre 2011

Programmateur de machine à laver

Le besoin

Notre machine à laver, un peu ancienne, ne dispose pas de fonction retardateur. Il est donc impossible de la programmer pour qu'elle démarre en heures creuses. De plus le bouton de démarrage n'est pas "à état". C'est à dire que chaque pression démarre ou arrête la machine mais qu'il revient dans son état initial après. Impossible de mettre l'alimentation sur programmateur et d'enclencher le démarrage en avance.

L'idée qui germe alors dans mon cerveau geek est de construire un doigt robotisé qui appui sur le bouton au moment opportun ! Bien sur, il est possible de caler le bouton enfoncé avec un bout de carton et d'utiliser le programmateur sus-cité, mais alors ou est le fun[1] ? De même d'aucun objecterons qu'un relais soudé sur les contacts internes du bouton peuvent mieux simuler une pression qu'une action mécanique moins fiable. J'objecterai alors, à mon tour, que souder des trucs dans un appareil qui fonctionne très bien est à mon goût plus risqué que d'appuyer sur un bouton[2]. Je n'ai pas l'intention de changer une machine qui marche très bien.

Ceci étant posé, je me suis lancé dans la construction d'un "doigt" qui appuiera sur le bouton après un temps choisit.

La réalisation

Posons les bases :

  • pour le "doigt" un simple servo fait l'affaire, un angle au repos et un angle pour l'appui sur le bouton. Il ne doit pas empêcher d'appuyer manuellement.
  • il faut aussi un écran pour régler le temps d'attente avant le déclenchement du lave-linge
  • pour le servo cerveau, un arduino, simple et facile même si sur-dimensionné

Écran LCD : Nokia

Pour l'écran, je me suis vite orienté vers les quelques Nokia 5110 qui traînent dans un tiroir depuis quelques années. Je les ai gardés justement pour ce genre d'utilisation car leur écran LCD est très facilement réutilisable à partir d'un µC. Il existe foultitude sites et de bibliothèques pour les utiliser. Il suffit donc de suivre les instructions et de souder une petite nappe. À ce moment, la force de l'arduino entre en jeu, les bibliothèques ! J'ai utilisé celle de NuElectronics légèrement modifiée par mes soins. Et hop :

photo

Commande

Pour l'affichage, c'est bon. Pour la commande, il n'est pas besoin de grand chose, il nous faut juste régler la temporisation et la lancer. Soit 3 boutons : up, down et ok.

Les fonctions offertes sont, elles aussi, simples :

  • réglage du minuteur
  • réglage des angles repos/travail du servo (avec enregistrement en eeprom)
  • test

On se reportera au schéma suivant pour les menus et les interactions de l'interface.

photo photo photo

Le concept est validé et fonctionnel.

Finalisation

Il ne reste plus qu'à améliorer le WAF[3] de l'ensemble si l'on veut que l'objet soit utilisé.

on commence donc par rendre tout cela un peu plus transportable en en faisant un shield[4] facile à enficher sur notre arduino.

photo photo photo

Ensuite on agence tout ceci dans un belle boîte de vis qui avait le malheur de traîner dans mes pattes. Quelques coups de dremel, de perceuse et le tour est joué.

photo photo photo

Pour finir, il ne reste qu'à fixer notre doigt au-dessus du bouton. Pour une fois, j'ai choisit de rester simple: un morceau de scotch double-face[5].

photo photo

Voila, cela fait quelques mois que ce montage est en fonction et il donne entièrement satisfaction. Nous gagnons des € tous les soir grâce aux heures creuses et dans 10 ans je pense que nous aurons économisé suffisamment pour rembourser le temps que j'y ai passé ;)

Ah oui, si quelqu'un a envie de se lancer dans la même chose, le code est bien sur disponible en GPL dans mon dépot : programmation de machine à laver

Notes

[1] bande de rabat-joie

[2] puisque je vous dis que je veux un robot!!

[3] pas le plus amusant, mais le plus important

[4] si on peut appeler ça un shield !

[5] trop simple :(

samedi 9 juillet 2011

Utiliser un arduino comme programmeur ISP

L'arduino est devenu le microcontroleur[1](µC) à tout faire. De part sa communauté, de nombreuses bibliothèques et programmes sont proposés et disponibles pour nombre d'utilisations. Nous allons aujourd'hui en découvrir une un peu particulière. Nous allons apprendre à (re)programmer un autre microcontroleur à l'aide d'un arduino.

Charger un programme dans un arduino est très simple, cela grâce au bootloader chargé dans l'ATmega. Basiquement, ce petit programme exécuté au démarrage de votre arduino récupère le code via la liaison usb et programme l'ATmega de la carte[2]. Si rien ne lui est envoyé, alors il démarre le programme déjà présent dans la mémoire flash. Le bootloader ou le programme à exécuter sont stockés dans 2 zones mémoires différentes.

Seulement il peut arriver que ce bootloader soit cassé[3] ou ne soit pas présent[4]. De plus, un certain nombre de µC ne peuvent pas héberger de bootloader. Dans ce cas, il faut les programmer autrement. On utilise alors un programmeur qui se charge de cette tâche.

Les µC d'atmel disposent en général d'une fonction très utile : l'ISP (In-System Programming). Celle-ci permet de les reprogrammer à l'aide de 4 fils, alors qu'ils sont déjà dans un montage. Nous allons utiliser cette fonction pour reprogrammer notre arduino.

Exemple avec un ATtiny45

Commençons par programmer un simple petit ATtiny45 (cible) à l'aide d'un arduino Duemilanove (programmeur).

Il nous faut d'abord utiliser le sketch ArduinoISP présent dans les exemples fournis avec l'IDE de l'arduino. Vous pouvez aussi le télécharger sur le site mega-isp. Compilez le et chargez le dans l'arduino.

Note: par défaut la vitesse utilisée lors de la (future) programmation de la cible est de 19200bps, vous pouvez changer cela dans le code, mais il faudra alors penser à reporter cette valeur dans les commandes de programmation.

Depuis la version Diecimila les arduino intègrent une fonction d'auto-reset qui permet de redémarrer la carte (et donc lancer le bootloader) quand une communication série débute[5]. C'est très utile pour programmer l'arduino, mais cela va nous poser problème ici. Nous devons donc le désactiver. Pour notre version Duemilanove, le plus simple et le moins intrusif est de relier le reset au +5V par une résistance de 120ohms, ce qui maintiendra le reset à l'état haut[6]. Je vous laisse voir le site officiel pour les autres méthodes.

Ensuite, nous relions les différentes pattes nécessaires pour la programmation ISP :

Arduino     ATTiny45  Fonction
  10           1       reset 
  11           5       MOSI
  12           6       MISO
  13           7       SCK

Référez vous à la datasheet de votre µC pour connaitre les pattes à relier.

Enfin, le sketch ArduinoISP utilise 3 leds d'état que vous relierez à la masse via une résistance adéquate[7].

Arduino    led (anode)
   7       jaune: programation en cours
   8       rouge: erreur
   9       vert : heartbeat

Voici le schéma du montage sur plaque à essai :

montage montage

Vous pouvez ignorer la led verte de gauche, elle ne sert qu'a tester le programme chargé.

Enfin, vient le moment tant attendu, vous pouvez connecter l'arduino à l'USB et programmer votre ATtiny en utilisant avrdude :

avrdude -V -p t45 -c avrisp  -b 19200 -P /dev/ttyUSB0 -U flash:w:led.hex

Quelques mots sur les options (voyez la doc pour les détails) :

  • -p t45 : pour dire que l'on programme un ATtiny45
  • -c avrisp : le type de programmeur utilisé
  • -b 19200 : la vitesse de la liaison (à changer éventuellement en fonction du code de ArduinoISP)
  • -P /dev/ttyUSB0 : le port sur lequel est connecté votre arduino
  • -U flash:w:led.hex : on écrit (w) dans la flash le programme compilé led.hex

Et voila, selon votre programme de test, la led devrait commencer à clignoter.

Programmer un arduino à partir d'un arduino

Attention: Pour pouvoir programmer plus de 256 octets (ce qui va être nécessaire pour la suite), il vous faut utiliser ArduinoISP de l'IDE version 22 minimum, ou utiliser les sources prises sur mega-isp vues ci-dessus. C'est un bug connu de l'IDE 21

Nous allons reprogrammer le bootloader de l'arduino. On peut avoir de nombreuses raisons de faire cela: pour le réparer, pour préparer un nouveau µC, pour le remplacer par une version plus efficace. Dans mon cas, c'est cette dernière opération que je veux réaliser. Le bootloader du Duemilanove, empêche l'utilisation du watchdog dans les programmes. On trouve la correction dans des bootloader alternatifs[8] ou dans celui de l'arduino UNO (optiboot). Ce dernier étant compatible avec la majorité des versions précédentes, nous allons donc l'utiliser. Ceci impliquera de choisir Arduino Uno dans le menu Board de l'IDE lors des prochaines programmation, puisque le bootloader sera celui de l'Uno. Je vous conseille d'y coller une étiquette pour ne pas l'oublier.

Notre arduino programmeur sera préparé de la même manière que ci-dessus, c'est-à-dire qu'on lui chargera le sketch ArduinoISP. On le connecte alors vers les pattes ISP de notre arduino cible. On peut utiliser soit le connecteur ICSP soit relier directement aux connecteurs femelle sur lesquels on branche habituellement les shields.

Note: On peut aussi se contenter d'un seul arduino (programmeur) et utiliser une plaque à essai pour simuler le 2ème. Dans ce cas, les différentes options sont décrites sur le site officiel.

Voyez ci-dessous les connexions à établir.

arduino isp to arduino montage

La cible doit être alimentée. Vous pouvez faire cela via l'USB, mais je le déconseille ainsi, vous n'aurez qu'un seul /dev/ttyUSBx et c'est un risque d'erreur en moins. Utilisez plutôt l'entrée VIN de l'arduino à programmer.

Il ne nous reste plus qu'à utiliser l'IDE pour flasher la cible.

  • choisir ce que vous allez programmer dans le menu Tools / Board :
    • UNO pour avoir l'optiboot
    • ou bien duamilanove avec atmega328
    • ou autre chose suivant votre modèle d'arduino
  • puis Tools / Burn Bootloader / w/Arduino as ISP

Note: Si vous avez changé la vitesse dans le sketch ArduinoISP, il vous faudra mettre à jour le paramètre arduinoisp.speed présent dans le fichiers programmers.txt[9], soit directement, soit en le surchargeant via votre fichier preferences.txt[10]

Nous pouvons aussi utiliser avrdude pour faire cela à l'ancienne. il suffit d'enchainer les 3 commandes suivantes, voir de les regrouper en une seule[11]

Vous trouverez les valeurs de fuses et les fichiers de bootloader dans le fichier texte boards.txt de votre installation[12]. Les différents fichiers hex du bootloader sont dans un sous répertoire bootloaders[13]. Rappelons que les commandes suivantes s'appliquent pour programmer un optiboot sur un arduino Duemilanove.

La 1ère action est de débloquer l'accès au bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -e -U lock:w:0x3F:m

Ensuite, il faut flasher le bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -D -U flash:w:optiboot_atmega328.hex

notons que vous pouvez relire le fichier flashé ainsi :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -D -U flash:r:read.hex:i

et enfin rebloquer l'accès au bootloader :

avrdude -p m328p -P /dev/ttyUSB0 -c avrisp -b 19200 -U lock:w:0x0F:m

Programmer directement un arduino (Bitbang FT232)

Note: Je n'ai pas personnellement utilisé cette technique, ce que vous vous apprêtez à lire n'est donc que ma compréhension résultant de mes lectures. Cela-dit de nombreux témoignages existent sur sa viabilité et elle est visiblement beaucoup utilisée.

Une autre méthode pour reprogrammer le bootloader de votre arduino est la technique dite BitBang. Elle utilise un mode particulier du chipset FTDI présent sur les arduino. Ce mode permet de jouer directement avec les pattes de sorties du chipset et ainsi de l'utiliser pour simuler un programmeur ISP.

Le principe est donc de relier les pattes du FTDI au connecteur ICSP de l'arduino. pour cela il vous faudra souder une barette sur les trous 1 à 4 nommés X3 sur votre arduino. Puis d'établir les connexions nécessaires avec le connecteur ICSP dont nous avons déjà parlé.

La deuxième étape est de patcher avrdude pour lui ajouter un nouveau programmeur[14]. Et enfin de reprogrammer celui-ci avec avrdude en lui donnant le bon fichier .hex à manger.

L'énorme avantage de cette méthode est bien entendu que vous n'avez besoin que d'un seul arduino, et qu'il peut donc se reprogrammer lui-même. Les inconvénients sont que vous devez souder sur votre arduino et utiliser un autre avrdude que celui fournit avec l'environnement de programmation standard.

Pour plus de détails, je vous renvoi vers les liens suivants :

Un vrai programmeur

Pour autant que ces techniques soient amusantes leur mise en place et utilisation devient vite assez lourde. Cela est très bien pour un besoin ponctuel, mais pour une utilisation régulière, je ne saurais trop vous conseiller d'acheter un vrai programmeur de µC. Pas besoin de dépenser des centaines d'€ pour cela. On trouve facilement des programmeur ISP pour pas cher. Notons en particulier le USBtinyISP de LadyAda[15]. Une simple recherche avec stk500 ou avrisp vous renverra aussi une foultitude de résultats sur un site d'enchères bien connu.

Ainsi, vous économiserez un arduino et vous vous simplifierez la vie. Plus rapides, plus sur et plus transportables, ils ont tout pour plaire. Il ne vous reste alors qu'à prévoir un connecteur ISP sur vos montages et hop. On peut aussi réaliser un petit adaptateur comme ci-dessous pour l'utiliser facilement sur une plaque à essais.

montage

Voila, félicitations aux courageux qui sont arrivés jusqu'ici, et si vous avez des questions ou des remarques, les commentaires sont ouverts[16].

Notes

[1] oui, je sais c'est plus qu'un µC (régulateur, liaison usb ...)

[2] ie: charge le code dans la mémoire fash

[3] par une fausse manip

[4] cas d'un atmega neuf

[5] basé sur le passage de DTR au niveau bas

[6] il est actif à l'état bas, vous l'aurez compris

[7] 330ohms pour mes leds

[8] tel celui de ladyAda

[9] dans /usr/share/arduino/hardware/arduino/ chez moi

[10] dans ~/.arduino

[11] en gardant le même ordre pour les options -U

[12] chez moi dans /usr/share/arduino/hardware/arduino/

[13] soit /usr/share/arduino/hardware/arduino/bootloaders/ chez moi

[14] à utiliser via l'option -c

[15] je vous jure, que je n'ai pas d'actions chez AdaFruit !

[16] Je ne pouvais pas finir sans une dernière note de bas de page :)

mardi 14 juin 2011

Lecture de bandes magnétiques

CML'autre jour dans le train, je lisais Open Silicium #2 et j'ai été effaré de lire que le numéro de carte bancaire se retrouvait sur la bande magnétique des billets SNCF. Ni une, ni deux, uns fois mes pénates retrouvées, j'ai voulu en avoir le cœur net !

Ne voulant pas acheter un lecteur de carte, je me suis intéressé à la méthode Batagllia présentée au paragraphe 2.1 Le principe est simple, on utilise une tête de lecture telle qu'on en trouve dans les lecteurs de K7 audio, sur laquelle on soude une prise jack elle-même branchée sur l'entrée micro d'une carte son. Un logiciel se charge alors d'interpréter le signal reçu en données intelligibles. L'auto-radio que j'avais au fond de mes cartons étant un CD, je me suis tourné vers la fausse K7 que j'utilise pour brancher mon lecteur MP3 dans la voiture.

Je ne vais pas détailler le processus entier, je vous renvoi plutôt vers une série de liens en fin d'article, outre bien sur Open Scilicium déjà cité. Vous pouvez aussi regarder la vidéo suivante.

Côté résultats, la lecture de cartes marche plutôt bien. J'ai réussit à lire des données sur toutes celles que j'ai essayés : carte bancaire, tickets de parking, cartes de fidélité, cartes d'accès etc... Il faut quand même attraper le coup de main pour passer la tête de lecture à la bonne vitesse.

CMQuand aux billets de train, j'ai eu plus de mal, plusieurs lectures donnant parfois des résultats différents. J'ai tout de même réussit à voir pas mal d'informations telles que les gares de départ et d'arrivée, le prix, le numéro de train etc...

Par contre, pas de numéro de carte bleue ! Bonne nouvelle ! Soit les données sont déjà perdues (bande LoCo), soit elles ne sont pas présentes sur tous les type de billets. Ceux de mes tests ayant été acheté via internet et livrés à la maison.

Voila, un petit hack simple et facile, mais il est toujours amusant de regarder ce que l'on n'est pas censés voir ;)

Liens

dimanche 26 septembre 2010

Liaison téléinfo : le compteur électrique on the web

Les compteurs électriques récents disposent d'une sortie à deux fils émettant en temps réel la consommation de votre installation : la liaison téléinfo. Les données étant présentes, il est dommage de ne pas pouvoir en disposer ! Nous allons y remédier. L'idée de base est de récupérer la consommation et de pouvoir la suivre de n'importe ou.

le montage aura 3 étages :

  • l'adaptation du signal pour le rendre facilement exploitable
  • la récupération et l'analyse des données
  • la présentation sur le réseau sous forme de graphiques[1]

Adaptation du signal

On trouve chez edf les spécifications techniques de la sortie téléinfo. Outre le signal, elles décrivent les messages que vous pourrez recevoir (nous y reviendrons). La 1ère étape est de transformer le signal pour le rendre lisible par notre équipement. plutôt que de ré-inventer la roue, une petite recherche sur le web nous remonte nombre de schémas (voir les liens). La source première semble être Bernard Lefrancois, mais ce n'est sans doute pas la seule. Quoi qu'il en soit, le montage est simple :

  • un optocoupleur
  • une/deux NAND

Voici ma version du schéma réalisé avec Kicad : schema teleinfo Voir ci-dessous pour les sources des schémas et le pourquoi de tous ces connecteurs inutiles.

Récupération des données

la 1ère étape est de récupérer tout cela avec un PC pour valider le concept. On s'installe donc au pied du compteur avec son PC portable et sa plaque d'essai[2] 1st Le port série est relié au connecteur Liaison vers un PC du schéma ci-dessus.

Parlons maintenant un peu des données. Elles sont transmises en boucle par votre compteur à un débit de 1200 Bauds en 7E1[3]. Chaque trame commence par le caractère STX:0x02 et se termine par ETX:0x03. le contenu des trames dépend de votre abonnement. Dans mon cas (monophasé, heures creuses/pleines), on trouve ceci : plaque à essai pour PC

ADCO XXXXXX088671 K
OPTARIF HC.. <
ISOUSC 60 <
HCHC 005124904 _
HCHP 007483956 =
PTEC HC.. S
IINST 002 Y
IMAX 052 F
PAPP 00400 %
HHPHC D /
MOTDETAT 000000 B

dans la GTL Je ne vais pas vous décrire par le menu les différents champs, tout est très bien détaillé dans le pdf linké précédemment. Sachez cependant que ce qui va nous intéresser le plus est :

  • HCHC : consommation totale en heures creuses
  • HCHP : consommation totale en heures pleines
  • PTEC : période tarifaire en cours (ici heures creuses)
  • IINST : l'intensité instantanée

Une fois ceci connu, il est très simple d'exploiter les données, on lit la trame sur le port série, on converti les caractères en nombre, et voila ! Vous trouverez même chez MicElectroLinGenMet des programmes en C tout fait pour exploiter ces données.

Bon, c'est bien joli de suivre sa consommation pour faire des économies, mais c'est pas en laissant un PC allumé qu'on va améliorer les choses !

On the web

Il me faut donc un moyen de lire et exporter tout cela sur le web à basse consommation. Mon choix s'est porté sur une plateforme arduino. Pourquoi ? C'est simple :

  • il faut un arduino dans tout projet électronique[4]
  • c'est facile d'accès, tout intégré et avec plein de bibliothèques
  • les extensions[5] sont faciles et existent en grand nombre (en particulier pour l'ethernet)
  • les AVR c'est le bien

Arduino dans la GTLBref, des arguments imparables !

Pour l'ethernet, mon choix s'est porté sur un modèle à enc28J60 plutôt que l'officiel à base de Wiznet. Il est plus lourd à programmer, mais beaucoup moins cher. Ici, une comparaison[6] entre les 2 shields.

Le reste n'est que du C, très simple donc ;)

Le programme est relativement léger. On lit le port série régulièrement, on accumule dans un tableau pour conserver un historique sur 24h et on affiche le tout via l'API Google chart. Vous trouverez les sources ci-dessous.

web

Voila, après quelques mois de fonctionnement sur plaque à essai, tout va bien. J'avais prévu d'en faire un typon[7] mais au final, je me suis contenté d'une plaque à trous.

Vous pouvez voir comme je suis fort en soudure et routage[8] :)

coté face coté pile en fonctionnement

Conclusion

Voila, un montage simple et facile qui vous permettra d'attendre le super nouveau compteur d'EDF. Dans les évolutions, on pourrait envisager une intégration Google powermeter[9] ou un historique plus grand[10]

Dans les utilisations réelles[11] je peux citer :

  • le réglage de la pompe à chaleur pour qu'elle ne déborde plus en heures pleines
  • la découverte de l'oubli du chauffe-eau pendant les vacances[12]

Et pour finir, quelques liens :

Notes

[1] parce que j'aime bien les graphiques !

[2] madame ne vous laissera sans doute pas faire très longtemps ;)

[3] 7 bits de data, parité pair, 1 bit de stop

[4] au milieu, à gauche

[5] shields

[6] en faveur du wiznet

[7] voir dans les sources kicad ci-dessous

[8] ironie inside

[9] si j'arrive à faire du SSL?

[10] pour l'instant via un munin hébergé ailleurs

[11] je veux dire autre que le plaisir de voir de jolies couleurs

[12] et envoi de mamie pour l'extinction :)

jeudi 27 mai 2010

Un peu de mécanique

tableauPoint de moteurs ou d'arbre à cames ici, ce qu'on appelle mécanique dans le monde du hardware concerne toutes les pièces qui ne sont pas électroniques. Par exemple les boitiers, la face avant d'une carte, le châssis ... Et dans notre cas, une baie 19' fait maison.

Quand j'ai fait l'électricité dans notre maison, j'ai décidé de faire en même temps un câblage basse tension complet. Il peut servir à tout ce que je veux, ethernet bien sur, mais aussi téléphone, capteurs déportés, liaisons séries etc... L'idée était donc de banaliser tout cela en câble ethernet et prises RJ45, le tout revenant vers la GTL en une armoire de brassage. Celle-ci doit regrouper les platines de brassage, un switch ethernet, le répartiteur téléphonique et les équipements communicants. On peut alors affecter une prise à une fonction simplement en la brassant vers l'équipement adéquat.

Au vu de la quantité de prises prévues[1] le mieux était de s'orienter vers du matériel professionnel en 19'[2]. Mais une baie 19' prend beaucoup trop de place et coute 1 bras. J'ai donc décidé de faire cela sur mesure.

Le matériau de base se trouve partout : des cornières perforées prévues pour monter des étagères métalliques. On choisira le modèle avec des trous larges permettant de s'adapter facilement à l'entraxe des équipements 19'. Dans mon cas, deux cornières furent suffisantes. Il suffit alors de découper aux dimensions voulues, ici du 4U : 2 platines 1U, un switch 1U et un dernier U pour des équipements actifs.

Un petit montage à blanc :

montage à blanc

et on peut passer à l'installation. Chaque morceau en contact avec le mur est solidement fixé. Il ne s'agit pas que tout tombe[3] ! Les cornières sont reliées par des boulons et les coins sont renforcés par des équerres métalliques prévues pour. le cadre est bien entendu relié à la barrette de terre.

Emplacement prévu On fixe bien au mur Ecrous/boulons plus renforts de coin Et hop avec les platines RJ45

Si la construction de la baie n'a durée qu'une nuit, le câblage des platines s'est déroulé sur plusieurs mois au fur et à mesure des besoins. Sur la photo finish on retrouve tous les composants du schéma ci-dessus :

  • platines de brassage à gauche
  • switch netgear en bleu
  • répartiteurs téléphone fixe et adsl en haut
  • box adsl[4]
  • le DTI (beige tout en haut)

et scotché sur la porte les plans qui permettent de retrouver toutes les prises :)

pas fini mais déjà en service état actuel

Voila, et pour le fun, une dernière photo de la GTL avant câblage :)

Notes

[1] 33

[2] pas trop cher sur ebay

[3] et comme tout bon bricoleur du dimanche, je blinde!

[4] je vous laisse deviner le FAI :)

jeudi 13 mai 2010

Liaison série : RS232 vs TTL

Un petit article pour rappeler quelques bases, ça ne fait jamais de mal. Outre les niveaux de voltage tension, il existe une autre différence de taille entre le RS232 et le TTL, la représentation des 0 et des 1 ! Tout le monde le sait[1]. Mais habitués que nous sommes à utiliser des MAX232 & co[2], quand il s'agit de manipuler les signaux, il arrive qu'on mette du temps à s'en souvenir[3]. Vous l'aurez compris, cela m'est arrivé récemment :) Donc petit rappel.

La liaison série RS232 utilise pour représenter le 1 un niveau compris entre -3V et -25V et pour le 0 entre +3V et +25V. Généralement en sortie de nos PC on trouve -12V et +12V.

En TTL par contre le 0 est représenté par une tension entre 0 et 0.7V alors que le 1 est entre 2.2V et 5V.

La conversion ne se borne donc pas à ramener les -12/+12 vers 0V et 5V, il faut aussi inverser les signaux[4] !

Preuve par l'exemple, voici un port série de PC branché sur un MAX3235 le tout relié à un oscillo.

montage

En rouge, channel 1, une sonde x10 sur le fil 3 de la DB9, Tx du RS232 donc. En bleu, channel 2, une sonde x10 sur la patte 1 du max3235 soit Rx en TTL. Du PC, on envoi 2 caractères C en 9600-8N1. Nous sortons à l'oscillo la jolie trace suivante : trace

  • En Idle la ligne est à 1, -10V en RS232 et +5V en TTL
  • le bit de start S passe à 0
  • les 8 bits de données pour C, caractère ascii 0x43 soit b01000011, sachant que le LSB est transmit en 1er
  • le bit de stop S' à 1
  • le caractère suivant ...

Voila, voila, du très simple, la base, mais si cela permet à quelqu'un d'éviter de perdre autant de temps que moi, c'est déjà cela de gagné :)

Aller et pour essayer de donner un peu de contenu à cet article, j'ai trouvé des vidéos sur l'utilisation de l'oscilloscope très bien faites. C'est chez BTCinstrumentation.

Notes

[1] ou au moins l'a su

[2] on préfèrera les nouveaux modèles sans capa externes !

[3] surtout la nuit

[4] youhou, coucou la NAND

mercredi 3 décembre 2008

Alimentation de laboratoire pas chère

Quand on fait des petits montages électroniques, une alimentation de laboratoire deviens vite indispensable. Jouer avec des piles et des ponts diviseurs, ça va bien un temps mais cela deviens vite très lourd !

Par contre une vrai alim de labo coute vite des sous. Alors quitte à mettre pas cher, autant mettre rien du tout[1] ! Avec un peu d'astuce, d'espièglerie c'est la vie... heu non. Un peu d'astuce et surtout un bon moteur de recherche peut transformer une vieille alim ATX qui prend la poussière en alim non réglable mais qui nous fournira les tensions les plus courantes[2].

Attention Même débranchée, de fortes tensions mortelles sont présentes dans une alim. Laissez les condensateurs se décharger plusieurs jours avant de l'ouvrir ! Et bien sur faites aussi une croix sur votre garantie :)

Je ne vais re-détailler ici tout le processus, de nombreuses pages existent déjà. Je me contente donc de vous renvoyer vers la page que j'ai principalement utilisée, très claire et détaillée ainsi que sur mon wiki ou j'ai regroupé plusieurs autres liens

Coté matériel, je n'ai eu à acheter que la résistance de puissance à 4.30€, j'ai trouvé tout le reste dans les poubelles[3] ou dessoudé à partir de vieux matos patiemment collecté et stocké. En temps de réalisation, vu mon taux d'occupation actuel, j'ai étalé sur plusieurs semaines, mais ça peut être torché en 2h.

Voici quelques photos commentées. Tout d'abord un petit plan[4] pour le placement Plan

L'essentiel positionné et soudé click La résistance doit être fixée en contact avec la carcasse métallique et dans le chemin du ventilateur pour assurer un bon refroidissement.

Le ventilateur étant particulièrement bruyant, j'ai ajouté un petit interrupteur pour choisir de l'alimenter en 5V (utilisation normale) ou de le repasser en 12V en cas d'utilisation prolongée ou particulièrement consommatrice. Il est soudé sur une plaque à trous ce qui me permet de conserver le connecteur d'origine du ventilateur. Les alims sont repiqués sur les fiches bananes. Comme les LED, il est simplement fixé à la super glue. click

Enfin, le produit fini :) click J'ai conservé les prises Molex pour pouvoir y brancher un disque ou un lecteur CD.

D'autres photos sont disponibles sur le wiki. N'oubliez pas d'isoler vos connections à la gaine thermo ou au scotch d'électricien.

Notes

[1] ou presque

[2] et même du -/+ pour des amplis op.

[3] oui ça aide de travailler dans une boite qui fait du hard, et merci à Jean-Pierre pour la LED jaune

[4] inkscape powered

jeudi 8 février 2007

avrDefender : un petit jeu à deux balles

Je continue à apprendre peu à peu l'utilisation de l'ATmega8 présent sur ma carte myAVR. Au programme du jour les interruptions sur timer, la gestion des entrées numériques (boutons) et surtout l'affichage sur lcd (à l'aide de la bibliothèque LCD de Peter Fleury).

Le résultat est un petit jeu à deux balles ou il faut éviter des météorites. Bon, sur un LCD de 2 lignes et 16 colonnes, les graphismes sont pas terribles :)

Je l'ai appelé avrDefender en hommage à un grand jeu !

Et si vous êtes interressés par du code cochon de quelqu'un qui débute, vous pouvez toujours aller voir.

mardi 30 janvier 2007

myAVR : une carte de test pour microcontroleur ATmega8

Depuis peu de temps, j'ai dans l'idée de me remettre un peu à l'electronique. Comme à la base je suis plutôt un softeu[1] je suis plus attiré par l'electronique numérique qu'analogique. Donc les microcontroleurs semblent la voie royale.

Dans l'optique de me dérouiller un peu, je me suis commandé une petite carte simple qui intègre de quoi jouer avec les entrées sorties du µC. Après diverses interrogations, mon choix s'est porté vers la carte myAVR qui a l'énorme avantage d'être peu chère[2].

Elle possède de quoi s'amuser un bon moment et de découvrir en détail les possibilités des Atmel :

  • µC Atmel ATmega8
  • interface de programmation parallèle (ISP)
  • interface série
  • 2 interrupteurs pour simuler des entrées numeriques
  • 2 potentiomètres pour simuler des entrées analogiques
  • 3 LED pour le feedback visuel
  • port d'extension pour ajouter des modules additionels

Voici maintenant en quelques photos du montage :

Tout d'abord, la réception du paquet. Rapide et bien emballé. Le modèle commandé comporte la carte en kit et une extension avec un écran LCD.
La documentation fournie dans le paquet ainsi que celle dispo sur le web est par contre en Allemand ! Mais j'ai reçut par mail des notes explicatives en anglais. De plus la doc en allemand est suffisament illustrée pour ne pas avoir de problèmes lors du montage. photo photo

Mon plan de travail. Le materiel nécessaire est assez limité: un fer à souder, pince coupante et un peu de fil. Sur l'écran de gauche, vous voyez la doc de montage très bien faite. A droite, amaroK joue du Ludwig von 88, rien de mieux pour se concentrer[3]. photo

Après la première page de montage, les CI sont posés. Je ne suis pas trop mécontent de mes soudures. Monter mon switch casque/enceintes m'a permis de me refaire un peu la main. photo photo

Enfin, la carte est terminée. Il ne reste qu'a enficher le µC Atmel ATmega8 et les boutons des potentiomètres. Certaines soudures sont moins jolies, en particulier les gros patés pour la masse des connecteurs DB. photo photo

Après ceci, la phase de tests :

  • avant de brancher le µC, connecter l'alim (une pile 9V) et verifier les 5V aux endroits indiqués par le shéma
  • tester le Hello World des microcontroleurs, à savoir faire clignoter une LED :)

Malheureusement, les programmes de tests fournis sur le CD ne sont que pour windows et ne fonctionnent pas avec Wine. La procédure pour compiler et charger fera l'objet d'un article prochain. Mais vous pouvez déjà voir le clignotement de la LED dans mon billet précédent.

Notes

[1] terme plus ou moins péjoratif employé par les hardeux

[2] surtout dans sa version en kit

[3] enfin c'est mon cas

Ça clignote !

mardi 23 janvier 2007

Un switch casque / haut-parleur

Jongler entre les haut-parleurs et le casque audio n'est pas une chose toujours facile. La prise de sortie est souvent branchée à l'arrière du PC, sous la table au milieu d'un noeud gordien de câbles divers et variés. On peux envisager de déporter les branchements en façade ou d'utiliser un switch permettant de basculer de l'un à l'autre via un interrupteur. On trouve ce genre d'équipement tout prêt, mais il est beaucoup plus amusant (et moins cher) de le faire soit même.

Matériel nécessaire :

Il ne vous reste qu'à souder tout cela ensemble :

  • repérez bien le canal/fil droit et le canal/fil gauche
  • pensez à connecter le jack de gauche sur les pattes droites de l'inter, comme cela le levier sera du coté du jack actif, c'est plus clair
  • vous pouvez relier toutes les masses ensemble, comme dit Lolo : "on ne fait pas de la Hi fi'' :)
  • une 3ème main, c'est très utile
  • le fil rouge sur le bouton rouge, le fil blanc ...

Pour finir, quelques photos :

Soudures Les premières soudures sur l'interrupteur.

Test gauche Le premier test. Seule une prise est branchée, l'autre n'est pas encore soudée. On remarque le scotch pour isoler au niveau des connections de l'inter. De la gaine thermo serait sans doute plus adaptée.

Soudures Enfin, le produit fini. Certains m'ont fait des remarques sur la boîte, comme quoi cela serait la honte. Je les laisser déblatérer, celle-ci rempli parfaitement son office :) . De plus il reste de la place pour un deuxième interrupteur (pour le micro par exemple).

Voilà donc une réalisation simple et de bon goût qui me permet de me refaire un peu la main sur le fer à souder.