Dimanche, mars 11 2012

DIY – Sonotone

L’idée de départ avais germée avant noël. Une de mes vielles tantes a de gros problèmes d’audition, mais pas les moyens de s’équiper. Je me suis donc demandé si j’étais capable de lui fournir un petit amplificateur lui permettant a minima de suivre les conversations lors des réunions de famille, à défaut de l’avoir tout le temps sur les oreilles…
Première constatation, il sera impossible de faire aussi petit que les appareils portatifs spécialisés (je m’en doutait un peu), j’opte donc pour solution d’appoint, plus encombrante, mais qu’elle n’utilisera qu’en cas de besoin.

La taille n’étant plus un problème, restait à trouver l’amplification correcte pour lui permettre de suivre une discution.
- Je précise à ce stade que je vous présente la version 1 ici, la plus simple, ne comportant que de l’amplification, je reviendrais sur ces points en fin d’article -

Je suis donc parti sur un choix de composants assez classiques, permettant un gain important tout en restant miniaturisable si besoin (CMS). J’ai donc choisi un montage à base de micro electret (car existant en cms de taille microscopique), et un classique NE5532, qui offre un excellent rapport qualité/prix.

Schéma sonophone

Schéma sonophone

J1 correspond au branchement du micro electret, J2 à la sortie écouteur et j3 à l’alimentation (+12v).
La première porte du ne5532 est utilisée avec une amplification de 100 (+40db), qui est à nouveau amplifié par la seconde porte avec une amplification de 33 (~+30db). Les condensateurs c2 et c3 évitent que l’ampli op ne parte en oscillation, vu les gains important.

A ce sujet, d’ailleur, j’ai perdu énormément de temps à comprendre une oscillation parasite…. avant de me rendre compte qu’elle provenais tout simplement de la pile !! Et oui, même avec une pile, le courant n’est pas très stable, et il faut le lisser avec un condensateur.

Le typon du sonotone v1
Le typon du sonotone v1

 

Voilà, comme c’était pour un cadeau de noël, je m’étais arrêté là, mais il reste encore beaucoup à faire. Le point essentiel, c’est de noter que l’amplification est suffisante pour permettre à ma tante de suivre une conversation.
Les points à améliorer sont :
- Ajouter du filtrage et de la compression : toutes les fréquences sont amplifiées de manière équivalente (+/-), et ce quelque soit leur niveau d’entré. Les bruits parasites sont donc également amplifiés, et les différences brutales (ex. une porte qui claque) également. Il faut donc lisser un peu tout ça, et atténuer les fréquences inutiles.
- Augmenter l’autonomie : le montage utilise une petite pile 12v que l’on trouve dans certains appareils photos. C’est pratique, mais l’autonomie est assez ridicule sur ce mode de fonctionnement (~4h, et encore)
- Réduire la taille de l’ensemble, parce que bon, là, c’est quand même un peu gros ;)

Il s’est avéré qu’un certain nombre de personnes se sont intéressées à ce montage, et il apparaît qu’un vrai besoin existe, les appareils spécialisés étant hors budget pour un certain nombre de personnes, et peu de solutions alternatives existent.
Un ami m’a donc donner un « vrai » sonotone, afin que je puisse regarder comment c’était conçu.

Un "vrai" sonotone

Un "vrai" sonotone

Le sonotone sans ses éléments mobiles

Le sonotone sans ses éléments mobiles

Les interfaces de réglage

Les interfaces de réglage

Vue de l'intérieur : les potentiomètres de réglage.

Vue de l'intérieur : les potentiomètres de réglage. à droite, on voit l'écouteur (en bas) et le micro (en haut)

L'interieur, l'autre face

L'interieur, l'autre face

L'intérieur : la puce de traitement

L'intérieur : la puce de traitement

