Programmation des PIC 18F en C
Répondre à la discussion
Affichage des résultats 1 à 19 sur 19

Programmation des PIC 18F en C



  1. #1
    invitef5766415

    Programmation des PIC 18F en C


    ------

    j'ai déjà un peu appris les 16F avec le 16F84 et un peu de 16F876 en Assembleur et en C avec CC5x et maintenant je voudrais apprendre à programmer les PIC 18, avec le 18F4680.


    j'ai téléchargé la version évaluation du compilateur MPLAB C18, et j'ai suivi les instructions de Microchip pour les installations (même si leur documentation n'est pas à jour par rapport au compilateur et à l'IDE).

    J'ai commencé à écrire des programmes et la compilation se fait sans erreur, seulement que si j'utilise certain registres (comme le PORTA, PORTB, TRISA, TRISB), il n'évolue pas malgré les instructions que je donne, comme PORTB++, même des affectations comme
    TRISA = 0x03; ces instructions font l'équivalent de NOP(), elles consomment seulement des temps machines.

    Alors que lorsque j'utilise des varibles que je declare moi même, le problème n'existe pas.

    NB: j'ai inclus #include <p18f4680.h>

    Merci de votre réponse.

    -----

  2. #2
    mp3dux

    Re : Programmation des PIC 18F en C

    t'as des warnings ou pas ?
    le code assembleur généré est un NOP() ? je crois pas.

    comment vérifie tu ton résultat , t'as des sorties leds ou dans le watch?

    ben j'espère que tout ton PORTB est en sortie avant que tu fasse PORTB++ .
    dès fois on est pas concentré...

    tu peux montrer les instructions de ton code ?
    en C d'après mon expérience les 18F sont encore plus simples que les 16F (bank etc...) ce n'est que personnelle.

  3. #3
    invitef5766415

    Re : Programmation des PIC 18F en C

    mp3dux<<

    Non, il n'y a pas de warning!

    En fait, je viens de trouver le problème, c'est à cause du fait que le cours avec lequel j'apprends est en fait du 18F452,
    alors que moi je veux utiliser le 18F4680, et je croyais au début qu'ils ont presque les même architectures.

    alors que les registres PORTA, PORTB, TRISA, TRISB ne se trouvent pas dans la même bank pour ces 2 PIC.

    Merci

  4. #4
    mp3dux

    Re : Programmation des PIC 18F en C

    Citation Envoyé par LEMIL Voir le message
    mp3dux<<


    En fait, je viens de trouver le problème.

    Merci
    et la solution ? C'est elle qui est importante non ?

    en 18F et en C de plus tu t'occupes plus des banks à moins que ce soit nouveau?

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

    Re : Programmation des PIC 18F en C

    J'ai dit n'importe quoi, je croyais que j'ai trouvé la solution mais non, le problème persiste.

    Voici le code:

    #include <p18f4680.h>
    #define duree 1000

    void tempo(unsigned int count);

    void main(void)
    {
    PORTB = 0x00; // première erreur
    TRISB = 0x00; // deuxième erreur
    while(1)
    {
    PORTB++; // troisième erreur.
    tempo(duree);
    }
    }
    void tempo(unsigned int compte)
    {
    while(compte--);
    }


    c'est un très simple programme test seulement.

    Les instructions PORTB++ et les affectations ne marchent pas, je l'exécute même en listing assembleur pas à pas, et lorsque le curseur passe sur le PORTB++ => INCF 0xf81, F, ACCESS; en assembleur
    Il ne se passe rien, à part le PC qui s'incrémente, voilà pourquoi j'ai dit tout à l'heure qu'il fait l'équivalent de nop.

    Pas seulement avec le PORTB, mais toute manipulation de certains registres comme le PORTA, TRISA, TRISB, PORTC,...

    Et j'ai essayé pas mal de micro-programme que des fois je copie/colle même de la doc de Microchip.

    Seulement j'ai dit aussi tout à l'heure que j'ai trouvé la solution, c'est que lorsque j'ai choisi le PIC 18F452 comme device et j'ai changé l'include en <p18f452> et ça marchait comme sur de la ... enfin tu vois ce que je veux dire.


    J'ai vraiment besoins de la solution, parce que je suis obligé d'utilisé le 18f4680.

    Merci

  7. #6
    mp3dux

    Re : Programmation des PIC 18F en C

    mets déjà
    Code:
    TRISB = 0x00;
    avant

    Code:
    PORTB = 0x00;

    après,
    tes tempo sont approximatives,
    si t'as plus d'erreurs

    Code:
    #include <delays.h>
    pour utiliser les fonctions plus simples et plus précises.
    juste pour des tests ça va mais c'est pas une bonne methode pour apprendre d'utiliser des fonctions toutes faites

  8. #7
    invitea5e3e6e1

    Re : Programmation des PIC 18F en C

    Bonjour
    Bon on se risque:
    Code:
    #include <p18f4680.h>
    #define duree 1000
    
    
    void tempo(unsigned int count);
    
    void main(void)
    {
    TRISB = 0x00; // port B en sortie
    PORTB = 0x00; // out B = 0 (pas utile)
    unsigned char val;
    val=0;
       while(1)
      {
         PORTB= val; // out B de val.
         tempo(duree);
         val++;
      }
    }
    void tempo(unsigned int compte)
    {
         while(compte--);
    }
    C'est basique mais à tester....
    Courtoisement

  9. #8
    DavidDB

    Re : Programmation des PIC 18F en C

    Salut,

    As-tu vu que le PORTB de ton µC est multiplexé????
    Donc, tu initialises en premier le PORTB en numérique avant de l'utiliser en sortie...

    Ensuite, il faut utiliser LATB à la place de PORTB pour écrire sur le PORT (lire le datasheet)

    David.

  10. #9
    invitef5766415

    Re : Programmation des PIC 18F en C

    Merci pour vos réponse.

    Le problème c'est pas vraiment ce programme, mais c'est qu'un exemple pour le montrer parce que je suis en train d'apprendre à partir d'un cours, et ce programme là je ne fais que copier/coller à partir de ce cours, comme je l'ai dit il est trop basique et pourtant ça ne marche pas.

    J'ai essayé toutes les réponses que vous avez proposé,
    en permutant l'affectation de TRISA en PORTB, ça ne donne rien, et le comble c'est que la compilation ne donne aucune erreur, et j'obtiens même le fichier .HEX que je teste sur une simulation Hardware dans PROTEUS.
    Mais rien, je place plusieurs LED sur le PORTB pour voir qu'ils s'allument comme en comptage binaire naturel, mais rien.

    J'ai aussi un peu lu le datasheet et j'ai trouvé qu'il faut utiliser LATB pour écrire sur le PORTB, je l'ai fait mais ça ne donne rien non plus (rien depuis le watch même et pas avec PROTEUS), ni PORTB ni LATB ne changent de valeur.

    Je ne comprends plus c'est quoi le problème parce que avec le 18f452 que le cours utilise et que même microchip utilise comme exemple dans ces doc, il n'y a pas du tout de problème et dès que je change de composant, tak!

    Je ne sais pas s'il y a un bug dans le compilateur (j'ai utilisé la dernière version évaluation et aussi la version Lite mais...) lorsqu'on utilise le 18f4680 , mais j'y crois pas.

  11. #10
    DavidDB

    Re : Programmation des PIC 18F en C

    Tant que tu n'auras pas configuré le PORTB en numérique, cela ne fonctionnerra pas...

    Par défault il est en analogique, c'est donc normal que ta ligne de code ne fonctionne pas!

    David.

  12. #11
    invitef5766415

    Re : Programmation des PIC 18F en C

    DavidBD <<

    comment on le configure en numérique? peux-tu me donner l'instruction.

    Pourtant c'est pas la peine de le faire avec le 18f452.

    Merci!

  13. #12
    invitef5766415

    Re : Programmation des PIC 18F en C

    Citation Envoyé par DavidDB Voir le message
    Tant que tu n'auras pas configuré le PORTB en numérique, cela ne fonctionnerra pas...

    Par défault il est en analogique, c'est donc normal que ta ligne de code ne fonctionne pas!

    David.

    Oui, Merci DavidDB

    C'était ça le problème je l'ai trouvé!

    J'espère qu'il n'y en a plus d'autre!

    Encore merci

  14. #13
    DavidDB

    Re : Programmation des PIC 18F en C

    Page 132 du datasheet :

    ADCON1 = 0x0E

    David.

  15. #14
    mp3dux

    Re : Programmation des PIC 18F en C

    avec le 18f452 c'était PORTA qui était analogique/numérique.

    Pas facile à trouver sans un coup d'œil dans la datasheet...
    ton tempo est trop court, t'arrive à voir quelque chose de bien ?

  16. #15
    invitef5766415

    Re : Programmation des PIC 18F en C

    mp3dux <<

    Bonjour

    Citation Envoyé par mp3dux Voir le message
    avec le 18f452 c'était PORTA qui était analogique/numérique.

    Pas facile à trouver sans un coup d'œil dans la datasheet...
    ton tempo est trop court, t'arrive à voir quelque chose de bien ?
    Non, comme je l'ai dit plus haut, ce programme c'est seulement pour illustrer le problème.

  17. #16
    RISC

    Re : Programmation des PIC 18F en C

    Salut,

    J'ai une bonne méthode pour connaitre l'auteur des bugs dans les programmes : un miroir sur le mur en face de moi

    Maxime No1 : le manuel tu liras
    Maxime No2 : si le manuel tu as lu et que cela ne marche pas, es-tu sûr d'avoir la dernière version ?
    Maxime No3 : après avoir appliqué les maximes 1, 2 et cela ne marche toujours pas ? Es-tu sûr d'avoir téléchargé TOUS les manuels...
    Maxime no4 : après avoir appliqué les maximes 1, 2, 3 et cela ne marche toujours pas et tu as passé 2 semaines à tout vérifier ? Es-tu sûr d'avoir téléchargé l'errata sheet qui montre que le bogue est connu et documenté depuis 3 ans
    Maxime No5 : après avoir appliqué les maximes 1, 2, 3, 4 et cela ne marche toujours pas. As-tu la dernière version du compilateur, as tu vérifié les bugs connus du compilateur ? La version du silicium que tu as est-elle en phase avec tes manuels ? As-tu contacté le support technique ?
    Maxime No6 : après avoir appliqué les maximes 1, 2, 3, 4, 5 et cela ne marche toujours pas. Tu viens peut-être de découvrir un "nouveau bogue" du silicium.
    Je te rassure de suite : 99,999% des cas n'arrivent jamais au stade6

    j'allais presque oublier un très bon tutoriel sur les PIC18 et le C18 en français : http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm

    a+

  18. #17
    invitef5766415

    Re : Programmation des PIC 18F en C

    RISC <<

    c'est justement avec les cours de ce lien que tu donnes là que j'apprends en ce moment!

  19. #18
    RISC

    Re : Programmation des PIC 18F en C

    Salut,
    Citation Envoyé par LEMIL Voir le message
    RISC <<

    c'est justement avec les cours de ce lien que tu donnes là que j'apprends en ce moment!

    Bonne initiative mais....mes maximes s'appliquent en priorité
    Les Tutos restent des tutos...dès qu'on utilise un produit différent il faut impérativement plonger dans la doc...sans bouée

    a+

  20. #19
    invitef5766415

    Re : Programmation des PIC 18F en C

    et ça continue, je suis de nouveau bloqué, ça n'a rien avoir avec le premier problème et je ne sais pas si c'est une bonne idée de le mettre ici ou de créer un nouveau sujet, mais je vais le mettre quand même

    voila je suis maintenant arriver à la programmation des afficheurs LCD.

    voici le code:

    #include <p18f4680.h>
    #include <delays.h>
    #include "xlcd.h"

    char chaine[]="BONJOUR";

    void DelayFor18TCY( void )
    {
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    Nop();
    }
    void DelayPORXLCD (void)
    {
    Delay1KTCYx(30); // Delay of 15ms
    // Cycles = (TimeDelay * Fosc) / 4
    // Cycles = (15ms * 8MHz) / 4
    // Cycles = 30,000
    return;
    }
    void DelayXLCD (void)
    {
    Delay1KTCYx(10); // Delay of 5ms
    // Cycles = (TimeDelay * Fosc) / 4
    // Cycles = (5ms * 8MHz) / 4
    // Cycles = 10,000
    return;
    }


    void main(void)
    {
    TRISD = 0x0;
    TRISA = 0x0;
    OpenXLCD(FOUR_BIT & LINES_5X7 );
    SetDDRamAddr(0);
    putsXLCD(chaine);
    while(1);
    }
    ça n'affiche rien.

    C'est toujours le PIC 18F4680 que je branche sur l'afficheur LCD LM032L (je fais tous sur Proteus ISI mais je compte utiliser la carte PICDEM2+ par la suite).

    J'ai suivi toute les instructions en modifiant le header "xclcd.h" et les configurations, mais ça n'affiche rien du tout,
    il n'y a pas d'erreur dans mon montage puisque j'ai essayé un fichier .hex livré avec le CD de PICDEM2+ et ça marche bien mais le code source n'est pas livré avec pour s'inspirer et voir le problème que j'ai.

    ça peut-être quoi le problème cette fois ci? j'ai beau essayé mais ça ne donne rien.

Discussions similaires

  1. pic 18F et L298
    Par invite35c29b80 dans le forum Électronique
    Réponses: 5
    Dernier message: 23/03/2009, 08h11
  2. Programmation 18F
    Par UNTOUCHABLE dans le forum Électronique
    Réponses: 9
    Dernier message: 10/12/2008, 17h04
  3. comment passer des pic 16F au pic 18F ?
    Par MorpheusPic dans le forum Électronique
    Réponses: 5
    Dernier message: 13/08/2008, 22h04
  4. programmation du pic 18F dans MPLAB
    Par invite10722f67 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/10/2006, 15h10
  5. Programmation des PIC
    Par invited82c8d16 dans le forum Électronique
    Réponses: 0
    Dernier message: 10/05/2005, 00h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.