Ce bout de code C vous permettra de contrôler un écran type alphanumérique avec un AVR.
Il est prévu pour du 2×8 caractères ou 2×16 caractères mais en ajoutant une ou deux lignes il peut très bien faire du 4×8 ou 4×16 caractères. Il fonctionne en mode écriture 4bits.
Les fichiers sont en téléchargement en bas de l’article.
Avant de commencer
La première chose à faire est de relier R/W à la masse! En effet, on ne fait qu’écrire sur l’écran, et ça permet d’économiser encore une sortie.
Dans tous mes projets en C, j’utilise les fonctions dms() et dus() qui sont en fait les fonctions _delay_ms() et _delay_us() redéfinies. Si vous avez une erreur de compilation parce qu’il ne trouve pas ces fonctions, rajoutez
#define dms(m) _delay_ms(m) #define dus(u) _delay_us(u)
à votre header général, ou alors renommez les fonctions.
Settings
La première chose à faire pour adapter l’assignation des broches à votre montage est de modifier la déclaration des entrées sorties dans Init_screen(), et la partie Macros dans le header. Y’a plus qu’à mettre les broches qu’on veut!
void Init_screen() { // I/O DDRC |= 0b0110000; // PC4,5 out: RS/EN DDRD |= 0b00001111; // PD0..3 out: DATA
//------------------ Macros ---------------------- #define RS_ON PORTC |= _BV(PC4) // Register Select #define RS_OFF PORTC &= ~_BV(PC4) #define EN_ON PORTC |= _BV(PC5) // Enable #define EN_OFF PORTC &= ~_BV(PC5) #define DATA PORTD // DB0..3 #define CLEAR_DATA PORTD &= ~0x0F // Delete DATA
Par défaut les données envoyées à l’écran sont câblées sur des broches qui se suivent: PD0,1,2,3. Ça m’a permis de simplifier le code.
Si on veut les câbler sur des broches qui sont “décalées” (par exemple PD3,4,5,6), il faudra rajouter des décalages de bits pour l’envoyer au PORTD.
La sélection du format de l’écran se fait avec un define dans screen4b.h:
#define SCR_2x8 // Comment this line if your screen is a 2x16 caracters screen
Ça se passe de commentaire non? Non? Bon ben pour un écran 2×8 caractères, laisser tel quel. Sinon, pour un 2×16, commenter la ligne!
Using
Une fois le code adapté à votre montage, il suffit ensuite d’envoyer les données à l’écran au travers des fonctions de screen4b.c (qui sont normalement explicites).
Par exemple, Write_nbr(42, 8); affichera 42 à l’adresse 8. C’est-à-dire:
Téléchargeming
Voici les deux fichiers à rajouter à votre projet C dans votre IDE favoris! Ils sont à compiler avec AVR GCC, sinon il faudra adapter pour un autre compilo.
screen4b.c (3Ko)
screen4b.h (2Ko)
Voilà! Maintenant vous pouvez utiliser un écran pour faciliter le debug par exemple, ou pour écrire des choses qui vous tiennent à cœur! :)
N’hésitez pas à poser vos questions!