Voilà, malheureusement, c’était encore pire que ce que je craignais : hormis les potentiomètre de réglage, le micro et l’écouteur, il reste 3 condensateurs de découplage, et le reste….. est entièrement intégré dans la puce spécialisée.
La puce est référencée H4001S, mais une recherche de datasheet m’invite à croire qu’il s’agit d’un modèle spécialisé, créé pour le besoin, et donc introuvable sur le marché.

(si quelqu’un a des infos là-dessus, je suis preneur)

Dimanche, février 19 2012

Amélioration de la lampe de poche immortelle

Je voulais apporter quelques améliorations à la première version réalisée ici:



Tout d'abord améliorer la protection (la mettre dans une boite), mais je n'arrivais pas à trouver un objet que n'importe qui puisse trouver. Et puis j'ai eu une révélation quand une de mes filles est venue me réclamer un carré de chocolat pour la troisième fois de la journée:   l'oeuf Kinder. C'est facile à trouver, c'est solide et c'est mignon.




Deuxième amélioration: plus de luminosité. J'ai commencé par essayer avec 2 leds. C'était pas mal. Mais je n'aime pas trop le coté froid des LEDs blanche, j'ai donc essayé avec des "Warm" LEDs. Elles sont un peu moins puissante alors j'en ai mis trois.
J'ai d'abord essayé de les brancher en série, pensant que c'était le seul moyen les LEDs ayant forcément des seuils légèrement différents, je pensais qu'une seule s'allumerais. Mais le branchement en série des LED fait chuter énormément le rendement du joule-thief. J'ai quand même essayé en parallèle et toutes les LEDs s'allument avec la même intensité mais sans perte de rendement. Ce sera donc en parallèle.

Troisième changement: pas de perte d'autonomie. J'ai décidé de mettre 2 super condensateurs 10 Farad pour compenser l'augmentation de puissance en sortie. La même question s'est posée: série ou parallèle? Là aussi le montage en série semblait plus intéressant: on arrive à une tension des condensateur de 5,4 V  (2,7 X 2), donc super intéressante car le port USB fonctionne en 5V. Donc pas de protection à mettre (pas besoin de diode Zener ou de Led). Mais malheureusement, après plusieurs essais, je renonce au montage série car il y a trop de pertes (une autonomie de 7 minutes contre 17 minutes en parallèle). Ce sera donc parallèle avec une petite LED verte pour m'avertir que la charge des condensateurs est arrivé à 2,2 V.

Voici le schéma de montage final:




Une fois tout ça soudé, ça donne ceci:



Petit test d'allumage, ça marche !


Maintenant, il faut essayer de faire rentrer tout ça dans l'oeuf. J'ai rêvé toute ma vie d'être ingénieur chez Kinder. Mais je sais aujourd'hui que j'ai fait le bon choix: c'est un métier de m......

Enfin, ça a bien fini par rentré. Après quelques pattes cassées, ressoudées et quelques hurlements de ma part.



Voilà l'oeuf terminé:




N'hésitez pas à m'envoyer d'autres idées d'amélioration.
A+





TAGS: ultracap, supercondensateur, joule thief, flashlight, usb, LED, DIY, gold cap, 3000 farad

Dimanche, février 12 2012

DIY – Plasma speaker

Une des expériences les plus amusantes qu’il m’ait été donné de faire jusque là. Merci à Fabien pour son aide dans cette réalisation, et pour les vidéos qu’il prenait pendant que je gérais les branchements ;)

L’idée consiste à produire un arc électrique, puis à le moduler en fonction d’un musique, de façon à ce que l’éclair reproduise le son correspondant. (En fait, la fréquence à laquelle se produisent les éclairs).

La première étape consiste donc à produire un bel arc électrique.

Un petit arc électrique

Un petit arc électrique

