Atelier DIY #9 : ATtiny – simple et efficace

05/02/2014 Aucun commentaire

4 ans après le premier Atelier DIY, consacré au Circuit Bending, nous revenons avec un 9e atelier consacré à la programmation des puces ATMEL ATtiny.

Ces puces ont l’avantage d’être petites par rapport à une ATMega, car elles ont moins d’entrées/sorties, ce qui peut être pratique pour pas mal de petits projets.

Il y a déjà beaucoup de sources sur internet sur ce sujet, mais il s’avère qu’en réalité il faut aller piocher diverses informations ici et là et finalement on se perd un peu dans ce labyrinthe d’informations.

Cet atelier ne sera que le récit de nos expérimentations.

D’abord, par souci de simplicité et parce que l’AVR ISP mkII est le programmateur fabriqué par Atmel, tous les « dumps » de données (bootloader ou code) ont été fait avec, via l’Arduino IDE.

Sachez que le programmateur est totalement pris en charge sur Mac (sur Windows, il doit falloir installer un driver) le logiciel Arduino le reconnait immédiatement, ne perdez pas votre temps à lire les sujets sur internet, si vous avez la dernière version du programme Arduino vous n’aurez normalement aucun problème.

Tout le long des tests nous avons utilisé l’emplacement de la puce ATMega 328 d’une board Arduino UNO comme « breadboard ».

Pour les ATtiny, il faut fabriquer un « shield » car malheureusement les pins de programmation ne sont pas à la bonne place.

Celui en photo ci-dessous permet de programmer les ATtiny à 8 pattes, à savoir ATtiny25/45/85, ce « prototype » n’est pas très joli mais il fonctionne, nous en ferons d’autres plus aboutis et pour les autres séries d’ATtiny.

Première étape : Chargement du bootloader sur une ATMega328

Cette manipulation ne nécessite aucune modification particulière au niveau logiciel, ça sera notre base, la procédure sera la même ou presque pour les ATtiny.

Reliez la nappe de votre programmateur à la board comme sur la photo ci-dessus.

Attention : L’AVR ISP mkII n’alimente pas la board, il faut la relier au secteur ou en USB (mais pas à celui de votre ordinateur).

Vous devez choisir dans l’onglet Outils d’Arduino > Programmateur et sélectionner AVR ISP mkII

Une fois cela fait vous pouvez cliquer sur Graver la séquence d’initialisation qui se situe juste en dessous, dans le même onglet

Attendez la fin de la procédure, et si tout s’est bien passé vous verrez la pin 13 de votre Arduino clignoter (le sketch « Blink » se charge automatiquement quand on envoi un bootloader Arduino UNO)

Pour envoyer des sketchs, on ne change rien, le code va également passer par le programmateur.

Deuxième étape : Charger les fichiers pour que le logiciel prenne en charge les ATtiny

Il va falloir aller ajouter des fichiers dans la partie hardware du programme Arduino

Sous Mac, ça se trouve ici : /Applications/Arduino 1.0.5.app/Contents/Resources/Java/hardware

Nous avons compressé les fichiers au format ZIP, il suffit de copier le dossier tiny à l’emplacement indiqué.

Ces fichiers vont vous permettre de programmer des ATtiny avec le logiciel Arduino, l’ensemble des puces disponibles apparaitra dans Outils > Boards.

C’est une compilation entre :

- Le projet arduino-tiny : https://code.google.com/p/arduino-tiny/
-
 Les bootloaders du Trinket d’Adafruit : http://learn.adafruit.com/introducing-trinket/introduction
- Quelques modifications du fichier boards.txt trouvées sur des forums comme AVR-freaks.

TELECHARGER 

Troisième étape : Faire un projet

L’ATtiny utilisée avec le langage Arduino est au premier abord plus limitée en fonction, avec ses 8K de mémoire (comparé aux 32K de l’Arduino) les codes un peu complexes, voir lourds car chargés de bibliothèques spécifiques ne paraissent pas vraiment possibles, et pourtant ils restent à portée.

