LOCODUINO

Aide
Forum de discussion
Dépôt GIT Locoduino
Flux RSS

mardi 19 mars 2024

Visiteurs connectés : 85

Programmation des ATtiny Digispark

Une autre famille d’Arduino

.
Par : Dominique, msport

DIFFICULTÉ :

La série d’articles sur les ATtiny Le microcontrôleur ATtiny45 (10) a un succès certain, notamment sur le forum pour des applications diverses de l’éclairage dans le décor aux décodeurs de locomotives et d’accessoires.
Mais programmer ces composants peut rebuter certains modélistes car ils n’ont pas de prise USB pour les programmer comme les autres cartes Arduino (y compris Tensy, ESP32, ESP8266, ..).
Nous allons nous pencher sur une famille d’ATtiny dénommée Digispark qui a fait l’objet de financement participatif sur KickStarter [1] [2], qui dispose d’une prise micro-usb et que l’on trouve facilement à un prix raisonnable comme les clones Arduino.

Mais nous ne décrivons ici que l’installation dans l’IDE Arduino des ressources nécessaires et une première utilisation simple des 2 cartes ATtiny 85 et 167.


Ces cartes et ces ATtiny sont capables de faire beaucoup plus mais, avec les outils et liens qui seront indiqués, chacun pourra explorer dans d’autres directions et partager cette expérience sur le Forum.

<

Ma première expérience a été la réalisation de l’animation lumineuse à l’intérieur d’une gare Un BV animé par ATtiny 85 où on trouvera tous les détails sur la construction mécanique de cette gare et l’intégration de leds dans les plafonds et le code pour l’ATtiny85 installé à l’intérieur.

J’ai bien d’autres bâtiments à animer dans le décor de mon réseau et je pense utiliser un autre modèle : l’ATtiny167 qui est plus riche en ports d’entrée-sortie.

Mais il faut commencer par présenter ces petites cartes Digispark qui se programment sur le port USB.

Une recherche sur le site KickStarter ne mentionne que 2 petites cartes équipées d’une prise micro USB que l’on voit côte à cote sur cette photo :

Figure 1 : Les cartes Digispark ATTiny85 et ATTiny167
Figure 1 : Les cartes Digispark ATTiny85 et ATTiny167
DigisparkNb de PinsFlashRam
ATtiny85 8 8KB 512B
ATtiny167 20 16KB 512B

D’après la fiche technique de Microchip, le microcontrôleur ATtiny85 [3] une architecture AVR RISC de 8 bits haute performance et faible consommation. Il combine une mémoire flash ISP de 8 Ko, une EEPROM de 512 octets, une SRAM de 512 octets, 6 lignes d’E/S à usage général, 32 registres de travail à usage général, une minuterie de 8 bits, un compteur avec modes de comparaison, une minuterie/compteur haute vitesse 8 bits, USI, interruptions internes et externes, convertisseur A/N 4 canaux 10 bits, minuterie de surveillance programmable avec oscillateur interne, trois modes d’économie d’énergie sélectionnables par logiciel et debugWIRE pour le débogage sur puce. Il atteint un débit de 20 MIPS à 20 MHz et fonctionne entre 2,7 et 5,5 volts.
Ses dimensions sont : 18 x 25 mm.

Figure 2 : Affectation et fonctions des broches de la carte ATTiny85.
Figure 2 : Affectation et fonctions des broches de la carte ATTiny85.

Note : Le modèle pro est équipé d’une prise microUSB à la place de la languette à gauche.

Le microcontrôleur ATtiny167 [4] 8 bits AVR RISC haute performance et faible consommation combine une mémoire flash ISP de 16 Ko, une EEPROM de 512 octets, une SRAM de 512 octets, 16 lignes d’E/S à usage général, 32 registres de travail à usage général, une minuterie de 8 bits/compteur avec modes de comparaison, minuterie/compteur haute vitesse 8 bits, interface série universelle (USI), un contrôleur LIN, interruptions internes et externes, un convertisseur A/N 11 canaux 10 bits, minuterie de surveillance programmable avec oscillateur interne, et trois modes d’économie d’énergie sélectionnables par logiciel. L’appareil fonctionne entre 1,8 et 5,5 volts. Il atteint des performances proches de 1 MIPS par MHz, équilibrant la consommation d’énergie et la vitesse de traitement.
Ses dimensions sont : 18 x 27 mm.

Figure 3 : Affectations et fonctions des broches de l'ATTiny137.
Figure 3 : Affectations et fonctions des broches de l’ATTiny137.

Installation dans l’IDE Arduino

La première étape consiste à déclarer dans les préférences les ressources de ces microcontrôleurs afin de les voir apparaitre dans le gestionnaire de cartes :

Ouvrir les préférences :