Pour produire l’arc, j’utilise un transformateur THT de télévision cathodique, que j’excite avec un circuit oscillant à base de ne555.
Avant d’aller plus loin, quelques petites remarques importantes. Bon, déjà, je le rappelle au cas où, mais vous vous en doutez, la haute tension est dangereuse, et ici on va jouer avec des tensions largement supérieures à 10 000v. Il est donc exclu de toucher le montage en fonctionnement ! Mais ce n’est pas tout ! Le transformateur THT garde une charge capacitive pendant très longtemps ! Et je parle en connaissance de cause : Je me suis pris une jolie châtaigne 15 jours après la dernière utilisation du montage. Deuxième point auquel faire attention : il existe plusieurs enroulements sur ce type de transformateurs, et avoir déchargé l’enroulement principal, pensez bien à court-circuiter toutes les broches restantes afin de décharger les charges résiduelles des autres enroulements.

Maintenant que c’est dit, voyons le montage proprement dit. Il s’agit d’un oscillateur à base de ne555 assez classique, avec quelques petites spécificités.

Schéma oscillateur THT

Schéma oscillateur THT

Pour les valeurs des condensateurs C1 et C2, elles seront à adapter en fonction de votre montage, mais voici les valeurs que j’ai utilisé : C1, 470uF, à adapter en fonction de la consommation de votre montage (trop petit dans mon cas, mais ce n’est pas vraiment critique), C2 entre 150 et 350pF. C2 va régler la fréquence d’oscillation du montage, et je suis parti sur une plage de fréquence comprise entre 50KHz et 80KHz.

Les diodes D1 et D2, ainsi que le potentiomètre R2 servent à moduler le rapport cyclique du signal. En effet, Fabien avais trouvé une courbe montrant clairement le lien entre le rendement du transformateur et le rapport cyclique. L’inconvénient du montage ci-dessus est que la modification du rapport cyclique modifie également la fréquence d’oscillation (d’où la plage 50-80KHz), ce qui ne nous a pas permis de déterminer si le facteur le plus important était la fréquence ou le rapport cyclique.
Le connecteur J2 correspond au branchement de l’entrée son (filtrée par un petit condensateur de 1nF dans mon cas)
Le connecteur Charge correspond au branchement du bobinage primaire de la THT. Ce primaire a été réalisé en enroulant entre 4 et 10 tours de fil de cuivre émaillé autour de la ferrite du transformateur. Sur ma THT l’espace entre la ferrite était important, et j’ai pu passer du fil de gros diamètre (2mm), je me suis contenté de faire 4 tours. Sur celle de Fabien, l’espace était minuscule, et on n’a pu faire passer que du fil de 5/10eme, on a donc fait plus de tours, sans que cela gène le fonctionnement (ni ne l’améliore vraiment d’ailleurs)

Le typon du montage

Le placement des composants - cliquez sur l'image pour le typon en pdf

Dernier détail : ne lésinez pas sur la taille des fils d’alimentation (il va passer facilement 4A), ni sur la taille du radiateur du mosfet. J’en ai utilisé un énorme, (radiateur alu de 15cm sur 10, et 5 de haut), et il chauffe quand même pas mal. D’ailleur en parlant du mosfet, il n’est pas vraiment critique, on a fait avec de la recup. Les points à faire attention sont essentiellement le voltage d’excitation (5V max), la tension et l’intensité max qu’il peut supporter : 150v/10A me semble pas mal ;)

Une petite vidéo des premières tentatives :

Le principal problème de ce montage est le support en plastique qui commence à fondre au bout de quelques secondes à peine. Pour y remédier, j’ai réaliser un support à partir de chutes de circuit imprimé

Support électrodes

Support électrodes

L’intérêt de ce nouveau support est qu’il ne fond pas, qu’il dissipe la chaleur des électrodes, et que l’espacement entre les électrodes est réglable très simplement.
L’autre problème viens du volume sonore assez faible, problème qui a été résolu…. en ajoutant un ampli entre la sortie du pc et l’oscillateur.

