Atmega328 registers

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

Lorsque l'on commence à écrire des programmes qui sortent de l'ordinaire ou que l'on veut pousser un microcontrôleur à la limite de ces capacité, il est obligatoire de descendre au niveau des registres. Seulement voila, la manipulation de registre ne s'improvise pas, nécessite de connaître le hardware que l'on utilise et, de par sa nature, est spécifique à un type de microcontrôleur !

Manipuler les registre implique donc de sacrifier la portabilité du code, offerte par l'utilisation des fonctions haut niveau comme digitalWrite(), au profit de la vitesse d'exécution et de la compacité du code.

Les fonctions comme digitalWrite(), digitalRead(), pinMode() permettent au développeur d'accomplir une action sans avoir à se soucier du type de microcontrôleur utilisé mais, in finé, elle vont elle même manipuler les registres pour accomplir ces tâches !

Le cas de l'ATmega328

L'AtMega328 est le microcontrôleur utilisé sur les Arduino Uno, pro, nano et bon nombre de circuits électroniques d'autres marques ! Ci à droite, l'association entre le nom des broches et leurs positions dans le registre.

On peut remarquer que :

  • les broches D0, D1, D2, D3, D4, D5 et D6 font partie du groupe D (PD);
  • les broches D8, D9, D10, D11, D12 et D13 font partie du groupe B (PB);
  • les broches analogique font partie du groupe C (PC).

A chacun de ces groupes on peut associer trois registres :

  • PORT → pour positionner l'état du port (HIGH ou LOW);
  • PIN → pour lire l'état d'un port;
  • DDR pour Data Direction Register → pour positionner le sens d'un port (INPUT, OUTPUT);

On se retrouve donc avec 9 registres manipulables:

  • PORTD, PIND et DDRD pour les broches D0, D1, D2, D3, D4, D5 et D6;
  • PORTB, PINB et DDRB pour les broches D8, D9, D10, D11, D12 et D13;
  • PORTC, PINC et DDRC pour les broches analogiques.

La position du bit dans le registre est déterminé par le numéro attenant à la lettre du groupe. Par exemple, si on prend le cas de la broche D13, c'est le 5émé bit du groupe B (PB5) Mapping D13 atmega328.png .

Atmega328 pin mapping.png

Manipulations

Maintenant que l'on à clairement identifié le groupe et la position du bit dans le registre, passons à la manipulation !

Rappel sur les tables de vérité

Pour manipuler les bits nous utiliseront principalement le OU ainsi que le ET

Passage d'une broche à l'état HIGH

Passage d'une broche à l'état LOW