matrice leds

#1
bonjour

je suis débutant et je cherche a éclairer
25 leds a l aide de lignes et de colonnes (row et col )
mes symboles fonctionnent mais pour facilité
l’écriture du code j aimerais attribuer une lettre
a chaque leds sous forme de symboles avec une ligne
et une colonne mais la ça coince :(
j ai bien peur d être complétement a coté un
peu d aide serait la bienvenue je vous remercie
d avance j ajoute mon bout de code qui va surement
horrifier les spécialistes
merci bonne journée
Georges

[;picaxe 20M2


symbol row1 = B.1 ;ligne 1
symbol row2 = B.2 ;ligne 2
symbol row3 = B.3 ;ligne 3
symbol row4 = B.4 ;ligne 4
symbol row5 = B.5 ;ligne 5

symbol col1 = C.1 ;colonne 1
symbol col2 = C.2 ;colonne 2
symbol col3 = C.3 ;colonne 3
symbol col4 = C.4 ;colonne 4
symbol col5 = C.5 ;colonne 5

symbol aa = row1 and col1 ;led a
symbol bb = row2 and col2 ;led c
symbol cc = row3 and col3 ;led d

symbol te = 2000 ;temporisation

high aa,bb,cc ;leds a b c on
pause te ;temporisation
low aa,bb,cc ;leds a b c off


high cc,bb ;leds c b on
pause te ;temporisation
low cc,bb ;leds c b off ]
 

PieM

Senior Member
#2
Bonjour,
symbol aa = row1 and col1
n'est pas valide. on ne peut définir un symbole par deux entités !

Si l'objectif est d'allumer plusieurs leds indépendamment, ce n'est pas la bonne méthode.

si la led A est allumée par row a et col b il sera imposible d'allumer autre chose (row c, col d) sans allumer les 4 leds aux intersections des 2 lignes et 2 colonnes.
Utiliser plutôt un driver de matrice leds genre MAX7219
 

MGU

Senior Member
#3
Bonjour,
n'est pas valide. on ne peut définir un symbole par deux entités !

Si l'objectif est d'allumer plusieurs leds indépendamment, ce n'est pas la bonne méthode.

si la led A est allumée par row a et col b il sera imposible d'allumer autre chose (row c, col d) sans allumer les 4 leds aux intersections des 2 lignes et 2 colonnes.
Utiliser plutôt un driver de matrice leds genre MAX7219
Bonjour,

En enlevant l'afficheur led 8x8, on a accès aux coordonnées xy pour un affichage de 5x5

http://electromag1.wifeo.com/afficheurs-led-pilotes-par-max7219.php

http://electromag1.wifeo.com/matrice-64-leds-driver-max7219-.php

MM
 
Last edited:
#4
bonsoir ,
et merci PieM pour votre reponse
j ai regardé du coté du max 7219 je suis bien incapable de le faire fonctionner
je ne maitrise pas les commandes serie
pour les 5 colonnes et le 5 lignes je peux commander 25 leds (simulation filaire)
pour le moment si j ecris [high Col1,RoW1] ma led1 s eclaire
je precise que j ai ajouté un transistor sur mes row pour que
sur un etat on j ai un gnd sur la led et par la sortie col un positif (etat haut)
existe il un forme de symbole qui englobe deux symboles
si je pouvais écrire pour chaque led un symbole cela me simplifierait le code exemple
led1=col1,row1 led2=col1,row2 led3=col1rw3 led4=col1,row4 led5=col1,row5 led6=col2,row1 etc
je n aurai plus comme code que [high led1,led3] au lieu d ecrire et le col et le row correspondant a
chaque leds
cela vous parais surement compliqué pour pas grand désolé pour ce fouilli
si vous avez encore la patiente pour éclairer ma lanterne je vous remercie
bonne soirée Georges
 

PieM

Senior Member
#6
pour le moment si j ecris [high Col1,RoW1] ma led1 s eclaire
Ben oui mais si vous écrivez en plus [high Col2,RoW2] il y a 4 leds qui s'allument!
Le rôle du driver 7219 et d'allumer une seule led à la fois, mais de changer très rapidement, ce qui fait qu'avec la persistance rétinienne, on voit les leds allumées simultanément.
 
#7
Bonsoir PieM ,
Vous avez entièrement raison !!! je vous remercie pour votre patiente.
J ai consulté les liens je suis désolé mais je manque vraiment de compétence
pour comprendre ces codes mème avec l aide du manuel picaxe je ne
saisis pas leurs fonctions ce qui rend compliqué l adaptation a mon projet .
Je change donc mon fusil d’épaule je commande un 40X2 j ai donc
mes 25 sorties indépendantes je vous joints le code testé avec un 20M2
mes 15 leds fonctionnent correctement si vous avez la gentillesse de
me donner votre avis mème très négatif .
questions subsidiaires peut on faire varier la pause te par un potentiomètre
et mettre sur low toutes les sorties après la pause sans les ressaisir toutes
merci bonne soirée
Georges
[;picaxe 20M2

symbol aa=B.0 ; symboles des leds dans la matrice
symbol bb=B.1
symbol cc=B.2
symbol dd=B.3
symbol ee=B.4
symbol FF=B.5
symbol gg=B.6
symbol hh=B.7
symbol ii=C.0
symbol jj=C.1
symbol kk=C.2
symbol ll=C.3
symbol mm=C.4
symbol nn=C.5
symbol oo=C.7 ;C.6 entrée seulement

symbol te=900 ;tempo leds on

do

pause 2000 ;pause avant lancement prog

high aa,bb,cc
pause te
low aa,bb,cc
high dd,ee,ff
pause te
low dd,ee,ff
high gg,hh,ii
pause te
low gg,hh,ii
high jj,kk,ll
pause te
low jj,kk,ll
high mm,nn,oo
pause te
low mm,nn,oo
high cc,oo,ll,ff,ii
pause te
low cc,oo,ll,ff,ii
high bb,ee,hh,kk,nn
pause te
low bb,ee,hh,kk,nn
high aa,dd,gg,jj,mm
pause te
low aa,dd,gg,jj,mm
high bb,ee,hh,kk,nn
pause te
low bb,ee,hh,kk,nn
high cc,ff,ii,ll,oo
pause te
low cc,ff,ii,ll,oo
high aa,dd,hh,ll,oo
pause te
low aa,dd,hh,ll,oo
high bb,ee,hh,kk,nn
pause te
low bb,ee,hh,kk,nn
high cc,ff,hh,jj,mm
pause te
low cc,ff,hh,jj,mm
high gg,hh,ii
pause te
low gg,hh,ii

loop]
 

MGU

Senior Member
#8
Bonjour,

Dommage de prendre un 40X2 pour ça, c'est vraiment du gâchis, alors qu'un 08M2 et un driver max7219 suffit.
J'ai pas trop envie d'éplucher le code pour voir le but final
En gros, ça sert à quoi ?

Pour le sous programme affichage, y a qu'à recopier la doc.
Pour le reste, dis ce que tu veux faire

MM
 
#9
bonjour MGU ,
Je sais que je gâche mais dans les exemples je
ne fait pas la différence entre le code d affichage
et les figures de leds. J ai pourtant lu le manuel mais j ai trop de
lacunes pour m en sortir .J’étais parti dans l optique d’utiliser des TLC5940 déjà en
ma possession .
l idée est de générer a l aide de 25 leds des figures géométriques,des lettres a la suite toutes les secondes
environ avec éventuellement cerise sur le gâteaux un reglage de la fréquence d affichage
voir de l'intensité lumineuse .Je vais essayer a nouveau de consulter les liens . En attendant merci pour
ta réponse bonne journée
Georges
 
#11
Bonjour PieM ,
ce n'est pas l'envie qui manque :)
juste les compétences , mais je vais essayer
de comprendre ce code,avec de la patiente peut être .
merci bonne journée
Georges
 