Autre problème qui peut être rencontré est la non compatibilité de certaines fonctions comme l’absence de liaison série Tx / Rx ou la non-fonctionnement de certaines fonctions, comme le random()

Il existe des alternatives, et le projet développé pour les tests le prouve.

Nous avions depuis quelques temps une imprimante thermique qui trainait, un modèle un peu étrange dont nous avions jamais bien compris le fonctionnement ni la logique d’encodage des caractères et nous donner la possibilité de lui faire écrire tout et n’importe quoi.

Plutôt que de perdre trop de temps sur cet appareil nous avons décidé de simplifier le code au maximum et de lui faire écrire n’importe quoi, sans logique spécifique, lui laisser faire ce qui lui plaira.

#include <SoftwareSerial.h> // Serial communication with any pin
#include <avr/power.h> // Overclocking

SoftwareSerial mySerial(0, 1); // RX, TX
char ascii;

void setup ()
{
if (F_CPU == 16000000) clock_prescale_set(clock_div_1); // 16Mhz internal oscillator

mySerial.begin(9600); // Serial communication speed

}
void loop()
{
ascii = random(0,127);
mySerial.print(ascii); // Send random ASCII decimal value to the printer

}

 

Cet exemple peut se décrire en quelques mots. On crée une liaison série sur les pins 0 et 1, on crée une variable nommée ascii qui correspond aux codes des caractères ASCII (par exemple si l’on veut écrire un « a » on peut écrire a ou son numéro correspondant : 97). Dans les setup, on indique la vitesse de communication de l’appareil avec lequel on veut communiquer. Et la loop (« boucle ») consiste a générer avec la fonction random() des valeurs ascii entre 0 et 127, valeurs qui sont ensuite transmises à l’appareil.

Mais ? Précédemment, on disait que ni la liaison série, ni le random ne fonctionnait…

Il y a effectivement une étape que nous avons omise… En effet, au début du code nous chargons une librairie appelée « SoftwareSerial » qui émule une liaison série sur n’importe quel pin, et ensuite le bootloader que nous avons chargé préalablement dans l’ATtiny85 est celui du tiny Arduino d’Adafruit : le Trinket.

Cette board est conçue comme un Arduino pour maximiser la compatibilité avec le logiciel, d’où sa capacité à gérer le random, sauf que ce bootloader prend énormément de place sur l’ATtiny, quasiment 3k des 8k disponibles.
Autre point positif, l’ATtiny peut fonctionner à 16Mhz, il faut juste penser à ajouter dans le code : appeler la librairie : #include <avr/power.h> et ajouter dans le void setup() { if (F_CPU == 16000000) clock_prescale_set(clock_div_1); }

A utiliser uniquement si nécessaire, dans 90% des cas les fonctions de base fonctionnent parfaitement bien.

En tout cas, voilà le résultat :

Categories: Ateliers, Blog, DIY, Ressources Tags:

VIDEO : Les Berges de Seine – Official Report

09/12/2013 Aucun commentaire

AUDIO : Atelier à l’Atelier Numérique – 2 Novembre 2013

04/11/2013 Aucun commentaire

Atelier circuit bending dans le cadre de la Fabrique du Son à l’Atelier Numérique (Versailles)

Categories: Ateliers, DIY, Evenements, Musique Tags:

VIDEO : Atelier sur les Berges de Seine – 25 Septembre 2013

27/09/2013 Aucun commentaire

25 Septembre – Berges de Seine

23/09/2013 Aucun commentaire

glazart berges de seine

 

———————————————–
13h00 à 18h00 / ATELIERS 
———————————————–

Atelier CIRCUIT BENDING 
par BRIGADE NEURALE

Atelier MAKEY MAKEY
par Armada Production

Atelier Masques Carton Park
par Armada Production

LIVE PAINTING
par KAZY

———————————————–
12h00 à 19h00 / CONCERTS 
———————————————–

KUMISOLO

GANGPOL

MILK & FRUIT JUICE (Toy Music)

BALADES SONORES DJ SET