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

Matrice et afficheur avec MAX7219
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » jeu. 21 nov. 2019 19:25

Bonjour tout le forum,

J'ai acheté un module de 8 afficheurs qui sont commandé par un Max7219 au prix de 1,25 euro voici son datasheet

Module de 8 afficheurs avec MAX7219
8 afficheurs + Max7219.jpg

Le module à une dimension de 83mm X 15mm, on peut connecter un autre module derrière celui ci sur la sortie Dout

Mise en fonction du Max7219 avec 8 afficheurs

J'ai utilisé pour la mise en fonction du Max7219 un microcontrôleur Pic18F26K22, voici son datasheet

Schéma

Max7219 - afficheur.jpg

oops ... une fois branché comme sur le schéma, les afficheurs indique n'importe quoi.
La cause, c'est qu'il faut faire une fonction pour remettre les afficheurs à zéro... chose que j'ai faite, :razz: et là.....ça fonctionne.

https://youtu.be/T9EC2h9OmNs

Le code

Le code ASM a été écrit avec jens file Editor 3.95, dans ce code vous allez trouver

Conversion 24 bits binaire vers ASCII, écriture en eeprom et lecture, Initiation du Max7219, suppression des zéros qui sont à gauches.

Code : Tout sélectionner



    Errorlevel
-302                        ; Supprime le message "Ensure that bank bits are correct" 

    radix dec                             
; par defaut en mode décimal

    list p
=18f26K22                       ; processeur utilisé                  
    
#include <p18f26K22.inc>              ; Définitions des constantes

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

;
 CONFIG11H
     CONFIG FOSC 
= INTIO67 
     CONFIG FCMEN 
= OFF 
     CONFIG IESO 
= OFF
; CONFIG2L
     CONFIG PWRTEN 
= OFF 
     CONFIG BOREN 
= OFF 
     CONFIG BORV 
= 190
; CONFIG2H
     CONFIG WDTEN 
= OFF 
     CONFIG  WDTPS 
= 1
; CONFIG3H
     CONFIG CCP2MX 
= PORTC1                         
     CONFIG PBADEN 
= OFF
     CONFIG CCP3MX 
= PORTC6
     CONFIG HFOFST 
= OFF
     CONFIG T3CMX 
= PORTC0
     CONFIG P2BMX 
= PORTC0
     CONFIG MCLRE 
= INTMCLR
; CONFIG4L
     CONFIG STVREN 
= OFF 
     CONFIG LVP 
= OFF 
     CONFIG XINST 
= OFF 
     CONFIG DEBUG 
= OFF
; CONFIG5L
     CONFIG CP0 
= OFF 
     CONFIG CP1 
= OFF 
     CONFIG CP2 
= OFF 
     CONFIG CP3 
= OFF
; CONFIG5H
     CONFIG CPB 
= OFF 
     CONFIG CPD 
= OFF
; CONFIG6L
     CONFIG EBTR0 
= OFF
; CONFIG6H
     CONFIG EBTR1 
= OFF
; CONFIG7L
     CONFIG EBTR2 
= OFF
; CONFIG7H
     CONFIG EBTR3 
= OFF

;*************************************** assignations ***************************************** 

#DEFINE cs_1   LATC,0                     ; RC0 activer ou désactiver la transmission
           
#DEFINE led1   LATA,0                     ; RA0 led verte, témoin de mise en fonction de l'appareil

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

      CBLOCK H'0'                          ; zone de la sdram en bank 0

      loop1               
:1                                              
      loop2               
:1
      loop3               
:1
      loop4               
:1
      loop5               
:1                    
   
      afficheur           
:1

      lettre              
;1

      temps               
:
      tmps                
:1

      res24               
:1
      res16               
:1
      res8                
:1

      unité               
:1      
      dizaine             
:1
      centaine            
:1
      millième            
:1
      dix_millième        
:1
      cent_millième       
:1
      un_millionième      
:1
      dix_millionième     
:1
      cent_millionième    
:

      adresse_hi          
:1
      adresse_low         
:

      donner              
:1

      ENDC

;********************************** "déclaration des macros" ***********************************
;
;**************************
 Macro pour écrit dans l'eeprom  ************************************ 
ecriture_eeprom MACRO valeur1,valeur2,valeur3 

      movlw valeur1
      movwf adresse_hi

      movlw valeur2
      movwf adresse_low

      movf valeur3,W
      movwf donner

      call eeprom_ecriture 

    ENDM

;*************************** Macro pour lire dans l'
eeprom  ************************************ 
lecture_eeprom MACRO valeur1
,valeur2

      movlw valeur1
      movwf adresse_hi

      movlw valeur2
      movwf adresse_low

      call eeprom_lecture

    ENDM

;******************************* "adresse de depart après reset" *******************************
    ORG H'0'
      bra debut

    ORG H
'8'
      retfie 

    ORG H
'18'                                  
      retfie 

debut
;***************** "configuration de la bank sélectionné du microcontrôleur" *******************

      movlw B'00000000'          
      movwf BSR

;******************** "configuration de l'oscillateur du microcontrôleur" ********************** 

      movlw B
'01110100'                   ; oscillateur à 16 Mhz, fréquence stable si PLL (16 * 4)= 64 Mhz
;     movlw B'01100100'                   ; oscillateur à 8 Mhz, fréquence stable si PLL (* 4) = 32 Mhz
;     movlw B'01010010'                   ; oscillateur à 4 Mhz, fréquence stable  
;     movlw B'01000010'                   ; oscillateur à 2 Mhz, fréquence stable  
;     movlw B'00110010'                   ; oscillateur à 1 Mhz, fréquence stable  

      movwf OSCCON
      
;**************************** configuration du registre OSCTUNE ********************************

      movlw B'00000000'                   ; bit 6 à 1 : PLL * 4
      movwf OSCTUNE                       
; bit 6 à 0 : PLL désactivé
                                         
;*************************** configuration du registre ANSELA ********************************** 

      movlw B
'00000000'                   ; en mode numérique : 
      movwf ANSELA                        
; en mode E/S       : 2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5) 

;**************************** configuration du registre ANSELB ********************************* 

      movlw B
'00000000'                   ; en mode numérique : 
      movwf ANSELB                        
; en mode E/S       : 21(RB0), 22(RB1) 23(RB2), 24(RB3), 25(RB4), 26(RB5)  
             
;**************************** configuration du registre ANSELC ********************************* 

      movlw B
'00000000'                   ; en mode numérique :
      movwf ANSELC                        ; en mode E/S       : 13(RC2),  14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)  

;*************************** configuration du registre ADCON0 ********************************** 

      movlw B
'00000000'                   ; b0 = ADON mise en service le convertiseur 0 = arrêt : 1 = marche   
      movwf ADCON0                        
; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion
                                          
; b2 à b6 = réglage de la sélection du canal

;*************************** configuration du registre ADCON1 ********************************** 

      movlw B
'00000000'                   ; b2 à b3 = 00 : sélection de la tension de reférence, Vref+ = Vss   
      movwf ADCON1                        
; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = Vdd 
                                          
;***************** configuration des registres TRISA & TRISB & TRISC & TRISE ******************* 

      movlw B
'00000000'                   ; RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9)  
      movwf TRISA                         
; 

      movlw B
'11111111'                   ; RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)
      movwf TRISB                         ; 

      movlw B
'01010000'                   ; RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18)     
      movwf TRISC                         
; 

      movlw B
'00001000'                   ; RE3(1) 
      movwf TRISE                         
;

                                          ; VSS(8), VSS(19), VDD(20) 

;**************************** configuration du registre SSP1CON1 ******************************* 

      movlw B
'01000000'                   ; B7 = 0 : lecture des données au milieu
      movwf SSP1STAT                      
; B'01000000'
             
      movlw B
'00100001'                   ; B0 ...B3 = spi en mode Maître, clock = FOSC/16, B5 = polarité négative
      movwf SSP1CON1                      
; 16 /16(quartz) = 1 Mbps 
           
;**************************** configuration du registre INTCON2 ******************************** 

      movlw B
'00000000'                   ; B7 = 0 résistances en service
      movwf INTCON2                       
;

;****************************
 configuration du registre WPUB *********************************** 
                                        
      movlw B
'11111111'                   ; tirage de résistance sur        : RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28)  
      movwf WPUB                          
; pas de tirage de résistance sur :

;****************************
 configuration du registre INTCON *********************************      

      movlw B
'00000000'                   ; 
      movwf INTCON                        
; interruption hors service 

;************************************ départ du programme **************************************

      clrf PORTA
      clrf PORTB
      clrf PORTC
   
      clrf LATA
      clrf LATB 
      clrf LATC

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

      bsf cs_1                            
; désactivé l'émision du port spi

;***********************************************************************************************
    
      bsf led1                            ; led verte, témoin de mise en fonction de l'
appareil
      rcall _1s
      bcf led1                        
      rcall _1s
      bsf led1                        

;********************************* "configuration du max 7219" *********************************

      call max7219_ini                    ; initiation du max 7219

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

      lecture_eeprom 0,0                  ; macro pour lecture de l'eeprom à l'adresse 0x00 
      movf donner
,W
      movwf res16                         
; 
                                          
;
      lecture_eeprom 0,1                  ; macro pour lecture de l'eeprom à l'adresse 0x01
      movf donner
,W                       ;
      movwf res8                          ;
                                          ; 
      clrf res24                          
; n'est pas utilisé 

;************************* "convertion de op3h & op3l pour afficheur" **************************

      call conversion                     ; conversion 24 bits, 9 nombres pour 8 afficheurs

;***********************************************************************************************
                                  
      rcall affiche_donner                ; affiche 511
       
      rcall _1s
      rcall _1s
      rcall _1s

      movlw H'
FF'                        
      movwf res16 
                  
      movlw H'
FF'
      movwf res8  

      call conversion                     ; conversion 24 bits, 9 nombres pour 8 afficheurs
                  
      rcall affiche_donner                ; affiche 65535 

      rcall _1s
      rcall _1s
      rcall _1s

      movlw H'
13'
      movwf res16 
                  
      movlw H'
E5'
      movwf res8  

      call conversion                     ; conversion 24 bits, 9 nombres pour 8 afficheurs
                  
      rcall affiche_donner                ; affiche 5093

      rcall _1s
      rcall _1s
      rcall _1s

      movlw H'
E4'
      movwf res24 

      movlw H'
E7'
      movwf res16 
                  
      movlw H'
25'                     
      movwf res8                            

      call conversion                     ; conversion 24 bits, 9 nombres pour 8 afficheurs
                  
      rcall affiche_donner                ; affiche 15001381

boucle
      goto boucle 

;**************** "suprime les zéros qui sont à gauches et affiche les données" **************** 
affiche_donner
  
      movlw D'
8'                          ; 8 nombres                   
      movwf afficheur
        
      lfsr FSR0,dix_millionième            

supprimer_zero    
      movf INDF0,W
      xorlw D'
0'
      btfss STATUS,Z     
      bra imprime_digits

      bcf cs_1
      movf afficheur,W                          
      rcall spi            
      movlw B'
00000000'                  ; éteindre les afficheurs qui affiche zéro 
      rcall spi
      bsf cs_1  
      
      decf FSR0L,F                        ; 
      decfsz afficheur,F
      bra supprimer_zero    
      
      return 
  
;*********************************************************************************************** 
imprime_digits
      movf INDF0,W
      movwf lettre      
      rcall ecrit_digit
    
      decf FSR0L,F
      decfsz afficheur,F
      bra imprime_digits

      return

;***************************** "écrit les données sur le digit" ******************************** 
ecrit_digit       
      bcf cs_1
      movf afficheur,W                     
      rcall spi            

      movlw D'
9'                         ; tableaux de nombre et de lettre
      movwf PCLATH                       ; incrémenter PCLATH 

      movf lettre,W
      call deco_bcd   
      rcall spi
      bsf cs_1
    
      return 

;********************************* "configuration du max 7219" *********************************
max7219_ini        

      bcf cs_1    
decodage
      movlw 0x09                          ; adresse 0x09, décodage du code B,
      rcall spi            
      movlw 0x00                          ; décodage du code B désactivé               
      rcall spi
      bsf cs_1    

      nop

      bcf cs_1    
intensite
      movlw 0x0A                          ; adresse 0x0A, réglage d'
intensité
      rcall spi
      movlw 0x0A                          
; posibilité de réglage de 0xX0 à 0xXF
      rcall spi                           
; sur la MAX7219 ne pas oublier de mettre une 
      bsf cs_1    

      nop

      bcf cs_1    
scan
      movlw 0x0B                          
; adresse 0x0B,  définir le nombre de digits 
      rcall spi                           
; que l'on souhaite exploiter de digit0 à digit8 
      movlw 0x07                          ; ici, on explote les huits digits de 0 à 7
      rcall spi
      bsf cs_1    

      nop

      bcf cs_1
eteint
      movlw 0x0C                          ; adresse 0x0C, permet d'
allumer ou d’éteindre l'afficheur
      rcall spi
      movlw 0x01                          ; ici, afficheur allumé
      rcall spi
      bsf cs_1    

      nop

      bcf cs_1                              
test
      movlw 0xFF                          ; adresse 0xFF, test
      rcall spi
      movlw 0x00                          ; ici, pas de test
      rcall spi
      bsf cs_1


effacer_digit                             ; éteint tous les afficheurs 

      movlw D'
8'                          ; 8 afficheurs à traiter  
      movwf afficheur
 
eteindre
      bcf cs_1
      movf afficheur,W                     
      rcall spi            
      movlw B'
00000000'      
      rcall spi
      bsf cs_1
      decfsz afficheur,F
      bra eteindre

      return

;******************************* "gestion d'
envoie du mode spi" ********************************
spi
      movwf SSPBUF
    
attends
      btfss SSPSTAT,BF                   ;
      goto attends  

      movf SSPBUF,W                      ; clean SSPBUF  
      
      return

;************************* "
pause de 1 seconde pour horloge de 16 Mhz" ************************* 
_1s
      movlw D'190'
      movwf loop1

      movlw D'75'
      movwf loop2

      movlw D'21'
      movwf loop3

      decfsz loop1,F
      bra $-D'2'
      decfsz loop2,F
      bra $-D'6'
      decfsz loop3,F
      bra $-D'10'

      return

;************************************* "
convertion 24 bits" ************************************ 
conversion
           
      clrf unité                  
      clrf dizaine              
      clrf centaine             
      clrf millième             
      clrf dix_millième         
      clrf cent_millième   
      clrf un_millionième  
      clrf dix_millionième 
      clrf cent_millionième

; "
24 bits"

b24_7
      btfss res24,7
      bra b24_6

      movlw D'8'                          ; 8388608  
      addwf un_millionième,F
      movlw D'3'                          ;  388608  
      addwf cent_millième,F
      movlw D'8'                          ;   88608
      addwf dix_millième,F
      movlw D'8'                          ;    8608                            
      addwf millième,F                 
      movlw D'6'                          ;     608
      addwf centaine,F                 
      movlw D'0'                          ;      08
      addwf dizaine,F                 
      movlw D'8'                          ;       8
      addwf unité,F                      

b24_6
      btfss res24,6
      bra b24_5

      movlw D'4'                          ; 4194304  
      addwf un_millionième,F
      movlw D'1'                          ;  194304
      addwf cent_millième,F
      movlw D'9'                          ;   94304
      addwf dix_millième,F
      movlw D'4'                          ;    4304                            
      addwf millième,F                 
      movlw D'3'                          ;     304 
      addwf centaine,F                 
      movlw D'0'                          ;      04 
      addwf dizaine,F                 
      movlw D'4'                          ;       4
      addwf unité,F                      

b24_5
      btfss res24,5
      bra b24_4

      movlw D'2'                          ; 2097152  
      addwf un_millionième,F
      movlw D'0'                          ;  097152
      addwf cent_millième,F
      movlw D'9'                          ;   97152
      addwf dix_millième,F
      movlw D'7'                          ;    7152                            
      addwf millième,F                 
      movlw D'1'                          ;     152 
      addwf centaine,F                 
      movlw D'5'                          ;      52  
      addwf dizaine,F                 
      movlw D'2'                          ;       2
      addwf unité,F                      

b24_4
      btfss res24,4
      bra b24_3

      movlw D'1'                          ; 1048576  
      addwf un_millionième,F
      movlw D'0'                          ;  048576
      addwf cent_millième,F
      movlw D'4'                          ;   48576
      addwf dix_millième,F
      movlw D'8'                          ;    8576                            
      addwf millième,F                 
      movlw D'5'                          ;     576 
      addwf centaine,F                 
      movlw D'7'                          ;      76  
      addwf dizaine,F                 
      movlw D'6'                          ;       6
      addwf unité,F                      

b24_3
      btfss res24,3
      bra b24_2

      movlw D'5'                          ;  524288
      addwf cent_millième,F
      movlw D'2'                          ;   24288
      addwf dix_millième,F
      movlw D'4'                          ;    4288                            
      addwf millième,F                 
      movlw D'2'                          ;     288 
      addwf centaine,F                 
      movlw D'8'                          ;      88   
      addwf dizaine,F                 
      movlw D'8'                          ;       8
      addwf unité,F                      

b24_2
      btfss res24,2
      bra b24_1

      movlw D'2'                          ;  262144
      addwf cent_millième,F
      movlw D'6'                          ;   62144
      addwf dix_millième,F
      movlw D'2'                          ;    2144                            
      addwf millième,F                 
      movlw D'1'                          ;     144 
      addwf centaine,F                 
      movlw D'4'                          ;      44   
      addwf dizaine,F                 
      movlw D'4'                          ;       4
      addwf unité,F                      

b24_1
      btfss res24,1
      bra b24_0

      movlw D'1'                          ;  131072
      addwf cent_millième,F
      movlw D'3'                          ;   31072
      addwf dix_millième,F
      movlw D'1'                          ;    1072
      addwf millième,F                 
      movlw D'0'                          ;     072 
      addwf centaine,F                 
      movlw D'7'                          ;      72   
      addwf dizaine,F                 
      movlw D'2'                          ;       2
      addwf unité,F                      

b24_0
      btfss res24,0
      bra b16_7

      movlw D'6'                          ;   65536
      addwf dix_millième,F
      movlw D'5'                          ;    5536
      addwf millième,F                 
      movlw D'5'                          ;     536 
      addwf centaine,F                 
      movlw D'3'                          ;      36   
      addwf dizaine,F                 
      movlw D'6'                          ;       6
      addwf unité,F                        

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

; "
16 bits"

b16_7
      btfss res16,7
      bra b16_6

      movlw D'3'                          ; 32768  
      addwf dix_millième,F
      movlw D'2'                          ;  2768  
      addwf millième,F
      movlw D'7'                          ;   768
      addwf centaine,F                 
      movlw D'6'                          ;    68
      addwf dizaine,F                 
      movlw D'8'                          ;     8
      addwf unité,F                 

b16_6
      btfss res16,6
      bra b16_5

      movlw D'1'                          ; 16384  
      addwf dix_millième,F
      movlw D'6'                          ;  6384  
      addwf millième,F
      movlw D'3'                          ;   384
      addwf centaine,F                 
      movlw D'8'                          ;    84
      addwf dizaine,F                 
      movlw D'4'                          ;     4
      addwf unité,F                 

b16_5
      btfss res16,5
      bra b16_4

      movlw D'8'                          ; 8192  
      addwf millième,F
      movlw D'1'                          ;  192
      addwf centaine,F                 
      movlw D'9'                          ;   92
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b16_4
      btfss res16,4
      bra b16_3            

      movlw D'4'                          ; 4096  
      addwf millième,F
      movlw D'0'                          ;  096
      addwf centaine,F                 
      movlw D'9'                          ;   96
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 

b16_3
      btfss res16,3
      bra b16_2

      movlw D'2'                          ; 2048  
      addwf millième,F
      movlw D'0'                          ;  048
      addwf centaine,F                 
      movlw D'4'                          ;   48
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 

b16_2
      btfss res16,2
      bra b16_1

      movlw D'1'                          ; 1024  
      addwf millième,F
      movlw D'0'                          ;  024
      addwf centaine,F                 
      movlw D'2'                          ;   24
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 

b16_1
      btfss res16,1
      bra b16_0

      movlw D'5'                          ;  512
      addwf centaine,F                 
      movlw D'1'                          ;   12
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b16_0
      btfss res16,0
      bra b8_7

      movlw D'2'                          ;  256
      addwf centaine,F                 
      movlw D'5'                          ;   56
      addwf dizaine,F                 
      movlw D'6'                          ;    6
      addwf unité,F                 

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

; "
8 bits"

b8_7
      btfss res8,7
      bra b8_6

      movlw D'1'                          ;  128
      addwf centaine,F                 
      movlw D'2'                          ;   28
      addwf dizaine,F                 
      movlw D'8'                          ;    8
      addwf unité,F                 

b8_6
      btfss res8,6
      bra b8_5            

      movlw D'6'                          ;   64
      addwf dizaine,F                 
      movlw D'4'                          ;    4
      addwf unité,F                 

b8_5
      btfss res8,5
      bra b8_4

      movlw D'3'                          ;   32
      addwf dizaine,F                 
      movlw D'2'                          ;    2
      addwf unité,F                 

b8_4
      btfss res8,4
      bra b8_3            

      movlw D'1'                          ;   16
      addwf dizaine,F                    
      movlw D'6'                          ;    6
      addwf unité,F                 

b8_3
      movlw B'00001111'                   ; 8, 4, 2, 1
      andwf res8,W    
    
      addwf unité,F     

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

      movlw D'9'                          ; 9 variables à traiter
      movwf loop5
       
      lfsr FSR0,unité                     ; pointer  à l'adresse de la variable "
unité

assembler
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf tmps                          ; transmettre dans la variable "
tmps"
 
      incf FSR0L,F                        ; variable suivante
      movf INDF0,W                        ; récupérer la valeur dans W 
      movwf temps                         ; transmettre dans la variable "
temps"

;***********************************************************************************************
tr0      
      movf tmps,W
      sublw D'10'                         ; retir 10 de W
      btfsc STATUS,Z                      ; 
      bra tr1                             ; 
      btfss STATUS,C                      ; 
      bra tr1                             ; 
      bra tr2                             ; 
tr1
      movlw D'10'                         ;
      subwf tmps,F                        ;
      incf temps,F                        ; 
      bra tr0                       

;*********************************************************************************************** 
tr2
      movf temps,W
      movwf INDF0                         ; nouvelle valeur à cette adresse

      decf FSR0L,F                        
      movf tmps,W      
      movwf INDF0                         ; nouvelle valeur à cette adresse

;     movlw D'48'                         ; convertir en format ASCII, pas besoin de le faire
;     addwf INDF0,F                       

      incf FSR0L,F                        ; variable suivante 

      decfsz loop5,F                      ; 
      bra assembler                
      
      return

;****************************** "
pour écrit dans l'eeprom" ************************************* 
eeprom_ecriture
      movf adresse_hi,W                   ; adresse du poid fort
      movwf EEADRH                        ;

      movf adresse_low,W                  ; adresse du poid faible
      movwf EEADR                         ; 

      movf donner,W                       ;
      movwf EEDATA                        ; écriture de la donnée
 
      bcf EECON1,EEPGD                    ; préparation à l'
autorisation 
      bcf EECON1
,CFGS                     ; access eeprom

      bsf EECON1
,WREN                     ; Enable writes   
 
      bcf INTCON
,GIE                      ; couper les interruptions

      btfsc INTCON
,GIE                    ; contrôl si les interruptions sont bien coupés
      bra 
$-D'2'                          ; remonte à la ligne 2 jusqu'a coupures des interruptions 

      movlw H'
55'                         ; séquence spécifique (c'est comme ça, il faut le savoir)
      movwf EECON2                        ; séquence spécifique
      movlw H
'AA'                         ; séquence spécifique
      movwf EECON2                        
; séquence spécifique

      bsf EECON1
,WR                       ; lance une opération d'écriture

      btfsc    EECON1,WR                      ; on attend que l'
operation d'ecriture soit finie (de l'ordre de la ms
      bra 
$-D'2'                          ; remonte à la ligne 2 jusqu'a fin d'écriture

      bcf EECON1
, WREN                    ; interdiction de l'écriture

      return

;******************************** "pour lire dans l'
eeprom" ************************************ 
eeprom_lecture
      movf adresse_hi,W                   ; adresse du poid fort
      movwf EEADRH                        ;

      movf adresse_low,W                  ; adresse du poid faible
      movwf EEADR                         ; 

      bcf EECON1,EEPGD                    ; préparation à la lecture
      bcf EECON1,CFGS                     ; access EEPROM
      bsf EECON1,RD                       ; lecture de l'EEPROM

      movf EEDATA,W                       ; la valeur lue dans l'éeprom est placée dans W 
      movwf donner

      return

;*********************************** "
décodage du code BCD" ************************************
    ORG H'900'       

deco_bcd
      rlncf WREG,F

      addwf PCL,F

      retlw B'01111110'                   ; 0
      retlw B'00110000'                   ; 1 
      retlw B'01101101'                   ; 2 
      retlw B'01111001'                   ; 3 
      retlw B'00110011'                   ; 4
      retlw B'01011011'                   ; 5
      retlw B'01011111'                   ; 6
      retlw B'01110010'                   ; 7
      retlw B'01111111'                   ; 8
      retlw B'01111011'                   ; 9
              
      retlw B'01110111'                   ; A
      retlw B'01001111'                   ; E  
      retlw B'01000111'                   ; F 
      retlw B'00110111'                   ; H
      retlw B'00001110'                   ; L
      retlw B'01100111'                   ; P
      retlw B'01011011'                   ; S
      retlw B'00111110'                   ; U
      retlw B'00111011'                   ; Y 

;************ "
 écriture dans l'eepromm au début de la programmation du Pic18F26k22" ************

DATAEE ORG H'
F00000'

       DE 0x01,0xFF

      End


Fichier code : Max7219(Code).zip
Fichier à mettre dans le Pic : Max7219(Hex).zip


******************************************************************************** Deuxième code ********************************************************************************

Mise en fonction du Max7219 avec 12 matrices

Malheureusement comme j'ai pas les 12 matrices, je ne peux pas vous le montrer en réelle,

Schéma

Matrices 12 (vert).jpg


Le clavier est stocké en mémoire programme, comme on n'est plus gêné par la taille des données, j'ai mi les 255 caractères du clavier ASCII.

Avertissement je tiens à vous signaler qu'il soit possible que vos matrices acheté dans le commerce ne corresponde pas au branchement que j'ai effectué dans le simulateur, dans ce cas vous devrait réorganiser l'ordre des branchements dans le simulateur.

Fichier à mettre dans le Pic : Matrice-12(Hex).zip

Fichier code : Matrice-12(Code).zip

Bon maintenant, il me reste à faire tourner un message en boucle, d'une longueur maximum de 255 caractères :sifflotte:

Pour l'instant je n'ai pas trouvé de solution satisfaisante, ... à suivre
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le dim. 14 juin 2020 12:51, modifié 24 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Matrice et afficheur avec MAX7219
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » sam. 7 déc. 2019 10:46

bonjour à tous,

TempsX a écrit :deuxieme code ....
Mise en fonction du Max7219 avec 12 matrices


le lien sur le code correspond à ta version 8 afficheurs 7 segment
et non pas (au schema) 12 Matrices 8x8

Je serais curieux de tester ton code , meme avec 2 blocs de 4 matrices

A+
Aide toi, le ciel ou FantasPic t'aidera

Matrice et afficheur avec MAX7219
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » sam. 7 déc. 2019 16:15

Bonsoir paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message le code correspond à ta version 8 afficheurs 7 segment


:roll: Je comprends pas ce que tu veux dire..... :mur:

paulfjujo a écrit :Source du message Je serais curieux de tester ton code , meme avec 2 blocs de 4 matrices


J'ai bien peur que cela ne soit pas possible, car j'ai câblé les matrices en fonction de l'afficheur trouvé dans le simulateur.

Si ça fonctionne tu auras une sacré chance(il faudra continuer à manger du lapin)

Je travaille actuellement sur un défilement en boucle avec phrase de 255 caractères, je comprends pourquoi tu te tapes le mur :mur:

Faut le vivre pour le comprendre, et sa fait mal un mur ... :roll:

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 35 invités