V.0. 18/12/2016
rev . 05/02/2022


Divers TESTs Interfaces Matrices de leds 8x8 avec MAX7219 et PIC18Fx6K22

Liens utiles :
*
Tuto Texte defilant par Patou149
*
Max7219 par Patou149
*
Autre application : 8 leds seulement ! pour Texte defilant de 64 cars maxi
*
Discussions sur ce sujet

Presentation hardware (18F46K22 DIP40)
Matrices 8x8 à connectiques Verticales
1ere version 2 afficheurs Matrice 8x8 V 18F46K22(12/2016)
2em ver. 4 afficheurs Matrice 8x8 V 18F46K22
5
em Ver. 6 afficheurs Matrice 8x8 V 18F46K22 + RTC DS1307 + DS18B20+UART( BlueTooth) (12/2018)
7em Ver. 8 afficheurs Matrice 8x8 V 18F46K22 Dip40 (12/2019)

8
em Version 8 afficheurs Matrice 8x8 V
avec 18F26K22 (PDIP28) + RTC DS1307 + DS18B20+UART( BlueTooth) (30/10/2020)


Matrices 8x8 à connectiques Horizontales
Nouvelle Version 12 afficheurs Matrice 8x8 H * ( beaucoup plus fiables! 06/2019)
Test Defilement via registre 64 bits sur 2 blocs de 4 Matrices 8x8 connections H ..mais inversées!
Prototype : HORLOGE Message défilant sur 8 matrices H, Date,Heure,Temp int,Temp Ext (10/12/2019)

