Hello Superdat,
I've been going through this post as I'm actually strugling with getting a 4 * 7 segment display drived by the Max7219 connected to a pic 16F15344.
I'm actually programing in asm as I feel it more detailed and I understand what I'm doing.
After reading datasheet of pic16F15344 and Max7219, I've created an asm code and made my hardware connection.
The code is buiding without any issue and getting loaded into the pic throught pickit3 but after scratching my head for hours and checking my connections, I've not been able to find out where is the issue and the 7segment display is still blank and don't show the value 1991 as I would like to display.
I've seen throught this post that you've been suceding to make your 7segment display working with Max7219.
Can you help me to understand where is the issue in my code or share your code?
My code:
; TODO INSERT INCLUDE CODE HERE
list p=16f15344 ; list directive to define processor
#include <p16f15344.inc> ; processor specific variable definitions
; TODO INSERT CONFIG HERE
__CONFIG _CONFIG1, _RSTOSC_HFINT1
__CONFIG _CONFIG3, _WDTE_OFF
__CONFIG _CONFIG4, _LVP_OFF
__CONFIG _CONFIG5, _CP_OFF
; _RSTOSC_HFINT1 -> permet l'activation de l'oscillateur interne a une frequence de 1Mhz soit 1 microS/osccillation
; _LVP_OFF -> permet la programmation a faible tenssion
; _CP_OFF -> Ne cache pas le code
; _WDT_OFF -> Desactive le Watch Dog
; TODO PLACE VARIABLE DEFINITIONS GO HERE
;***** VARIABLE DEFINITIONS at the bank 0 begining at adress 0x20
cblock 0X20
registre_Démarrage : 1
Donnée_Demmarrage : 1
Donnée_Fin : 1
registre_Parametrage : 1
Donnée_ParametrageBCD : 1
registre_Intensite : 1
Donnée_Intensite : 1
registre_nbrDigit : 1
Donnée_nbrDigit : 1
registre_Test : 1
Donnée_Test : 1
registre_Digit : 1
Donnée_Digit : 1
registre : 1
donnee : 1
endc
;*******************************************************************************
; Reset Vector
;*******************************************************************************
org 00H ; processor reset vector
goto START ; go to beginning of program
; TODO INSERT ISR HERE
;*******************************************************************************
; MAIN PROGRAM
;*******************************************************************************
START
; Initialisaton des variables
banksel registre_Démarrage
movlw 0x0c
movwf registre_Démarrage
movlw 0x03
movwf Donnée_Demmarrage
movlw 0x09
movwf registre_Parametrage
movlw 0x0F
movwf Donnée_ParametrageBCD
movlw 0x0A
movwf registre_Intensite
movlw 0x07
movwf Donnée_Intensite
movlw 0x0B
movwf registre_nbrDigit
movlw 0x03
movwf Donnée_nbrDigit
movlw 0x0F
movwf registre_Test
movlw 0x01
movwf Donnée_Test
movlw 0x01
movwf registre_Digit
movlw 0x01
movwf Donnée_Digit
; Initialisation des paramettres SPI
banksel RB4PPS
movlw 0x16 ;On associe SDO a RB4 ( les données transmises)
movwf RB4PPS
banksel RB5PPS
movlw 0x15 ;On associe SCK a RB5 (l'horloge)
movwf RB5PPS
banksel TRISB
movlw 0x8F ;RB4 et RB5 et RB6 en sortie tout le rest en entrée
movwf TRISB
banksel SSP1CON1
movlw 0x20 ;On active le SPI
movwf SSP1CON1
Banksel SSP1STAT ; On parametre l'horloge et l'echantillonage des données
clrf SSP1STAT
banksel PORTB
clrf PORTB ;on efface les valeurs du port B
; Debut du parametrage Driver
;1
banksel registre_Démarrage
movf registre_Démarrage,w
movwf registre
banksel Donnée_Demmarrage
movf Donnée_Demmarrage,w
movwf donnee
call RoutineveriffinSDI
;2
banksel registre_Parametrage
movf registre_Parametrage,w
movwf registre
banksel Donnée_ParametrageBCD
movf Donnée_ParametrageBCD,w
movwf donnee
call RoutineveriffinSDI
;3
banksel registre_Intensite
movf registre_Intensite,w
movwf registre
banksel Donnée_Intensite
movf Donnée_Intensite,w
movwf donnee
call RoutineveriffinSDI
;4
banksel registre_nbrDigit
movf registre_nbrDigit,w
movwf registre
banksel Donnée_nbrDigit
movf Donnée_nbrDigit,w
movwf donnee
call RoutineveriffinSDI
;5
banksel registre_Test
movf registre_Test,w
movwf registre
banksel Donnée_Test
movf Donnée_Test,w
movwf donnee
call RoutineveriffinSDI
banksel registre_Test
movf registre_Test,w
movwf registre
movlw 0x00 ;fin du test
movwf donnee
call RoutineveriffinSDI
; Debut du programme envoie des chiffres
; Chiffre 1
movlw 0x01
banksel registre
movwf registre
movlw 0x01
movwf donnee
call RoutineveriffinSDI
; Chiffre 2
movlw 0x02
banksel registre
movwf registre
movlw 0x09
movwf donnee
call RoutineveriffinSDI
; Chiffre 3
movlw 0x03
banksel registre
movwf registre
movlw 0x09
movwf donnee
call RoutineveriffinSDI
; Chiffre 4
movlw 0x04
banksel registre
movwf registre
movlw 0x01
movwf donnee
call RoutineveriffinSDI
sleep
RoutineveriffinSDI
banksel PORTB
bcf PORTB,6
banksel registre
movf registre,w
banksel SSP1BUF
movwf SSP1BUF
banksel SSP1STAT
btfss SSP1STAT,0
goto $-1
banksel SSP1BUF
movf SSP1BUF,w
banksel donnee
movf donnee,w
banksel SSP1BUF
movwf SSP1BUF
banksel SSP1STAT
btfss SSP1STAT,0
goto $-1
banksel PORTB
bsf PORTB,6
return
end
Thanks a lot