V.0. 18/12/2016
rev1 26/12/2017
rev2 14/04/2018

TEST Interface Matrices de leds 8x8 avec MAX7219 et PIC18F46K22

Liens utiles :
*
Tuto Texte defilant par Patou149
*
Max7219 par Patou149
*
Autre application : 8 leds seulement pour Texte defilant
*
Discussion sur ce sujet


Presentation hardware
1ere version 2 afficheurs Matrice 8x8
2em version 4 afficheurs Matrice 8x8
3em Version 4 afficheurs Matrice 8x8 + RTC DS1307 + UART( BlueTooth)
4
em Version 6 afficheurs Matrice 8x8 + RTC DS1307 + UART
à suivre , une version 8 afficheurs ???





Module d'interface MAX7219

HARDWARE :

Lien pour plus de details sur le module MAX7219 : MiniIntheBox Référence
lien sur documentation MAX7219

images/t_MAX7219_circuit_support_Matrice8x8.gif
module MAX7219 + matrice Leds 8x8 + liaisons detail support (périmé!!!)



Le Max7219 + Afficheur matricielle 8x8 leds + nappe d'interconnection


Prototype 2x:

images/t_Proto_Max7219_2xMatrice8x8.gif images/t_18F46K22_pinout.gif
Le prototype avec 2 matrice 8x8 Reperages Pins du 18F46K22



En haut : Pickit2 relié aux pins ICSP du PIC18
En haut ,à droite, Liaison UART1
Les 2 modules sont accolées, et reliés entre eux avec une petite nappe de 5 fils
La connection SPI ,n'est que sur le 1er digit.(module)

Les Liaisons :
L'ensemble est alimenté en 5V.
le chargement du programme se fait avec le Pickit2 , via les connections ICSP
Une laison Port COM Virtuel avec UART1 -> cordon Prolix 2303 -> USB -> Terminal PC(ici COM13)
RC6 =TX et RC7 =Rx , permet de "tracer" le programme

Liaison SPI :

Le module d'affichage est relié au PIC18F46K22 via 5 fils
2 fils : alimentation +5V et GND
3 fils SPI :
RC3 ->Clk ouput to -> CLK MAX7219
RC5 -> SDO output to -> DIN MAX7219
RC0 - >output to CS MAX7219
rajout Pull Down de 2,7K pour eviter l'allumage intempestif des matrices à la mise sous tension.
RC4 - SDI non connecté

images/t_18F46K22_SPI_link_MAX7219_8x8.gif


Les registres utiles du Max7219, extrait Datasheet :



SOFTWARE (MikroC)

void SPI_Write_To_7219(unsigned char adr, unsigned char d1, unsigned char d2);
void Clear_Matrices(void) ;
void Affiche_Char(unsigned char c, unsigned int v);
void Init_Module_Max7129_8x8(void);
void Affiche_Text_Matrice(unsigned char *p, unsigned int V);

void floattostr1(float n_decimal,char *texto_); // 2608 bytes


Les possibilités de décodage NE SONT PAS utilisées ici.

Une table de 1024 bytes est utilisée , pour le codage ascii au format 8x8
Affichage des Chiffres 0 à 9
Affichage d'un indice et de la Temperature ambiante, issue du capteur LM35DZ et voie analogique EA0


Projet MikroC zipé:

18F46K22_test_Max71219_2xMatrice8x8_161218.zip
contenu du zip:





2em Version avec 4 afficheurs matrice 8x8
19-12-2016
Prototype :

images/t_Proto_MAX7219_x4_Matice8x8.gif images/t_MAX7219x4_Assemblage_Meca_Front.gif images/t_MAX7219x4_Assemblage_Meca_Rear.gif
Prototype de test 4 matrices 8x8 Montage mecanique juxtaposé face ARRiere


SOFTWARE :

Presentation
Affiche les 16 Msg stockés en EEPROM PIC
Affichage des chiffres 0 à 9
Affichage message par defaut : "°*° Joyeux NOEL °*°"
Affichage "T°.Amb=40.2°C"
puis:
possibilité de Valider la mesure de temperature Ou Texte quelconque
Cde TEMP_ON ou TEMP_OFF
Possibilité de definir le message via le (clavier) Terminal :
Msg=Le message à afficher
Possibilité de modifie rla vitesse de defiement :
Speed=2 ( 2 à 512 maxi)

