pave Interruptions2 INTERRUPTIONS
1/7
astronomie titre

INTERRUPTIONS SUR ATTINY

Standardisation personnelle Arduino

Après avoir galéré pas mal de temps, pour voir qu'il était tout autant facile que difficile de pénétrer dans le monde arduino en se passant des cartes toutes prêtes telles qu'UNO, NANO, PRO MINI, etc..., etc... Souhaitant embarquer le matériel, il faut voir petit et se tourner vers les puces qui tiendront moins de place. Le travail avec les ATTiny 85, 84, 861 et 88 en fonction des besoins en pattes, est indispensable.

Premier réflexe, glaner de-ci delà des exemples sur le net. Avouons que tout cela est très confus. Les exemples pour ATTiny85 sont assez répandus, mais, il y a un peu de tout. Pour le reste, les exemples sont rares. Les déclarations d'entrées et de sorties ne sont pas toujours identiques. Donc la vérification des sources qui sont fonctionnelles s'impose. De suite, on remarque une incohérence dans l'utilisation des références des broches.

Pour éviter l'éparpillement, Je décide de faire un référentiel. Travaillant depuis quelque temps avec les IDE 1.0 et 1.06, les librairies ayant évolué vers des IDE plus récents, je procède à l'installation de la version 1.8.13 avec la librairie ATTinyCore (http://drazzy.com/package_drazzy.com_index.json).

Une recherche des références de broches dans cette librairie et un examen détaillé des DataSheets des puces me conduiront à créer une table que j'utiliserai systématiquement pour tous mes développements à venir. La définition des broches dans le programme se fera en utilisant les colonnes DIGITAL, ANALOG et surtout la notation des ports (PAx, PBx, PCx, PDx). Mon but au final est de pouvoir transposer sans trop de difficultés les codes d'une puce à une autre. On souhaite parfois adapter ou améliorer un montage qui ne dispose plus de suffisamment de broches.

BRANCHEMENTS SPI

Pour compléter cette démarche, la création d'un code de couleurs pour les câbles est nécessaire. Les couleurs standards des câbles en vente par lots sont noires, rouges, jaunes, blanches, bleues et vertes. Le code suivant est établit pour correspondre à la prise SPI (Serial Peripheral Interface). Le branchement SPI sur le circuit se fera en utilisant les colonnes SPI des entêtes ci-dessous. Le choix des couleurs a été fait suite à la lecture des plans de broches (PINOUT) trouvés sur le net. Pour VCC, GND et RESET il n'y a pas photo. Reste pour SCK, MISO et MOSI les couleurs Blanc, Bleu et vert. Le Blanc ira naturellement à SCK en réservant les couleurs primaires Bleues et Vertes pour MISO et MOSI. Quant à l'ordre, il faut bien faire un choix arbitraire ou pas, et cela donne ceci.

GND Noir VCC Rouge RESET Jaune SCK Blanc MISO Bleu MOSI Vert


Si et seulement si, le code ne s'affiche pas correctement dans votre IDE : Pour une lecture correcte des entêtes, des tables des registres d'interruption et des schémas dans l'environnement ARDUINO, Ouvrez l'IDE ARDUINO puis Cliquez sur Fichier puis Préférences. Dans le bas du panneau Cliquez sur C:/Users/../preference.txt et ouvrez ce fichier. Modifiez editor.font=Monospaced, ... en editor.font=Courier New, ... puis enregistrez-le. Attention ! Respectez bien l'espace entre Courrier et New - Quittez tout et relancez l'EDI. Désolé - C'est la seule police que j'ai trouvé capable de faire cela correctement, mais, il y en a peut-être d'autres.

Pour utiliser ce référentiel, au début de chacun de mes codes, je fais un copier-coller de l'entête correspondant à la puce utilisée, suivi du schéma. Cela permet d'identifier à quelle puce s'adresse le code et de ne pas faire d'erreur de codage, de câblage et de branchement SPI. Vous trouverez les entêtes correspondants aux puces ATTINY84 - ATTINY85 - ATTINY861 - ATTINY88 ci-dessous

Pour ne pas avoir à rechercher les DataSheets en cas de besoin, chaque entête de code possède les éléments suivants :

Les numéros de broches DIGITAL, ANALOG, la notation des ports (PAx, PBx, PCx, PDx) et la couleur des fils SPI à connecter.

Les vecteurs d'appel des routines d'interruptions utilisables (ISR)
externes (INTx (0)(1)) et de changement de broches PCINTx (0)(1)(2)(3)

Les registres d'interruption (drapeau, masque), des minuteries, des ports, de changement de mode des broches, des broches, du chien de garde.
GIMSK - GIFR remplacé par EIMSK - EIFR - PCIFR - PCICR sur les puces plus récentes ???
PCMSK(0)(1)(2) - PORT(A)(B)(C)(D) - DDR(A)(B)(C)(D) - PIN(A)(B)(C)(D) - WDT - WDTC(R)(SR).

Sauf erreur(s) ou omission(s) de ma part. vous pouvez me joindre si nécessaire. Cherchez le petit bonhomme qui s'agite en bas à droite sur la page d'accueil de ce site : https://www.astrolynx.com.

Cette liste n'est pas exhaustive et peut être complétée en fonction de vos besoins.

A la suite de l'entête, vient le schéma correspondant au code. Vous trouverez les symboles que j'utilise à la fin de cette page.

Je vous invite à consulter les pages qui suivent : ATTiny85, ATTiny84, ATTiny861 et ATTiny88. Téléchargez les codes et essayez de comprendre la démarche. Une fois assimilé, vous verrez, les interruptions n'auront plus beaucoup de secrets.

ENTÊTES

ATTINY 25/45/85

/* ATMEL ATTINY 25/45/85 - @Alain DORING (2020) - https://www.astrolynx.com/ - Original source
   ┌───────────────────────────────────────── SPI ───────────────────────────────────────────┐
   │                                ┌─────── ANALOG ──────┐                                  │
   │                                │  ┌─── DIGITAL ───┐  │                                  │
   │                                │  │    ┌─┐_┌─┐    │  │                                  │
 JAUNE       RESET/ADC0/PCINT5 PB5         1│     │8          VCC                           ROUGE
                   ADC3/PCINT3 PB3  3  3   2│     │7   2  1   PB2 PCINT2/SCK-L/ADC1/T0/INT0 BLANC
                   ADC2/PCINT4 PB4  2  4   3│     │6   1      PB1 PCINT1/MISO/DO            BLEU
 NOIR                          GND         4│     │5   0      PB0 PCINT0/MOSI/DI/SDA/AREF   VERT
                                            └─────┘         

 Vecteurs externes                 INT0_vect
 Vecteurs de changement de broches PCINT0_vect

            7       6       5       4       3       2       1       0
 GIMSK  -         INT0    PCIE  
 GIFR   -         INTF0   PCIF 

 PCMSK  -                 PCINT5  PCINT4  PCINT3  PCINT2  PCINT1  PCINT0 

 PORTB  -                 PORTB5  PORTB4  PORTB3  PORTB2  PORTB1  PORTB0 
 DDRB   -                 DDB5    DDB4    DDB3    DDB2    DDB1    DDB0 
 PINB   -                 PINB5   PINB4   PINB3   PINB2   PINB1   PINB0 

 WDTCR  - WDIF    WDIE    WDP3    WDCE    WDE     WDP2    WDP1    WDP0
 WDT    0x000C
*/

ATTINY 24/44/84

/* ATMEL ATTINY 24/44/84 - @Alain DORING (2020) - https://www.astrolynx.com/ - Original source
   ┌───────────────────────────────────────── SPI ───────────────────────────────────────────┐
   │                                ┌─────── ANALOG ──────┐                                  │
   │                                │  ┌─── DIGITAL ───┐  │                                  │
   │                                │  │    ┌─┐_┌─┐    │  │                                  │
 ROUGE                         VCC         1│o    │14         GND                           NOIR
                        PCINT8 PB0     10  2│     │13  0  0   PA0 PCINT0/ADC0/AREF
                        PCINT9 PB1     9   3│     │12  1  1   PA1 PCINT1/ADC1/AIN0
 JAUNE           RESET/PCINT11 PB3         4│     │11  2  2   PA2 PCINT2/ADC2/AIN1
                  INT0/PCINT10 PB2     8   5│     │10  3  3   PA3 PCINT3/ADC3/T0 
                   ADC7/PCINT7 PA7  7  7   6│     │9   4  4   PA4 PCINT4/ADC4/T1/SCK/SCL    BLANC
 VERT  SDA/MOSI/DI/ADC6/PCINT6 PA6  6  6   7│     │8   5  5   PA5 PCINT5/ADC5/DO/MISO       BLEU
                                            └─────┘

 Vecteurs externes                 INT0_vect
 Vecteurs de changement de broches PCINT0_vect - PCINT1_vect

            7       6       5       4       3       2       1       0
 GIMSK  -         INT0    PCIE1   PCIE0  
 GIFR   -         INTF0   PCIF1   PCIF0  

 PCMSK0 - PCINT7  PCINT6  PCINT5  PCINT4  PCINT3  PCINT2  PCINT1  PCINT0 
 PCMSK1 -                                 PCINT11 PCINT10 PCINT9  PCINT8 
 
 PORTA  - PORTA7  PORTA6  PORTA5  PORTA4  PORTA3  PORTA2  PORTA1  PORTA0
 DDRA   - DDA7    DDA6    DDA5    DDA4    DDA3    DDA2    DDA1    DDA0
 PINA	  - PINA7   PINA6   PINA5   PINA4   PINA3   PINA2   PINA1   PINA0

 PORTB  -                                 PORTB3  PORTB2  PORTB1  PORTB0
 DDRB   -                                 DDB3    DDB2    DDB1    DDB0
 PINB	  -                                 PINB3   PINB2   PINB1   PINB0

 WDTCSR - WDIF    WDIE    WDP3    WDCE    WDE     WDP2    WDP1    WDP0
 WDT    0x0004
*/

ATTINY 261/461/861

/* ATTINY 261/461/861 and 261V/461V/861V - @Alain DORING (2020) - https://www.astrolynx.com
   ┌───────────────────────────────────────── SPI ───────────────────────────────────────────┐
   │                                ┌─────── ANALOG ──────┐                                  │
   │                                │  ┌─── DIGITAL ───┐  │                                  │
   │                                │  │    ┌─┐_┌─┐    │  │                                  │
 VERT          MOSI/SDA/PCINT8 PB0     8   1│o    │20  0  0   PA0 PCINT0/ADC0
 BLEU              MISO/PCINT9 PB1     9   2│     │19  1  1   PA1 PCINT1/ADC1
 BLANC    SCK/USCK/SCL/PCINT10 PB2     10  3│     │18  2  2   PA2 PCINT2/ADC2/INT1 
                       PCINT11 PB3     11  4│     │17  3      PA3 PCINT3/AREF
 ROUGE                         VCC         5│     │16         AGND
 NOIR                          GND         6│     │15         AVCC
             CLKI/ADC7/PCINT12 PB4  7  12  7│     │14  4  3   PA4 PCINT4/ADC3
             CLKO/ADC8/PCINT13 PB5  8  13  8│     │13  5  4   PA5 PCINT5/ADC4/AIN2
             INT0/ADC9/PCINT14 PB6  9  14  9│     │12  6  5   PA6 PCINT6/ADC5/AIN0
 JAUNE     RESET/ADC10/PCINT15 PB7  10    10│     │11  7  6   PA7 PCINT7/ADC6/AIN1
                                            └─────┘           

 Vecteurs externes                 INT0_vect  -  INT1_vect
 Vecteurs de changement de broches PCINT_vect

            7       6       5       4       3       2       1       0
 GIMSK  - INT1    INT0    PCIE1   PCIE0                          
 GIFR   - INTF1   INTF0   PCIF                                   

 PCMSK0 - PCINT7  PCINT6  PCINT5  PCINT4  PCINT3  PCINT2  PCINT1  PCINT0 
 PCMSK1 - RESET   PCINT14 PCINT13 PCINT12 PCINT11 PCINT10 PCINT9  PCINT8 

 PORTA  - PORTA6  PORTA6  PORTA5  PORTA4  PORTA3  PORTA2  PORTA1  PORTA0
 DDRA   - DDA7    DDA6    DDA5    DDA4    DDA3    DDA2    DDA1    DDA0
 PINA   - PINA7   PINA6   PINA5   PINA4   PINA3   PINA2   PINA1   PINA0

 PORTB  - PORTB7  PORTB6  PORTB5  PORTB4  PORTB3  PORTB2  PORTB1  PORTB0
 DDRB   - DDB7    DDB6    DDB5    DDB4    DDB3    DDB2    DDB1    DDB0
 PINB   - PINB7   PINB6   PINB5   PINB4   PINB3   PINB2   PINB1   PINB0

 WDTCR  - WDIF    WDIE    WDP3    WDCE    WDE     WDP2    WDP1    WDP0
 WDT    0x000C    
*/

ATTINY 48/88

/* ATMEL ATTINY 48/88 - @Alain DORING (2020) - https://www.astrolynx.com/ - Original source
   ┌───────────────────────────────────────── SPI ───────────────────────────────────────────┐
   │                                ┌─────── ANALOG ──────┐                                  │
   │                                │  ┌─── DIGITAL ───┐  │                                  │
   │                                │  │    ┌─┐_┌─┐    │  │                                  │
 JAUNE           RESET/PCINT14 PC6     27  1│o    │28 22  5   PC5 PCINT13/ADC5/SCL
                       PCINT16 PD0     0   2│     │27 21  4   PC4 PCINT12/ADC4/SDA
                       PCINT17 PD1     1   3│     │26 20  3   PC3 PCINT11/ADC3 
                  INT0/PCINT18 PD2     2   4│     │25 19  2   PC2 PCINT10/ADC2
                  INT1/PCINT19 PD3     3   5│     │24 18  1   PC1 PCINT9 /ADC1
                    T0/PCINT20 PD4     4   6│     │23 17  0   PC0 PCINT8 /ADC0
 ROUGE                         VCC         7│     │22         GND
 NOIR                          GND         8│     │21 16      PC7 PCINT15
                        PCINT6 PB6     14  9│     │20         AVCC/AREF
                        PCINT7 PB7     15 10│     │19 13      PB5 PCINT5 /SCK               BLANC
                    T1/PCINT21 PD5     5  11│     │18 12      PB4 PCINT4 /DO/MISO           BLEU
                  AIN0/PCINT22 PD6     6  12│     │17 11      PB3 PCINT3 /DI/MOSI/          VERT
                  AIN1/PCINT23 PD7     7  13│     │16 10      PB2 PCINT2 /ADC5/
                        PCINT0 PB0     8  14│     │15  9      PB1 PCINT1 /ADC6/
                                            └─────┘           

 Vecteurs externes                 INT0_vect   - INT1_vect
 Vecteurs de changement de broches PCINT0_vect - PCINT1_vect - PCINT2_vect 
                                 - PCINT3_vect - Non utilisé dans le boîtier DIP 28 broches

 BITS --►   7       6       5       4       3       2       1       0

 GIMSK & GIFR  ont disparus du paysage remplacés par les 4 lignes suivantes

 EIMSK  -                                                 INT1    INT0 
 EIFR   -                                                 INTF1   INTF0
 PCIFR  -                                         PCIF2   PCIF1   PCIF0
 PCICR  -                                         PCIE2   PCIE1   PCIE0

 PCMSK0 - PCINT7  PCINT6  PCINT5  PCINT4  PCINT3  PCINT2  PCINT1  PCINT0 
 PCMSK1 - PCINT15 RESET   PCINT13 PCINT12 PCINT11 PCINT10 PCINT9  PCINT8 
 PCMSK2 - PCINT23 PCINT22 PCINT21 PCINT20 PCINT19 PCINT18 PCINT17 PCINT16 

 PCMSK3 - Non utilisé dans le boîtier DIP 28 broches

 PORTA  - DDRA   - PINA   - Non utilisés dans le boîtier DIP 28 broches

 PORTB  - PORTB7  PORTB6  PORTB5  PORTB4  PORTB3  PORTB2  PORTB1  PORTB0
 DDRB   - DDB7    DDB6    DDB5    DDB4    DDB3    DDB2    DDB1    DDB0
 PINB   - PINB7   PINB6   PINB5   PINB4   PINB3   PINB2   PINB1   PINB0

 PORTC  - PORTC7  PORTC6  PORTC5  PORTC4  PORTC3  PORTC2  PORTC1  PORTC0
 DDRC   - DDC7    DDC6    DDC5    DDC4    DDC3    DDC2    DDC1    DDC0
 PINC   - PINC7   PINC6   PINC5   PINC4   PINC3   PINC2   PINC1   PINC0

 PORTD  - PORTD7  PORTD6  PORTD5  PORTD4  PORTD3  PORTD2  PORTD1  PORTD0
 DDRD   - DDD7    DDD6    DDD5    DDD4    DDD3    DDD2    DDD1    DDD0
 PIND   - PIND7   PIND6   PIND5   PIND4   PIND3   PIND2   PIND1   PIND0

 WDTCSR - WDIF    WDIE    WDP3    WDCE    WDE     WDP2    WDP1    WDP0
 WDT    0x000C   
*/

SCHÉMAS et BRANCHEMENTS

/*  R  ─/\/\/\─               ┐
  C  ───┤├───               │
  L  ──\\\\──        „      │
  D  ───┤>├──  LED ─┤>├─    │ 
                            │
         /◄┘         /─┘    │
  T  ───┤    P   ───┤    N  │                      
         \─┐         \►┐    │ 
                            │ 
        │├─┘        │├─┘    │ Aide à la confection
  M  ───┤├◄┐ N   ───┤├►┐ P  │ de schémas simples  
        │├─┤        │├─┤    │ par copier/coller
                            │
        │├─┘        │├─┘    │
  J     ││   N      ││   P  │
     ──►┤├─┐     ──◄┤├─┐    │
                            │
  GND ──┐                   │
        ┴                   │
  BP  _▄▄_                  │
     ─O  O─                 │
                            │
  ┤ ┴ ┬ ├ ┐└ ┘┌ ─ │   „     ┘

 Exemple de schéma réalisé pour tester des boutons poussoirs en mode analogique.

         _▄▄_    1K
      ┌──O  O──/\/\/\─┐
      │               │
      │  _▄▄_         │  330R  
      ├──O  O─────────┴─/\/\/\─┬─◄ ANALOG PIN
      │                        │
      │  _▄▄_                  │
      ├──O  O──────────────────┤
      │                        │     680R   
      │                        └────/\/\/\─┐
      │                                    │
    ┌ ┴ ┐                                ┌ ┴ ┐
    ┴   │                                │   ┴ 
   GND/VCC                              VCC/GND
*/

FINALITÉS

Tu as le code, tout est dit.

Pas besoin d'aller à la recherche d'informations, de datasheet, et je ne sais quoi d'autre. La lecture du fichier ino doit suffire à l'exploiter.

Dans le code, à commencer par l'entête qui va renseigner le concepteur et son site éventuellement. Il y aura également la puce utilisée, son brochage complet, les vecteurs d'interruptions utilisables, les registres d'état et de contrôle, les ports, le schéma et bien évidemment le code correspondant... Tout est dit.

Les codes pour ATtiny85, ATtiny84, ATtiny861 et ATtiny88 se trouvent respectivement sur les pages 3, 4, 5 et 6.