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 ---
- 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 ---
test d' un affichage a MC14499
- ducran lapoigne
Débutant- Messages : 96
- Enregistré en : septembre 2015
bonjour tous,
dans mon stock de CPS trainaient des (vieux et obsoletes) MC14499
ce circuit peut piloter 4 afficheurs 7 segments cathode commune
Aujourd'hui, vu la chaleur, un essai avec un 16f84
L'idée que j' ai derrière la tête est de coupler le MC14499 avec un 12f675
pour réaliser par exemple un petit voltmètre
dans mon stock de CPS trainaient des (vieux et obsoletes) MC14499
ce circuit peut piloter 4 afficheurs 7 segments cathode commune
Aujourd'hui, vu la chaleur, un essai avec un 16f84
L'idée que j' ai derrière la tête est de coupler le MC14499 avec un 12f675
pour réaliser par exemple un petit voltmètre
Code : Tout sélectionner
;**********************************************************************
; Test affichage MC14499 et PIC 16F84. *
; Les nombres en BCD loges en bcd_1 a bcd_4 s' affichent *
; bcd_1 = msb bcd_4 = LSB *
;**********************************************************************
; *
; NOM: 14499. *
; Date: 07/08/2018 *
; Version: 1 *
; Circuit: *
; Auteur: DL *
; *
;**********************************************************************
; *
; Fichier requis: P16F84.inc *
; *
;**********************************************************************
;
;
;
;
; ----- CLK 14499
; |
; | ----- DATA 14499
; | |
; | |
; 18 17 16 15 14 13 12 11 10
; ------------------------------------
; | R R O O V R R R R |
; | A A S S c B B B B |
; | 1 0 1 2 c 7 6 5 4 |
; - |
; | 16F84 |
; - |
; | R R R C V R R R R |
; | A A A l s B B B B |
; | 2 3 4 r s 0 1 2 3 |
; ------------------------------------
; 1 2 3 4 5 6 7 8 9;
; |
; |
; |
; |
; ----- EN 14499
;
;
; *
;
;**********************************************************************
LIST p=16F84 ; Définition de processeur
#include <p16F84.inc> ; Définitions des constantes
ERRORLEVEL -302 ; supprimer chiant message
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
; la programmation. Les définitions sont dans le fichier include.
; Voici les valeurs et leurs définitions :
; _CP_ON Code protection ON : impossible de relire
; _CP_OFF Code protection OFF
; _PWRTE_ON Timer reset sur power on en service
; _PWRTE_OFF Timer reset hors-service
; _WDT_ON Watch-dog en service
; _WDT_OFF Watch-dog hors service
; _LP_OSC Oscillateur quartz basse vitesse
; _XT_OSC Oscillateur quartz moyenne vitesse
; _HS_OSC Oscillateur quartz grande vitesse
; _RC_OSC Oscillateur à réseau RC
;*********************************************************************
; ASSIGNATIONS *
;*********************************************************************
OPTIONVAL EQU B'10000000'
; b7 b6 b5 b4 b3 b2 b1 b0
; | | | | | | | +-----------| 2.1.0.| TMR0 | WDT |
; | | | | | | | 0 | 000 | 1:2 | 1:1 |
; | | | | | | | 1 | 001 | 1:4 | 1:2 |
; | | | | | | +---------------| 010 | 1:8 | 1:4 |
; | | | | | | 0 | 011 | 1:16 | 1:8 |
; | | | | | | 1 | 100 | 1:32 | 1:16 |
; | | | | | +----------------- | 101 | 1:64 | 1:32 |
; | | | | | 0 | 110 | 1:128 | 1:64 |
; | | | | | 1 | 111 | 1:256 | 1:128 |
; | | | | +-----------------PSA
; | | | | 0 prescaler -> TMR0
; | | | | 1 prescaler -> WDT
; | | | +--------------------T0SE
; | | | 0 incr high to low
; | | | 1 incr low to high
; | | +--------------------T0CS
; | | 0 internal
; | | 1 transition RA4/T0CI/C2OUT
; | +----------------------INTEDG
; | 0 falling edge RBO/INT
; | 1 rising edge RBO/INT
; +----------------------- /RBPU
; 0 PORTB p/up enable
; 1 PORTB p/up disable
INTERMASK EQU B'00000000'
; b7 b6 b5 b4 b3 b2 b1 b0
; | | | | | | | +------------RBIF flag interruption RB4/RB7
; | | | | | | | 0 RB4/RB7: no change
; | | | | | | | 1 RB4/RB7: no change
; | | | | | | +------------INTF flag RB0/Int
; | | | | | | 0 no RB0/Int
; | | | | | | 1 RB0/Int : yes
; | | | | | +------------T0IF flag tmr0
; | | | | | 0 TMR0 : no overflow
; | | | | | 1 TMR0 : overflow
; | | | | +------------RBIE masque interruption RB4/RB7
; | | | | 0 disable interrupt RB4/RB7
; | | | | 1 enable interrupt RB4/RB7
; | | | +------------INTE masque interuption RB0/Int
; | | | 0 disable interuption RB0/Int
; | | | 1 enable interuption RB0/Int
; | | +-----------T0IE interruption debordement tmr0
; | | 0 disable interruption debordement tmr0
; | | 1 enable interruption debordement tmr0
; | +------------EEIE ecriture terminee dans EEprom
; | 0 disable interrupt ecriture terminee dans EEprom
; | 1 enable interrupt ecriture terminee dans EEprom
; +------------GIE masque autorisation générale interrupt
; 0 disable interrupts
; 1 enable interrupts
;*********************************************************************
; DEFINE *
;*********************************************************************
#DEFINE PAGE0 BCF STATUS,RP0 ; passage en bank 0
#DEFINE PAGE1 BSF STATUS,RP0 ; passage en bank 1
#DEFINE clock PORTA,1 ; horloge MC14499
#DEFINE data_l PORTA,0 ; donnée MC14499
#DEFINE enbl PORTA,2 ; enable MC14499
;*********************************************************************
; MACRO *
;*********************************************************************
;*********************************************************************
; DECLARATIONS DE VARIABLES *
;*********************************************************************
CBLOCK 0x00C ; début de la zone variables
w_temp :1 ; Zone de 1 byte
status_temp :1 ; zone de 1 byte
bcd_1 :1 ; bcd lsb
bcd_2 :1 ;
bcd_3 :1 ;
bcd_4 :1 ; bcd msb
d_pts :1 ; 10000000 = dp digit gauche
bcd_1_2 :1 ;
bcd_3_4 :1 ;
byte_a_shifter :1 ;
cnt_bits :1 ; comptage 8 bits
ENDC ; Fin de la zone
;**********************************************************************
; DEMARRAGE SUR RESET *
;**********************************************************************
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;**********************************************************************
; ROUTINE INTERRUPTION *
;**********************************************************************
;sauvegarder registres
;---------------------
ORG 0x004 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
;restaurer registres
;-------------------
restorereg
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W
; sans modifier Z
swapf w_temp,w ; Réinversion de L et H dans W
; W restauré sans modifier status
retfie ; return from interrupt
;*********************************************************************
; INITIALISATIONS *
;*********************************************************************
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
clrf EEADR ; permet de diminuer la consommation
PAGE1
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
movlw B'11111000'
movwf TRISA ; PORTA en sortie
PAGE0
movlw INTERMASK ; masque interruption
movwf INTCON ; charger interrupt control
movlw D'9' ; initialiser les nombres
movwf bcd_1 ; a afficher
movlw D'7' ; dans ce exemple 9.753
movwf bcd_2
movlw D'5'
movwf bcd_3
movlw D'3'
movwf bcd_4
movlw B'10000000' ; allume dp du digit MSB
movwf d_pts
;*********************************************************************
; PROGRAMME PRINCIPAL *
;*********************************************************************
start
clrwdt ; effacer watch dog
bsf enbl ; EN = 1
bcf clock ; clock = 0
swapf bcd_1 ,w ; concatenation de bcd_2 et bcd_1
movwf bcd_1_2 ;
iorwf bcd_2 ,w ;
movwf bcd_1_2 ;
swapf bcd_3 ,w ; concatenation de bcd_4 et bcd_3
movwf bcd_3_4
iorwf bcd_4 ,w
movwf bcd_3_4
bcf enbl ; le 14499 accepte donnees
movf d_pts,w ; point décimal
movwf byte_a_shifter
movlw d'4' ; il n' y en a que 4
movwf cnt_bits
call shift_et_clk
movf bcd_1_2,w ; 2 premiers digits
movwf byte_a_shifter
movlw d'8' ; pour 8 bits
movwf cnt_bits ; compteur bits
call shift_et_clk
movf bcd_3_4,w ; ; 2 derniers digits
movwf byte_a_shifter
movlw d'8'
movwf cnt_bits
call shift_et_clk
bsf enbl ; interdire au 14499 d' accepter quoi que ce soit
fin
nop
goto fin ; forever
shift_et_clk ; envoi des données en serie au 14499
bcf STATUS ,C
movf byte_a_shifter,w
rotate
bsf clock ; clock = 1
rlf byte_a_shifter ,f
btfsc STATUS ,C
goto shift_1
shift_0
bcf data_l ; positionner la sortie data_l
goto suite
shift_1
bsf data_l ; positionner la sortie data_l
suite
bcf clock ; clock = 0
decfsz cnt_bits, f ; cnt_bits = cnt_bits - 1
goto rotate ; si pas egal a 0
return
END ; directive fin de programme
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
test d' un affichage a MC14499
Bonsoir ducran lapoigne,
Comme je possède des MC14499, si j'ai besoin s’appliquerait ton exemple, voici le datasheet pour ce qui son intéresser ICI
Merci du retour
A+
Comme je possède des MC14499, si j'ai besoin s’appliquerait ton exemple, voici le datasheet pour ce qui son intéresser ICI
Merci du retour
A+
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 86 invités