SE4 2022/2023 EC2

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche

Objectifs

Il vous est demandé de :

  • comparer la taille des binaires d'un programme affichant sur 4 lignes un même texte compiler via l'IDE arduino et via AVR-GCC;
  • de réaliser un prototype de système comportant un Arduino Uno, un écran LCD 2 ou 4 lignes à contrôleur HD44780 et les quelques composants nécessaires ;
  • vous devez écrire un programme C pour gérer le contrôleur HD44780 à partir de l'ATMega328p, vous utilisez le compilateur avr-gcc pour générer l'exécutable ;
  • votre projet doit être constitué d'un répertoire comprenant un makefile et la source C, le makefile doit implanter les cibles clean, all et upload ;
  • en utilisant vos fonctions pour le contrôleur HD44780 vous ferez en sorte que les données reçues sur le port série de l'Arduino soient affichées sur l'écran ;
  • vous sélectionnerez les 5 séquences VT100 qui vous paraissent les plus importantes et vous les implanterez dans votre code.

Matériel nécessaire

Le matériel nécessaire consiste en un kit Arduino Uno.

Travail réalisé

ReX : Pas de photo du banc d'essai.

ReX : Pas de vidéo de démonstration.

Comparaison:

Texte à afficher:

Lorem ipsum dolor

sit amet,consectetur

adipiscing elit, sed

do eiusmod tempor

EcranLcd.jpg

Tailles :

ReX : taille de programme ? taille du programme plus taille RAM ?

ReX : taille RAM utilisée ?

Arduino IDE:

1820 octets de stockage flash

AVR-GCC:

958 octets de stockage flash

Séquences VT100:

Les séquences VT100 que j'ai sélectionnées sont:

cursorhome Move cursor to upper left corner Echap+H

cursorup Move cursor up one line Echap+A

cursordn Move cursor down one line Echap+B

cursorrt Move cursor right one char Echap+C

cursorlf Move cursor left one char Echap+D

ReX : Je ne vois pas où les séquences ci-dessus sont implantées dans le code.

ReX : Dans le main du répertoire FINAL.

Librairie HD44780 pour AVRGCC et AVR uC:

La librairie permet de :

  • choisir les pins pour chaques broches de données.
  • choisir le mode 2 lignes ou 4 lignes pour l'écran.
  • choisir le mode 4bits ou 8bits pour le bus de données parralèles.
  • choisir le type de curseur entre :
    • "no_CURSOR" qui n'affiche rien sur la position où l'on se trouve sur l'écran.
    • "underlined" qui affiche un soulignage de la position actuelle.
    • "blinking" qui fait clignoter la case sur laquelle on se trouve.
    • "underlined_blinking" la somme de underlined et blinking.
  • implémenter une fonction LCDSetup qui permet d'initialiser l'écran avec le paramètres ci-dessus.
  • implémenter une fonction ShiftUp qui permet de se déplacer vers le haut sur l'écran
  • implémenter une fonction ShiftDwon qui permet de se déplacer vers le bas sur l'écran.
  • implémenter une fonction ShiftRight qui permet de se déplacer vers la droite sur l'écran.
  • implémenter une fonction ShiftLeft qui permet de se déplacer vers la gauche sur l'écran.
  • implémenter une fonction LCDon qui permet d'activer l'affichage.
  • implémenter une fonction LCDoff qui permet de désactiver l'affichage.
  • implémenter une fonction NewLine qui permet de passer au début de la ligne suivante.
  • implémenter une fonction WriteChar qui permet d'écrire un caractère sur la case où l'on se trouve.
  • implémenter une fonction LCDgotoXY qui permet de se déplacer à une position voulue sur l'écran.

La configuration doit être faite dans le fichier lcd_hd44780.h

La librairie fonctionne avec une majorité de microcontrôlleurs AVR car la librairie permet de configurer les pins une à une, port à port.

ReX : factoriser le code de la fonction DataPortWrite4bits en particulier en transformant les 4 écritures en une boucle de 4 itérations, optimisez en comparant avec des constantes de type 1 << 7 plutôt qu'en décalant une variable. Même chose pour la fonction DataPortWrite8bits.

ReX : Factoriser le code de l'initialisation des registres DDR.

ReX : Comment le contrôleur LCD sait-il qu'il faut utiliser le mode 4 bits ou 8 bits ? je ne vois rien dans le code pour lui indiquer le mode ?

ReX : C'est confirmé par le test avec un WH2004L-TMI-JT, le mode 8 bits n'est pas fonctionnel.

ReX : Pour la fonction LCDgotoXY écrire une macro permettant de garder un nombre entre deux bornes, factorisez le code avec cette macro. Dans la même fonction factorisez le code en utilisant un tableau des adresses de lignes.

Main:

Le main contient les fonctions d'initialisation et de lecture des données sur le port série. une boucle tant que permet d'attendre constamment un octet sur le port série puis lorsqu'il arrive le traiter et attendre un nouveau octet sur le port série.

la fonction USART_init permet d'initialiser le port série en 7 bits de données et 1 bit de stop. 103 correpond à 9600bauds pour une fréquence d'horloge processeur de 16MHz (A modifier en fonction de la configuration du microcontrôlleur et les besoins).

ReX : Merci d'effectuer le calcul dans le code à partir d'un paramètre en bauds.

Les séquences VT100 sont détectés de la manière suivante:

  • Si le caractère ascii correspondant à échap arrive (27) on n'affiche pas tout de suite et on attend de voir le caractère suivant.
  • Si le caratère suivant n'est pas [ alors on affiche 27 (soit rien)
  • Sinon on attend le caractère suivant et si il s'agit de A, B, C, D ou H on peut alors activer la fonction correspondante car il s'agit d'une séquence VT100 sinon on affiche les caractères reçus jusqu'ici.

ReX : Pas de test sur ESC dans main.c pas plus dans lcd_hd44780.c.

ReX : Voir dans le répertoire FINAL.

ReX : Vous n'avez pas compris la séquence des codes VT100. Ils ne sont préfixés que d'un caractère : ESC. Aucun caractère [. Du coup votre code n'est pas fonctionnel concernant les code VT100.

Documents Rendus