Realisation :
HORLOGE Message défilant via 8 registres à decalage 96 bits
avec
12 matrices Horizontales : Date,Heure,Temp int,Temp Ext et/ou Message 64 cars maxi( 18F26K22 14/12/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 (Connectique Verticale !)



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





4em Version avec 6 afficheurs matrice 8x8 V
+ 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 SONELEC 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 via circuit imprimé des signaux , au lieu de liaisons externes 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 voulez 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 avec 6 modules (Max7219 et matrice 8x8 V)
18F46K22 + RTC DS1307 + (OWS sensor) 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 modules ( Max7219 et matrice 8x8 Verticales)
18F46K22 + DS1307 + DS18B20

25-01-2019



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

Video : 8 x Matrices 8x8 en test_

Actualisée juin 2019:



Projet zipé : 18F46K22_MAX7219_old_8x_Mat_8x8_SPI1_Hardw_190624.zip
Chargeur : 18F46K22_MAX7219_old_8x_Mat_8x8_SPI1_Hardw_190624.hex




7em Version Réactualisation
Horloge et Texte defilant avec matrices 8x8 V
(connections Verticales)
Dec 2019 :

* SPI Hardware
* Affiche le decompte de secondes juste avant le jour de l'an , puis le message Bonne Annee pendant 5mn
* avec 18F46K22 DIP40 !

Usage de Time.lib (MikroC)
et de Difference_Date_DS1307.inc pour le calcul de differences de dates

images/t_Terminal_view_Horloge_Texte_Defilant_8_matrices_V_8x8_191226.gif images/t_Terminal_view_Horloge_Texte_Defilant_8_matrices_V_8x8_191226_b.gif
Presentation du programme commandes possibles


MikroC 7.60
rev 02/02/2020
_18F46K22_test_8xMax71219_V_Matrice8x8_SPI1_Hard_DS1307_I2C2_OWS_200101.zip
_18F46K22_test_8xMax71219_V_Matrice8x8_SPI1_Hard_DS1307_I2C2_OWS_2020.hex
_18F46K22_test_8xMax71219_V_Matrice8x8_SPI1_Hard_DS1307_I2C2_OWS_200101.c
_18F46K22_test_8xMax71219_V_Matrice8x8_SPI1_Hard_DS1307_I2C2_OWS_2020_Eeprom.ihex


Mise en Coffret :

Raytracing

Etude boitier pour version 8 matrices V

images/t_Boite_Horloge_defil_8_Matrices_V_2019.gif

Video : Horloge_8matrices_V_2020.webm





8em Version Réactualisation pour 18F26K22
Horloge et Texte defilant avec matrices 8x8 V
(connections Verticales)
Octobre 2020 :

* SPI Hardware
* DS1397 RTC
*HARDWARE :
modif Alimentation :
5V pour platine MCU , fosc interne 32MHz, module HC05 , en provenance d'un bloc alim 230V / USB 5V 2A
Insertion de 2 diode directe 1N4007 pour chiter l'alim de l'ensemble des 8 matrices 8x8 connections VERTICALES
car alimenter le tout en 3,8V , fait que le module BlueTooth s'iniitalise mal avec seulement 3,8V ,
reste OK avec 5V : led module HC05 doit clignoter à la mise sous tension = PRET à etre connecté.
=>Code adapté au 18F26K22 avec Fosc interne 32MHz
Device DS18B20, sortie au bout d'un ptit cable, à l'exterieur du boitier ,
car mesurait plutot l'ambiance interne du boitier ..avec l'echauffement des circuits !

terminal display sur sortie RC6 UART1:

(15:55:36.949) <NUL><FF> ATTENTION : Init HC05 à 19200 bauds :
(15:55:43.102) AT
(15:55:43.593) AT+VERSION
(15:55:44.099) AT+PIN1234
(15:55:44.605) AT+UART=19200,0,0
(15:55:45.115) AT+NAME=HC05_4180V
(15:55:45.626) AT+RNAME?
(15:55:46.130) AT+UART?
(15:55:47.634)
(15:55:47.644) Pesentation :
(15:55:47.689) Langage Mikroc V 7.60
(15:55:47.689) MCU : 18F26K22
(15:55:47.768) Directory : C:\_MikroC\_MesProjets_MikroC\Horloge_def_8_matrices_Verticales_18F26K22
(15:55:47.917) Projet : Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_Fosc_interne_32Mhz_2020_10.mcppi
(15:55:48.073) Source : Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_Fosc_Interne_32MHz__2020_1030.c
(15:55:48.229) Config Bits P18F26K22_Base_Fosc_interne_8xPLL_32MHz.cfgsch
(15:55:48.364) SPI1 Softw -> MAX7219, I2C1 HW -> DS1307, UART1 1900,8,N,1, OWS->DS18B20
(15:55:48.506) Power Supply 3.6V
(15:55:48.616) EEPROM :Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_2020_10_EEPROM.ihex
(15:55:48.765) 8 Matrices 8x8 raccordement vertical HAUT vers Bas sur MAX7129
(15:55:48.902) Saisir un nouveau Msg avec le terminal via Msg=
(15:55:51.027)
(15:55:51.038)
(15:55:51.038)
(15:55:51.038) Clock initiale in =32000 Khz
(15:55:51.084) Recup Parametres en Eeeprom PIC :
(15:55:51.084) Speed=30
(15:55:51.296) Rep=04
(15:55:51.466) PLM=19:05
(15:55:51.717) Lum=02
(15:55:51.888)
(15:55:51.890) Test reg. DS18B20
(15:55:52.003) Family Code : 28 ID1= AA7695411401 CRC= 0F
(15:55:52.045) Init SPI Software RC2 (SCK), RC1 (SDO,) et RC0 (CS)
(15:55:52.458) Clear Matrice 8x 8x8
(15:55:53.523) Init I2C1 (RC3=SCL et RC4=SDA )100Khz
(15:55:53.557) Init RTC DS1307
(15:55:53.656) Re-Lecture RTC
(15:55:53.694) DS1307 Date : Samedi 31/10/20 Time: 15:55:10
(15:55:53.694)
(15:55:53.746) Display <01234567> sur 8 matrices Leds
(15:55:53.782) Luminosité Minimale
(15:56:05.469) Luminosité Croissante de la gauche vers la droite : 15,13,10,8,6,3,2,0
(15:56:08.515) Luminosité Ré-initialisée avec valeur Lum
(15:56:18.489) Cpt= 0 ;Samedi;31/10/20;15:55:35; 85.00°C
(15:56:41.548) Cpt= 1 ;Samedi;31/10/20;15:55:58; 20.87°C
(15:57:04.602) Cpt= 2 ;Samedi;31/10/20;15:56:21; 20.93°C
(15:57:27.654) Cpt= 3 ;Samedi;31/10/20;15:56:44; 20.87°C
(15:57:54.535) Cpt= 4 ;Samedi;31/10/20;15:57:11; 20.87°C
(15:58:17.587) Cpt= 5 ;Samedi;31/10/20;15:57:34; 20.87°C


Exemple de dialogue via liaison BlueTooth PIC <-> Tablette Lenovo
midification vitesse de defilemen ~maxi
et demande Help pour la liste et syntaxe des commandes possibles.



Rappel Hardware :


*Nota :
18F26K22 à la place du 18F252
DS18B20 déporté à l'exterieur du boitier

Pin 1 ----- Noir ---- 3 ICSP Gnd , 0V
Pin 2 ----- Violet ----2 ICSP VDD
Pin 3 ----- Orange -- 1 ICSP VPP
Pin 4 -----Bleu ----- 4 ICSP Data
Pin 5 ---- Blanc ---- 5 ICSP Clock
Pin1 Orange = +Alim
Pin 2 Bleu = 0V (Gnd)
Pin 3 Jaune= Din-------- RC1
Pin 4 Orange= CS ------ RC0
Pin 5 Vert = Clock ----- RC2

Connecteur ICSP pins males Connecteur gauche Matrices <- >PIC




SOFTWARE :
Projet Mikroc 7.60
20 dec. 2020
Projet zippé : Horloge_defilante_8_matrices_Verticales_18F26K22_20201220.zip
source : Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_Fosc_Interne_64MHz_2020_1220.c
chargeur : Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_Fosc_interne_64Mhz_2020_1220.hex
Eeeprom : Horloge_Message_Defilant_8xMax7219_Matrices_V_18F26k22_2020_10_EEPROM.ihex
config : P18F26K22_Base_Fosc_interne_16xPLL_64MHz.cfgsch




Nouvelle Version avec 12 x (Max7219 et Matrices 8x 8 Horizontales)
... connectique traversantes !

24-06-2019

Les longeurs de connections entre modules sont divisées par 10 ! par rapport à l'ancien modele à connections verticales
Test de 3 ensembles de 4 matrices , soit 12 modules MAX7219 Matrice 8x8 H (version #1)



Affichage en Statique .
.OK, no problemo

images/t_Matrices_Max72119_x4x3_test_b.gif

Attention au modele de bloc 4 Matrices , existe en 2 versions !
Tests ci-dessus faits avec modeles version #1


../common/t_BAD_delivered_MAX7219-4_Matrice_191023.gif

Projet : Test_Affichage_fixe_12_Matrices8x8_18F26K22_1905.zip
source :
Base_18F26K22_test_12_Matrice8x8_190523.c




Test en mode Défilement horizontal , pixel par Pixel , sur 8 matrices H
PIC 18F26K22 PDIP28
Attention : avec bloc 4 Matrices livré en version modele #2 !
difference avec modele #1 : inverse Haut et Bas , et Sens de defilement !


Tentative de gestion via Mot de 64bits
Constitution d'un registre à décalage de 64 bits, via 2 entiers longs de 32 bits
Usage de l' ASM dans mikroC
particularité pour le report de carry, pour faire un buffer Circulaire
1 byte par ligne de chaque caractere

RESULTAT ... pas tres satisfaisant

Affichage rotatif ou glissant
Parametre Bouclage =1 > registre 64 bits rebouclé
Bouclage=0 decalage 64 bits seulement
Decalage et Rotation de 8 matrices 8x8 , à gauche sur 64 bits , en ASM


#define OFFSET 0x16
unsigned char temps[64] absolute OFFSET;
unsigned char Bouclage absolute OFFSET+66;

void New_decalage_64bits(void)
{
// rev 24-11-2019
// rebouclage sortie sur entree si Bouclage=1
_asm{
nop ;// pour pose point d'arret au debut
bcf STATUS,C
btfss _Bouclage,0 ; //
bra la1;
bcf STATUS,C ;// positionne Carry à 0
btfsc _temps+0,7 ;// regarder si le bits 7, de la variable "temps+7" est 1
bsf STATUS,C ;// si oui, positionne Carry à  1
la1:
rlcf _temps+56,F
rlcf _temps+48,F ;
rlcf _temps+40,F ;
rlcf _temps+32,F ;
rlcf _temps+24,F ;
rlcf _temps+16,F ;
rlcf _temps+8,F ;
rlcf _temps+0,F
//2em
bcf STATUS,C
btfss _Bouclage,0
bra la2;
bcf STATUS,C
btfsc _temps+1,7
bsf STATUS,C
la2:
rlcf _temps+57,F ;
rlcf _temps+49,F ;
rlcf _temps+41,F ;
rlcf _temps+33,F ;
rlcf _temps+25,F ;
rlcf _temps+17,F ;
rlcf _temps+9,F ;
rlcf _temps+1,F ;
//3em
bcf STATUS,C
btfss _Bouclage,0
bra la3;
bcf STATUS,C
btfsc _temps+2,7
bsf STATUS,C
la3:
rlcf _temps+58,F ;
rlcf _temps+50,F ;
rlcf _temps+42,F ;
rlcf _temps+34,F ;
rlcf _temps+26,F ;
rlcf _temps+18,F ;
rlcf _temps+10,F ;
rlcf _temps+2,F ;
//4em
bcf STATUS,C
btfss _Bouclage,0
bra la4;
bcf STATUS,C
btfsc _temps+3,7
bsf STATUS,C
la4:
rlcf _temps+59,F ;
rlcf _temps+51,F ;
rlcf _temps+43,F ;
rlcf _temps+35,F ;
rlcf _temps+27,F ;
rlcf _temps+19,F ;
rlcf _temps+11,F ;
rlcf _temps+3,F ;
//5em
bcf STATUS,C
btfss _Bouclage,0
bra la5;
bcf STATUS,C
btfsc _temps+4,7
bsf STATUS,C
la5:
rlcf _temps+60,F ;
rlcf _temps+52,F ;
rlcf _temps+44,F ;
rlcf _temps+36,F ;
rlcf _temps+28,F ;
rlcf _temps+20,F ;
rlcf _temps+12,F ;
rlcf _temps+04,F ;
//6em
bcf STATUS,C
btfss _Bouclage,0
bra la6;
bcf STATUS,C
btfsc _temps+5,7
bsf STATUS,C
la6:
rlcf _temps+61,F ;
rlcf _temps+53,F ;
rlcf _temps+45,F ;
rlcf _temps+37,F ;
rlcf _temps+29,F ;
rlcf _temps+21,F ;
rlcf _temps+13,F ;
rlcf _temps+05,F ;
//7em
bcf STATUS,C
btfss _Bouclage,0
bra la7;
bcf STATUS,C
btfsc _temps+6,7
bsf STATUS,C
la7:
rlcf _temps+62,F ;
rlcf _temps+54,F ;
rlcf _temps+46,F ;
rlcf _temps+38,F ;
rlcf _temps+30,F ;
rlcf _temps+22,F ;
rlcf _temps+14,F ;
rlcf _temps+06,F ;
//8em
bcf STATUS,C
btfss _Bouclage,0
bra la8;
bcf STATUS,C
btfsc _temps+7,7
bsf STATUS,C
la8:
rlcf _temps+63,F ;
rlcf _temps+55,F ;
rlcf _temps+47,F ;
rlcf _temps+39,F ;
rlcf _temps+31,F ;
rlcf _temps+23,F ;
rlcf _temps+15,F ;
rlcf _temps+07,F ;
nop ; // pour point d'arret
}
// Delay_ms(50); // pour debugging
}


Projet MikroC 7.60 :
_test_18F26K22_defilement_texte_decalage_64bits_asm_191124.zip
Log sur Terminal :

Test_defilement_text_via_decalage_64bits_ASM_191124.txt
video
:
Test decalage

Résultat INSATISFAISANT ....car les bits sortant du registre à declage 64 bits ne retourne pas au debut du buffer Texte à afficher
Le 1er catactere à droite de la matrice ( de 8 caractere) est entré d'un seul coup ,au lieu de pixel par pixel => saut visible de 8 pixel !
meme si ensuite le texte defile bien dans le registre 64 bits ..
faire un registre de 8 bytes * Nb de caracteres maxi à visualiser ?
concatener plusieurs registres à décalage 64 bits pour en former un 128 pour 16 cars,
ou 256 pour 32 caracteres


(rev 02/12/2019)
avec une autre Font :
THIN8X8_R.h avec caracteres moins "epais" , sur 1 pixel de tracé
crée à partir de l'original
THIN8X8_R.pf et le logiciel PixelFontEdit.exe
test_18F26K22_defilement_texte_decalage_64bits_asm_1912.hex
test_18F26K22_defilement_texte_decalage_64bits_asm_191202.c



06-12-2019
Application HORLOGE sur 8 matrices H

PIC 18F26K22
Affichage défilant de :
l'heure HH:MM:SS :
15:38:56 ,
Date en clair :
06 Decembre 2019
Temperature interne RTC :
Int=+18.25°C
Temperature Ext : Ext=
+16.23°C;...... si autre MCU 12F1840 actif


images/Capture.jpg

images/Capture2.jpg

Commandes via le Terminal (UART ou BlueTooth)

images/t_Horloge_8matrices_H_cdes_via_terminal_1912.gif


Parametrage possible :
Help<CR> : resume les commandes possibles
Speed=xx<CR> avec xx compris entre 1 et 99 (ms) vitesse de balayage trame. param sauvegardé en EEPROM
Affi=1<CR> permet d'afficher la trame en bionaire sur un terminal ( au lieu de l'affichage sur Matrices avec Aff=0 (par defaut))
PLM=21:06<CR> Permet de diminuer la luminosuté des Aficcheurs Matrices , au minimum ,
pendant la plage Horaire 21Hà 06H, parametre sauvegarés en EEPROM
U;12;05;18;15;36;02;#<CR> pour mettre à l'heure la RTC DS3231 , format U;DD;JJ;AA;HH;MM;jS;#
avec jS =N0 du jour de la semaine ex: Dimanche=00, Lundi=01....

Possibilité d'envoyer un message ascii ( via terminal ou BlueTooth) :
Msg=xxxxxxxx<CR> le message xxxxxxxxx doit faire en longueur moins de 64 cars
l'heure reste affichée au debut HH:MM:SS , la date est alors résumée au format JJ/DD/MM , pour liberer de l'espace,
puis le message est rajouté ensuite.
Le message reste affiché pendant un nombre de Repetition défini , puis retour à l'affichage initial de base

le projet MikroC :



Horloge_8_Matrice_defil_18F26K22_191210.zip
Horloge_8_Matrice8x8_defil_Date_Heure_18F26K22_191210.hex
New_Decalage_64bits_ASM_191205.inc
Tiny_RTC_DS3231_for_AI2_1912.mcl
Tiny_RTC_DS3231_for_AI2_1912.h
Horloge_defil_8_Matrices_8x8_Date_Heure_18F26K22_191210.c
font : THIN_SS_2019.h


Video :
Horloge_defilante_8_Matrices_H_via_Registre_64bits_191210.webm


14/12/2019
Application HORLOGE et message defilant sur 12 matrices H
avec un mixte de 2 blocs modele #1 et un Bloc modele #2 raccordé à l'envers !

PIC 18F26K22
HARDWARE :
ATTENTION connections HORIZONTALE avec NEW Matrices MAX7219 CMS
ref matrice 8x8 sur le bas de l'afficheur
led #1 entre PIN9 et Pin 13 , en haut à gauche = Digit0 col 0
// ------------------------------------------ RTC DS3231------
RB1 pin --<-------------------------- Forcage init RTC par defaut
RB0 pin .. --<-------------------------- blanc --- 5 SQW 1Hz
RC3 Pin .. -->-------- I2C1 SCL1 -- vert ---- 4 SCL
RC4 Pin .. --<>----- I2C1 SDA1 -- jaune --- 3 SDA
=5v ------------------------------------ orange ---2 VCC
0V Gnd ------------------------------- marron ---1 GND

+5V ----------------------------------------------- Pin 1 MAX7219x4 #1 - MAX7219x4 #2- -- MAX7219x4 #3
0V Gnd ------------------------------------------- Pin 2 MAX7219x4 #1 - MAX7219x4 #2- -- MAX7219x4 #3
RC1 pin .. SPI1 MOSI ----------- Din ------ Pin 3 MAX7219x4 #1 - MAX7219x4 #2- -- MAX7219x4 #3
RC0 pin .. SPI Select CS --------CS-------- Pin 4 MAX7219x4 #1 - MAX7219x4 #2- -- MAX7219x4 #3
RC2 pin .. SPI1 CLCK ---------- CLOCK--Pin 5 MAX7219x4 #1 - MAX7219x4 #2- -- MAX7219x4 #3

UART1 TX sur RC6 pin .. --- blanc RX cordon Prolix
UART1 RX sur RC7 pin .. --- vert TX cordon Prolix
Gnd 0V ---------------------------- noir Gnd Cordon Prolix
N.C. --rouge +5V USB


j'ai rajouté à ma version 8 matrices , mon 3em bloc de 4 matrices qui marche en sens inverse
et au prix d'une petite modif. et un cablage indirect
pour cabler la sortie du 2em bloc ( entree IN à gauche du bloc) vers l'entree du 3em bloc (entree IN à droite du module).

L' ordre d''affichage des 12 modules est , en consequence, inversé sur les 4 derniers

Modif Software :

Presentation :
Mikroc 7.6.0 18F26K22
Directory : C:\_MikroC\_MesProjets_MikroC\Horloge_12matrices_8x8_defilt_96bits_asm_18F26K22_1912
Projet : Horloge_12_Matrice8x8_defilement_96bits_18F26K22_191214.mcppi
Source : Horloge_defil_12_Matrices_8x8_96bits_18F26K22__191214.c
Usage de 12 registres de 64 bits pour le decalage à gauche ..en ASM
Terminal pour dialogue et Visu deroulement programme
Alim =3.3V_mini
Tiny_RTC_DS3231_for_AI2_1912.mcl et *.h ,Font : Thin_SS_2019.H
Config Oscillateur : PIC18F26k22_FOSC_interne_16x4-64MHZ.cfgsch
Devices : MAX7219 (cms),RTC DS3231, OWS DS18B20



* Déclage ASM sur 96 bits !
si la longueur Msg est nulle : Affichage Date en mode long : Jour Mois Annee + les 2 temperatures ...sont affichées
Rep=xx<CR> Nombre de repetition affichage message ( en nombre de cycle ou trame)
nota: au demarrage , msg indiquant la version du programme..affiché pendant xx Repetitions.
xx stocké en 0x00B4 eeprom du PIC

Matrices en test

Connectique finale

En marche

images/t_Hardware_Photos_12_matrices_191215.gif
montage de 2 modules version1 + 1 module version 2 (inversé !)

Avec un mixte : 2 premiers modules en version Originale et 3em module en version 2



Mise en Boite :

Préparation en Image de synthese (MORAY + POVray)

Image Virtuelle en 3D
images/t_mise_en_boite_journal_lumineux_12_matrices_191218.gif

Lien vers Raytracing fichiers Moray et MDL


Finition ..... à suivre !


images/t_Horloge_12matrices_H_defilante_Ecran_Terminal_191215.gif


le projet mikroC complet :




Horloge_12matrices_8x8_defilt_96bits_asm_18F26K22_191216.zip
Horloge_12_Matrice8x8_defilement_96bits_18F26K22_191216.hex
New_Decalage_96bits_ASM_191214.inc
Horloge_12_Matrice8x8_defilement_Date_Heure_Temp_Msg_Shift_96bits_18F26K22_191215_eeprom.ihex


Video:
Test_Horloge_Msg_defil_12_Matrices_191215.webm
Test avec filtre gris sur les 10 premiers caracteres

possibilité d'utiliser l'Eeeprom du PIC pour stocker jusqu'à 10 message de 64 cars.
liées eventuellement à une Date et Heure donnée ..
ou couplé à GSM click..afficher un SMS ..

Grosse BOULETTE:
Suite à une mauvaise,manip .. 2 blocs partiellements détruits ( because envoi de 12V sur pin CS !)


A suivre



problemo RESOLU en 2020
=> remplacement par 3 nouveaux blocs de 4 matrice H type #2 , tous avec l'entrée connecteur à droite !

PROBLEMO :
Test avec fileries livrées ( 5 fils dupont F-F , L=15cm entre modules)
Chute de tension de 0,8 entre le 1er (alimenté en 3,2V) et le dernier (2,4V seulement sur les pins de sortie Vcc Gnd)
=> Software revu :

// SPI bit BANG pour Matrices MAX7219
sbit SPI_CLOCK at LATC0_bit; // bleu
sbit SPI_CLOCK_Dir at TRISC0_bit;
sbit SPI_CS at LATC1_bit; // violet
sbit SPI_CS_Dir at TRISC1_bit;
sbit SPI_DOUT at LATC2_bit; // blanc
sbit SPI_DOUT_Dir at TRISC2_bit;

voir ICI :
Horloge_Defilante_12Matrices_8x8_2020.htm



Lien vers version Arduino (mini Pro. Simple)



paulfjujo@free.fr