Evolutions:

Preselection de message en EEPROM
Jusqu'à 16 message de 64 cars ! dans l'EEPROM du PIC18F46K22
Possibilité de Choix du Msg à afficher , via la commande clavier EEPROM=0 ( 0 à 15)
choix modulo 64 definit par programme .. mais adaptable ..


MikroC:
Sources (version Software et Hardware SPI 1):

18F46K22_test_Max71219_4xMatrice8x8_SOFT_SPI_161220.c
18F46K22_test_Max71219_4xMatrice8x8_SPI1_Hardware_161220.c
Eeprom du PIC.

Projet zipé:
_18F46K22_test_Max71219_4xMatrice8x8_SOFT_SPI_LM335_161230.c.zip


Tracage programme sur le terminal



video :
Max7129_Joyeux_Noel.webm





3em Version avec 4 afficheurs + RTC DS1307 + BlueTooth
29-12-2016

HARDWARE :
images/t_18F46K22_Max7219_RTC_UART_interconnections.gif
Rajout Materiel :


Breakboard DS1307 RTC , equipé de sa pile de sauvegarde CR 2032
L'Horloge RTC est connectée sur le bus I2C2



Module Linvor Bluetooth (pastille Verte) :
*Mac Adresse :20:13:01:24:11:22
*apparait comme Linvor1122 dans l'application BlueSoleil.


Le module Bluetooth est relié à l'UART1 :

nota: R=750 sur UART1 TX , because 3,3V level sur ce module
Nota: mon autre module HC06 2687J est compatible 5V TTL sur RX et TX)
Nota: on peut garder en paralelle , si besoin est, le terminal PC via UART1 TX -> RX Prolic 2303

SOFTWARE :

Version speciale jour de l'AN 2017
La date et l'heure courante sont affichée en permanence, jusqu'à arriver à 5mn de la date de basculement sur l'an Neuf
On affiche alors le decompte en seconde de 300 -> Zero
Arrivé à moins de 4 secondes de l'echeance
L'Affichage bascule sur "Bonne Annee 2017" et reste pendant 120 secondes ..
puis à nouveau Affiche date et heure .. en 2017 !
On peut afficher en alternance , la date et heure ET un Msg quelconque OU La Temperature ambiante.
La liaison BlueTooth permet de mettre à l'heure la RTC en envoyant la commande
par exemple pour le 29 dec 2016 , jeudi , 17H07
#U;29;12;16;05;17;07#
Le programme BT_Simplex.apk dévelopé en RFO Basic permet de verifier le deroulement du programme et d'envoyer
des commandes via le clavier. (ou tout autre terminal Bluetooth)
De Meme , à partir d'un PC (avec BlueSoleil Application) , testé à 12 Metres, + TeraTerm Terminal (COM4)

images/t_BlueTooth_Linvor_Attachement_COM_termial.gif

Autres Possibilités de cette version :
"Msg=blablabla" Definition en live, d'un message à afficher max 122 cars
"TEMP_ON" affiche la temperature amb (LM335) en alternace avec le Message choisi
"TEMP_OFF" N'affiche PAS la temperature
"Speed=XX" selection de la vitesse d'affichage (translation pixel horizontal) de 2 à 255
"Eeprom=xx" Selection d'un message numero xx ( 0 à 15) stocké en EEPROM
"Demo" : Affiche tous les Messages 0 à 15 stockes en EEPROM du PIC18F \r\n" ) ;
U;28;12;16;04;19;59# : RTC MAJ suivant le format 28 dec 2016 Mercredi 19H59

Last update : 27/12/2017
Source :_18F46K22_test_Max71219_4xMatrice8x8_SOFT_SPI_LM335_2018.c
Chargeur :18F46K22_MAX7219_4x_Mat_8x8_SPI1_Softw_LM335_171226.hex
Projet zippé : _18F46K22_test_Max71219_4xMatrice8x8_SOFT_SPI_LM335_161230.c.zip


Tracage programme:



