Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
folkeu08
Débutant
Débutant
Messages : 31
Âge : 52
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#1 Message par folkeu08 » sam. 26 oct. 2019 20:31

Bonjour,
Je ne suis pas un familier de l'assembleur mais je m'y lance accompagné de la doc de Bigonoff.
Le cas concret est un récepteur DMX512 dont le canal de consigne ne serai pas géré par des roues codeuses. L'idée de de mettre sur un 16f877 3 boutons poussoirs (Down, Valid, Up) accompagné d'un affichage à MAX7219.
J'ai trouvé une routine qui me semble assez complète pour le max : http://www.hagi-online.org/picmicro/max7219.html.
Je commence à dessiner le schéma sous Proteus pour la simulation.
Je devrai déjà arriver à gérer seul la commande et la gestion de l'affichage.
J'ai déjà rencontré ce soucis par ailleurs et le problème va revenir dans ce projet, je vais devoir supprimer les "0" pour les centaines et dizaines lorsque cela sera nécessaire.
Dans l'eeprom du pic va être stocké la valeur du canal sur lequel va commencer le décodage sous 2 espaces :
DE H'00' ;OP3H
DE H'00' ;OP3L
Quel est le cheminement à utiliser pour supprimer les premiers "0" (les rendre non visibles par un blanck)
A+
François

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » dim. 27 oct. 2019 01:20

Bonsoir folkeu08, et tout le forum,

Je viens de regarder le datasheet du Max7219

Dans l'exemple décrit par ton lien, l'auteur utilise le mode SPI bit bang, 16 bits sont envoyés pour pilotage du MAX7219, donc voici

MAX7219 (Protocole).jpg

Au moment de l'envoie CS doit être mit à l'état bas, une fois l'envoie fini CS doit être remit à l'état haut.

Pour revenir à ta question, veux tu supprimer les zéros dans ton programme, ou sur l'afficheur ?

Pour supprimer l'affichage d'un digit, il faut activer le code B sur tous les digits et envoyer sur le bit D0 à D3 = "1111"

MAX7219-code.jpg


Remarque : on n'est pas obligé d'activer le code B, mais ça nous facilite la vie. :wink:

Maintenant si c'est pour supprimer les zéros dans ton programme, c'est pas compliqué, je vais attendre ta réponse pour la suite. :roll:

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
folkeu08
Débutant
Débutant
Messages : 31
Âge : 52
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#3 Message par folkeu08 » dim. 27 oct. 2019 12:26

Bonjour Temps-x,
Je souhaite que l'afficheur soit complétement éteint pour les 0 qui se situent avant le canal à afficher mais ceux faisant partie de nombre s'affichent comme pour "108" par exemple.
En fait, c'est un mix de ta solution, il faudrai que le programme détecte les 0 précédant le canal réel et les remplace donc par un code B (segements de l'afficheur concerné éteint).
Et que cette détection ne fonctionne pas quant le 0 est intercalé entre deux chiffres (108) ou en fin (100).
Cela est-il plus clair ?
Merci
François

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » dim. 27 oct. 2019 12:58

Bonjour,

Ouais, si j'ai bien compris, quand tu veux afficher 00108 tu voudrais supprimer les zéros qui sont à gauche tu voudrais les voir afficher comme cela 108

J'ai créé une fonction pour supprimé tout les zéros qui sont à gauches, si c'est ça, je peux mettre le code ici, on t’expliquant son fonctionnement.

Code : Tout sélectionner



 CBLOCK H
'20' 

      loop6         
:1
 
      unite         
:1
      dizaine       
:1
      centaine      
:1    
      millier       
:1  
      dix_millier   
:1  
      cent_millier  
:1  
      million       
:1
      dix_million   
:1
      cent_million  
:1

 ENDC
  
     call affiche_donner
     
do_loop   
        nop
        
goto do_loop
           
 
;*********************************************************************************************** 
affiche_donner

; "suprime les zéros qui sont à gauches" 
     
      movlw D
'9'                        ; 9 variables à traiter
      movwf loop6
        
      movlw cent_million               
      movwf FSR0L

supprimer_zero
      movf INDF0
,W        
      xorlw D
'48'
      btfss STATUS,Z     
      goto imprime_lcd
      decf FSR0L
,F
      decfsz loop6
,F
      goto supprimer_zero
      
      movlw 
'0'
      movwf lettre
      call ecrit_lcd

      return 

; "écrit les données sur le lcd"

imprime_lcd
      movf INDF0
,W      
      movwf lettre      
      call ecrit_lcd     
      
      decf FSR0L
,F
      decfsz loop6
,F
      goto imprime_lcd

      return

;*********************************************************************************************** 
 


Dans cette exemple je me sert d'un LCD, c'est la même chose pour ton cas, suffit d'éteindre les afficheurs qui doivent afficher Zéro.
ou de faire un décalage à droite pour les faire passer d'une variable à une autre.

