Le Max7219
MAX7219 et Matrice LED
Il est possible avec ce circuit de piloter des leds de façon indépendante, nous l'utiliserons pour piloter une matrice de 8 x 8 leds.
Nous utiliserons pour cela un module comportant la matrice de leds et le circuit de commande Max 7219 (voir sur Ebay, Amazon ou autres).
Pour permettre l'utilisation de plusieurs modules ils seront disposés suivant le schéma ci dessous :
C'est important car nous allons utiliser les mêmes fonctions, que pour l'utilisation des afficheurs 7 segments, vues dans un précédent billet.
Donc la led en "haut à gauche" correspond à l'adresse "1" et à la data "1" et la led située en bas à droite correspond à l'adresse "8" et à la data "128".
De même pour tracer une ligne verticale à gauche il faut transmettre : adresse = 1 et data = 255.
J'ai évité de parler de lignes et de colonnes car cela risque de prêter à confusion.
Il est bien sûr possible d'utiliser un autre logiciel.
Pour utiliser plusieurs modules le câblage est le suivant :
A répéter suivant le nombre de modules.
Il existe maintenant des modules qui utilisent un circuit cms plus simples à utiliser dans le cas de l'utilisation de plusieurs circuits.
MPLAB X et XC8 : fonctions
Au niveau software nous utilisons les mêmes fonctions que pour les afficheurs 7 segments soit :
- ecr_7219 (adresse, data)
- ecr_char_table (data)
- efface_aff ()
La première fonction utilise une quatrième fonction, qui permet de transmettre sous forme série les 8 bits d'une donnée :
void ecr_7219_byte(unsigned char data) { unsigned char cmp; SPI_dout = 0; for (cmp=8;cmp>=1;cmp--) { if (data & 0x80) SPI_dout = 1; else SPI_dout = 0; data = data<<1; __delay_us(1); SPI_clk = 1; __delay_us(1); SPI_clk =0; } }
L'organigramme de cette fonction :
La première fonction permet d'écrire dans les registres du MAX7219, pour configurer le circuit, ou d'allumer une ou plusieurs leds.
Elle est utilisée par les deux autres.
void ecr_7219(unsigned char adresse,unsigned char data) { SPI_CS=0; ecr_7219_byte(adresse); ecr_7219_byte(data); SPI_CS=1; }
Nous écrivons en premier l'adresse puis la donnée.
La fonction suivante permet d'afficher un symbole contenu dans une table.
void ecr_char_table(unsigned char data) { for (int i=1;i<9;i++) { ecr_7219(i,table[(i-1)+(data*8)]); } }
Petite explication sur la ligne ecr_7219(i,table[(i-1)+(data*8)]);
L'adresse varie de 1 à 8 ce qui est normal, pour la donnée à écrire c'est un peu plus complexe, l'adresse de la table de caractères commence à 0 ce qui explique i - 1 et chaque caractère est composé de huit données ce qui donne pour le premier caractère une plage de 0 à 7, le deuxième de 8 à 15 et ainsi de suite ce qui donne le + (data * 8).
et la dernière fonction efface la matrice de leds.
void efface_aff() { for (int i=1;i<9;i++) { ecr_7219(i,0); // efface afficheur } }
Il suffit d'écrire des "0" pour chaque adresse.
Le logiciel qui accompagne ce billet permet de voir un certain nombre de possibilités, mais il est possible de rajouter ses propres réalisations.
Seule la solution qui utilise fonction software pour la transmission SPI est utilisée, il est bien sûr possible d'utiliser le module SPI du pic avec la librairie fournie avec le compilateur ou en écrivant directement dans les registres du pic.
Pour cela voir le billet précedant concernant le MAX7219. Le logiciel se compose d'une partie d'initialisation du MAX7219 et d'une partie des différents affichages proposés.
Logiciel test_max7219.zip
Modif en cours.
/*----------------------------------------------------------------------------------------------------------*/
Le coin de Patou "
/*----------------------------------------------------------------------------------------------------------*/
L'instruction "IF - ELSE"
Cette instruction est souvent utilisée pour décider ,suivant un test, la suite du programme.
La syntaxe est :
if (expression1)
{
instructions 1;
}
else
{
instructions 2;
}
La partie "else" n'est pas obligatoire ainsi que les accolades sauf en cas de plusieurs instructions.
Le test est effectué sur expression 1, si sa valeur est non nulle ou vraie "instructions 1" est exécutée sinon si la valeur est nulle "instructions 2" est exécutée.
Dans le cas de l'utilisation de plusieurs "IF" il faut bien retenir :
- la séquence "ELSE" est associée au dernier "IF" sans "ELSE", par exemple :
if (cmpt < 100) if (i = 0) a = b; else a = c;
Le "else" est donc associé à if (i = 0).
Les accolades permettent de choisir la structure que l'on désire.
Aucun commentaire:
Enregistrer un commentaire