MGU

Senior Member
#12
Bonjour PieM ,
ce n'est pas l'envie qui manque :)
juste les compétences , mais je vais essayer
de comprendre ce code,avec de la patiente peut être .
merci bonne journée
Georges
Bonjour,

C'est "avec de la patience...sûrement". Mais l'envie est indispensable.
Une matrice 5x5 c'est bien, mais pourquoi pas 8x8, tant qu'on y est ?
Le 08M2 est minimaliste, et si il faut ajouter quelques réglages (vitesse, luminosité, etc), le 14M2 est plus confortable, avec en plus la commande "table".

Il faut de toute façon un module matrice 8x8 avec le max7219, (comme sur le site). On en trouve partout, chez Gotronic, sur eBay, en France ou en Chine à partir de 1,47 euro port gratuit.

Ajout:
Je relis cette page sur la matrice de leds et il me semble que le sous programme de remplacement shiftout, inspiré de la doc est "assez" maladroit.
Je vais en tester un autre, plus simple, j'espère.
Et cette page manque de commentaires....à refaire!

MM
 
Last edited:
#13
bonsoir ,

Merci MGU et PieM que de patiente avec les bricolos comme
moi.Je trouve un moment pour me poser et consulter
le blog a tête reposée .
bonne soirée
Georges
 

MGU

Senior Member
#14
Voici un programme expurgé, affichant uniquement le chiffre 5

Description des variables
Avec un 14M2, le "5" est décrit dans une suite de 8 octets de la mémoire "table" (voir doc)

initialisation du max7219