A+
Modifié en dernier par Temps-x le dim. 27 oct. 2019 15:21, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
folkeu08
Débutant
Débutant
Messages : 31
Âge : 52
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#5 Message par folkeu08 » dim. 27 oct. 2019 14:33

Re,
oui c'est bien cela. Tu es en avance sur moi par contre. J'ai encore la gestion des BP (boutons poussoirs) à écrire.
Ca fait quelques temps que ce projet me titille car dans mon département, chaque été, un son et lumière, sur gradin mobile (unique en Europe) est créé. https://www.la-cassine.com/
L'asso qui gère utilise du vieux matériel (acquis en 84) et il tombe souvent en panne maintenant.
Ils utilisent des récépteurs DMX512 à 24 canaux 0-10V pour piloter des gradateurs. Ces récepteurs posent soucis souvent. L'idée est d'en créer qui rendra l'asso autonome.
J'essaye d'écrire en assembleur pour que l'UL traite vie les infos. Je décoderai les valeurs DMX et convertirai en tension avec des MAX528.
Je ferai aussi une version à relais car ils ont besoin dans certains spectacles de créer une ambiance brouillard avec des machines à fumée.
Voila l'idée du projet et le pourquoi.
François

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#6 Message par Temps-x » dim. 27 oct. 2019 15:50

folkeu08 a écrit :Source du message J'ai encore la gestion des BP (boutons poussoirs) à écrire.


Pour les boutons poussoir

Code : Tout sélectionner

;
;
                    Utilisation du PORTB pour économiser les résistances  
;
;****************
 exemple pour 8 boutons poussoir qui son relié sur le PORTB *******************


#DEFINE     bout1   PORTB,0             ; RB0 
#DEFINE     bout2   PORTB,1             ; RB1
#DEFINE     bout3   PORTB,2             ; RB2 
#DEFINE     bout4   PORTB,3             ; RB3
#DEFINE     bout5   PORTB,4             ; RB4 
#DEFINE     bout6   PORTB,5             ; RB5
#DEFINE     bout7   PORTB,6             ; RB6 
#DEFINE     bout8   PORTB,7             ; RB7

;****************************** déclaration des variables *************************************

 CBLOCK H'20' 

      loop1         
:1
      loop2         
:1
      loop3         
:1
      loop4         
:1
      loop5         
:1                    
      loop6         
:1                    

      unite         
:1
      dizaine       
:1
      centaine      
:1    
      millier       
:1  
      dix_millier   
:1  
      cent_millier  
:1  
      million       
:1
      dix_million   
:1
      cent_million  
:1

 ENDC
  
   ORG H
'0'           
      goto debut  

    ORG H
'4'           
      retfie

debut

;***********************************************************************************************

      BANKSEL OPTION_REG                     ; passe en bank 1
                                 
;************************ configuration du registre OPTION_REG en bank 1 *********************** 
     
      movlw B
'00000000'                   ; résistanse en service sur tous le PORTB
      movwf OPTION_REG                    
; 

;************************** configuration du registre TRISB en bank 1 ************************** 
                                           
      movlw B
'11111111'                   ; configurer tous le PORTB en entrée            
      movwf TRISB                     

;***********************************************************************************************

      BANKSEL PORTB                       ; passer en bank 0         

;***********************************************************************************************
bt1  
      btfsc bout1
      goto bt2 
      btfss bout1
      goto 
$-D'1'   

      call mico_pause
 
      
; traitement


      return            

;***********************************************************************************************
bt2      
      btfsc bout2
      goto bt3
      btfss bout2
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;***********************************************************************************************
bt3      
      btfsc bout3
      goto bt4
      btfss bout3
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return
;***********************************************************************************************
bt4      
      btfsc bout4
      goto bt5
      btfss bout4
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;***********************************************************************************************
bt5      
      btfsc bout5
      goto bt6
      btfss bout5
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;***********************************************************************************************
bt6      
      btfsc bout6
      goto bt7
      btfss bout6
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;***********************************************************************************************
bt7      
      btfsc bout7
      goto bt8
      btfss bout7
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;***********************************************************************************************
bt8      
      btfsc bout8
      return 
      btfss bout8
      goto 
$-D'1'

      call mico_pause

      
; traitement

      return

;********************* "pause de 100 microsecondes pour horloge de 4 Mhz" *********************** 
mico_pause
      movlw D
'33'
      movwf loop1

      decfsz loop1
,F
      goto 
$-D'1'

      return

;***********************************************************************************************
 


==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
folkeu08
Débutant
Débutant
Messages : 31
Âge : 52
Enregistré en : novembre 2017
Localisation : Ardennes (08)
Contact :

#7 Message par folkeu08 » dim. 27 oct. 2019 23:30

