Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Question programme en C (TRISA et TRISB)



  1. #1
    SAMarcheras

    Post Question programme en C (TRISA et TRISB)

    Bonjour,
    Je debute dans la programmation de PIC, j'ai un 16F84 avec comme programmatreur "PIC-01 programmer"
    Mon probleme est le suivant, j'ai lu plusieurs cours sur internet a propos de la programmation des PIC notement en C et dans tous ces cours, on parle de TRISA et TRISB; si je me souvient bien, ce sont des expressions a placer au debut d'un programme pour initialiser les pattes de mon PIC en entrée ou en sortie...
    quelle est donc la différence entre:
    "PORTB= 0;" et "TRISB=00000000;"
    ou "PORTA = 0;" et "TRISA = 00000000;" ?

    Merci d'avance, cordialement;

    -----


  2. Publicité
  3. #2
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Salut,

    En fait lorsque tu fais:
    PORTA = 0x00;
    Tu attribue la valeur 0 a toutes les broches de ton PORTB.

    Et quand tu fais:
    TRISA = 0x00;
    Tu mets tout le PORTA en sortie. Pour les Registres TRISx, lorsque tu mets à 1, tu mets la broche en entrée et lorsque tu la mets a 0, tu la met en sortie.

    En gros :
    TRISx : Initialisation du PORT en entrées/ sorties
    PORTx: Initialisation du PORT à la valeur que tu souhaite lui donner.

    Il est donc important dans chaque début de programme d'initialiser les PORTs de ton microcontroleur.

    PS: Il faudra faire attention aussi au registre ADCON1 (registre pour le convertisseur analogique / numérique du PIC) car il permet de configurer certains bits en analogique ou en numérique, il est donc bon de le configurer lui aussi en début de programme -> voir la documentation de ton PIC)
    Dernière modification par jorg1n ; 20/04/2009 à 10h56.

  4. #3
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    Bonjour, tout d'abord merci pour cette réponse aussi rapide
    J'ai néanmoin une question de plus, dans mon programme qui suit, réalisé sous microC, j'ai bien (je crois) initialisé les pattes du microcontroleur mais lors de la compilation du programme, j'ai un message d'erreur qui dit: "undeclared indentifier [RB0] in expression" (et d'autres pour [RB1] [RB2] [RA1] [RA4] [RB3] et [RB5].
    J'avoue ne pas comprendre, cela voudrait dire que microC ne connait pas les differents ports de mon microcontroleur?

    voici le programme en question: (qui permet d'allumer la led placée sur le port RB0 quand le port RA0 etc..)


    //-------------------fonction principale----------
    void main(void)
    {
    PORTB=0; //initialisation des pattes du microcontroleur
    TRISB=0b11110000;


    for(; { //la suite du programme s'efectue en boucle

    RB0=RA0;
    RB1=RA1;
    RB2=RA4;
    RB3=RB5;
    }
    }


    Merci d'avance, cordialement;

  5. #4
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    *for(;; )

  6. #5
    Seb.26

    Re : Question programme en C (TRISA et TRISB)

    Regarde dans le header de ton PIC ( fichier 16F84.h ).

    tu trouveras la définition exacte de tes ports...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  7. A voir en vidéo sur Futura
  8. #6
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    Merci de ta reponse,
    Une fois les définitions exactes de mes ports trouvés, je les remplaces dans mon programme a la place de [RB0] : 6.0, de [RA0] : 5.0..etc..
    mais apres compilation on m'indique "internal error"
    Que faire ?

  9. Publicité
  10. #7
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Salut,

    peux tu nous mettre ton programme entier, avec toutes les déclarations et tout...afin de voir d'ou peu venir le problème...

    merci

  11. #8
    HULK28

    Re : Question programme en C (TRISA et TRISB)

    Bonjour,

    normal RB0 n'est pas un déclaratif reconnu sous MikroC, il faut écrire PORTB.F0 ou faire un define.
    De même écrire TRISB.F0, c'est d'ailleurs une écriture valable pour tous les registres, INTCON.F2, etc
    @+
    Dernière modification par HULK28 ; 21/04/2009 à 13h19.
    Tout est bien qui finit.

  12. #9
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    (re)Bonjour,merci de vos réponses;
    J'avoue ne pas bien saisir, pour l'instant mon programme ressemble a ça (en entier ):


    //-------------------fonction principale----------
    void main(void)
    {
    PORTB=0; //initialisation des pattes du microcontroleur
    TRISB=0b11110000;


    for(; { //la suite du programme s'efetcue en boucle

    PORTB.F6=PORTA.F17;
    PORTB.F7=PORTA.F18;
    PORTB.F8=PORTA.F3;
    PORTB.F9=PORTB.F11;
    }
    }

    Le but etant de dire que chaque sortie correspond a une entrée, et prenne le meme etat que cette entrée, autrement dit, si : led1=inter1, alors quand on appui sur inter1(Bouton poussoir) il allumera led1.
    Ici, led1=PORTB.F6 et inter1=PORTA.F17 etc pour les 3 autres BP et les trois autres leds...

    Mais MicroC n'a pas l'air d'accord je me demande si je n'ai pas oublié d'annoncer quelque chose au debut de mon programme? : /
    Peut etre que le problème vient de l'initialisation des pattes du microcontroleur?
    Bref je n'en sait rien ... C'est pourquoi je fais appel a vous

    Merci d'avance, cordialement;

  13. #10
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    PS: Il est possible que ce que je raconte soit totalement Hors sujet, mais je tient a préciser que je suis débutant dans les microcontroleurs PICs.
    Merci.

  14. #11
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Re Salut,

    il faudrait que tu déclares ton TRISA comme tu l'a fais pour le TRISB sauf que l'a tu configures les broches où sont reliés les BPs en entrée...

    Pour le reste, je ne connais pas trop le compilateur que tu utilises.. il est donc pour moi difficile de voir d'ou peut venir le problème...
    Dernière modification par jorg1n ; 21/04/2009 à 14h37.

  15. #12
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Juste une chose, tu es sur de :
    Code:
    PORTB.F6=PORTA.F17;
    PORTB.F7=PORTA.F18;
    PORTB.F8=PORTA.F3;
    PORTB.F9=PORTB.F11
    car je trouve ça bizarre les .F18, .F11... non?

    Peux tu nous dire la déclaration que tu as trouvé pour les différents ports: bit 0 au bit 7 du PORT A, bit 0 au bit 7 du PORTB,...

    ensuite pour être plus facile a utiliser , tu peux faire comme te l'a conseillé HULK28, utiliser des "define":

    Code:
    #define led1 PORTB.F6
    #define BP1 PORTA.F17
    et ainsi de suite comme ça dans ton soft, tu fais:
    Code:
    led1 = BP1;
    Mais avant ça, vérifie bien la déclaration des broches de chaque ports et n'oublie pas de définir l'état de TRISA..

    Bonne continuation

  16. Publicité
  17. #13
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    Bonsoir, merci de vos réponses,
    Après avoir suivi votre conseil, mon programme ressemble a ça:

    //--------------------Programme BP + leds-------------

    #define led1 PORTB.F6
    #define led2 PORTB.F7
    #define led3 PORTB.F8
    #define led4 PORTB.F9
    #define BP1 PORTA.F17
    #define BP2 PORTA.F18
    #define BP3 PORTA.F3
    #define BP4 PORTB.F11

    //-------------------fonction principale----------
    void main(void)
    {
    PORTB=0;
    PORTA=0; //initialisation des pattes du microcontroleur
    TRISB=0b00100000;
    TRISA=0b00010011;


    for(; { //la suite du programme s'efetcue en boucle

    led1=BP1;
    led2=BP2;
    led3=BP3;
    led4=BP4;
    }
    }


    -J'ai donc déclaré TRISA comme TRISB selon l'emplacement des BP et des leds et j'ai utilisé des "define" l'histoire d'y voir un peu plus clair...

    -Vous me demandez si je suis sur de ".F18 et .F11", je pensait qu'il fallait premierement, le port, ici PORTB, puis d'ajouter .F suivi du numero de la broche, ici [RA1] et [RB5] soit les broches 18 et 11 du microcontroleur, peut etre ais-je mal compris ce passage du cours.


    "Peux tu nous dire la déclaration que tu as trouvé pour les différents ports: bit 0 au bit 7 du PORT A, bit 0 au bit 7 du PORTB,..."

    - Je comprends pas la question, je ne vois pas de quoi vous parlez dans "la declaration que j'ai trouvé " ...

    -Je me demande si je ne dois pas ajouter un "PORTA=0" au début de mon programme puisque j'utilise TRISA juste apres...

    Merci encor pour les precisions importantes que vous m'avez apportés ...
    cordialement;

  18. #14
    HULK28

    Re : Question programme en C (TRISA et TRISB)

    Ca ressemble à l'appelation des entrées A/D (An15, An16, An17, etc) ce qui est différent du portA qui s'arrête souvent à 5 (RA5).

    Jorg1n à tout dit sinon.

    Une bonne habitude avant de se lancer dans le soft est d'écrire un organigramme qui représente les actions du programme, les conditions, les boucles, etc.
    Cela permet d'éclaircir les idées et de préparer la réflexion du programme, donc de gagner du temps au final.


    Edit: non, F1, F2 représente le numéro de l'I/O du port.
    Par exemple PortA I/O n°0 s'écrit PORTA.F0, etc rien à voir avec le numéro de patte du circuit.
    Dernière modification par HULK28 ; 21/04/2009 à 17h47.
    Tout est bien qui finit.

  19. #15
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Bonsoir à tous,

    bon comme te l'a dit Hulk, ta "déclaration" pour l' utilisation de tes ports d'entrées /sorties est mauvaise donc voila a quoi devrait ressembler ton programme normalement:

    Code:
    //--------------------Programme BP + leds-------------
    
    #define led1 PORTB.F0     //RB0
    #define led2 PORTB.F1     //RB1
    #define led3 PORTB.F2     //RB2
    #define led4 PORTB.F3     //RB3
    
    #define BP1 PORTA.F0     //RA0
    #define BP2 PORTA.F1     //RA1
    #define BP3 PORTA.F4     //RA4
    #define BP4 PORTB.F5     //RB5
    
    //-------------------fonction principale----------
    void main(void)
    {
      PORTB=0;                      //initialisation du PORTA
      PORTA=0;                      //initialisation du PORTB
      TRISB=0b00100000;     // PORTB en sortie sauf PORTB.F5
      TRISA=0b00010011;     // PORTA en sortie sauf PORTA.F0 / .F1 / .F4
    
    
      for(;;) {       //la suite du programme s'effetcue en boucle
    
        led1 = BP1;
        led2 = BP2;
        led3 = BP3;
        led4 = BP4;
        }
     }
    Voili voila...
    vérifie aussi si tu n'as pas de include a mettre en début de programme car je sais que pour le compilateur C18 il est nécessaire d'ajouter une chose du genre :
    Code:
    #include 18F4525.h   //exemple pour le PIC18F4525
    Mais après a toi de voir, je ne connais pas du tout ton compilateur...

    Bonne continuation et n'hésite pas a nous tenir au courant

  20. #16
    jorg1n

    Re : Question programme en C (TRISA et TRISB)

    Juste pour infos, j'ai trouvé des bons petits documents qui pourraient te servir sur le compilateur MicroC:
    http://www.mikroe.com/pdf/mikroc/c_syntax_v101.pdf

    http://www.mikroe.com/pdf/fr/fr_1st_...pic_c_v101.pdf

    A bientot

  21. #17
    SAMarcheras

    Re : Question programme en C (TRISA et TRISB)

    Bonjour,et merci pour ces conseils, mon programme fonctionne maintenant parfaitement, je l'ai monté sur platine c'est nikel
    J'essai maintenant de le modifier, l'histoire de compliquer un peu la tache!!

    Merci pour ces documents aussi, je vais lire sa ce soir a tete reposée.

Sur le même thème :

Discussions similaires

  1. [C]-Diffrence entre LATA et TRISA..
    Par jorg1n dans le forum Électronique
    Réponses: 4
    Dernier message: 25/07/2008, 13h45
  2. Question programme pour PIC
    Par schistosoma mansoni dans le forum Électronique
    Réponses: 7
    Dernier message: 02/04/2008, 15h42
  3. Une question relative au programme de 1S
    Par Lemon_ed dans le forum Biologie
    Réponses: 13
    Dernier message: 01/05/2007, 11h59
  4. Question sur le programme en maths du lycée
    Par Gwyddon dans le forum Mathématiques du collège et du lycée
    Réponses: 11
    Dernier message: 27/02/2007, 21h17
  5. Question au sujet programme ISTsvc dans WINDOWS
    Par screechscreech dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 04/04/2004, 14h34