Un sous programme "lectable" recherche et lit un à un les 8 octets (colonne) de la matrice 8x8

Avec le sous programme shiftt, chaque octet est ensuite envoyé, bit à bit dans le registre du max7219 et affiché.
Le sous programme remplaçant de shiftout n'est pas celui de la doc.

Code:
;Afficheur driver MAX7219
;Matrice de leds 8x8
;MM 27/10/2013

;Format des registres MAX 7219 sur 16 bits:

;|------------------------------w13------------------------------|
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|

   #picaxe 14M2
	#no_data
   setfreq m32	
   symbol 	DIN   = pinB.1   ;Entrée Data In de l'afficheur
   symbol  	LOAD  = B.2   ;Entrée Load de l'afficheur
   symbol  	CLK   = B.3    ;Entrée CLK de l'afficheur
   symbol  	TEST  = pinC.3
   symbol  	LEN   = 1        ;durée impulsion 1ms
   symbol	regbit= bit0
   symbol  	num   = b1    ;lecture température    
   symbol  	cpt   = b2      ;compteur   
   symbol  	chif  = b3
   symbol 	val   = b4   
   symbol  	regis =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre
   dirsB=%10		;B.1 en sortie pour pinB.1	
   low LOAD
   low CLK

;chiffre "5": description des 8 colonnes du chiffre "5", 8 octets à partir du n°50
    table 50,(0,%1000111,%10000101,%10000101,%10000101,%1111001,0,0)

;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%00000000  'pas de décodage code B mais segments
    gosub shiftt
 
    b27=$0b  'limite scanner = Nbre de digits
    b26=$07    '$04=5 digits ,$03=4 digits,, etc...
    gosub shiftt
 
    b27=$0c  'shutdown mode
    b26=$01  '=normal (afficheur actif)
    gosub shiftt      

    b27=$0a  'luminosité
    b26=$04  '=croissante de 0 à 15, ici c'est 4
    gosub shiftt
      
    b27=$0f  'display test
    b26=$00  '=normal
    gosub shiftt
;**********************************************
;affichage du chiffre:
	val=5			;val contient le chiffre à afficher
	gosub lectable
	stop ; fin du programme d'affichage
;**********************************************
lectable:	; sous programme de lecture de "table", 8 octets à partir de l'octet n°50
 	For num =1 to 8   ;n° de colonne
  	     b27=num           ;adresse registre
             chif=val*10 +num-1 ;calage sur le premier octet du chiffre val
             readtable chif,b26 ;lecture de l'octet "donnée colonne"
             gosub shiftt       ;affichage colonne  
 	next         
 	return
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------w13------------------------------|                                                               |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|

;La broche DIN va prendre successivement la valeur de chaque bit de w13, scanné de gauche à droire
shiftt:
   for cpt=1 to 16      	;test des 16 bits de w13
		DIN=w13/$8000   	;w13 = b27,b26 ;valeur de broche DIN = 1er bit à gauche de w13   		
		pulsout CLK,LEN     	;envoie 1 pulse  pour valider DIN
               w13=w13*2            ; on décale w13 vers la gauche pour examiner le bit suivant
   next cpt
   pulsout LOAD,LEN    		;chargement du registre terminé, un pulse sur load valide le registre 
   return
MM
 
Last edited:
#15
Bonjour MGU

Un grand merci je n ai plus
d excuses pour ne pas réussir .
je commande un max7219 ou peut être mon tlc5940 est il compatible
je récupère les datasheets pour contrôler .
le week-end sera chargé .
Merci encore pour votre précieuse aide .
bonne journée Georges
 

MGU

Senior Member
#16
Bonjour,

Non, j'ai survolé la doc, c'est un driver 16 leds, le code sera totalement différent.
Achète plutôt un module matrice de 64 leds : max7219 sur eBay, il y a le choix. ou chez Gotronic.

Donc, la description du symbole à afficher est dans une série de 8 octets. La mémoire table peut contenir 512 octets sur les M2 soit 64 symboles possibles.
Dans mon exemple, ils sont rangés de 10 en 10 (10,20,...) , une numérotation octal serait une meilleure idée pour densifier ($10,$20...).

Bon week end

MM
 
Last edited:

PieM

Senior Member
#18
Pour reprendre l'idée de départ concernant l'utilisation de symboles, il y a une astuce qui permet d'écrire dans le programme high aa,bb
C'est d'utiliser les directives:

#define aa B.1, C.1
#define bb B.2, C.2
'.....
do
high aa, bb ' sera remplacé par high B.1,C.1,B.2,C.2
pause 1000
low aa,bb
loop

Mais je n'ai pas voulu en parler car le problème restait entier ! :rolleyes:
 
#19
bonsoir PieM ,
alors comme ça on me cache des choses :)
j enregistre cette astuce mais je vais
tout de même faire l effort de réfléchir sur
la piste du max7219 des réception merci pour votre aide
bonne soirée georges
 

