Pic16f84a : Probleme De Sortie
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Pic16f84a : Probleme De Sortie



  1. #1
    invite619cf51c

    Pic16f84a : Probleme De Sortie


    ------

    bonjour à tous!

    Je souhaite effectuer un petit programme avec MPLAB sur un PIC16f84a qui aurait pour but de faire s'allumer la diode verte branchée sur le port B1 dès que le port A2 passe à 1 et de faire s'allumer la diode rouge branchée sur le port B2 dès que le port A3 passe à 1.(le programme que j'ai écrit ce trouve ci-dessous. j'ai utilisé les cours de Bigonoff pour l'écrire et j'utilise un circuit RC comme oscillateur)

    Toutefois je voudrais que la diode verte ne puisse pas s'allumer pendant que la diode rouge est allumée ou si elle a déja été allumée une fois.

    Seulement voila, les diodes s'allument puis s'éteignent dès que je ne mets plus à 1 les ports A2 ou A3!? alors que normalement elles devraient rester allumées puisque je ne mets aucune instruction pour les éteindre (sauf pour la verte mais c'est seulement dans le cas où la rouge doit s'allumer) . De plus, une fois que la rouge a été allumée puis s'éteind, la diode orange peut se rallumer: ce qui n'est pas normal d'après le programme que j'ai écrit.

    Enfin mon dernier problème est que apparemment la routine de temporisation ne fonctionne pas. En effet, rien ne se passe quand je l'inclus dans le programme.

    J'ajoute aussi que j'ai simulé mon programme sur MPLAB et qu'il fonctionne.

    je remercie d'avance la personne qui pourra trouver la réponse à ces questions.

    Au fait, est-ce nécessaire d'effacer la RAM lors de l'initialisation car lorsque je le fait, plus aucune LED ne s'allume.

    voici mon programme (déoslé pour la présentation du programme mais je n'ai pas réussi à conserver les espaces):

    LIST p=16F84A ; Définition de processeur
    #INCLUDE <p16F84A.inc> ; Définitions des constantes

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

    ; '__CONFIG' précise les paramètres encodés dans le processeur au moment de
    ; la programmation du processeur. 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

    ;***************************** ****************************** **********
    ; DECLARATIONS DE VARIABLES *
    ;***************************** ****************************** **********


    CBLOCK 0x0C ;début de la zone variables
    cmpt1 : 1
    cmpt2 : 1
    cmpt3 : 1
    ma_variable : 1
    temp : 1
    attente : 1
    ENDC ; Fin de la zone

    ;***************************** ****************************** ***********
    ; DEMARRAGE SUR RESET *
    ;***************************** ****************************** ***********

    ORG 0x000 ;Adresse de départ après reset
    GOTO init ;Adresse 0: initialiser




    ;***************************** ****************************** **********
    ; INITIALISATIONS *
    ;***************************** ****************************** **********


    init org 0x5

    ;initialisation des ports
    ;------------------------
    BCF STATUS,RP0 ;sélectionne la banque 0
    CLRF PORTB ;efface le port B
    CLRF PORTA ;efface le portA
    BSF STATUS,RP0 ; sélectionner banque 1
    MOVLW B'00000000' ;place cette valeur binaire dans W
    MOVWF TRISB ;assigne le portB en sortie
    MOVLW B'00011111' ;place cette valeur binaire dans W
    MOVWF TRISA ;assigne les 5 premiers ports du portA en entrée
    MOVLW B'10001000' ;place cette valeur dans W
    MOVWF OPTION_REG ;puis dans le registre option

    ;effacer la RAM
    ;--------------
    movlw 0x00C
    movwf FSR
    init1
    clrf INDF
    incf FSR,f
    btfss FSR,6
    goto init1
    btfss FSR,4
    goto init1
    ;initialisation variables
    ;------------------------
    BCF STATUS,RP0 ; sélectionner banque 0
    MOVLW 0x00 ;place 1 dans W
    MOVWF ma_variable ;puis dans ma_variable
    movlw 0x00
    movwf attente
    MOVLW B'00000000' ;place cette valeur dans W
    MOVWF INTCON ;puis dans le registre INTCON
    GOTO START ;saut jusqu'à start
    ;***************************** ****************************** **********
    ; sous routine *
    ;***************************** ****************************** **********
    alerte
    ;call tempo
    ;decfsz attente,f
    ;return
    bsf PORTB,1 ;non, allume LED1
    return
    alert1
    BSF PORTB,2 ;allume LED2
    BCF PORTB,1 ;éteind LED1
    MOVLW 0x01
    MOVWF ma_variable
    return
    alert2
    BSF PORTB,3
    BCF PORTB,1
    BCF PORTB,2
    CALL fin
    return
    fin
    GOTO fin
    return
    ;***************************** ****************************** **********
    ; SOUS ROUTINE DE TEMPORISATION *
    ;***************************** ****************************** **********


    tempo
    movlw 2 ;place 2 dans W
    movwf cmpt3 ;initialise cmpt3 à 2
    boucle3
    movlw 255
    movwf cmpt2
    boucle2
    movlw 255
    movwf cmpt1
    boucle1
    nop ;perdre 1cycle*256*256*2
    decfsz cmpt1,f ;décrémenter le compteur1
    goto boucle1 ;si pas 0, boucler
    decfsz cmpt2,f ;décrémente cmpt2, si 0 sauter prochaine instruction
    goto boucle2 ;si pas 0,recommencer boucle 2
    decfsz cmpt3,f ;décrémente cmpt3, si 0 sauter prochaine instruction
    goto boucle3 ;si cmpt3 pas 0,recommencer boucle 3
    return ;retour de la sous routine


    ;***************************** ****************************** **********
    ; PROGRAMME PRINCIPAL *
    ;***************************** ****************************** **********

    START
    MOVLW B'00000110' ;place cette valeur dans W
    ANDWF PORTA,W ;opération qui
    movwf temp
    btfss temp,1 ;vérifie si
    goto suite1 ;les diodes verte et orange
    btfss temp,2 ;sont allumées
    goto suite1 ;=dysfonctionnement du boitier
    call alert2 ;si oui, appel de alerte2
    suite1
    movlw B'00001010' ;place cette valeur dans W
    andwf PORTA,W ;opération qui
    movwf temp
    btfss temp,1 ;vérifie si
    goto suite2 ;les diodes vertes et rouges
    btfss temp,3 ;sont allumées
    goto suite2 ;=dysfonctionnement du boitier
    call alert2 ;si oui, appel de alerte2
    suite2
    movf PORTA,W
    movwf temp
    decfsz ma_variable,W ;test si la diode rouge s'est déjà allumée
    btfsc temp,3 ;test si la diode rouge est allumée
    goto suite3 ;si oui, saut à suite3
    btfsc temp,2 ;test si orange à 0, si oui saute prochaine instruction
    call alerte


    suite3
    movf PORTA,W
    movwf temp
    btfsc temp,3 ;test si rouge à 0, si oui saute prochaine instruction
    call alert1 ;non, appelle alerte
    GOTO START ; boucler
    END ; directive fin de programme

    -----

  2. #2
    invitecb40bc0e

    Re : Pic16f84a : Probleme De Sortie

    SALUT.
    DAns ton initialisation, je ne vois pas l'init du reg ADCON1, qui est le registre de gestion de l'ADC.
    Ce registre doit etre initialiser pour que le port A soit déterminer comme étant DIGITAL et non ANALOGIQUE.
    ERIC.

  3. #3
    invite619cf51c

    Re : Pic16f84a : Probleme De Sortie

    merci beaucoup pour ta réponse.
    mais d'après mon datasheet, le registre ADCON1 n'existe pas pour le PIC16F84a. par contre si il existe bien j'aimerais bien que tu me dises où je pourrais bien le trouver!

  4. #4
    invitecb40bc0e

    Re : Pic16f84a : Probleme De Sortie

    SALUT.
    Effectivement, le 84 n'intègre pas d'ADC. Excuse-moi pour cette méprise.
    ERIC.

  5. A voir en vidéo sur Futura
  6. #5
    etronics

    Re : Pic16f84a : Probleme De Sortie

    Salut

    j' avais mis une réponse sur le forum d' abc pour ta question ...

    comme tu fait une boucle et que tu repasse par start cela eteint les leds , il faut faire une autre entrée un peu plus loin que start .

    @+++ dan

  7. #6
    invite619cf51c

    Re : Pic16f84a : Probleme De Sortie

    pourrais tu m'expliquer pourquoi le fait de repasser par une boucle start ca fait éteindre les Leds. je ne comprends pas. en effet j'efface les ports A et B dans la routine init mais pas dans start.
    merci beaucoup

  8. #7
    invite619cf51c

    Re : Pic16f84a : Probleme De Sortie

    pas de problème éric

  9. #8
    invite619cf51c

    Re : Pic16f84a : Probleme De Sortie

    merci à tous j'ai trouvé le problème.
    cela ne venait pas du programme mais du programmateur que j'avais apparemment mal configuré.

  10. #9
    invitecb40bc0e

    Re : Pic16f84a : Probleme De Sortie

    Salut.
    Freeeeeeezzzzzzz...ou !
    Eric.

Discussions similaires

  1. PIC16f84a
    Par clinon dans le forum Électronique
    Réponses: 33
    Dernier message: 06/08/2007, 02h31
  2. pic16f84A
    Par invitea711403b dans le forum Électronique
    Réponses: 5
    Dernier message: 06/02/2007, 19h22
  3. probleme sortie ampli
    Par inviteac810419 dans le forum Dépannage
    Réponses: 4
    Dernier message: 31/12/2005, 13h31
  4. Problème de programmateur PIC16F84A
    Par inviteae0bf1de dans le forum Électronique
    Réponses: 10
    Dernier message: 07/04/2005, 16h28
Découvrez nos comparatifs produits sur l'informatique et les technologies.