Figure 4 : Préférences de l'IDE Arduino
Figure 4 : Préférences de l’IDE Arduino

Editez le champ "URL de gestionnaire de cartes supplémentaires".
Ajoutez l’URL suivante : "http://digistump.com/package_digist..."
Et ajouter aussi cette URL : "http://drazzy.com/package_drazzy.co..."

Figure 5 : ajouter les URL des ressources pour les cartes Digispark.
Figure 5 : ajouter les URL des ressources pour les cartes Digispark.

Cliquez sur OK sur cette fenêtre et sur OK pour enregistrer les préférences.

Maintenant allez dans le gestionnaire de cartes et sélectionnez "Digistump AVR Boards" qui correspond à la première URL ci-dessus.

Figure 6 : installation des cartes "Digistump".
Figure 6 : installation des cartes "Digistump".

Puis cliquez sur "Installer"

Pendant que vous y êtes, toujours dans le gestionnaire de cartes, sélectionnez "ATTinyCore" qui correspond à la 2ème URL ci-dessus et installez.

Figure 7 : Installation des cartes "ATTinyCore".
Figure 7 : Installation des cartes "ATTinyCore".

Pourquoi ces deux environnements ? Parce qu’ils diffèrent sur plusieurs points : Le premier (Digistump) offre plus d’exemples et de bibliothèques que le second (ATTinyCore).

Figure 8 : liste d'exemples Digistump et ATTinyCore
Figure 8 : liste d’exemples Digistump et ATTinyCore

Par exemple, DigiStump permet d’exploiter le mode de communication HID (Human Interface Device) présent sur le port USB : il n’est pas possible, avec ces cartes, de communiquer avec un Serial.print, mais avec un DigiKeyboard.print. C’est une manière étrange de "sortir" des textes dans une fenêtre texte (NodePad ou Textedit) [5] pendant l’exécution du programme, au lieu de la fenêtre "moniteur" de l’IDE.

A l’opposé, ATTinyCore ne se limite pas aux cartes Digispark et permet de programmer toutes sortes de composants ATtiny en utilisant les méthodes décrites dans les articles Le microcontrôleur ATtiny45 (10).

Attention, cet article ne décrit rien d’autre que la prise en main des ces cartes ATtiny dans l’IDE Arduino. A vous d’en explorer les possibilités par vous-même.

Maintenant toutes les ressources nécessaires pour programmer vos ATtiny Digispark Pro sont installées dans votre IDE... Sauf pour le système Windows dans lequel il faut aussi installer un pilote (ou "driver") pour la communication par le port USB pendant le téléversement, qui est très spécial à ces cartes Digispark ! Pour les utilisateurs de MacOS (et peut-être Linux), il n’y a rien à installer de plus.

Voici comment faire pour Windows :

Installation du pilote Windows

IL faut d’abord récupérer le programme d’installation de ce driver :
On télécharge : DigistumpArduino-master.zip

On extrait micronucleus-2.0a4-win.zip de tools dans le répertoire enregistré sur le disque dur.
C :\Users\xxx\Downloads\DigistumpArduino-master.zip\DigistumpArduino-master\tools\micronucleus-2.0a4-win.zip\

Figure 9 : à la recherche du pilote Windows !
Figure 9 : à la recherche du pilote Windows !

Dans lequel on trouve DPinst64.exe pour les systèmes X64, DPinst.exe pour les systèmes X32. Il faut lancer cet utilitaire directement (et non via le .bat) ce qui permet d’installer le pilote émulateur de port COM pour l’opération de téléversement seulement (sans lui, le téléversement échoue !).

Pour Windows 10, le pilote n’apparait que dans les périphériques cachés du gestionnaire de périphériques en tant que "libusb-win32 devices". On ne voit pas le port de l’ATtiny dans le sous-menu "port" de l’IDE, ni dans n’importe quel émulateur de terminal. Ceci est normal et cela condamne définitivement l’utilisation des instructions Serial.print dans les sketchs (ce qui est précisé plus haut), mais une communication entre la carte Digispark et un moniteur est toutefois possible en utilisant la bibliothèque SoftSerial et un adaptateur externe USB-série, ou le bus I2C avec un Arduino connecté et programmé pour cela, mais n’est pas le sujet de cet article.

Nous allons utiliser maintenant ces ressources pour programmer notre ATtiny avec la connexion USB de notre ordinateur. Il y a deux cas possibles :

Programmation avec Digistump

Pour programmer un Digispark Pro ATtiny 85, sélectionnez "Digispark (Default - 16,5Mhz)" dans le menu "type de carte"

Figure 10 : choix de la carte Digispark (Default - 16,5MHz)
Figure 10 : choix de la carte Digispark (Default - 16,5MHz)

Entrez votre premier programme de test dans le menu Exemple :