PieM

Senior Member
#20
bonsoir PieM ,
alors comme ça on me cache des choses :)
j enregistre cette astuce mais je vais
tout de même faire l effort de réfléchir sur
la piste du max7219 des réception merci pour votre aide
bonne soirée georges
Bonjour,
Mais je confirme que cette méthode n'est pas la bonne solution, la seule étant de passer par un max7219, comme dit dès le début;
 

MGU

Senior Member
#21
Bonjour,

Encore un peu plus simple, avec adresse du début de description symbole, sans calcul, (il peut y avoir autre chose que des chiffres).
Pour la luminosité et les vitesses variables, c'est simple, on verra ça après.

Code:
;Afficheur driver MAX7219
;Matrice de leds 8x8
;MM 25/04/2018

;Format des registres MAX 7219 sur 16 bits:

;|------------------------------w13------------------------------|
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|

   #picaxe 14M2
   #no_data
   setfreq m32	
   symbol 	DIN   = pinB.1   ;Entrée Data In de l'afficheur
   symbol  	LOAD  = B.2   ;Entrée Load de l'afficheur
   symbol  	CLK   = B.3    ;Entrée CLK de l'afficheur  
   symbol  	LEN   = 1        ;durée impulsion 
   symbol	regbit= bit0
   symbol  	num   = b1    ;lecture température    
   symbol  	cpt   = b2      ;compteur   
   symbol  	chif  = b3
   symbol 	val   = b4   
   dirsB=%10		;B.1 en sortie pour pinB.1	
   low LOAD
   low CLK
;description des symboles *************
   table $20,(0,%11000010,%110100001,%10010001,%10010001,%10001110,0,0)
   table $30,(0,%1000010,%10000001,%10001001,%10001001,%1110110,0,0)
;******** initialisation 7219 *******
   b27=$09  'mode décodage
   b26=%00000000  'pas de décodage code B mais segments
   gosub shiftt
 
   b27=$0b  'limite scanner = Nbre de digits
   b26=$07   '$04=5 digits ,$03=4 digits,, etc...
   gosub shiftt
 
   b27=$0c  'shutdown mode
   b26=$01  '=normal (afficheur actif)
   gosub shiftt      

   b27=$0a  'luminosité
   b26=$04  '=croissante de 0 à 15, ici c'est 4
   gosub shiftt
      
   b27=$0f  'display test
   b26=$00  '=normal
   gosub shiftt
;**********************************************
;boucle principale 
	do
		val=$20			;val contient l'adresse du 1er octet du symbole à afficher
		gosub lectable
		pause 8000	;1 sec à freq=32MHz
		val=$30
		gosub lectable
		pause 8000
	loop		

;**********************************************
lectable:	; sous programme de lecture de "table", 8 octets à partir de l'octet pointé par val
    for num =0 to 7   		;n° de colonne numérotée ici de 0 à 7
        b27=num +1          ;adresse "colonne" de 1 à 8
        chif=val +num 		;positions des 8 octets consécutifs, départ adresse val
        readtable chif,b26 ;lecture de l'octet "donnée colonne"
        gosub shiftt       ;affichage colonne         
    next         
 	return
;******** Sous programme affichage *************************
  ;Format du registre sur 16 bits:

;|------------------------------w13------------------------------|
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|

;La broche DIN va prendre successivement la valeur de chaque bit de w13, scanné de gauche à droire
shiftt:
   for cpt=1 to 16      	;test des 16 bits de w13
      DIN=w13/$8000    ;w13 = b27,b26 ;valeur de broche DIN = 1er bit à gauche de w13   		
      pulsout CLK,LEN     	;envoie 1 pulse  pour valider DIN
      w13=w13*2            ; on décale w13 vers la gauche pour examiner le bit suivant
   next cpt
   pulsout LOAD,LEN    		;chargement du registre terminé, un pulse sur load valide le registre 
   return
MM
 
Last edited:

MGU

Senior Member
#23
Bonjour,

Histoire de se simplifier la vie, voici un utilitaire Excel (zippé, les .xls sont refusés) pour dessiner des symboles sur une matrice 8x8
On dessine le symbole avec des O (par ex) dans le carré de gauche, si la cellule est vide, un 0 apparait dans le carré de droite sinon, c'est un 1.
Pour corriger, il faut effacer le contenu de la cellule à gauche.

Quand le symbole est terminé, l'octet correspondant à chaque colonne est dans le carré de droite, avec la valeur décimale, plus compacte, à côté.
La feuille est protégée en écriture (sauf le carré de gauche), mais il n'y a pas de mot de passe.

View attachment symbol matrice 8x8.zip

MM
 
Last edited:
Top