petit truc pic16f84
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 75

petit truc pic16f84



  1. #1
    invite0a63013b

    Question petit truc pic16f84


    ------

    salut
    une chose qui m'inquiete en ce qui concerne le pic16f84
    je veux savoir si on crée un registre (case memoire de 8 bits) dans la RAM de pic et on l'encremente jusqu'à 255 behhh l'incrementation qui vient aprés est ce qu'elle va initialiser le registre et on commencera le comptage à 0 ou bien une autre chose que vous savez et que je ne sache pas ???
    aider moi
    et merci d'anvance

    -----

  2. #2
    Gérard

    Re : petit truc pic16f84

    Citation Envoyé par omar.STE Voir le message
    salut
    une chose qui m'inquiete en ce qui concerne le pic16f84
    je veux savoir si on crée un registre (case memoire de 8 bits) dans la RAM de pic et on l'encremente jusqu'à 255 behhh l'incrementation qui vient aprés est ce qu'elle va initialiser le registre et on commencera le comptage à 0 ou bien une autre chose que vous savez et que je ne sache pas ???
    aider moi
    et merci d'anvance
    Bonjour,

    Je ne sais pas créer de case mémoire, elle sont dans le PIC par construction.

    Quand un registre est à 255 et que tu fais + 1, il repasse à 0 et la retenue est positionnée à 1 (registre status, bit 0 appelé C).

  3. #3
    invite0a63013b

    Question Re : petit truc pic16f84

    salut
    merci pour ton aide GERARD
    pour plus d'explication : ce que je voudrai faire est de créer un registre dans la RAM du pic (ctr equ H'0C') et de l'incrementer par un boutton poussoir
    j'ai monté 8 LEDs sur le PORTB pour savoir l'etat de l'incrementation de ce registre
    voilà le programme que j'ai fais: sans initialisation (just pour le bref)
    clrf ctr ;
    test btfss PORTA,1 ;
    goto test ;
    clrf PORTB ;
    clrw ;
    incf ctr,1 ;
    movf ctr,0 ;
    movwf PORTB ;
    goto test ;

    end




    aidez moi plllzzzz
    merci d'avance

  4. #4
    invite0e5af214

    Re : petit truc pic16f84

    Salut

    Juste comme ça je vois deux soucis dans ta routine :

    1) Tu effaces PORTB à chaque appui...donc tu ne verra jamais aucune led allumée.

    2) Je ne pense pas que tu seras assez rapide pour relacher le bouton avant que le programme arrive en bas et revienne à la balise test , donc une fois que tu aurai corrigé le bug 1), tu aurais l'impression que ca affiche n'importe quoi...
    Donc une fois que tu as détecté un appui, attend le relach !


    Et sinon le clrw ca sert a rien.

    Bon courage

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

    Re : petit truc pic16f84

    Bonjour,
    Pour la 2ème fois : tu ne crées pas de RAM, tu l'utilises !

    Comme dit plus haut, il faut attendre le relachement du BP.

  7. #6
    invite8bba3470

    Re : petit truc pic16f84

    Salut !

    J'ai essayé de te faire le programme.
    Je te le copie ci-dessous.

    ______________________________ _

    LIST p=16F84 ; Définition de processeur
    #include <p16F84.inc> ; Définitions de variables

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

    ;***************************** ****************************** **********
    ; ASSIGNATIONS *
    ;***************************** ****************************** **********

    OPTIONVAL EQU H'0008' ; Valeur registre option
    ; Résistance pull-up ON
    ; Pas de préscaler

    ;***************************** ****************************** **********
    ; DEFINE *
    ;***************************** ****************************** **********

    #DEFINE BOUTON PORTB,2 ; bouton-poussoir

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

    CBLOCK 0x00C ; début de la zone variables

    cmpt1 : 1 ; compteur de boucles 1
    cmpt2 : 1 ; compteur de boucles 2
    cmpt3 : 1 ; compteur de boucles 3

    var : 1 ; la variable qui sera à incrémenter.
    test : 1 ; elle permettra de tester var.

    ENDC ; Fin de la zone

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

    org 0x000 ; Adresse de départ après reset
    goto init ; Adresse 0: initialiser

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

    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    clrf EEADR ; permet de diminuer la consommation
    bsf STATUS,RP0 ; sélectionner banque 1
    movlw OPTIONVAL ; charger masque
    movwf OPTION_REG ; initialiser registre option

    ; Effacer RAM
    ; ------------
    movlw 0x0c ; initialisation pointeur
    movwf FSR ; pointeur d'adressage indirec
    init1
    clrf INDF ; effacer ram
    incf FSR,f ; pointer sur suivant
    btfss FSR,6 ; tester si fin zone atteinte (>=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (>=50)
    goto init1 ; non, boucler

    ; initialisations spécifiques
    ; ---------------------------
    bcf PORTA,1 ; LED en sortie (banque1)
    bcf PORTA,2 ; LED en sortie (banque1)
    bcf PORTA,3 ; LED en sortie (banque1)
    bcf PORTA,4 ; LED en sortie (banque1)

    bsf BOUTON ; BOUTON en entrée (banque1)
    bcf STATUS,RP0 ; repasser banque 0

    movlw 0 ; la variable aura initialement une valeur de 0.
    movwf var ; initialiser notre variable

    goto start ; sauter au programme principal

    ;***************************** ****************************** **********
    ; SOUS-ROUTINE DE TEMPORISATION *
    ;***************************** ****************************** **********
    ;---------------------------------------------------------------------
    ; Cette sous-routine introduit un retard de 500.000 µs.
    ; Elle ne reçoit aucun paramètre et n'en retourne aucun
    ;---------------------------------------------------------------------
    tempo
    movlw 2 ; pour 2 boucles
    movwf cmpt3 ; initialiser compteur3
    boucle3
    clrf cmpt2 ; effacer compteur2
    boucle2
    clrf cmpt1 ; effacer compteur1
    boucle1
    nop ; perdre 1 cycle
    decfsz cmpt1,f ; décrémenter compteur1
    goto boucle1 ; si pas 0, boucler
    decfsz cmpt2,f ; si 0, décrémenter compteur 2
    goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
    decfsz cmpt3,f ; si 0, décrémenter compteur 3
    goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
    return ; retour de la sous-routine

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

    start

    btfss BOUTON ; le bouton possoir est-il actionné?
    goto start ; si non, boucler.

    ; var est-elle égale à 4?
    movf var,w ; on charge le contenu de var dans w.
    movwf test ; on place le contenu de w dans "test"

    movlw 3 ; on place 3 dans w
    subwf test,f ; on soustrait 3 à "test"

    decfsz test,f ; décrémenter test
    goto suite ; si pas 0, continuer

    movlw 0 ; si 0, on reset "var"
    movwf var ; si 0, on reset "var"

    bcf PORTA,1 ; On éteint toutes les LED
    bcf PORTA,2 ; On éteint toutes les LED
    bcf PORTA,3 ; On éteint toutes les LED
    bcf PORTA,4 ; On éteint toutes les LED



    suite
    incf var,f ; incrémenter var

    ; quelle LED va-t-on allumer?

    btfss PORTA,1 ; la première led est-elle allumée?
    goto suite2 ; si non, on l'allume.
    goto suite3 ; si oui, on continue de chercher.

    suite2
    bsf PORTA,1 ; allumer la LED 1.
    call tempo ; appeler la tempo de 0.5s (éviter que la var. soit
    ; incrémentée plusieurs fois)
    goto start ; boucler

    suite3
    btfss PORTA,2 ; la deuxième led est-elle allumée?
    goto suite4 ; si non, on l'allume.
    goto suite5 ; si oui, on continue de chercher.

    suite4
    bsf PORTA,2 ; allumer la LED 2.
    call tempo ; appeler la tempo de 0.5s (éviter que la var. soit
    ; incrémentée plusieurs fois)
    goto start ; boucler

    suite5
    btfss PORTA,3 ; la deuxième led est-elle allumée?
    goto suite6 ; si non, on l'allume.
    goto suite7 ; si oui, on continue de chercher.

    suite6
    bsf PORTA,3 ; allumer la LED 3.
    call tempo ; appeler la tempo de 0.5s (éviter que la var. soit
    ; incrémentée plusieurs fois)
    goto start ; boucler

    suite7
    bsf PORTA,4 ; on allume la dernière LED.
    call tempo ; temporisation
    goto start ; on boucle.


    END ; directive fin de programme

    ______________________________ ____________

    Je l'ai simulé, et il a l'air de fonctionner. Je t'ai bien commenté ce que j'ai fait.

    Par contre : ici, la variable nommée "var" varie entre 1 et 4. Donc, il y a 4 leds seulement. A toi d'adapter le code pour qu'il fonctionne avec plus de LED.

    Le principe :

    On vérifie si le bouton poussoir est actionné ou non.

    S'il n'est pas actionné, on boucle ;

    Sinon, on incrémente la variable "var", on cherche leds qui sont allumées et on allume la led suivante. (par ex : si var = 2, les leds 1 et 2 sont allumées. On allumera donc la troisième).

    Si var=4, on la réinitialise (alors var=0), puis on éteint toutes les LED. Puis on recommence depuis le départ.

    Pourquoi "call tempo" avant de boucler?

    Lorsque tu appuies sur un bouton poussoir, il se peut que ton doigt reste même un quart de seconde sur ce bouton. Pendant un quart de seconde, ton PIC aura peut-être le temps d'exécuter 10000 fois la boucle. Alors ta variable sera incrémentée 10000 fois sans que ça soit ce que tu recherches. C'est pour cela que lorsque le bouton est appuyé, on lance une temporisation de 0.5 sec (le temps que le bouton soit relâché).

    Attendre le relâchement du bouton pour passer à la suite du code est peut-être une meilleure solution. A toi d'adapter le code, dans ce cas.

    J'espère t'avoir aidé et a+

  8. #7
    invite0a63013b

    Exclamation Re : petit truc pic16f84

    salut

    mais moi je n'incremente pas le PORTB; j'incremente le cmpteur CTR puis je le copie dans le PORTB a travers du registre de travail W
    je veus te dire que si on appuit pas sur le BP il y a alors un 0 dans le ctr donc toutes les LEDs du PORTB sont etteintes
    Citation Envoyé par cherwam07 Voir le message
    Salut

    Juste comme ça je vois deux soucis dans ta routine :

    1) Tu effaces PORTB à chaque appui...donc tu ne verra jamais aucune led allumée.

    pour la premiere impulsion le ctr contient 1 et le PORTB la meme chose alors la LED branchée sur RB0 est allumée et toutes les autres sont etteintes
    LED branchée sur RB0 reste allumée jusqu'à la 2eme impulsion

    j'espere que je me fais comprendre et merci pour ton aide
    je suis besoin d'explication
    et merci d'avance

  9. #8
    invite0a63013b

    Question Re : petit truc pic16f84

    bjr

    Citation Envoyé par Gérard Voir le message
    Bonjour,
    Pour la 2ème fois : tu ne crées pas de RAM, tu l'utilises !.
    pardon, oui je sais qu'on ne peut pas y créer des registres il sont déjà créer par constructeur on fais just un adressage
    mais c'est seulement une façon d'explication

    Citation Envoyé par Gérard Voir le message
    Comme dit plus haut, il faut attendre le relachement du BP.
    est ce que tu veux dire qu'il me faut faire un tempo ???
    ou bien de retester sur le 0 ? pour savoir que le BP est relaché ??

    @++

  10. #9
    invitef86a6203

    Re : petit truc pic16f84

    est ce que tu veux dire qu'il me faut faire un tempo ???
    ou bien de retester sur le 0 ? pour savoir que le BP est relaché ??
    Les deux !

    après 255 le registre passe à 00.
    et le flag Z (STATUS) est positionné par incf .

  11. #10
    invite0a63013b

    Re : petit truc pic16f84

    Citation Envoyé par freepicbasic Voir le message
    et le flag Z (STATUS) est positionné par incf .
    mais le 0 que j'en y parle c'est pas dans un registre
    c'est un 0 logique sur PORTB,0
    je crois pas que le bit Z du STATUS va reagir dans ce cas !!!

    @+

  12. #11
    invite0e5af214

    Re : petit truc pic16f84

    J'ai rien compris....

    Mais bon écris ca et ca marchera

    Code:
    test
        btfss PORTA, 1     ; en ayant bien mis TRISA, 1 = 1
        goto test
    
        incf      CTR, f
        movf    CTR, w
        movwf  PORTB      ; En ayant bien mis TRISB = 0x00
    
    attend_relach_bp
        btfsc   PORTA, 1
        goto    attend_relach_bp
        goto    test

  13. #12
    invite0a63013b

    Re : petit truc pic16f84

    salut
    Citation Envoyé par cherwam07 Voir le message
    J'ai rien compris....

    Mais bon écris ca et ca marchera

    merci pour ton aide mais il pas marché
    quand j'appuis sur le BP la premiere LED s'allume et quand le releche elle s'etteint
    rien de plus
    qu'est ce que vous croyez si on utulise un registre de l'EEPROM ??

    @++

  14. #13
    invite0e5af214

    Re : petit truc pic16f84

    SI ,cette routine marche c'est clair.
    Maintenant il faudrait voir ce que tu met d'autre dans ton programme.


    Donc montre nous le programme EN ENTIER que tu met dans le PIC.

    Pour l'EEPROM....attend déja de savoir comment on allume des LED...

  15. #14
    invite8bba3470

    Re : petit truc pic16f84

    Au fait, cherwam07, j'aurais une question : quand la variable CTR arrive à 20 dans ton programme, par exemple, que se passe-t-il? (il n'y a pas de port n°20 sur le PORTB). Après, je me trompe peut-être, je suis encore novice^^.

    Ce que je proposerais, c'est qu'on rajoute un petit "test", afin de réinitialiser CTR quand elle dépasse 8 (pour 8 LEDs) :

    ; CTR est-elle égale à 8?
    movf CTR,w ; on charge le contenu de var dans w.
    ; une variable "test" aura été créée au préalable.
    movwf test ; on place le contenu de w dans "test"

    movlw 7 ; on place 7 dans w
    subwf test,f ; on soustrait 7 à "test"

    decfsz test,f ; décrémenter test
    goto suite ; si pas 0, continuer

    movlw 0 ; si 0, on reset "CTR"
    movwf CTR ; si 0, on reset "CTR"

    goto ect...

    En gros : on vérifie si CTR-8=0.
    Si c'est le cas, on réinitialise la variable...

    Un autre truc dont je ne suis pas sûr : dans "attend_relach_bp", ne vaudrait-il pas mieux ajouter une temporisation?

    Dans le cours de bigonoff, il y a un truc sur les programmes anti-rebond : "A chaque pression sur le B.P., le PIC® voit une série de fermeture et d'ouverture du B.P., au lieu d’une seule à notre échelle de temps.".

    Si c'est vrai, alors peut-être qu'à chaque pression sur le BP, sa variable CTR s'est incrémentée une dizaine de fois, d'où le dysfonctionnement...

  16. #15
    invite0e5af214

    Re : petit truc pic16f84

    Au fait, cherwam07, j'aurais une question : quand la variable CTR arrive à 20 dans ton programme, par exemple, que se passe-t-il? (il n'y a pas de port n°20 sur le PORTB). Après, je me trompe peut-être, je suis encore novice^^.

    Non, la valeur d'un registre c'est du binaire, en l'occurence ici c'est du binaire sur 8 bits, donc on peut y coder des nombres jusqu'à 255.

    Donc le registre CTR va prendre les valeurs suivantes (en binaire) :
    Code:
    00000000    //0
    00000001    //1
    00000010    //2
    00000011    //3
    00000100    //4
    00000101    //5
    ....
    ....
    11111110    //254
    11111111    //255
    00000000    //0
    00000001    //1
    ....

    Pour les rebonds, tu as raison. Pour etre sur de ne pas passer plusieurs fois dans la boucle ca serait bien de mettre une tempo.

  17. #16
    invite8bba3470

    Re : petit truc pic16f84

    ok, j'ai simulé ton programme sur mplab et il fonctionne parfaitement. PORTB prend bien les valeurs que tu as citées.

    Mais par exemple, si PORTA=250, est-ce qu'une LED va s'éclairer? (ça me paraît assez bizarre...) Parce que si j'ai bien compris, une fois égale à 8, pour que CTR revienne à 0, il faut cliquer 255-8=247 fois sur le bouton poussoir, ce qui n'est pas pratique...

    Sinon, le bouton-poussoir se trouve sur le PORTA : Je pense qu'il serait préférable de le mettre sur le PORTB et d'activer les résistances de rappel afin d'éviter que le programme se mette en marche inutilement. Et tu pourras alors placer tes LED sur le PORTA.

  18. #17
    invitef86a6203

    Re : petit truc pic16f84

    250 décimale = 11111010 binaire
    donc 6 Leds allumées si les cathodes sont à la masse
    ou 2 allumées si les anodes sont au +5V.

  19. #18
    invite8bba3470

    Re : petit truc pic16f84

    ok, merci !

  20. #19
    invitef86a6203

    Re : petit truc pic16f84

    Ne pas oublier l'init des ports;

    Code:
    Bsf STATUS,rp0
    Movlw 0xff
    movwf trisa
    Movlw 0x0
    movwf trisb
    Bcf STATUS,rp0
    
    test
        btfss PORTA, 1     ; en ayant bien mis TRISA, 1 = 1
        goto test
    
        incf      CTR, f
        movf    CTR, w
        movwf  PORTB      ; En ayant bien mis TRISB = 0x00
    
    attend_relach_bp
        btfsc   PORTA, 1
        goto    attend_relach_bp
        goto    test

  21. #20
    invitef86a6203

    Re : petit truc pic16f84

    Pour allumé 1 LED à la fois.
    Et aussi, Ajout d'une tempo anti rebond après appuie.

    Code:
    	CBLOCK  0X7C
    	RETARD1
    	RETARD2
    	ENDC 	
    
    
    Bsf STATUS,rp0
    Movlw 0xff
    movwf trisa
    Movlw 0x0
    movwf trisb
    Bcf STATUS,rp0
    
    
    Start
    	movlw 1
    	movwf PORTB
    
    test
        btfss PORTA, 1     ; en ayant bien mis TRISA, 1 = 1
        goto test
    
        shl      PORTB, f	; decalage à gauche
        BTFSC STATUS,C
        goto Start	
        call tempo
    
    attend_relach_bp
        btfsc   PORTA, 1
        goto    attend_relach_bp
        goto    test
    
    TEMPO
    
    	movlw 0X19
    	MOVWF RETARD1
    	MOVLW 0XC8
    	MOVWF RETARD2
    	GOTO $+1
    	DECFSZ RETARD2,F
    	GOTO $-2
    	DECFSZ RETARD1,F
    	GOTO $-6
    	RETURN

  22. #21
    invite0a63013b

    Re : petit truc pic16f84

    Bonjour
    salut Wire-Z
    j'ai imprimé le prog que tu m'as donné et je me suis bien concentré avec lui
    j'ai trouvé assez de fautes


    Citation Envoyé par Wire-Z Voir le message
    Salut !




    OPTIONVAL EQU H'0008' ; Valeur registre option
    ; Résistance pull-up ON
    ; Pas de préscaler
    premierement les LEDs sont branchées sur le PORTA
    donc on est pas besoin d'activer les resistances de pull-up

    Citation Envoyé par Wire-Z Voir le message

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

    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    pour la configuration des ports on utulise TRIS pas PORT

    Citation Envoyé par Wire-Z Voir le message

    ; initialisations spécifiques
    ; ---------------------------
    bcf PORTA,1 ; LED en sortie (banque1)
    bcf PORTA,2 ; LED en sortie (banque1)
    bcf PORTA,3 ; LED en sortie (banque1)
    bcf PORTA,4 ; LED en sortie (banque1)
    pour la configuration des ports on utulise TRIS pas PORT


    Citation Envoyé par Wire-Z Voir le message
    movlw 0 ; la variable aura initialement une valeur de 0.
    la construction CLRW est mieux

    Citation Envoyé par Wire-Z Voir le message
    ; SOUS-ROUTINE DE TEMPORISATION *
    ;***************************** ****************************** **********
    ;---------------------------------------------------------------------
    ; Cette sous-routine introduit un retard de 500.000 µs.
    ; Elle ne reçoit aucun paramètre et n'en retourne aucun
    ;---------------------------------------------------------------------
    tempo
    movlw 2 ; pour 2 boucles
    movwf cmpt3 ; initialiser compteur3
    boucle3
    clrf cmpt2 ; effacer compteur2
    boucle2
    clrf cmpt1 ; effacer compteur1
    boucle1
    nop ; perdre 1 cycle
    decfsz cmpt1,f ; décrémenter compteur1
    goto boucle1 ; si pas 0, boucler
    decfsz cmpt2,f ; si 0, décrémenter compteur 2
    goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
    decfsz cmpt3,f ; si 0, décrémenter compteur 3
    goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
    return ; retour de la sous-routine
    pourquoi pas utuliser le TMR0 c'est mieux et facille


    Citation Envoyé par Wire-Z Voir le message
    Pourquoi "call tempo" avant de boucler?

    Lorsque tu appuies sur un bouton poussoir, il se peut que ton doigt reste même un quart de seconde sur ce bouton. Pendant un quart de seconde, ton PIC aura peut-être le temps d'exécuter 10000 fois la boucle. Alors ta variable sera incrémentée 10000 fois sans que ça soit ce que tu recherches. C'est pour cela que lorsque le bouton est appuyé, on lance une temporisation de 0.5 sec (le temps que le bouton soit relâché).

    Attendre le relâchement du bouton pour passer à la suite du code est peut-être une meilleure solution. A toi d'adapter le code, dans ce cas.
    et si on utulise cette idée :
    supposons qu'on teste sur le 1 :


    TEST btfss boutton
    goto TEST
    btfsc boutton
    goto TEST
    siute de programme .........


    de toutes façons merci pour ton effort
    et j'espere que je me fais comprendre

    @++

  23. #22
    invite0a63013b

    Re : petit truc pic16f84

    Bonjour

    Citation Envoyé par cherwam07 Voir le message
    SI ,cette routine marche c'est clair.
    Maintenant il faudrait voir ce que tu met d'autre dans ton programme.


    Donc montre nous le programme EN ENTIER que tu met dans le PIC.
    le voici exactement et completement

    8 LEDs branchées sur tous les broches du portB (de RB0 à RB7 ) et un boutton poussoir sur RA1
    chaque impultion sur le BP va incrementer le registre ctr jusqu'à 255

    Code:
    list p=16f84,f=inhx8m			; Type de PIC et format de fichier
    	__config	B'11111111110001'	; pas de protection du code, timer au demarrage,
    						; pas de chien de garde, oscillateur a quartz.
    	#include "p16f84.inc"			; Librairie pour le compilateur
    
    ctr     equ     H'0C'           ;
               
            bsf	    STATUS,RP0	    ; On choisi la zone memoire n°1 (page 1). Ca va nous permettre de configurer le PIC, les variables etant dans cette zone memoire.
        	CLRF    TRISB           ;
            movlw   H'02'           ;
            movwf   TRISA           ;
            movlw   H'80'           ;
            movwf   OPTION_REG      ;
            bcf     STATUS,RP0      ;
            clrf    ctr             ;
    test
            btfss   PORTA, 1          ; en ayant bien mis TRISA, 1 = 1
            goto    test
    
           incf     ctr,f            ;
           movf     ctr,w            ; 
           movwf    PORTB            ; En ayant bien mis TRISB = 0x00
    
    attend_relach_bp
           btfsc    PORTA, 1         ;  
           goto     attend_relach_bp ;
           goto     test             ;
           END ;
    pouvez-vous me dire ce qui ne marche pas dans ce programme ??

    merci pour vous
    @+

  24. #23
    Gérard

    Re : petit truc pic16f84

    Citation Envoyé par omar.STE Voir le message
    Bonjour



    le voici exactement et completement

    8 LEDs branchées sur tous les broches du portB (de RB0 à RB7 ) et un boutton poussoir sur RA1
    chaque impultion sur le BP va incrementer le registre ctr jusqu'à 255

    Code:
    list p=16f84,f=inhx8m			; Type de PIC et format de fichier
    	__config	B'11111111110001'	; pas de protection du code, timer au demarrage,
    						; pas de chien de garde, oscillateur a quartz.
    	#include "p16f84.inc"			; Librairie pour le compilateur
    
    ctr     equ     H'0C'           ;
               
            bsf	    STATUS,RP0	    ; On choisi la zone memoire n°1 (page 1). Ca va nous permettre de configurer le PIC, les variables etant dans cette zone memoire.
        	CLRF    TRISB           ;
            movlw   H'02'           ;
            movwf   TRISA           ;
            movlw   H'80'           ;
            movwf   OPTION_REG      ;
            bcf     STATUS,RP0      ;
            clrf    ctr             ;
    test
            btfss   PORTA, 1          ; en ayant bien mis TRISA, 1 = 1
            goto    test
    
           incf     ctr,f            ;
           movf     ctr,w            ; 
           movwf    PORTB            ; En ayant bien mis TRISB = 0x00
    
    attend_relach_bp
           btfsc    PORTA, 1         ;  
           goto     attend_relach_bp ;
           goto     test             ;
           END ;
    pouvez-vous me dire ce qui ne marche pas dans ce programme ??

    merci pour vous
    @+
    Bonjour,
    Au 1er coup d'oeil, sans garantie, ça devrait tourner.
    As-tu essayé le simulateur de MPLAB ?

  25. #24
    invite0e5af214

    Re : petit truc pic16f84

    Et qu'est-ce que veux dire pas : "ca ne marche pas" ??

    Il ne se passe rien du tout ?
    Les LEDs s'allument de facon aléatoire ?
    Ca fait des flammes ?

  26. #25
    invite8bba3470

    Re : petit truc pic16f84

    Bonsoir, cherwam07

    Dsl... j'ai appris à programmer il y a quelques mois seulement, je n'ai pas encore toujours les bons réflexes ! Ca viendra petit à petit, mais merci pour tes remarques.

    Sinon, au niveau de la configuration des ports :
    Le registre TRISA est situé à la même adresse que PORTA, mais sur la banque 1. Donc, ma méthode fonctionne si tu utilise le PORT, mais en banque 1. Mais avec TRIS, le programme est peut-être "plus lisible", en effet.

    En tout cas le programme avait l'air de fonctionner sur MPLAB... donc, pas de soucis majeur.

  27. #26
    invite0e5af214

    Re : petit truc pic16f84

    Mais avec TRIS, le programme est peut-être "plus lisible", en effet
    C'est le moins qu'on puisse dire...
    Prend bien l'habitude d'utiliser les vrais noms... sinon personne ne voudra relire un programme incompréhensible pour t'aider.

    Et puis le jour ou tu utilisera un pic18F, sur lequel on se se souci plus trop des banques, alors la si tu utilises PORT au lieu de TRIS, tu iras droit dans le mur.

    Bon courage

  28. #27
    invite8bba3470

    Re : petit truc pic16f84

    omar.STE, je t'ai copié le programme proposé par freepicbasic pour une led allumée à la fois (j'ai rajouté l'en-tête et détails du genre). Je l'ai testé sur mplab et il a l'air de fonctionner.

    ________________________

    LIST p=16F84 ; Définition de processeur
    #include <p16F84.inc> ; Définitions de variables

    __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

    OPTIONVAL EQU H'0088'

    #DEFINE BOUTON PORTA,2 ; bouton-poussoir

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

    CBLOCK 0x00C ; début de la zone variables

    cmpt1 : 1 ; compteur de boucles 1
    cmpt2 : 1 ; compteur de boucles 2
    cmpt3 : 1 ; compteur de boucles 3

    ENDC ; Fin de la zone

    org 0x000 ; Adresse de départ après reset
    goto init ; Adresse 0: initialiser

    init
    clrf PORTA ; Sorties portA à 0
    clrf PORTB ; sorties portB à 0
    clrf EEADR ; permet de diminuer la consommation
    bsf STATUS,RP0 ; sélectionner banque 1
    movlw OPTIONVAL ; charger masque
    movwf OPTION_REG ; initialiser registre option

    ; Effacer RAM
    ; ------------
    movlw 0x0c ; initialisation pointeur
    movwf FSR ; pointeur d'adressage indirec
    init1
    clrf INDF ; effacer ram
    incf FSR,f ; pointer sur suivant
    btfss FSR,6 ; tester si fin zone atteinte (>=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (>=50)
    goto init1 ; non, boucler

    ; initialisations spécifiques
    ; ---------------------------
    bcf PORTB,0 ; LED en sortie (banque1)
    bcf PORTB,1 ; LED en sortie (banque1)
    bcf PORTB,2 ; LED en sortie (banque1)
    bcf PORTB,3 ; LED en sortie (banque1)
    bcf PORTB,4 ; LED en sortie (banque1)
    bcf PORTB,5 ; LED en sortie (banque1)
    bcf PORTB,6 ; LED en sortie (banque1)
    bcf PORTB,7 ; LED en sortie (banque1)

    bsf BOUTON ; BOUTON en entrée (banque1)
    bcf STATUS,RP0 ; repasser banque 0


    goto start ; sauter au programme principal

    ;***************************** ****************************** **********
    ; SOUS-ROUTINE DE TEMPORISATION *
    ;***************************** ****************************** **********

    tempo
    movlw 2 ; pour 2 boucles
    movwf cmpt3 ; initialiser compteur3
    boucle3
    clrf cmpt2 ; effacer compteur2
    boucle2
    clrf cmpt1 ; effacer compteur1
    boucle1
    nop ; perdre 1 cycle
    decfsz cmpt1,f ; décrémenter compteur1
    goto boucle1 ; si pas 0, boucler
    decfsz cmpt2,f ; si 0, décrémenter compteur 2
    goto boucle2 ; si cmpt2 pas 0, recommencer boucle1
    decfsz cmpt3,f ; si 0, décrémenter compteur 3
    goto boucle3 ; si cmpt3 pas 0, recommencer boucle2
    return ; retour de la sous-routine

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

    start
    movlw 1
    movwf PORTB
    bcf STATUS,C

    test
    btfss BOUTON ; le bouton possoir est-il actionné?
    goto test ; si non, boucler.

    rlf PORTB, f ; decalage à gauche
    BTFSC STATUS,C
    goto start
    call tempo

    attend_relach_bp
    btfsc BOUTON
    goto attend_relach_bp
    goto test

    END ; directive fin de programme

    ____________________________

    Bonne chance !

  29. #28
    invite8bba3470

    Re : petit truc pic16f84

    omar.STE, en effet, j'ai simulé ton programme sur MPLAB, et j'ai eu l'erreur "Executable code and data must be defined in an appropriate section". En effet, il manquait la ligne suivante :

    org 0x000 ; Adresse de départ après reset

    Je te recopie le programme ci-dessous.


    list p=16f84,f=inhx8m ; Type de PIC et format de fichier
    __config B'11111111110001' ; pas de protection du code, timer au demarrage,
    ; pas de chien de garde, oscillateur a quartz.
    #include "p16f84.inc" ; Librairie pour le compilateur

    CBLOCK 0x00C ; début de la zone variables

    ctr : 1 ; On créé la variable.

    ENDC ; Fin de la zone

    org 0x000 ; Adresse de départ après reset
    goto init

    init
    bsf STATUS,RP0 ; On choisi la zone memoire n°1 (page 1). Ca va nous permettre de configurer le PIC, les variables etant dans cette zone memoire.
    CLRF TRISB ;
    movlw H'02' ;
    movwf TRISA ;
    movlw H'80' ;
    movwf OPTION_REG ;
    bcf STATUS,RP0 ;
    clrf ctr ;
    test
    btfss PORTA, 1 ; en ayant bien mis TRISA, 1 = 1
    goto test

    incf ctr,f ;
    movf ctr,w ;
    movwf PORTB ; En ayant bien mis TRISB = 0x00

    attend_relach_bp
    btfsc PORTA, 1 ;
    goto attend_relach_bp ;
    goto test ;
    END ;
    Maintenant, ça devrait fonctionner !

    Aller, bonne chance et @+ !

  30. #29
    invite0a63013b

    Re : petit truc pic16f84

    Citation Envoyé par Gérard Voir le message
    Bonjour,
    As-tu essayé le simulateur de MPLAB ?
    Bsr
    biensur
    et il ne me reclame aucune faute
    mais malheureusement sur ma maquette de teste je ne trouve pas ce que je cherche
    quelle chance !!!!!!!!!!!!!

    @++

  31. #30
    invite0a63013b

    Re : petit truc pic16f84

    salut

    Citation Envoyé par cherwam07 Voir le message
    Il ne se passe rien du tout ?
    Les LEDs s'allument de facon aléatoire ?
    quand j'appuis sur le BP la LED1 (celle qui est branchée sur RB0) s'allume et quand je relache elle s'etteint
    c'est tous ce que se passe

    Citation Envoyé par cherwam07 Voir le message
    Ca fait des flammes ?
    pas encore ; juste de la fumé lol

    merci pour vos aides
    j'ensuis vraiment besoin car mon schema est encore bloqué

    @+

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. pic16F84
    Par invite4769246c dans le forum Électronique
    Réponses: 64
    Dernier message: 07/05/2007, 23h26
  2. Pic16f84-04/p
    Par inviteeab0141b dans le forum Électronique
    Réponses: 2
    Dernier message: 30/09/2006, 20h50
  3. Un petit truc pour un dm svp
    Par invite4252db6a dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 21/05/2005, 17h11
  4. Petit truc drol
    Par invitec913303f dans le forum Mathématiques du supérieur
    Réponses: 8
    Dernier message: 28/12/2004, 00h35
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...