Créer un site internet

1 - HelloWorld!

Le programme "Hello World" est souvent le premier programme que l'on teste, c'est d'ailleurs le premier que vous tester en suivant l'installation d'AVR-Ada. Nous allons nous appuyer sur ce programme pour comprendre le fonctionnement de la librairie AVR.UART. Le port UART (Universal Asynchronous Receiver Transmitter), plus généralement appelé port série, est constitué des broches TX (transmitter) et RX (receiver). La broche de transmission TX d’un appareil A doit être branchée sur la broche de réception RX d’un appareil B et inversement. Il faut donc croiser les fils. Voici le programme venant du projet AVR-Ada :

with AVR;
with AVR.UART;
with AVR.MCU;
with AVR.Strings;
with AVR.Real_Time.Delays; -- for delay x.x
use type AVR.Strings.AVR_String;

use AVR;

procedure Hello is

   Hello : AVR.Strings.AVR_String := "Hello, AVR-Ada!";
   Counter : Integer := 0;
begin
   AVR.UART.Init (103); -- 9600 @16MHz

   loop
      AVR.UART.Put (Hello);
      AVR.UART.CRLF;
      delay 1.0;
      Counter := Counter + 1;
      if Counter = 10 then
         Counter := 0;
         AVR.UART.Put ("*******");
         AVR.UART.CRLF;
      end if;
   end loop;
end Hello;

 

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

La librairie AVR.String permet l’utilisation des chaînes de caractères. La librairie AVR.UART permet d’utiliser le port série sur l’Arduino. La fonction Init de cette librairie permet d’utiliser le port, mais pourquoi 103 ? Déjà, sachez que vous pouvez utiliser les valeurs suivantes :

   type Serial_Speed is new Unsigned_16;
   Baud_1200_1MHz    : constant Serial_Speed := 51;
   Baud_4800_1MHz    : constant Serial_Speed := 12;

   Baud_2400_4MHz    : constant Serial_Speed := 103;
   Baud_4800_4MHz    : constant Serial_Speed := 51;
   Baud_19200_4MHz   : constant Serial_Speed := 12;

   Baud_4800_8MHz    : constant Serial_Speed := 103;
   Baud_9600_8MHz    : constant Serial_Speed := 51;
   Baud_19200_8MHz   : constant Serial_Speed := 25;
   Baud_38400_8MHz   : constant Serial_Speed := 12;

   Baud_4800_12MHz   : constant Serial_Speed := 155;
   Baud_9600_12MHz   : constant Serial_Speed := 77;
   Baud_19200_12MHz  : constant Serial_Speed := 38;
   Baud_57600_12MHz  : constant Serial_Speed := 12;

   -- 14.7456MHz crystal gives 0.0% error rate for 115200bps
   Baud_115200_14_7MHz : constant Serial_Speed := 7;  -- error = 0.0%

   Baud_9600_16MHz   : constant Serial_Speed := 103;
   Baud_19200_16MHz  : constant Serial_Speed := 51;
   Baud_38400_16MHz  : constant Serial_Speed := 25;
   Baud_57600_16MHz  : constant Serial_Speed := 16; -- error = 2.1%
   Baud_76800_16MHz  : constant Serial_Speed := 12;
   Baud_115200_16MHz : constant Serial_Speed := 8;  -- error = 3.7%

   Baud_9600_20MHz   : constant Serial_Speed := 129;
   Baud_19200_20MHz  : constant Serial_Speed := 64;
   Baud_38400_20MHz  : constant Serial_Speed := 32; -- error = 1.4%
   Baud_76800_20MHz  : constant Serial_Speed := 15; -- error = 1.7%
   Baud_115200_20MHz : constant Serial_Speed := 10; -- error = 1.4%

qui sont assez explicites. L’ensemble de ces valeurs a été obtenu par le calcul de la table 20.1, soit dans le mode normal asynchrone : BAUD = fosc/(16(UBRR + 1)) BAUD est la valeur de baud que nous voulons. fosc est la fréquence d’oscillation du système. UBRR est le registre USART Baud Rate Register qui contient la valeur du prédiviseur de l’horloge. Si vous voulez vous exempter de ces calculs, vous pouvez vous reporter au paragraphe 20.10 et aux tables 20.4 à 20.8. La fonction Put permet d’envoyer quelque chose sur le port UART. La fonction CRLF permet de faire un retour chariot (Carriage Return) et un saut de ligne (Line Feed). Il existe aussi les fonctions NewLine (saut de ligne), PutLine… Pour plus d’info, reportez vous à avr-uart.ads qui se trouve dans le dossier avr_lib. Disponible sur mon github ici.

Le lien github du projet est ici.

Ajouter un commentaire

Anti-spam