variante :
_Max7219_4_matrice8x8_180407.zip
_18F46K22_test_Max71219_4xMatrice8x8_SPI1_Hardware_180407.c
18F46K22_MAX7219_4x_Mat_8x8_SPI1_Hardw_180407.hex
SPI_MAX7219_4_Matrice_8x8_180407.h


Applicationsur tablette Archos 43 Android.
BT_Simplex.apk ( utilisation de RFO Basic)
car BlueTerm.apk ne permet pas la saisie d'un message ,validé par Enter ... frappe au fil de l'eau

images/t_Bt_Simplex_Msg_To_Max7219.gif images/t_Bt_Simplex_Etat_Max7219.gif  
Envoi message au PIC Max7219 via BlueTooth Acquis reception message, affiché sur MAX7219  


Videos:
Max7219_Nouvel_AN.webm
Max7219_Bonne_Annee.webm





4em Version avec 6 afficheurs matrice 8x8 + RTC DS1307
11-04-2018

HARDWARE :
Chainage de 4 autres ((soit Total=8 ) )modules MAX7219 avec pavé 64 leds 8x8
Gros problemes .. et aléas.. impossible à gerer

Test avec rajout de 2 afficheurs, soit 6 au total

Cela fonctionne pourtant avec 8 modules .. lien sur SONENELEC MUSIQUE
mais avec pas mal de déboires rencontrés.
J'ai fait des mesures à l'oscillo avec 4 et 8 modules, sans vraiment trouver d'anomalies flagrantes
hormis des CRA CRA , mais non capturable avec mon oscillo (70MHz 1G/s) sur la mesure CLOCK ,
longue periode (plusieurs mS)
Signaux d'amplitude bien cadrés entre 0V et 5V , front raides .. pas de deformation.
RC5 DIN pulse de 160µS
RC0 CS pulse de 32µS
Validité de CS 36mS ( 8 pulses CS)
RC3 clock Peride 50µS Duty cycle 50%
avec FOSC =16MHz

signal Clock Periode 50µS Anomalies CRA CRA ??? detail CS


Modif : Cablage des alim De module en mode ETOILE
=> commence à gazouiller .. mais alea au bout de 10 minutes!
à raison de durée de Message defilant pixel par pixel, (0123456789ABCDEFG) : 15sec et pause de 3 sec.

images/t_Max7129x6_Matrix8xX8_18F46K22_Schema_1804.jpg

Modif : Alim 3,2V au lieu de 5V
Nettement plus fiable .. alea au bout d'1 Heure!


Mesure Intensité globale sur alim 3,0V (PIC + 6 xMAx7219 avec afficheurs Matice 8x8

Clear Matrice 6x 8x8

Consigne intensite lumineuse Mesure (Amp)
REG _INTENSITY = 0
REG _INTENSITY = 1
REG _INTENSITY = 2
REG _INTENSITY = 3
REG _INTENSITY = 4
REG _INTENSITY = 5
REG _INTENSITY = 6
REG _INTENSITY = 7
REG _INTENSITY = 8
REG _INTENSITY = 9
REG _INTENSITY = 10
REG _INTENSITY = 11
REG _INTENSITY = 12
REG _INTENSITY = 13
REG _INTENSITY = 14
REG _INTENSITY = 15
0.550
0.100
0.142
0.181
0.217
0.251
0.284
0.314
0.342
0.368
0.394
0.420
0.440
0.460
0.481
0.500


Le code du test :





Modif :
Reinit des MAX7219 apres chaque fin de message ( message 0123456789ABCDEFG)
1er alea constaté au bout de 3 Heures non stop
avec même message defilant en 15 secondes ( pixel par pixel )

Au vu des réalisations trouvées sur le WEB ( à 98% en Arduino !) avec 8 à 11 afficheurs !
sur ce lien : site PAROLA ,
j'ai trouvé , les info qui renforce l'idée que "ça marche tres mal " ou "tombe en marche"
à cause du montage avec trop de filerie !
Nota:

on arrive à 8x15cm=120 cm de fil pour cheminer l'info DOUT du PIC ... vers le dernier (8em) MAX7219 DIN



le modele d'afficheur MAX7219 ,utilisé sur PAROLA, possede une connectique LATERALE
qui reduit considerablement la longueur de connection entre les modules..
Liaison paralelle des signaux , au lieu de liaison sérielle par fileries

images/Max7219_Matrix_Better_Design_Parola.jpg


Le support actuel que j'ai , est d'ailleur ABANDONNE par Sparkfun ..
N'acheter pas ces modeles si vous vouler plus de 4 ou 6 modules !

voir aussi le site de SONELEC Musique..
realisation avec 10 modules sur prototype avec anciens supports , MAIS OK apres plein de peripéties et correctifs...
à tester : alim des modules via R=1 ohm et C=100µF,
pour arriver à 8 modules ...

Le modele MAX7221 serait peut etre mieux approprié, car :
The MAX7221 is compatible with SPI™, QSPI™, and MICROWIRE™, and has slewrate-limited segment drivers to reduce EMI.

Essai aussi en SPI Bit Bang, d'apres le timing suivant..

avec







SOFTWARE :
Source : _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180410.c
Source avec SPI bit bang : _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180413.c
Projet zipé : _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180413.zip
Chargeur: 18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2_180413.hex

Video :
6_Max7219_run_180411.webm

Resultat de compilation :


0 1 mikroCPIC1618.exe -MSF -DBG -pP18F46K22 -RA -C -Y -O11111014 -fo8 -N"
C:\_MikroC\_MesProjets_MikroC\_Max7219_6_Matrice8x8\18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.mcppi" -EH"
C:\_MikroC\_MesProjets_MikroC\_Max7219_6_Matrice8x8\18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2_EEPROM.ihex" -SP"
C:\_MikroC\mikroC PRO for PIC\Defs\" -SP"
C:\_MikroC\mikroC PRO for PIC\uses\P18\" -SP"
C:\_MikroC\_MesProjets_MikroC\_Max7219_6_Matrice8x8\" -SP"
C:\_MikroC\mikroC PRO for PIC\Tools\" -IP"
C:\_MikroC\_MesProjets_MikroC\_Max7219_6_matrice8x8\" "RTC_DS1307_I2Cx.c" "_18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180412.c" "
_lib_Math.mcl" "
_lib_MathDouble.mcl" "
_lib_System.mcl" "
_lib_Delays.mcl" "
_lib_CType.mcl" "
_lib_CString.mcl" "
_lib_CStdlib.mcl" "
_lib_Conversions.mcl" "
_lib_Time.mcl" "
_lib_SoftSPI.mcl" "
_lib_ADC_K22_B.mcl" "
_lib_EEPROM_1024.mcl" "
_lib_I2C_c34d01.mcl" "
_lib_UART_c67d67.mcl"
0 1139 Available RAM: 3875 [bytes], Available ROM: 65536 [bytes]
0 122 Compilation Started P18F46K22.c
2781 123 Compiled Successfully P18F46K22.c
0 122 Compilation Started
_lib_Delays.c
172 123 Compiled Successfully
_lib_Delays.c
0 122 Compilation Started rtc_ds1307_i2cx.h
193 123 Compiled Successfully RTC_DS1307_I2Cx.c
0 122 Compilation Started _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180412.c
0 1004 interrupt handler (Interrupt_High at 0x0008) interruptions.h
0 1004 interrupt handler (Interrupt_LOW at 0x0018) interruptions.h
1110 123 Compiled Successfully _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180412.c
166 1164 Variable 'c1' has been eliminated by optimizer _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180412.c
551 1164 Variable 'm' has been eliminated by optimizer _18F46K22_test_Max71219_6xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_180412.c
0 127 All files Compiled in 219 ms
0 1144 Used RAM (bytes): 1345 (35%) Free RAM (bytes): 2530 (65%) Used RAM (bytes): 1345 (35%) Free RAM (bytes): 2530 (65%)
0 1144 Used ROM (bytes): 22796 (35%) Free ROM (bytes): 42740 (65%) Used ROM (bytes): 22796 (35%) Free ROM (bytes): 42740 (65%)
0 125 Project Linked Successfully 18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.mcppi
0 128 Linked in 78 ms
0 129 Project '18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.mcppi' completed: 469 ms
0 103 Finished successfully: 12 avr. 2018, 12:05:27 18F46K22_MAX7219_6x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.mcppi



A suivre ? peut etre avec 8 afficheurs et une bonne fiablilité ?





paulfjujo@free.fr