Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 40

PIC 16F876-Fonction test



  1. #1
    ico

    Unhappy PIC 16F876-Fonction test


    ------

    Bonjour tout le monde.
    Je vais peut être paraître un peu bête mais j'ai un petit problème de codage en assembleur

    Voila j'ai constituer une carte qui marche a merveille vue qu'elle fait ce que je désire, lire sur 1 port 4 état issu de capteurs optiques et écrire sur un autre port.

    Jusque la, mes #DEFINE suffisait

    La ou je coince c'est que j'aimerais avoir 3 état pour 1 paire de capteur
    Effectivement:
    • Si le capteur 1 vaut 0 alors on fais l'action 1
    • Si le capteur 2 vaut 0 alors on fais l'action 2
    • Si le capteur 1 et 2 valent 0 alors on fais l'action 3

    Alors je me suis dit je vais passé par la mémorisation:
    Code:
    haut
    	
    	call	AV
    	movf	PORTC, W
    	movwf	VAR_VISU
    	btfss	VAR_VISU, b'00001000'
    	call	STOP_MOTEUR
    	goto	haut
    	
    
    	END 			; directive fin de programme
    mais voila il faut remarqué que btfss VAR_VISU, b'00001000' ca ne fonctionne pas correctement donc ma question est:

    peut on mémorisé l'état d'un port d'entrée et peut t on le tester par rapport à un nombre de bit que l'on connais?

    Merci infiniment pour vos réponses.
    J'avoue sur ce coup je cale!
    Cordialement.

    -----

  2. Publicité
  3. #2
    invite03481543

    Re : PIC 16F876-Fonction test

    Je suppose que tu utilises un switch pour reconnaitre quel capteur est lu?
    Genre CD4066.

    Donc dans ce cas, tu peux très bien réaliser ta fonction en stockant dans un tableau les états de chaque capteur en fonction du switch activé, et à l'issu de la lecture lancer l'action ad hoc.

  4. #3
    ico

    Re : PIC 16F876-Fonction test

    En fait chaque capteur rencoie sur une patte du PORTC!
    Donc pas de 4066 ici, on traite tout en 5V. 0 ou 1!
    et sinon comment utiliser un tableau d'état ?
    Ca je ne connais pas !
    Cordialement.

  5. #4
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    LU
    Simple question,lorsque tes capteurs sont à zero tu fais:
    action1 et action2 et action3 ou
    uniquement action3?

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

    Re : PIC 16F876-Fonction test

    Avec dans l'exemple ,PortB bit 0 et PortB bit 1 actif à l'état haut !
    R est dans le registre Wreg

    Le résultat R de la lecture sera ;
    R = 1 avec PortB bit 0
    R = 3 avec PortB bit 1
    R = 4 avec (PortB bit 0 + PortB bit 1)


    Explication de l'algorithme;
    Avec les 3 cas possibles sur chaque niveau de test (-1,-2,-1)

    R = R-1
    Si R etait 1 alors 0 1ere condition vrai function1
    Si R etait 3 alors 2 rien pour le moment, la 2em condition sera vrai
    Si R etait 4 alors 3 rien pour le moment

    R=R-2
    Si R etait 0 alors 255 plus rien
    Si R etait 2 alors 0 la 2em condition est vrai
    Si R etait 3 alors 1 rien pour le moment, la 3em condition sera vrai

    R=R-1
    Si R etait 255 alors 254 plus rien
    Si R etait 0 alors 255 plus rien
    Si R etait 1 alors 0 la 3em condition est vrai




    Code:
    movlw 0
    btfsc PORTB,0
    addlw 1
    btfsc PORTB,1
    addlw 3
    
    sublw 1
    BTFSC STATUS,Z
    goto function1
    
    sublw 2
    BTFSC STATUS,Z
    goto function2
    
    sublw 1
    BTFSC STATUS,Z
    goto function3
    A+, pat

  8. #6
    ico

    Re : PIC 16F876-Fonction test

    En fait c'est pas bien compliqué!

    1 le capteur gauche voie un objet
    On tourne a gauche vers cet objet

    2 le capteur droit voie un objet
    On tourne à droite vers cet objet

    3 les deux capteur gauche et droite coie un objet
    Parfait on lui fonce dessus

    ce qui nous donne 3 états connus possible du PORTC

    1) -> b'00001000'
    2) -> b'00000100'
    3) -> b'00001100'

    tout simplement!

    Et justement j'aimerais que dans mon code on puisse faire un test par rapport à ces données que nous connaissont par avance

    Par contre la solution de freepicbasic pour gérer un autre cas plus tard me satisfait oui. j'avoue ne pas y avoir songé Comme quoi une demande peut parfois donné des réponse sauvant un autre projet. Merci donc

    Cordialement.

  9. Publicité
  10. #7
    freepicbasic

    Re : PIC 16F876-Fonction test

    avec les bons bits et portC
    Code:
    movlw 0
    btfsc PORTC,3
    addlw 1
    btfsc PORTC,2
    addlw 3
    
    sublw 1
    BTFSC STATUS,Z
    call droite
    
    sublw 2
    BTFSC STATUS,Z
    call gauche
    
    sublw 1
    BTFSC STATUS,Z
    call EnFace
    A+, pat

  11. #8
    freepicbasic

    Re : PIC 16F876-Fonction test

    Aute méthode

    Code:
    Movf PORTC,w
    sublw b'00001000'
    BTFSC STATUS,Z
    call droite
    
    Movf PORTC,w
    sublw b'00000100'
    BTFSC STATUS,Z
    call gauche
    
    Movf PORTC,w
    sublw b'00001100'
    BTFSC STATUS,Z
    call enface
    A+, pat

  12. #9
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Code:
    BOUCLE 
                 MOVFW	PORTC		
                 ANDLW   B'00000011'
                 BTFSS    STATUS,Z	
                 GOTO     ACTION3
                 MOVFW  PORTC  
                 ANDLW   B'00000001'
                 BTFSS    STATUS,Z
                 GOTO     ACTION1
                 ANDLW   B'00000010'
                 BTFSS    STATUS,Z
                 GOTO     ACTION2
                 GOTO     BOUCLE
    ACTION1  NOP
                  NOP
    ACTION2  NOP
                  NOP
     ACTION3 NOP
     	 NOP
    C'est comme si il y a deux boutons avec une action par boutons puis une troisieme action si les deux boutons sont à 1

    a bientôt
    Dernière modification par Pom26 ; 11/10/2007 à 20h34.

  13. #10
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    bon je suis un peu en retard

  14. #11
    ico

    Re : PIC 16F876-Fonction test

    Ah bah voila
    Au risque de passé pour un noob, mais à titre informatif, vous utilisez le registre STATUS mais pourquoi ? et comment il interragie ici ?
    Cordialement.

  15. #12
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Après une addition, soustraction ou une opération logique and, xor, ior suivant résultat, tu positionnes le flag Z pour opérateur logique et Z C DC pour addition soustraction du registre status

  16. Publicité
  17. #13
    ico

    Re : PIC 16F876-Fonction test

    Ok
    Et bien merci infiniment pour ces précisions.
    Je test et je vous dit ce qui en ressort
    Cordialement.

  18. #14
    ico

    Re : PIC 16F876-Fonction test

    Je reprend mon post helas
    Ca fonctionne oui mais helas ca ne fais qu'empirer !
    Pour preuve, lorsque on tombe dans le premier cas ca marche avec plus ou moins de latence (et la je dis stop) avant avec les #DEFINE c t direct, pas de latence la on dirais que mon proto prend le large, le large puis d'un coup il agit

    Retour donc à la case départ !

    Existe t il alors une fonction qui comme sublw ferais une soustraction, un test sur l'égalité ?
    genre:

    Code:
    btfsc variable, Z
    Genre variable contient ce qui etait dans le PORTC et Z ce qui est a correspondre ?

    car voyez vous en mémorisant ce qui est sur le port, je simplifie tout!
    Si c'est pas possible et bein je ferais un mixage des deux solutions

    Effectivement car le troisième cas est relativement rare donc on peut se permetre une latence dans les deux autres cas non !!

    Cordialement.

  19. #15
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Citation Envoyé par ico Voir le message
    car voyez vous en mémorisant ce qui est sur le port, je simplifie tout!
    Si c'est pas possible et bein je ferais un mixage des deux solutions
    Pour mémoriser -> un emplacement en RAM.
    Pour l'autre instruction il y a XORLW

    Je reviens, car fait une boulette,1er test n'est pas bon, donc avec des opérateurs logiques cela donne.


    Code:
    BOUCLE		MOVFW	PORTC		
    		XORLW   B'00000011'			
    		BTFSC   STATUS,Z			
    		GOTO    ACTION3	
    
    		MOVFW   PORTC
    		ANDLW	B'00000001'
    		BTFSS	STATUS,Z
    		GOTO    ACTION2
    
    		MOVFW   PORTC
    		ANDLW	B'00000010'
    		BTFSS	STATUS,Z
    		GOTO    ACTION1
    		GOTO	BOUCLE
    		
    ACTION3		NOP
    		NOP
    
    ACTION2		NOP
    		NOP
    
    ACTION1		NOP
    		NOP
    à bientôt

  20. #16
    ico

    Re : PIC 16F876-Fonction test

    Ah ok!
    Je me disait que peut être j'avais mal compris ou pas su abordé un point précis!

    La cela deviens plus clair
    Je test cela dans la matiné et je vous tiens au courrant (électrique) !
    Cordialement.

  21. #17
    freepicbasic

    Re : PIC 16F876-Fonction test

    Ca fonctionne oui mais helas ca ne fais qu'empirer !
    Lorsqu'on fait un test sur un port entier , il faut s'assurer de l'état des autres pins.
    Donc les relier à la masse si elle sont en entrée.
    Ou alors par soft masquer les pins inutilisées.

    Code:
    Movf PORTC,w
    andlw b'00001100'
    sublw b'00000100'
    BTFSC STATUS,Z
    call gauche
    A+, pat

  22. #18
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    LU freepicbasic

    Pour une fois j'étais plus rapide que toi,mais tu as vu l'heure matinal l'OM

    à bientôt

  23. Publicité
  24. #19
    ico

    Re : PIC 16F876-Fonction test

    Y a du mieux toutefois il reste un point sur lequel ca ne fonctionne pas correctement: Lorsque on a les deux capteurs qui marche en même temps

    Voila ce que j'ai fais avec ce qui a été indiqué ci-dessus:
    Code:
    	call	Avance
    
    	btfsc	SOL_D
    	goto	h1
    
    	btfsc	SOL_G
    	goto	h2
    
    	movf PORTC,W
    	andlw b'00001100'
    	sublw b'00001100'
    	btfsc STATUS,Z
    	goto action1
    
    	movf PORTC,W
    	andlw b'00001100'
    	sublw b'00001000'
    	btfsc STATUS,Z
    	goto action1
    
    	movf PORTC,W
    	andlw b'00001100'
    	sublw b'00000100'
    	btfsc STATUS,Z
    	goto action2
    
    
    	goto	haut
    Enfin lorsque on tombe sur la solution 3, j'ai remarqué que ca sautillais comme pour un seul des deux capteurs. Donc reste à savoir si entre chaque cas il ne faut pas (par hazard) remetre le bit de STATUS à 0 par défaut avant de bouclé

    La je m'avance peut être un peu mais je ne voie pas d'autres solution

    Cordialement.

  25. #20
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    si tu fait des soustractions il te faut mettre le flag carry avant à zéro.Pas besoin sur les opérateurs logiques.

  26. #21
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Ne tient pas compte de mon post #20
    le status ne peut pas résoudre ton probléme

  27. #22
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Par contre je pense à une petite tempo avant de lancer le test pour laisser le temps au temps,mais dans la boucle

  28. #23
    freepicbasic

    Re : PIC 16F876-Fonction test

    il y a 2 fois action1.
    peut être une erreur de recopie...

    la partie du soft ici semble correct.
    Le problème vient sans doute des capteurs
    On du soft que l'on vois pas ici.
    on vont tout ces goto ?
    H1 et H2 , ça fait quoi ?
    A+, pat

  29. #24
    ico

    Re : PIC 16F876-Fonction test

    J'ai effectuer des tests sur mes capteurs et il répondent bien
    Passage d'un +5 à un 0V donc 1 logique à 0 logique lorsque il capture un évenement.

    D'ou le fait que avec ce système j'aimerais que l'on vérifie le port entier.
    Cordialement.

  30. Publicité
  31. #25
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Citation Envoyé par ico Voir le message
    D'ou le fait que avec ce système j'aimerais que l'on vérifie le port entier.
    Cordialement.
    Le fait de faire un (andlw b'00001100') fait que tu contrôles le port en entier.
    As-tu mis un tempo dans le test, ou aprés chaques actions ??

  32. #26
    ico

    Re : PIC 16F876-Fonction test

    La je ne voie pas ce que viens faire un tempo en fait !
    Je pense que c'est pourtant simple

    Si cas1 -> saut vers le traitement 1 (qui peut inclure une tempo)
    Si cas 2 -> saut vers le traitement 2 (qui peut aussi inclure une tempo)
    et enfin Si cas 1+2 = cas 3 alors traitement 3 (qui peut inclure une tempo)


    Après je ne susi pas sur que l'on ai intéret à poursuivre dans la voie des opération!
    Effectivement que contient alors PORTC quand on y acede ?
    OU b'00001000'
    OU b'00000100'
    OU b'00001100'

    du coup on a bien nos trois branche!

    La ou cela m'interpele, et bien que j'ai compris que le BTFSS lui accedez à un résultat d'oparion juste ou fauce, il n'y a que ce moyen la pour faire une simple égalité ?

    Sinon je ferais en cascade tout simplement et avec des variables !
    Cordialement.

  33. #27
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Citation Envoyé par ico Voir le message
    Si cas1 -> saut vers le traitement 1 (qui peut inclure une tempo)
    Si cas 2 -> saut vers le traitement 2 (qui peut aussi inclure une tempo)
    et enfin Si cas 1+2 = cas 3 alors traitement 3 (qui peut inclure une tempo)

    Cette tempo elle exite ou pas????????

    si non Il faudait faire

    boucle tempo

    capteur1et2 ->action1
    capteur1 ->action2
    capteur2 ->action3

    goto boucle



    action1
    goto boucle
    action2
    goto boucle
    action3
    goto boucle


    après les actions bien passer par la tempo si non les moteurs ne sont pas encore en route que tu tests déja tes capteurs.Ou alors je ne comprends pas,comment fonctionne ton robot

  34. #28
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    pour moi c'est trop simple
    salut

  35. #29
    DavidDB

    Re : PIC 16F876-Fonction test

    Salut,

    Travailler directement sur le port du µC, n'est pas recommandé dans ce cas précis.
    Car entre chacun des tests, tu recharges le port dans le registre de travail, et si entre deux tests la valeur du port change c'est le bug assuré pour les tests conditionnels...

    Donc, il faut sauvegarder dans une varaible la valeur du port avant de faire les trois tests, et faire ces tests sur la variable et non directement sur le port du µC.

    Sans oublier la remarque sur la tempo (ou remplacer la tempo par un test périodique du port, genre un test toutes les 10ms par exemple)

    David.

  36. #30
    invite_P89
    Invité

    Re : PIC 16F876-Fonction test

    Salut david

    Car entre chacun des tests, tu recharges le port dans le registre de travail, et si entre deux tests la valeur du port change c'est le bug assuré pour les tests conditionnels...
    La temporisation résoudra ce problème .

    Si on est dans la temporisation,le port peut bien changer,on ne le voit pas.

    remplacer la tempo par un test périodique du port, genre un test toutes les 10ms par exemple
    Je ne sais pas si il gére les INT ,si non,la tempo est mieux recommandé, pas de gestion des timers.
    Dernière modification par Pom26 ; 14/10/2007 à 06h53.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. pic 16f876
    Par guiboud-ribaud dans le forum Électronique
    Réponses: 2
    Dernier message: 21/05/2006, 18h19
  2. Pic 16f876
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 22/04/2006, 13h49
  3. patte 1 du pic 16F876 : MCLR ?!???
    Par laatysha dans le forum Électronique
    Réponses: 3
    Dernier message: 24/02/2006, 22h16
  4. interruption A/D DU PIC 16F876
    Par khalid dans le forum Électronique
    Réponses: 5
    Dernier message: 09/01/2006, 20h02
  5. pic 16f876 et overclocking
    Par dede dans le forum Électronique
    Réponses: 2
    Dernier message: 14/07/2003, 01h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.