«

»

Mar 06 2015

TRX SSB 4 bandes – Librairie C AVR pour adresser un LCD à HD44780

Le type le plus commun de contrôleur utilisé par les modules LCD est le Hitachi HD44780, qui utilise une interface relativement simple entre le microcontrôleur et l’affichage.
C’est ce type de LCD qui a été choisi pour l’affichage des informations sur le TRX 4 bandes. (Voir le précédent billet pour une démo en vidéo)

Bien qu’il existe plusieurs librairies disponibles pour utiliser ces affichages au moyen d’un microcontrôleur AVR, j’ai opté pour l’option d’écrire ma propre collection de fonctions.
Pour ce faire, toute la documentation nécessaire (et bien plus) est trouvable sur la toile sans aucune difficulté. Il n’y plus qu’à….

Hardware

Avant de passer à la partie programmation, il est nécessaire de préparer et de connecter le microcontrôleur et l’affichage.
Le contrôleur peut être adressé soit avec un bus de 4 bit, soit avec un bus de 8 bit. Je ne sais pas chez vous, mais de mon côté le nombre de ports disponibles sur le uC a tendance à ne jamais être suffisant et c’est pour cette raison que c’est le bus à 4 bit qui a été retenu. Bien entendu il faut compenser ce “manque” de manière logicielle en envoyant chaque byte en deux paquets de quatre bits, les bits de poids fort en premier puis les bit de poids faible.
En plus des quatre bits sus-mentionnés, des lignes de contrôle, au nombre de trois, sont nécessaires :

  • EN ou E : Enable, Entrée de validation
  • RS : Sélection du registre de données ou d’instruction
  • RW : Mode lecture ou écriture

De ces trois, seules deux sont utilisées: EN et RS. La ligne RW permet, en mode lecture, de lire ce qui se trouve dans les différentes mémoire du contrôleur, ce dont je n’ai pas besoin, en tout cas dans un premier temps. Nous la forçons à zéro, c’est à dire en mode écriture.
Voici donc un schéma de principe en exemple :

schema_hd44780

Software

La librarie créée comporte deux fichiers. lcd_hd44780.c qui implémente les fonctions et auquel on ne touche en principe pas. Puis le fichier lcd_hd44780.h qui lui contient les déclarations des fonctions. C’est dans ce fichier que nous allons configurer notre librarie.

Il faut paramétrer la librairie avec les ports qui sont utilisés pour communiquer avec l’affichage :

// Définition des ports -----------------------------------------------------

#define RS_PORT PORTB
#define RS_BIT PB6

#define EN_PORT PORTB
#define EN_BIT PB7

#define DATA_PORT PORTC
#define DATA_BIT PC0 // Position du premier bit des data (lsb).
                     // Les trois autres bits doivent suivre consecutivement.

Les quatre bits de data doivent être sur le même port et se suivre.
Dés maintenant nous pouvons utiliser notre librairie en commençant par l’initialisation du LCD avec la commande init_lcd().

Cette commande initialise l’affichage avec l’affichage visible, le curseur invisible et fixe, puis efface l’écran.
Pour modifier ces états de départ à tout moment, on peut utiliser la fonction lcd_setdisplay(LCD_ON|CURSOR_OFF|CURSOR_NOBLINK); .Les options disponibles sont : CURSOR_ON, CURSOR_OFF, LCD_ON, LCD_OFF, CURSOR_BLINK, CURSOR_NOBLINK.

Ensuite nous pouvons utiliser les commandes d’affichage suivantes autant que nécessaire :

void lcd_putchar(char car); Ecrit un caractère à l’emplacement du curseur
void lcd_putstr(char *text); Ecrit une chaîne à l’emplacement du curseur
void lcd_gotoxy(unsigned char x, unsigned char y); Place le curseur sur l’affichage aux coordonnées X et Y.
void lcd_clrscr(void); Efface l’écran

Et pour terminer, voici un exemple simple :

#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include "lcd_hd44780.h"

int main(void)
{
       DDRB = 0xc0;
       DDRC = 0x0f;

       init_lcd();
       lcd_gotoxy(6,0);
       lcd_putstr("Hello");
       lcd_gotoxy(5,1);
       lcd_putstr("world!);

       while(1)
        {
        }

Vous pouvez télécharger la librairie sur la page download.

73’s

Laurent

 

Permanent link to this article: http://www.hb9fgk.org/trx-ssb-4-bandes-librairie-c-pour-adresser-un-lcd-a-hd44780/

0 visitors online now
0 guests, 0 members
Max visitors today: 0 at 12:01 am CEST
This month: 12 at 09-18-2019 02:37 am CEST
This year: 18 at 07-23-2019 07:11 pm CEST
All time: 53 at 01-18-2018 01:15 am CET