Concrètement comment ça marche tout ça : le NE555 est utilisé en tant que VCO (Voltage Controled Oscillator, ou oscillateur contrôlé en tension) : sa fréquence de base est modulée par les différents niveaux de tensions en sortie de la carte son du pc. Chaque Oscillation produit un arc électrique, qui produit une vibration de l’air environnant, ce qui produit un son audible.
On s’est d’ailleurs rendu compte que l’éclair n’est pas forcement obligatoire pour avoir du son : le vent ionique produit par effet corona suffit à produire un son audible, bien que plus étouffé.

Voilà, une petite vidéo du résultat final ?

Bon, et comme on avais une jolie source de haute tension à notre disposition, on a fait quelques essais…. Tout d’abord, la taille maximale des arcs qu’on pouvais produire :


Personnellement, j’aime bien le final :)

Et pour finir, dernière expérience bien marrante également: on a voulu dévier l’arc électrique à l’aide d’aimants puissants. Voilà ce que ça donne, avec 2 aimants  (notamment à partir de 0:30):

Samedi, septembre 3 2011

Ajout d’une liaison sans fil Xbee 802.15.4 sur une station météo La crosse Technology WS2305

Il y a 3 ans, j’avais branché ma station météo d’abord sur une Fonera, puis ensuite sur un routeur Netgear WL500 afin d’envoyer les données météo sur un serveur. Ce montage très simple a été remis en cause par une panne « définitive » du routeur et par l’utilisation de la Fonera sur un autre projet. De plus il y avait quelques inconvénients: la consommation électrique du routeur et la présence d’un transformateur, le câble série…

p30_lcf_72dpi_ws2305bla_alu.jpg

Souhaitant à nouveau brancher ma station sur internet, j’ai décidé de  changer de stratégie. Etant donné que je dispose d’un mini PC sous XBMC qui me sert de magnétoscope numérique, j’ai préféré envoyer les données météo sur ce PC. Il me fallait donc une liaison sans fil entre le PC et la station météo qui soit bi directionnelle et qui supporte la distance entre les 2 équipements.

J’ai à ma disposition 2 modules Xbee Pro 802.15.4 permettant le transport d’une liaison série TTL sur la bande des 2.4GHz.

Comme détaillé dans le précédent article sur la liaison avec la Fonera,  il faut localiser à l’aide d’un oscilloscope les signaux TTL de la liaison série de la station. La sortie sur le côté étant à la norme RS232, elle ne convient pas, il faut trouver les signaux en amont du convertisseur RS232 formé ici par des transistors.

IMG_1152_800x600.jpgOn localise sur la carte mère de la station météo 4 points: une masse (GND), une source de courant d’environ 3v (Vcc), le signal Tx et le signal Rx.

Les fils sont ensuite reliés à la carte supportant le module Xbee:

  • Xbee Vcc <-> WS2305 3v
  • Xbee GND <->  WS2305 GND
  • Xbee Tx <-> WS2305 Rx
  • Xbee Rx <-> WS2305  Tx

Le module Xbee normalement alimenté en 3.3v sera ici alimenté en 3.02 V, seule tension disponible sur la carte en dehors des 6v du bloc d’alim.

La carte mère de la station peut maintenant être réinstallée dans son boitier. Le module Xbee est relié par des fils d’une dizaine de centimètres, ce qui permettra de lui trouver une place dans la station.

Le seul emplacement disponible et accessible facilement pour y placer le module c’est le compartiment des piles. Celui-ci n’étant pas utilisé lorsque la station est alimentée par le secteur, le logement est un candidat parfait. La carte d’accueil du module Xbee est collée avec de la colle à chaud au fond du compartiment.

Le module Xbee nécessite juste de plier délicatement l’antenne pour pourvoir refermer le compartiment des piles.

Voilà pour la station météo. Côté PC, nous utilisons un autre module Xbee sur une carte fille (Xbee Explorer chez Sparkfun ) disposant d’un port USB.