Re Temps-x
Temps-x a écrit :Source du message J'ai créé une fonction pour supprimé tout les zéros qui sont à gauches, si c'est ça, je peux mettre le code ici, on t’expliquant son fonctionnement.

Peux-tu expliquer ta fonction car il y a des sytèmes d'écriture dont je n'ai pas l'habitude comme les :1 dans les déclarations.
Comment introduire mes valeurs OP3H et OP3L dans ta routine.
Mon pic est un 16F877
Merci
François

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#8 Message par Temps-x » lun. 28 oct. 2019 01:17

Bonsoir folkeu08, et tout le forum,

folkeu08 a écrit :Source du message comme les :1 dans les déclarations.


C'est une déclaration de 1 octet = 8 bits

Exemple

Code : Tout sélectionner


      temps 
:1         


Pour une déclaration de 2 octets = 16 bits

Exemple

Code : Tout sélectionner


      temps 
:2         


Pour une déclaration de 3 octets = 24 bits

Exemple

Code : Tout sélectionner


      temps 
:3         



Pour une déclaration de 4 octets = 32 bits

Exemple

Code : Tout sélectionner


      temps 
:4         


Si je veux écrire 54 dans une variable de 4 octets

Code : Tout sélectionner


      temps 
:4                                 ; déclaration d'une variable de 4 octets  
  
      clrf temps+0                            ; efface l'
octet  1
      clrf temps
+1                            ; efface l’octets 2
      clrf temps
+2                            ; efface l’octets 3
      clrf temps
+3                            ; efface l’octets 4
      
      movlw D
'54'
      movwf temps+0



Si je veux écrire 540 dans une variable de 4 octets

Code : Tout sélectionner


      temps 
:4                                 ; déclaration d'une variable de 4 octets  

      clrf temps+0                            ; efface l'
octet  1
      clrf temps
+1                            ; efface l’octets 2
      clrf temps
+2                            ; efface l’octets 3
      clrf temps
+3                            ; efface l’octets 4

      movlw D
'12'
      movwf temps+0

      movlw D
'33'
      movwf temps+1



Si u comprends toujours pas, une grande révision s'impose, et je commencerais par le début, et je crois que c'est le cas :sifflotte:

folkeu08 a écrit :Source du message Comment introduire mes valeurs OP3H et OP3L dans ta routine.


:roll: ouh là là..., tu es pas sortie de l'auberge .... il faut convertir tes valeurs pour les envoyer sur ton MAX7219

OP3H et OP3L représente 2 variables, qui à eux 2 fonts 16 bits, comptage jusqu’à 65535 décimal ou FFFF hexadécimal ou 1111111111111111 binaire.

Le gros problème c'est qu'un microcontrôleur compte en binaire, et qu'il faut convertir le binaire en décimal, et pour cela il faut 6 variables pour 16 bits

Code : Tout sélectionner


      unite         
:1
      dizaine       
:1
      centaine      
:1    
      millier       
:1  
      dix_millier   
:1  
      cent_millier  
:1        
      


Mais comme ton afficheur à 8 chiffres il faudra 9 variables pour 24 bits

Code : Tout sélectionner


      unite         
:1
      dizaine       
:1
      centaine      
:1    
      millier       
:1  
      dix_millier   
:1  
      cent_millier  
:1  
      million       
:1
      dix_million   
:1
      cent_million  
:1
      


Ne t’inquiète pas, j'ai fait une fonction qui fait le travaille, ce que j'aimerais c'est que tu comprennes le fonctionnement, et tu vas voir que c'est pas compliqué.

Comme il est tard, et que je tiens plus debout, je reprendrais demain.

==> A+
Modifié en dernier par Temps-x le lun. 28 oct. 2019 19:51, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
JMarc
Confirmé
Confirmé
Messages : 557
Enregistré en : août 2016
Localisation : Dans le Sud...

#9 Message par JMarc » lun. 28 oct. 2019 14:36

Bonjour folkeu, temps-x et tout le forum

Pour les boutons poussoir regarde aussi http://www.fantaspic.fr/viewtopic.php?f=11&t=444

Tu peux même avoir plusieurs fonctions avec le même bouton suivant la durée d’appui

MAX7219 : suppression des "0" occupant les premières positions d'un nombre comme 006
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 1367
Enregistré en : juillet 2016
Localisation : Terre

#10 Message par Temps-x » mar. 29 oct. 2019 18:48

Bonsoir folkeu08, JMarc, et tout le forum,


Bonjour JMarc, Content de te revoir sur le forum, pour nous apporter tes précieux conseille. :wink:

Avant d'aller plus loin

J'attends d'avoir des nouvelles de folkeu08, :roll: de plus je voudrais savoir si il a commencé à écrire quelque chose. :sifflotte: ....

A voir l'excellent code de ducran lapoigne ICI

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité