V.0. 18/12/2016
rev1 26/12/2017
rev2 26/01/2019

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
*
Discussions sur ce sujet

Presentation hardware
1ere version 2 afficheurs Matrice 8x8(12/2016)
2em version 4 afficheurs Matrice 8x8
3em Version 4 afficheurs Matrice 8x8 + RTC DS1307 + UART( BlueTooth) (04/2017
4
em Version 6 afficheurs Matrice 8x8 + RTC DS1307 + LM35DZ+UART( BlueTooth) (04/2018)
5
em Version 6 afficheurs Matrice 8x8 + RTC DS1307 + DS18B20+UART( BlueTooth) (12/2018)

6
em Version 8 afficheurs Matrice 8x8 + RTC DS1307 + DS18B20+UART( BlueTooth) (01/2019)




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

montage mecanique sur barre MECANO, repercée pour etre jointif entre les modules..

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


Schéma :

images/t_Proto_MAX7219_x4_Matice8x8_Schem.gif

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




5em Version 6xMax7219 + matrice 8x8 + DS1307 + DS18B20
17-12-2018


Usage d'une sonde numerique O.W.S. DS18B20 , plus précise, pour la mesure de temperature , au lieu d'un LM35DZ analogique
Montage mecanique original (pour 4 modules) bricolé pour rajouter les 2 autres modules ,
je sais , c'est pas top !
Meme fonctionalités que le montage précedent.
Rappel par commande Help :

p1= strstr(buffer1,"Help"); // p pointer result
if (p1>0)
{

UART1_Write_CText(
"<Msg=> L maxi=122 cars\r\n"
"<Reset> Re-Init afficheurs MAX7219\r\n"
"<TEMP_ON> Affiche la Temp. DS18B20\r\n"
"<TEMP_OFF> Enleve Affichage DS18B20\r\n"
"<Speed=> Vitesse defilement :valeur de 2 à 250\r\n"
"<Eeprom=> Message en eeprom avec indice 1 à 15\r\n"
"<U;04;06;14;04;19;59#> Maj de la RTC\r\n"
"<Demo> affiche tous les messages en EEPROM PIC\r\n" );
CRLF1();
}


Avec:
* Montage d'un HC06 sur l'uart du PIC pour commande via BlueTooth
* Tension d'alim 3,6V( minima)
*Luminosité des afficheurs au MINI.
Pas d'aleas de fonctionnement constaté dans ces conditions.

liaison BlueTooth avec terminal PC


SOFTWARE :


Presentation :
Mikroc 7.2.0 18F46K22
Directory : C:_MikroC_MesProjets_MikroC_18F46K22_6_Matrix8x8
Projet : 18F46K22_MAX7219_8x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.mcppi
Source : _18F46K22_test_Max71219_8xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_181222.c_181225.c
6 Modules Matrice 8x8 avec MAX7129 + capteur OWS DS18B20
Saisir un nouveau Msg avec le terminal via <Msg=xxxx>
Mode Temperature avec <TEMP_ON> ou <TEMP_OFF>
Messages en EEPROM avec cde : <EEPROM=0> .. à 15

Test reg. DS18B20
Family Code : 28 ID1= FF4715811603 CRC= 24

pour simplifier le programme, du fait qu'il n'y a qu'un seul capteur OWS sur le bus ONE WIRE
on a pas besoin de specifier l'adresse du device .


Source avec SPI Software : 18F46K22_test_Max71219_8xMatrice8x8_SOFT_SPI_DS13017_I2C2_LM335_181225.c
Projet zipé : 18F46K22_6_Matrix8x8_181225.zip
Chargeur: 18F46K22_MAX7219_8x_Mat_8x8_SPI1_Softw_LM335_DS1307_I2C2.hex

Video :
PIC18F46K22_6xMatrice_8x8_181223.webm




6em Version : 8 x Max7219 + matrice 8x8 , DS1307 , DS18B20
25-01-2019


images/t_Montage_8matrice_8x8leds_Back_2019.gif
vue arriere

images/t_Montage_8matrice_8x8leds_2019.gif

vue Avant .

images/t_Proto_8_matrice_2019.gif
avec capteur OWS DS18B20 au lieu de LM35DZ.

Montage des 8 matrices Leds 8x8 sur 2 rails alu en U

Contre mesures :
Alimentation limitée à 3,7V
Reglage parametre luminosité à 01
alimentation +V et 0V en HORIZONTAL (LATERALEMENT) au lieu de boucle HAUT vers BAS
au lieu d'utiliser les groupes de " 5 fils dupont" traduction chinoise , livrés avec les afficheurs
regroupant les ( +V,0V,CLK,CS et DIN)
il ne reste donc que les CLCK,CS,et DIN comme connection entre HAUT de l'affichuer et BAS de l'afficheur suivant
=> chemin plus court sur les fils d'alimentation. (Longueur totale : =5cm * x7 au lieu de 10cm x7 )
et j'alimente par les 2 extremités.
..OK ..avec les 8 matrices.


Source avec SPI Software : 18F46K22_test_Max71219_8xMatrice8x8_DS1307_I2C2_OWS_DS18B20_190126.c
Projet zipé : 18F46K22_8_Matrix8x8_2019.zip
Chargeur : 18F46K22_MAX7219_8x_Mat_8x8_I2C2_DS1307_OWS_DS18B20.hex
Eeprom : 18F46K22_MAX7219_8x_Mat_8x8_I2C2_DS1307_OWS_DS18B20_eeprom.ihex

Videos : en Test 8 x Matrice 8x8_


paulfjujo@free.fr