ATTiny et IDE Arduino

Le mar. 13 décembre 2011 par Kasey

J'envisage depuis pas mal de temps d'utiliser des ATTinys dans mes montages électroniques. En effet, j'ai vu au hasard de quelques surfs qu'il était possible d'utiliser ces petits monstres d'une manière aussi transparente que sur un arduino standard. Je vous livre dans la suite du billet la méthodologie pour les mètres en oeuvre via l'IDE arduino sans se prendre la tête. Ceci devrait vous permettre, tout comme moi, de réaliser rapidement de petits montages électroniques diablement efficaces.

Mise en place de l'IDE

Pour mettre en place les librairies permettant de programmer un ATTiny, personnellement, j'utilise pour le moment les microcodes mis à disposition par le MIT à cette adresse : http://hlt.media.mit.edu/?p=1229 (http://hlt.media.mit.edu/wp-content/uploads/2011/06/attiny45_85.zip)). Téléchargez la librairie, désarchivez-la, et placez la dans un dossier hardware de votre sketchbook (si il n'existe pas, soyez autonome et créez-la). Pour trouver ledit dossier, faites un tour dans les préférences de l'IDE arduino, il est noté sous "sketchbook location" (super original).

Voila l'arborescence chez moi si vous avez un doute :

20:16:17 kasey@iunibody:~/Documents tree Arduino/hardware 
Arduino/hardware
??? attiny45_85
    ?? boards.txt
    ??? cores
        ??? attiny45_85
            ?? Makefile
            ?? Print.cpp
            ?? Print.h
            ?? WConstants.h
            ?? WInterrupts.c
            ?? WMath.cpp
            ?? WProgram.h
            ?? binary.h
            ?? main.cpp
            ?? main.cxx
            ?? pins_arduino.c
            ?? pins_arduino.h
            ?? wiring.c
            ?? wiring.h
            ?? wiring_analog.c
            ?? wiring_digital.c
            ?? wiring_private.h
            ?? wiring_pulse.c
            ??? wiring_shift.c

3 directories, 20 files

Lancez l'IDE arduino ou relancez-le s’il tourne. Dans le menu Tools > Board vous devriez avoir pleins de nouvelles entrées, par défaut à partir de maintenant, sélectionnez toujours "Votre Attiny (w/ Arduino as ISP)" pour le type de programmation, vu que l'on est un peu pauvres, on va flasher via un arduino.

/!\ Attention : pour que cela fonctionne, utilisez la version 0.22 de l'IDE arduino, pas la version 1.0

Programmation des ATTiny45 et ATTiny85

Flasher un arduino en tant que programmateur

Rien de plus simple, dans votre IDE :

  • configurez-vous en board de votre type d'arduino (Uno ou Duemilanove)
  • ouvrez depuis les exemples "ArduinoISP"
  • flashez votre arduino
  • it's done

Programmer un ATTiny avec un arduino

Ici, tout est simple, il faut ajouter 4 fils depuis l'arduino vers votre ATTiny en suivant le mapping ci-dessous. Si vous utilisez un arduino UNO la capa de 10uF entre le reset et la masse semble inévitable. Je vous laisse essayer.

Cablage d'un ATTiny avec un arduino pour programmation

Une fois cablé, branchez votre arduino en USB, sélectionnez comme profil de board "Votre attiny (w/ Arduino as ISP)" et programmez votre ATTiny. Si vous ne savez pas quel programme charger, vous pouvez utiliser le blink custom suivant :

#define LED PB1

void setup() {
  pinMode(LED,OUTPUT);
}

void loop() {
  digitalWrite(LED,HIGH);
  delay(200);
  digitalWrite(LED,LOW);
  delay(200);
}

/!\ Disclaimer /!\ Se montage peut provoquer des crises d'épilepsie. Si vous en faites une, je ne peux être tenu pour responsable, vous avez été prévenu xD

Décablez l'arduino, alimentez votre ATTiny et ajoutez une petite LED avec une résistance de quelques Kilos (peut éviter de claquer la LED) sur la pin 2. Pour ceux qui se demandent comment j'ai trouvé la constante et le nom de la pin, j'explique cela trois lignes plus bas :)

Mapping

Alors le mapping est très simple une fois que l'on a compris que des constantes ont été déclarées pour nous simplifier la vie et que j'ai rapidement expérimenté toutes les idées de noms qui avaient pu être attribuées aux pins …

Comme vous pouvez le voir sur le schéma ci-dessous, l'ATTiny (85 chez moi), dispose de pleins d'entrées/sorties ou IOs (pour faire vocabulaire de pro).

ATTiny Mapping

Notez bien que les entrées PB2 à PB5 sont des entrées analogiques ou sorties logiques (entre autres). Pour PB0 et PB1, il s'agit de sorties PWM. Ces dernières sont bien pratiques pour générer des signaux du voltage presque souhaité (attention a la fréquence de commutation quand même …).

Programmation

Donc, comme expliquées précédemment, les entrées/sorties sont à employer en utilisant des constantes déclarées pour ne pas se prendre la tête. Pour le reste, les fonctions accessibles pour la programmation sont les suivantes :

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogWrite()
  • shiftOut()
  • pulseIn()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Avouons-le, j'ai fait le plus dur en vous disant comment nommer les pins de l'ATTiny.

The Exemple

Un petit exemple de programme complet implémentant une fonction trigger plus un filtre de moyennage rapide (testé fonctionnel avec un détecteur de choc piezo) :

/*
         +-\/-+
A0 PB5  1|    |8  Vcc
A3 PB3  2|    |7  PB2 D0 A1
A2 PB4  3|    |6  PB1 D1
   GND  4|    |5  PB0 D2
         +----+        
*/

#define IN  PB3
#define OUT PB1

short lock;

void setup() {
  pinMode(IN,INPUT);
  pinMode(OUT,OUTPUT);
  lock = 5;
}

void loop() {
  if(analogRead(IN) > 30) {
    if(lock <= 10) lock++;
    if(lock >= 10) { digitalWrite(OUT,HIGH); delay(1000);}
  }
  if(analogRead(IN) < 10) {
    if(lock > 0)   lock--;
    if(lock == 0)  { digitalWrite(OUT,LOW); }
  }
}

Sources

Et comme je fais mieux mes devoirs que la presse pro, voila mes sources pour la rédaction de ce billet :