« SE4 2022/2023 EC2 » : différence entre les versions

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


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


<blockquote>cursorhome           Move cursor to upper left corner      Echap+H
<blockquote>cursorhome     Move cursor to upper left corner      Echap+H


cursorup             Move cursor up one line               Echap+A
cursorup         Move cursor up one line                   Echap+A


cursordn             Move cursor down one line             Echap+B
cursordn         Move cursor down one line               Echap+B


cursorrt             Move cursor right one char             Echap+C
cursorrt           Move cursor right one char             Echap+C


cursorlf             Move cursor left one char             Echap+D
cursorlf             Move cursor left one char               Echap+D
</blockquote>
</blockquote>


Ligne 66 : Ligne 66 :
* choisir le mode 4bits ou 8bits pour le bus de données parralèles.
* choisir le mode 4bits ou 8bits pour le bus de données parralèles.
* choisir le type de curseur entre :  
* choisir le type de curseur entre :  
** "no_CURSOR" qui n'affiche rien sur la position ou l'on se trouve sur l'écran.
** "no_CURSOR" qui n'affiche rien sur la position l'on se trouve sur l'écran.
** "underlined" qui affiche un soulignage de la position actuelle.  
** "underlined" qui affiche un soulignage de la position actuelle.  
** "blinking" qui fait clignoter la case sur laquelle on se trouve.
** "blinking" qui fait clignoter la case sur laquelle on se trouve.
** "underlined_blinking" la somme de underlined et blinking.
** "underlined_blinking" la somme de underlined et blinking.
* implémente une fonction LCDSetup qui permet d'initialiser l'écran avec le paramètres ci-dessus.
* implémenter une fonction LCDSetup qui permet d'initialiser l'écran avec le paramètres ci-dessus.
* implémente une fonction ShiftUp qui permet de se déplacer vers le haut sur l'écran
* implémenter une fonction ShiftUp qui permet de se déplacer vers le haut sur l'écran
* implémente une fonction ShiftDwon qui permet de se déplacer vers le bas sur l'écran.
* implémenter une fonction ShiftDwon qui permet de se déplacer vers le bas sur l'écran.
* implémente une fonction ShiftRight qui permet de se déplacer vers la droite sur l'écran.
* implémenter une fonction ShiftRight qui permet de se déplacer vers la droite sur l'écran.
* implémente une fonction ShiftLeft qui permet de se déplacer vers la gauche sur l'écran.
* implémenter une fonction ShiftLeft qui permet de se déplacer vers la gauche sur l'écran.
* implémente une fonction LCDon qui permet d'activer l'affichage.
* implémenter une fonction LCDon qui permet d'activer l'affichage.
* implémente une fonction LCDoff qui permet de désactiver l'affichage.
* implémenter une fonction LCDoff qui permet de désactiver l'affichage.
* implémente une fonction NewLine qui permet de passer au début de la ligne suivante.
* implémenter une fonction NewLine qui permet de passer au début de la ligne suivante.
* implémente une fonction WriteChar qui permet d'écrire un caractère sur la case ou l'on se trouve.
* implémenter une fonction WriteChar qui permet d'écrire un caractère sur la case l'on se trouve.
* implémente une fonction LCDgotoXY qui permet de se déplacer à une position voulue sur l'écran.
* 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 configuration doit être faite dans le fichier lcd_hd44780.h


La librairie fonctionne avec une majorité de microcontrolleurs AVR car la librairie permet de configurer les pins une à une, port à port.
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 <code>DataPortWrite4bits</code> en particulier en transformant les 4 écritures en une boucle de 4 itérations, optimisez en comparant avec des constantes de type <code>1 << 7</code> plutôt qu'en décalant une variable. Même chose pour la fonction <code>DataPortWrite8bits</code>.
ReX : factoriser le code de la fonction <code>DataPortWrite4bits</code> en particulier en transformant les 4 écritures en une boucle de 4 itérations, optimisez en comparant avec des constantes de type <code>1 << 7</code> plutôt qu'en décalant une variable. Même chose pour la fonction <code>DataPortWrite8bits</code>.
Ligne 96 : Ligne 96 :
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.
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).
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 microcontrolleur et les besoins).
 


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

Version du 18 juillet 2023 à 19:39

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.

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 : 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).

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 jusqu'ici.

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

Documents Rendus