Le module est alors vu comme un convertisseur USB / Série FTDI.

usb 4-5: FTDI USB Serial Device converter now attached to ttyUSB0

Afin de permettre aux deux modules de communiquer, il faut configurer quelques paramètres:

  • Les adresses des modules.
  • La puissance du signal.
  • La vitesse du port série.

La configuration se fait sous windows ( :-( ) à l’aide de l’utilitaire X-CTU.

Il faut d’abord régler les adresses des modules.

On paramétrera « Destination Address Low » à 1 pour le module de la station et « 16 bits source Address » à 2. Sur le module de réception du PC, il faut faire l’inverse c’est à dire « Destination Address Low » à 2  et « 16 bits source Address » à 1.

Les deux modules peuvent alors communiquer entre eux. On peut aussi utiliser une adresse de broadcast mais je n’en voie pas l’intérêt ici.

Ensuite il faut définir la puissance « Power Level » au maximum ( 4 ) ou non suivant vos besoins, ainsi que la vitesse du port série, identique à celle de la station météo (2400 Bps)

Nous avons terminé pour la partie électronique.

Côté logiciel, on va utiliser Open2300, un ensemble d’outils pour récupérer les données en provenance de la station. Il suffira de compiler les sources avec un simple « Make ». Si vous souhaitez stocker vos données dans Mysql, il faudra aussi faire un « Make mysql2300″ pour générer l’utilitaire mysql2300.

Si comme moi vous n’utilisez pas l’anémomètre, il vaut mieux patcher les sources à l’aide du fichier suivant: delay.patch afin de réduire le temps de récupération des données.

 

gzip -d delay.patch
cat delay.patch | patch -p1

Pensez aussi à paramétrer le fichier open2300.conf comme il se doit.

Lancé dans la crontab par exemple, cet utilitaire permettra de transmettre les données de la station sur un serveur Mysql. Un petit script perl pourra ensuite grapher les données à l’aide de RRDTools: graph.pl
Quelques lignes d’ HTML et l’on peut facilement mettre ces données en ligne

Dimanche, août 28 2011

DIY – Chargeur solaire pour batteries au plomb

Vous vous en doutiez, je n’allais pas me contenter de juste mon panneau solaire, pour pouvoir en tirer tout son potentiel, j’allais devoir charger une (des) batterie. Après m’être documenté sur la charge des différents modèles de batterie, il s’avère que les plus simple dans le cas d’un panneau solaire sont les batteries au plomb. Il faut leur appliquer une tension constante pendant la charge (ce qui est le cas avec le panneau solaire), le courant peu lui varier. Les seules choses à faire attention sont la fin de charge (ne pas surcharger la batterie), et le début de la charge (ne pas la laisser se vider trop)

Au cours de mes recherches, je suis tombé sur un ingénieux montage, à base de NE555, qui fait exactement ça : controller le début et la fin de la charge. Le montage d’aujourd’hui n’est donc pas de moi, je me suis « contenté » de faire le PCB, et les tests qui vont avec :)

Schema chargeur solaire

Schema chargeur solaire

Le NE555 n’est absolument pas utilisé ici de manière « conventionnelle », mais en tant que comparateur de tension (voir le schéma interne de la datasheet), les seuils haut et bas sont réglés via les 2 trimmers R1 et R2. Lorsque le seuil bas est atteind, le mosfet est rendu passant, ce qui « ferme » le relai, et autorise donc la charge.

Placement des composants chargeur solaire

Placement des composants

Pour régler le montage, il faut (à l’aide d’une alimentation réglable par exemple) alimenter le montage via la connection batterie (+) et la masse tout d’abord avec 11,9v. Il faut régler le potentiomètre R1 jusqu’à mesurer 1,667v  entre le point marqué TP1 sur le PCB (JP1 sur le schéma) et la masse. Il faut ensuite alimenter en 14,9v, et jouer avec le potentiomètre R2 jusqu’à mesurer 3,333v entre le point TP2 et la masse (JP2 sur le schéma)
Les valeurs 11,9 et 14,9v sont des valeurs « génériques » qui passent bien pour les batteries type onduleur. Si vous connaissez les spécifications de votre batterie, n’hésitez pas à adapter.

