Programmation sur PIC
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Programmation sur PIC



  1. #1
    As_Sh

    Programmation sur PIC


    ------

    Bonjour à tous

    Comme l'intitulé l'indique, je programme sur un PIC16F690 avec MPLAB ide 8.92.

    J'aimerai savoir s'il y a une technique pour faire un "switch/case" comme en C, mais en assembleur.

    Concrètement, je dois faire l'acquisition de plusieurs bits sur divers PORTs. J'ai fait une boucle goto pour faire l'acquisition, c'est au niveau du changement "d'adresse" de la pin à lire que porte ma question. Actuellement, à l'aide d'un compteur et de tests, je détermine ou en est ledit compteur et je sais quel bit acquérir.
    Cela dit, un switch simplifierait, je pense.

    Merci

    -----

  2. #2
    RISC

    Re : Programmation sur PIC

    Salut,
    C'est effectivement lorsque l'on commence à avoir trop de if qu'il faut aller vers une structure switch - case mais...c'est aussi le moment ou il faut abandonner l'assembleur et utiliser le C.
    Tu peux télécharger le compilateur XC8 qui fonctionne en mode gratuit. Cela sera plus simple à gérer
    Je te conseille également de migrer sur MPLAB X si tu passes au C. L'éditeur est plus puissant.
    a+

  3. #3
    _asm_

    Re : Programmation sur PIC

    Salut,
    Tu peux utiliser ADDWF PCL, f avec la bonne valeur dans WREG et faire une sorte de case de cette manière.
    Regarde la LED_TABLE http://www.electro-tech-online.com/t...nguage.134519/ c'est un peu la même idée !

  4. #4
    As_Sh

    Re : Programmation sur PIC

    Bonjour RISC et _asm_

    Alors RISC, je vais te dire un truc, je suis tout à fait d'accord avec toi. En fait le parcours pour choisir les divers composants (PIC, MPLAB, compilateur) est assez WTF si je puis me permettre. J'ai commencé bien entendu à vouloir coder en C, donc j'ai choisis les dernières versions de MPLAB et du compilateur (sur le site de microchip). Mais on m’a "imposé" (c'est un peu plus compliqué mais bon) un PICkit 2 et MPLAB X ne fonctionne pas, aux dires de certain, avec ce PIC.
    DONC je me suis rabattu sur une version (je crois la 6. quelque chose) antérieur de MPLAB, pour pouvoir être au plus proche du cours de bigonoff (merci futura science ). Mais je me suis aperçu qu'il codait en assembleur. Et après quelques hésitations, je suis passé à l'assembleur (que je ne connaissais pas du tout). En particulier parce que je pensais que mon code serait plutôt simple et que je n'aurai pas trop de difficultés ... GRAVE ERREUR. Voilà, je raconte un peu ma vie mais tout ça pour dire que je ne pense pas repasser en C même si j'en ai de plus en plus envie.

    _asm_ je te remercie beaucoup pour cette idée. J'ai mis un moment, déjà à trouver ce qu'était la LED_TABLE, puis à comprendre le fonctionnement pour mon propre usage. Mais je pense que cela me sera très utile. Reste à définir la bonne valeur de WREG.

    D'autre part, j'ai de nouveau une interrogation.

    Je suis en train de debugger un bout de mon programme pour tester si au moins ce bout fonctionne. Comme je l'ai dit, je dois faire l'acquisition de bits sur des PORTs (j'ai pris PORTA et PORTB). Donc logiquement, je dois faire varier les valeurs de ces deux registres pour simuler une arrivé d'information. Mais je n'y arrive pas. Ni par programme ("movlw 0xXX" puis movwf PORTA par exemple) ni manuellement avec la fenêtre Watch.

    Est-ce que je suis sensé pouvoir modifier ces valeurs ? Ou est-ce qu'il faut obligatoirement des entrées physiques ?

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

    Re : Programmation sur PIC

    Bonsoir à tous

    je vois que je n'ai pas beaucoup de réponses, j'imagine que j'en demande trop, rapport au post de début de forum signifiant qu'il ne faut pas s'attendre à des réponses toutes faites. Si c'est le cas, j'en suis désolé.

    Je suis actuellement en train d'essayer toutes sorte de solutions pour mon problème et je crois avoir trouvé quelque chose, mais ne pouvant modifier mes registres manuellement, je ne sais pas vraiment si cela fonctionne.

    Donc pour ne pas en demander plus que nécessaire,

    Est-ce que l'écriture :

    bsf 0x7, mavariable ; mise de PORTC,x à 1"

    où mavariable contiendrais le numéro de pin du PORTC (d'où le x dans les commentaires) est valable ?

    Sachant que la compilation est SUCCEEDED, je me prend à espérer que c'est le cas.

    merci

  7. #6
    _asm_

    Re : Programmation sur PIC

    Salut,
    La deuxième opérande de bsf ne peux être qu'une valeur entre 0 et 7 et pas une variable, le SUCCEEDED c'est parce que l'assembleur va remplacer le symbole mavariable par sa définition (comme tu as remplacé PORTC par 0x7).

    Tu peux faire quelque chose comme ça (pas testé):

    Code:
     rlf mavariable,w     ;wreg = mavariable*2
     call setBit
    
     ...
     ...
     ...
    
    setBit:
     addwf   PCL , f
     bsf PORTC, 0
     return
     bsf PORTC, 1
     return
     bsf PORTC, 2
     return
     bsf PORTC, 3
     return
     bsf PORTC, 4
     return
     bsf PORTC, 5
     return
     bsf PORTC, 6
     return
     bsf PORTC, 7
     return

  8. #7
    _asm_

    Re : Programmation sur PIC

    re,
    à ajouter la ligne avant le "rlf mavariable,w" :
    Code:
    bcf STATUS,C   ;efface la retenue pour éviter sa propagation lors de la rotation

  9. #8
    As_Sh

    Re : Programmation sur PIC

    Bonjour _asm_

    Effectivement, je n'avais pas du tout compris correctement ce que tu m'avais proposé (LED_Table). Dans ma grande ignorance, j'avais crus que le "retlw" renvoyait un paramètre selon la valeur de PCL. Ce qui est en quelque sorte le cas puisque PCL détermine la ligne que le programme va exécuter ensuite. Mais il m’a fallu toute une nuit et quelques heures de réflexion (infructueuses) ce matin pour le comprendre.

    En tout cas encore merci.

    J'ai aussi le cas de mettre le bit à 0, je vais donc soit adapter le code pour intégrer un test, soit faire un deuxième sous-programme.

  10. #9
    terriblement

    Re : Programmation sur PIC

    Si tu comptes envoyer des valeurs sur ton port, fait le soit sur le port entier, soit il faudra que tu gères le "RWM problem", dans la mesure ou ce PIC ne dispose pas de registre LAT.
    ca s'oublie vite, et peut provoquer quelques prises de tête

  11. #10
    As_Sh

    Re : Programmation sur PIC

    Bonjour terriblement

    J'ai lu ton message aux alentours de samedi et je me suis dit qu'il me suffirait de mettre la valeur entière (genre mettre la valeur "précédente" dans W, mettre le bit voulut à 1 ou 0 selon, et charger cette "nouvelle" valeur dans le PORT).
    Et pris d'un doute aujourd'hui, je reprends l'utilisation de LAT et je lis qu'il intervient lorsqu'il y a lecture sur le PORT et pour éviter les erreurs de lecture de valeur.
    Or mon PORT n'est qu'en sortie donc est-ce nécessaire de rajouter les instructions que j'ai envisagé ?

    De plus je n'ai pas trouvé ce que tu appelles le "RWM problem". Qu'est-ce que c'est ?

  12. #11
    terriblement

    Re : Programmation sur PIC

    Disons que tu utilises que PORT,
    tu dis :
    PORTA = 0b00000001; //ca c'est autorisé

    En faisant ca, tu dis que tu veux le premeir bit à 1.
    Sauf que, pour une raison quelconque, ton circuit relié à A0 tire trop de courant, et la tension chute; prenons le cas extreme d'un court circuit : 0V

    maintenant tu fais ca :
    PORTAbits.RA1 = 1;

    Que fais le PIC suite à cette instruction :
    il lit la valeur de chaque port (la valeur présente sur les PIN, pas le registre), a cause du court circuit il lira:
    00000000 alors qu'on attendait : 00000001
    Ensuite il va modifier la valeur lue, on aura donc:
    00000010 (au lieu de 00000011)
    Puis l'écrire, au final tu auras en sortie:
    00000010 (au lieu de 00000011)
    Et dans le cas ou la capa aurait eu le temps de finir de se charger => Elle ne charge plus vu qu'on a remis la sortie A0 à 0.

    Plus d'explications:
    http://www.mikroe.com/download/eng/d...c/help/rmw.htm

    c'est RMW et pas RWM, sorry !

  13. #12
    RISC

    Re : Programmation sur PIC

    Bonjour,

    LATx doit être utilisé uniquement en SORTIE, sinon tu lis le registre au lieu de lire la broche au travers de PORTx.
    Pour faire court : utiliser LATx pour les sorties et utiliser PORTx pour les entrées

    a+

  14. #13
    As_Sh

    Re : Programmation sur PIC

    Bonjour terriblement et RISC

    terriblement, effectivement, vu comme ça, mon idée ne fonctionne pas. Je suis bête puisque c'est justement ce que tu me disais dans le message d'avant
    Mais ça ne résous pas mon problème, puisque dans tous les cas, si le circuit relié à A0 tire trop de courant, je ne peux pas faire grand chose.

    Donc ce que tu me dis, c'est de réécrire entièrement chaque fois le PORT. Mais le problème reste entier puisque pour réécrire ce PORT, j'ai besoin de savoir tout de même l'état des sorties autres que celle que je désire changer. Peut être en passant par un registre intermédiaire ? Faire une sorte de "substitue" au registre LAT (il me semble que c'est son rôle en quelque sorte). En tout cas merci beaucoup car effectivement, ce n'est même pas un oubli, c'est une méconnaissance donc je serais tombé droit dans le panneau.

    RISC, ça je l'ai compris mais le fait est que je n'ai pas de registre LAT.
    Et pour le cas où tu m'expliquais cela à titre ... explicatif je t'en remercie aussi.

  15. #14
    terriblement

    Re : Programmation sur PIC

    Oui dans ce cas à ta place je ferais un substitut du registre LAT avec un registre intermédiaire ( avec du ou exclusif ca marche bien et prends relativement peu de temps au processeur).
    Après c'est juste une astuce que je te donne, je ne maitrise pas l'assembleur, donc ca n'a peut etre rien à voir avec ton problème, mais mieux vaut avoir un code propre pour trouver plsu facilement les sources d'erreur

  16. #15
    RISC

    Re : Programmation sur PIC

    Salut,

    Mea Culpa.

    Le PIC16F690 ne possède PAS de registre LAT (c'est seulement sur les PIC16F1xxx). Utilises donc uniquement PORT pour les entrées et les sorties

    a+

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 12h34
  2. programmation pic
    Par invite53567d99 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/03/2013, 18h50
  3. Programmation Pic lvp
    Par h.thierry dans le forum Électronique
    Réponses: 10
    Dernier message: 24/08/2009, 22h40
  4. [Thermique] Programmation VMC
    Par invite6818397a dans le forum Dépannage
    Réponses: 4
    Dernier message: 01/01/2009, 11h38
  5. programmation
    Par invite54654732 dans le forum Logiciel - Software - Open Source
    Réponses: 10
    Dernier message: 01/09/2006, 07h24
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...