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 ---
Tout ce qui n'a pas de catégorie !
test d' un affichage a MC14499
ducran lapoigne
Avatar de l’utilisateur
Débutant
Débutant
Messages : 96
Enregistré en : septembre 2015

#1 Message par ducran lapoigne » mar. 7 août 2018 17:47

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

14499_16f84.jpg


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
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » mer. 8 août 2018 19:27

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+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 40 invités