Figure 11 : ouverture de l'exemple "Start"
Figure 11 : ouverture de l’exemple "Start"

ou copiez-coller le sketch suivant :

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(0, OUTPUT); //LED on Model B
  pinMode(1, OUTPUT); //LED on Model A  or Pro
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(1, HIGH);
  delay(250);               // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(1, LOW); 
  delay(250);               // wait for a second
}

A ce stade vous pouvez vérifier que la compilation du programme se passe bien sans erreur, mais ne branchez pas la carte Digispark pour le moment.

Maintenant cliquez sur le bouton "Téléverser" et observez que le texte suivant s’affiche en bas de l’écran, sous le texte du programme à la fin de la compilation :

Maintenant branchez le câble USB relié au Digispark à votre ordinateur et observez l’affichage du texte suivant sous le précédent :

Vous devez voir clignoter la led ’BUILTIN" de la carte.

Programmation avec ATTinyCore

Cette fois-ci sélectionnons l’ATtiny85 dans la liste des microcontrôleurs de l’ATTinyCore :

Figure 12 : choix de l'ATTiny85 Pro dans l'ATTinyCore
Figure 12 : choix de l’ATTiny85 Pro dans l’ATTinyCore

Puis nous pouvons vérifier et téléverser le programme "Start" précédent de la même manière. Mais cette fois il n’est pas nécessaire de brancher la carte après le lancement du téléversement. Si la carte est déjà branchée, ce dernier s’effectue automatiquement, sauf sous Windows qui refuse la connexion USB du Digispark : on a une alternance détection / erreur toutes les secondes environ : il faut brancher la carte quand l’invitation est affichée :
> Please plug in the device ...

Quelles différences entre les 2 types de ressources Digistump et ATTinyCore ?

D’abord, on remarque que la taille du code est plus petite (692 octets au lieu de 718) qu’avec Digistump.