Typon chargeur solaire

Connection du chargeur à l'installation solaire

Connection du chargeur à l'installation solaire

Lorsque la tension de la batterie passe sous les 11,9v, la charge s’active. Lorsqu’elle dépasse les 14,9v, elle s’arrête. Entre les 2, les 2 boutons poussoir vous permettent de passer d’un état à l’autre.

Bon, et comme je vous avais promis une petite nouveauté pour la rentré, la voici : Les personnes intéréssées par ce montage peuvent l’acheter sous forme de kit à assembler :)

J’ai même travaillé le packaging ;) (oui, je sais, y’a encore du boulot côté design….)
Pour les intéréssés donc, le kit coûte 33€, auquels il faut ajouter 4€ de frais de port. (une version moins chère mais sans le relais est également disponible sur demande)

Le kit chargeur solaire

Le kit chargeur solaire, 33€ttc


Jeudi, août 18 2011

DIY – Ampli audio Stéréo 40W

Un ami cherchais à équipper sa cuisine d’une petite sonorisation, pour pas trop cher, mais avec une qualité correcte, et de quoi avoir un peu de patate (mais pas non plus trop, la cuisine n’est pas une pièce immense…)

Je lui ai donc conçu un petit ampli à base de TDA8560, qui permet « presque sans rien faire » d’avoir un ampli stéréo 40W. Un des critères de cet assemblage était le coût : il avais vu des amplis pour voiture (donc pas sur 220) aux alentours de 50€, il fallais donc que je vise cette game de prix. Cette contrainte de prix explique au passage pourquoi il n’y a pas de réglage de volume sur l’ampli : un potentiomètre stéréo coûte à lui seul dans les 15€ ! Le réglage du volume se fait donc sur la source (un ipod ici…)

Le transfo utilisé ici est un transfo de récup, 12,5v, 10A, ce qui permet d’obtenir une tension proche du maximal pour cet ampli, en fournissant le courant nécéssaire (10A en pic), sans faire trop chauffer le transfo.

Schéma amplificateur stéréo à base de TDA8560Q

Schéma amplificateur stéréo à base de TDA8560Q

 

Comme vous le voyez, rien de bien méchant : un peu de filtrage en entré, une partie transformation de tension, et tout le reste, c’est le TDA qui travaille ;)
Le petit interrupteur permet de passer l’ampli on/off sans les « plops » et autres bruits désagréables.

Ce montage étant destiné à être mis en boitier, j’ai également réalisé le typon.

Le typon, cliquez pour télécharger en PDF

Le typon, cliquez pour télécharger en PDF

Le placement des composants :

Placement des composants

Placement des composants

Et voilà le travail…

Le montage en phase de test

Le montage en phase de test

Note : pensez à bien dimentionner le radiateur, ça dissipe pas mal ;)

Samedi, juillet 16 2011

Projet DataLogger pour vélo

Encore un projet dans les cartons. Concevoir un petit enregistreur me permettant de stocker sur une carte SD plusieurs paramètres lorsque je fais des sorties à vélo. Je souhaiterai enregistrer:

  • La date / heure
  • La position GPS
  • La vitesse
  • Le cap
  • la cadence de pédalage
  • l’accélération X Y et Z
  • la température
  • Le rythme cardiaque
L’ensemble des données sont récupérées / calculées par un Atmega 328 embarquant du code Arduino. Les données sont ensuite enregistrées sur carte SD et présentées en temps réel sur l’écran.

Voilà un schéma de principe du système. 

Samedi, juillet 9 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 :)

- page 1 de 13