Créer un site internet

2 - LED clignotante

Ce projet est l’une des premiers programmes que l’on apprend en Arduino. Il est assez simple, il permet juste de faire clignoter la LED D13. Il est lui aussi issu du projet AVR-Ada :

with AVR;
with AVR.MCU;
with AVR.Real_Time.Delays;

use AVR;

procedure Blink is
   Led_On : Boolean := False;
   LED_PIN : constant := 5;
begin
   MCU.DDRB_Bits (LED_PIN) := DD_Output;
   loop
      Led_On := not Led_On;
      MCU.PORTB_Bits (LED_PIN) := Led_On;
      delay 1.0;
   end loop;
end Blink;

 

Les fichiers de ce programme peuvent être téléchargés ici.

Mais, afin de faciliter l’utilisation des ports et d’utiliser la dénomination des ports des Arduino, j’ai écrit une librairie permettant cette gestion. Voici ce même exemple avec cette librairie :

with GPIO;
use GPIO;

with AVR.Real_Time.Delays;

procedure Blink is
   Led_On : Boolean := False;
   LED_PIN : constant lvcPins := D13;
begin
   PinMode(LED_PIN,Output);
   loop
      Led_On := not Led_On;
      DigitalWrite (LED_PIN, Led_On);
      delay 1.0;
   end loop;
end Blink;

 

Les fichiers de ce programme peuvent être téléchargés ici.

La fonction PinMode permet de déclarer le port en entrée ou en sortie.La fonction DigitalWrite permet d'écrire sur le port. La librairie GPIO ne contient que ces deux fonctions pour l'instant mais elle sera complétée par la suite par les fonctions digitalRead, analogWrite...

Pour voir son évolution, regardez ici.

Pour les curieux

L'ensemble de ce projet repose notamment sur la bibliothèque AVR.MCU. C'est elle qui fait le lien entre les noms des registres que l'on utilise (DDRB_Bits, PORTB_Bits...) et les adresses réelles du microcontrôleur (un microcontrôleur ne connait que des adresses de registres et de bits). En partant de cela, ci on décortique un peu plus le code, nous avons cela :

MCU.DDRB_Bits (LED_PIN) := DD_Output;

qui déclare la broche PB5 ( D13 en notification Arduino) en mode sortie. Ainsi, la D8 serait :

MCU.DDRB_Bits (0) := DD_Output;

et la D0 serait :

MCU.DDRD_Bits (0) := DD_Output;

puisque ces broches sont respectivement PB0 et PD0. Il en va de même avec les broches analogiques et les registres

MCU.DDRC_Bits

. C'est ce que fait la fonction "PinMode" qui permet de sélectionner le mode en entrée ou en sortie de la broche. Ensuite, la ligne :

MCU.PORTB_Bits (LED_PIN) := Led_On;

permet de mettre la sortie D13 à l'état Led_On. Si c'est vrai, c'est un état haut et la LED s'allume, si c'est faux, c'est un état bas et la LED s'éteint. Toutes les broches se gèrent de la même façon en respectant la nomenclature. C'est ce que fait la fonction "DigitalWrite".

Le lien github du projet est ici.

Ajouter un commentaire

Anti-spam