Avec les ressources "Digistump" le type de carte est peu renseigné et il est nécessaire de choisir le carte Digispark (Default- à 16,5 MHz car la ligne "Pro" à 16Mhz ne marche pas.

Figure 13 : type de carte Digispark/Digistump
Figure 13 : type de carte Digispark/Digistump

Avec les ressources "ATTinyCore", le type de carte est beaucoup mieux renseigné et il n’y a plus d’ambigüité sur le type Défault, Pro ou non :

Figure14 : type de carte ATTinyCore
Figure14 : type de carte ATTinyCore

De plus, ces ressources couvrent toutes sortes de modèles ATtiny et de méthodes de programmation. Nous allons donc conserver cet ATTinyCore dans la suite de cet article, en particulier pour le Digispark ATtiny167 qui apparait bien dans la liste.
N’oublions pas les spécificités de l’environnement Digistump décrites plus haut qui peuvent permettre des projets spécifiques (à découvrir par vous-même).

Dans les deux cas, on remarque l’absence du nom de Port et ceci est important à savoir : la communication par le port USB n’est pas un Serial Port comme dans le cas des autres Arduino, mais un port spécial simulé par le micronucleus embarqué dans la puce pour les besoins du bootloader. Cela signifie qu’on ne peut pas faire communiquer les cartes Digispark avec le moniteur de l’IDE. Mais il existe d’autres moyens de communication qui sont consultables dans les documentations Digispark

Rappel : si on veut programmer des puces ATtiny sans ce support Digispark, on se rendra directement sur la série d’articles sur les ATtiny Le microcontrôleur ATtiny45 (10).
Une très belle réalisation d’une carte de programmation est également décrit sur le forum, ici :
Réalisation de carte pour compléter le shield ATtiny

Un exemple d’animation lumineuse d’une gare

Ce programme est extrêmement simple et peut être modifié à loisir pour toutes sortes d’animations lumineuses dans les maisons et bâtiments du décor.

Le commentaire au début précise l’affectation des pins et les actions associées.
Pour l’ATTiny167, on pourra utiliser les pins 6 à 12 en supplément.

Ces actions consistent à allumer et (parfois) éteindre une led (ou un groupe de leds en parallèle) avec des constantes de temps (tempo1 et tempo2) qui sont très longues.

Pour plus de vraisemblance, on utilise un générateur pseudo aléatoire classique basé sur la lecture de la pin 5 restée en l’air.

/*
 * animation lumineuse de la gare de La Roche
 * basée sur un ATtiny85
 * 5 pins utilisées : 0 à 4
 * pin 0 = entrée clients, toujours allumée
 * pin 1 = bureau de vente, avec employé
 * pin 2 = salle d'attente, parfois éteinte
 * pin 3 = bureau, parfois allumé
 * pin 4 = etage, parfois allumé
 * pin 5 = entrée analogique pour faire de l'aléatoire
 * une temporisation de 10 secondes change l'état des leds
 * 
 * Version 1.01 du 15 juin 2017 Dominique (Locoduino)
 */

 // constantes
 const int tempo1 = 5000;
 const int tempo2 = 10000;

 // variables
 byte leds = 0B00011111; // état des leds - - - 4 3 2 1 0
 unsigned long temps;
 byte randBit, randByte;
 int tempo;
 
 
 void setup() {
  pinMode(0,OUTPUT); // entrée clients
  pinMode(1,OUTPUT); // bureau de vente
  pinMode(2,OUTPUT); // salle d'attente
  pinMode(3,OUTPUT); // bureau
  pinMode(4,OUTPUT); // etage
  temps = millis();
  tempo = tempo1;
  randomSeed(analogRead(5));
}
 
 
 void loop() {
  for (int i=0; i<5; i++) {
    digitalWrite(i, bitRead(leds, i));
  }

  if (millis() > temps+tempo) {
    temps = millis();
    if (tempo == tempo1) {
      tempo = tempo2;
    } else {
      tempo = tempo1;
    }
    randBit = random(2,5); // donc 2 ou 3 ou 4
    randByte = 0;
    randByte = bitSet(randByte,randBit);
    leds = leds ^ randByte;
  }
}
 

Pour mieux juger des effets lumineux, vous pouvez consulter la vidéo au début de cet article.

[5Si vous essayez cette méthode de communication, sachez que les cartes "parlent" en mode "clavier US" et que vous risquez de polluer une fenêtre en premier plan, comme celle de votre programme en cours de mise au point par des insertions de caractères indésirables

9 Messages

Réagissez à « Programmation des ATtiny Digispark »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Matériel »

Le microcontrôleur ATtiny45 (1)

Le microcontrôleur ATtiny45 (2)

Le microcontrôleur ATtiny45 (3)

Le microcontrôleur ATtiny45 (4)

Le microcontrôleur ATtiny45 (5)

Le microcontrôleur ATtiny45 (6)

Le microcontrôleur ATtiny45 (7)

Le microcontrôleur ATtiny45 (8)

Le microcontrôleur ATtiny45 (9)

Le microcontrôleur ATtiny45 (10)

Fonctionnement et pilotage d’une DEL

Qu’est ce qu’une carte Arduino ?

Amplifier le signal de sortie d’un ARDUINO avec un ULN 2803

Un minimum pour jouer rapidement avec un Arduino

Où acheter ?

Résistances, kézako ?

Les cartes Teensy

Relais électromagnétique

Les diodes classiques

Détecteurs à ultrasons

De nouveaux composants pour continuer à jouer

La carte Arduino Uno

Bouton poussoir

Les différents types de mouvements d’un servomoteur

Les encodeurs en quadrature

Les indispensables du prototypage

Les écrans LCD alphanumériques

Des bus de communication pour l’Arduino

Les interrupteurs

Signaux lumineux et Arduino

Les shields de prototypage et de connexion

Commande de moteur à courant continu

Choisir sa carte Arduino

Une station DCC complète, polyvalente et économique avec JMRI.

Écran couleur tactile Kuman

Capteurs à effet Hall

Programmation des ATtiny Digispark

Ma première centrale DCC

Ma première manette DCC (1)

Une station DCC minimale avec boutons de commande et écran Oled

Ma première manette DCC (2)

Le Raspberry Pi Pico

Signalisation et sonorisation du va-et-vient pour deux trains

Configurateur de CV sur base de la station DCC minimale

Fabrication d’un programmateur pour microcontrôleurs ATtiny

Détection RailCom© avec ESP32 (ou Arduino)

Adieu Uno, bonjour Uno !

Ma nouvelle manette DCC avec ESP32 (1)

Ma nouvelle manette DCC avec ESP32 (2)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (2)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (3)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino.(4)

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (5)

Les derniers articles

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (5)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino.(4)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (3)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (2)


bobyAndCo

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)


bobyAndCo

Détection RailCom© avec ESP32 (ou Arduino)


bobyAndCo, catplus

Ma nouvelle manette DCC avec ESP32 (2)


msport

Ma nouvelle manette DCC avec ESP32 (1)


msport

Adieu Uno, bonjour Uno !


Christian

Fabrication d’un programmateur pour microcontrôleurs ATtiny


Christian, Dominique, Jean-Luc

Les articles les plus lus

Une station DCC complète, polyvalente et économique avec JMRI.

Commande de moteur à courant continu

Capteurs à effet Hall

Les différents types de mouvements d’un servomoteur

LES SATELLITES AUTONOMES : une nouvelle approche du concept de Satellites Locoduino. (1)

Bouton poussoir

Les cartes Teensy

Des bus de communication pour l’Arduino

Les interrupteurs

Le Raspberry Pi Pico