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

Communication entre PIC18 et PC



  1. #1
    ROM42

    Unhappy Communication entre PIC18 et PC


    ------

    Bonjour,

    Cela fait des jours que j'essaye de créer la communication entre ma carte de développement PIC18 et mon PC mais en vain !! En passant par MPlab et pickit 3.

    Voici la doc de la carte : http://ww1.microchip.com/downloads/e...Doc/51721b.pdf

    Tout d'abord j'essaye de faire ce petit tutoriel :http://herve.hollard.perso.sfr.fr/do...stallation.pdf

    J'arrive jusqu'au bout sauf que ça ne compile pas, message d'erreur :

    Clean: Deleting intermediary and output files.
    Clean: Deleted file "C:\Test1\test1.mcs".
    Clean: Done.
    Executing: "D:\CC5X\CC5X.EXE" clignotement.c -CC -fINHX8M -p18F8722 -I"D:\CC8E;D:\CC5X" -a -L -Q -V -FM
    CC5X Version 3.4E, Copyright (c) B Knudsen Data, Norway 1992-2010
    --> FREE edition, 8-16 bit int, 24 bit float, 32k code, reduced optim.
    clignotement.c:

    #ifndef ICD2_DEBUG
    #pragma chip PIC18F8722, core 16, code 65536, ram 0 : 0xF5F
    ^------
    Error[1] D:\CC8E\18F8722.h 3 : Syntax error
    (The expression must be corrected. The marker ^------ shows
    the approximate position where CC5X gives up. The documentation
    should be checked if the cause is not obvious)

    Error options: -ew: no warning details -ed: no error details -eL: list details
    BUILD FAILED: Wed Nov 23 11:37:58 2011
    Le problème vient (je crois) de l'outil appelé CC5X ou CC8E (j'ai essayé les deux mais j'ai pas su paramétrer apparemment) puisque impossible de compiler.
    Je n'ai pas bien compris pourquoi il fallait un compilateur comme CC5X alors que microchip nous livre deux DVD avec dessus MPlab et les docs. Pourquoi manque-t-il un élément nécessaire à la communication ?
    C'est cette étape qui coince, à la déclaration du compilateur (page 4 et 5 du tutoriel). J'ai du aller chercher les .exe pour les mettre en correspondance avec MPASM et MPLINK ... très bizarre.

    Aussi, sur la carte, il y a deux PIC, l'un sur la carte l'autre avec des échafaudages, un switch permet de sélectionner l'un ou l'autre, j'ai enlevé celui du dessus pour n'en garder qu'un : c'est un 18F8722 (80 broches).

    Voilà donc je pense qu'il y à tout pour que quelqu'un me débloque ! Merci d'avance. Romain.

    -----

  2. Publicité
  3. #2
    Jack
    Modérateur

    Re : Communication entre PIC18 et PC

    Merci de lire les règles participatives du forum programmation avant de poster.
    Merci.

    En conséquence, je déplace en électronique

  4. #3
    invite03481543

    Re : Communication entre PIC18 et PC

    Bonjour,

    CC5X est un compilateur C.
    MPLAB fournit peut-être maintenant un compilateur lite avec son CD d'install, faut regarder.
    Mais par défaut c'est un IDE sommaire, initialement prévu pour coder en assembleur.
    Donc peu importe il te faut un compilateur C si tu veux bosser en C, puis tu dois obtenir un HEX pour loader ton µC.
    Regarde dans la doc de ton compilo CC5X pour les paramètres de compile.
    @+

    Fais voir ton bout de programme pour que je puisse te dire où elle se trouve ta boulette.
    @+

  5. #4
    ROM42

    Re : Communication entre PIC18 et PC

    En effet je veux bosser en C, c'est pour cela que j'ai téléchargé CC5X (que je n'arrive pas à configurer via MPLAB).

    Le bout de programme est celui-ci, mais c'est pas ça le problème car même avec un bout de prog prit du net j'ai la même erreur :


    void main(void)
    {
    RA0 = 0; // Initialisation des pattes du microcontrôleur
    TRISA = 0b00000000;
    for (;; ) // La suite du programme s'effectue en boucle
    {
    RA0 = 0;
    RA0 = 1;
    }
    }
    Ce n'est pas les bons ports de sortie pour un 18F mais c'est pas grave c'est à moi de regarder dans la doc à quoi ça correspond. Ce que je demande c'est comment réussir ma compilation dans un premier temps.

    ==> Après avoir regardé, CC5X ne fait que de la série 12F à 16F, pour un 18F il faut utiliser CC8E. Je regarde donc dans le dossier CC8E de mon PC : j'y trouve toutes les bibliothèques de 18F, dont le mien.
    C'est un fichier en .H

    Je réessaye alors avec CC8E : voilà le code :


    #include <18f8722.H>

    void main(void)
    {
    RA0 = 0; // Initialisation des pattes du microcontrôleur
    TRISA = 0b00000000;
    for (;; ) // La suite du programme s'effectue en boucle
    {
    RA0 = 0;
    RA0 = 1;
    }
    }
    et le compilateur me répond ceci :

    Clean: Deleting intermediary and output files.
    Clean: Done.
    Executing: "D:\CC8E\CC8E.EXE" test4.c -CC -fINHX32 -p18F8722 -a -L -Q -V -FM
    CC8E Version 1.3D, Copyright (c) B Knudsen Data, Norway 2001-2010
    --> FREE edition, 8-16 bit int, 24 bit float, 128k code words, reduced optim.
    test4.c:

    #ifndef ICD2_DEBUG
    #pragma chip PIC18F8722, core 16, code 65536, ram 0 : 0xF5F
    ^------
    Error[1] D:\CC8E\18f8722.H 3 : Duplicate chip definition
    (Multiple chip definitions detected (option -p<chip> and #include <header.h>).The #include statement should be removed)

    Error options: -ew: no warning details -ed: no error details -eL: list details
    BUILD FAILED: Wed Nov 23 16:25:14 2011
    Il y a dans ce cas un problème de syntaxe que je n'arrive pas à résoudre ... Avec ou sans les "<>", avec ou sans le "#include" .... Apparemment le problème que j'expliquais au début du post à disparu ...
    Dernière modification par ROM42 ; 23/11/2011 à 16h32.

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

    Re : Communication entre PIC18 et PC

    Regarde dans ton compilo mais je doute qu'il soit utile que tu déclares #include <pic18f8722.h>.
    En tout cas s'il dit: duplicate chip definition c'est que ça le gêne visiblement.
    C'est dans ton environnement que tu dois le déclarer, là où tu décalres les fusibles de config et le projet, car actuellement si tu trouves cet enddroit tu y verras sans doute un autre µC déjà déclaré, donc conflit...
    @+

  8. #6
    ROM42

    Re : Communication entre PIC18 et PC

    En effet je n'avais pas déclaré l'environnement en CC8E : dans project > build options > project :

    ==> include search path : D:\CC8E

    je regarde pour les ports et je vous tiens au courant.

  9. Publicité
  10. #7
    RISC

    Re : Communication entre PIC18 et PC

    Salut ROM42,

    Je te conseille de laisser tomber ces vieux compilateurs et d'utiliser la version gratuite du C18 que tu pourras télécharger ici : http://www.microchip.com/compilers.
    Comme cela tu n'auras pas d'erreurs quand tu compileras des projets qui ont été écrits pour le C18.

    Ensuite, tu vas sur la page de ta carte : http://www.microchip.com/stellent/id...cName=en535770 et tu télécharges dans le bas les fichiers sources de l'application qui est livrée avec ta carte.

    Je te recommande de lire et de suivre le users manual qui décrit comment utiliser le projet pour le PIC18F8722 (chapitre 3).

    Une fois que tu as chargé le workspace ( File > Open workspace ) tu ouvres le fichier main et tu tailles dedans jusqu'à ne garder que les lignes d'en tête et tu ajoutes le clignotement des leds ;=)

    a+

    PS :laisse tomber le tuto de Hollard qui date d'il y a presque 10 ans...les choses ont pas mal changé depuis ;=)
    Dernière modification par RISC ; 23/11/2011 à 19h25.
    Ma marotte ? les microcontrôleurs ;=)

  11. #8
    ROM42

    Re : Communication entre PIC18 et PC

    Je vais voir tout ça demain au boulot, merci.
    Je vous tiens au courant.

  12. #9
    ROM42

    Re : Communication entre PIC18 et PC

    C18 est payant n'est-ce pas ? http://www.microchip.com/stellent/id...cName=en010014

    Y'a juste une version d'éval de 60jours ... C'est du vol, ça coûte 200 Euros la carte et en plus faut payer un compilateur sur une autre partie du site web ... Comme si fallait deviner ...

  13. #10
    RicounetZap

    Re : Communication entre PIC18 et PC

    Bonjour.

    C'est une version d'évaluation qui continue à fonctionner après la période de 60 jours, tu perds juste de l'optimisation ce qui n'est pas un problème de mon coté ( développement personnel).

    Cordialement

    PS: Regardes tes MP
    N'importe quoi, for ever :-)

  14. #11
    ROM42

    Re : Communication entre PIC18 et PC

    Ok merci (pour le MP aussi). Je regarde tout ça et je vous dis.

  15. #12
    ROM42

    Re : Communication entre PIC18 et PC

    YES ! La communication est établie !

    avec l'aide de tous, merci. C'est donc avec C18 que ça a fonctionné

    concernant le programme
    J'ai fait un copier coller d'un vieux post ou tu avais aidé (RISC) un certain FRANCKY y'a 2 ans de ça. Le lien est ici : http://www.abcelectronique.com/forum...3&page=1&pp=10

    J'en suis encore au stade d'allumer des leds pour comprendre. Mais je suis étonné des tonnes de "paprasseries" qu'il est nécéssaire d'écrire afin de se faire comprendre ....
    Simplement pour allumer des leds :

    #ifdef __18F87J11
    #include <p18f87j11.h>
    #pragma config FOSC = HSPLL
    #pragma config STVREN = OFF,XINST = OFF,WDTEN = OFF,CP0 = OFF,FCMEN = OFF,IESO = OFF
    #pragma config MODE = MM
    #endif
    #include "LED.h"

    BYTE HuitBits;
    void main(void)
    {
    //----------------- Initialisation des registres utilisés ------------
    ADCON1 = 0x0F;// Mettre le port A en mode numérique
    TRISD = 0x00; // Port D en sortie
    TRISA = 0xF7;
    TRISB = 0x01; // Port B RB0 en entrée RB<7:1> en sortie
    HuitBits._byte = 0x00;
    PORTD = HuitBits._byte; // on met la valeur 0 sur le port D

    while (1)// Dans cet exemple nous pourrions directement ecrire dans le port
    // Par l'instruction LATD = 0X55; puis 0xAA
    {

    while (!S1)// Attente d'un appui sur S1
    {
    HuitBits._byte = 0x45; // On met 0x55 dans la variable
    PORTD = HuitBits._byte;// On affiche le résultat sur les LED
    // 01010101
    }

    while (!S2)// Attente d'un appui sur S2
    {
    HuitBits._byte = 0xAA; // On met 0xAA dans la variable
    PORTD = HuitBits._byte;// On affiche le résultat sur les LED
    // 10101010
    }

    }
    }
    et

    #ifndef __LED_H
    #define __LED_H

    void main(void);
    typedef unsigned char byte; // 8-bit

    typedef union _BYTE
    {
    byte _byte;
    struct
    {
    unsigned b0:1;
    unsigned b1:1;
    unsigned b2:1;
    unsigned b3:1;
    unsigned b4:1;
    unsigned b5:1;
    unsigned b6:1;
    unsigned b7:1;
    };
    } BYTE;

    //------------------------- Inter S1 S2 ---------------

    #define S1 PORTAbits.RA5 // Définition pour S1
    #define S2 PORTBbits.RB0 // Définition pour S2

    #endif

    ça fait beaucoup à comprendre pour pas grand chose ... heureusement que y'a des gens comme vous tous qui aidez les autres ! Parce que on est totalement noyé et abasourdi par autant de docs aussi longues les unes que les autres tantôt en anglais tantôt en français, différents ICD, différents compilos .... différentes versions, différents pics, différents langages de prog ........

    Au passage, S1 et S2 ne marchent pas et mon afficheur LCD m'affiche encore le programme de démo par défault du PIC (voltmeter, temperature et clock) mais les boutons poussoirs ne fonctionnent plus, le lcd est bloqué sur voltmeter.

    J'essaye de regarder ça, mais à l'inverse de francky (cf aide de RISC dans le lien), je suis très très lent à comprendre. lol.

    A+
    Dernière modification par ROM42 ; 24/11/2011 à 10h36.

  16. Publicité
  17. #13
    RISC

    Re : Communication entre PIC18 et PC

    Salut,

    Pourquoi s'ennuyer avec la version d'évaluation du C18 alors que la version gratuite (version Lite) est téléchargeable ici :

    http://www.microchip.com/stellent/id...cName=en536656

    a+
    Ma marotte ? les microcontrôleurs ;=)

  18. #14
    ROM42

    Re : Communication entre PIC18 et PC

    Bonjour à tous,

    J'en reviens à mes moutons.

    Voilà le bout de programme que je compile et que je mets sur mon PIC :



    #ifdef __18F87J11
    #include <p18f87j11.h>


    #define S1 PORTBbits.RB0 // Définition pour S1
    #define S2 PORTAbits.RA5 // Définition pour S2


    #endif



    void main(void)
    {

    //----------------- Initialisation des registres utilisés ------------

    //ADCON1 = 0x0F;// Mettre le port A en mode numérique <=== inutile ? Que je la mette ou pas je ne vois pas de différence
    TRISD = 0x00; // Port D en sortie
    TRISA = 0x20; // Port A 5ème bit en entrée (RA5)
    TRISB = 0x01; // Port B 0ième bit en entrée (RB0)



    //----------------- Boutons poussoirs ------------

    PORTD = 0x03; leds 1 et 2



    {

    while (!S1)// Appui sur S1
    {

    PORTD = 0x55; // On affiche le résultat sur les LED
    // 01010101
    }

    while (!S2)// Appui sur S1
    {

    PORTD = 0xAA; // On affiche le résultat sur les LED
    // 01010101
    }


    }
    }
    Alors une fois le programme lancé, j'ai bien les leds 1 et 2 qui s'allument, lorsque j'appuie sur S1, elles m'affichent bien 0x55 et lorsque je relâche la pression sur S1 les leds 1 et 2 s'allument à nouveau.

    En revanche, ça ne marche pas avec S2. et je ne comprends pas pourquoi. S1 est sur le port B et S2 est sur le port A. Normalement c'est tout configuré ?

    Et par exemple si j'essaye de simplifier le programme pour tester uniquement S2 de telle manière :




    #ifdef __18F87J11
    #include <p18f87j11.h>


    #define S1 PORTBbits.RB0 // Définition pour S1
    #define S2 PORTAbits.RA5 // Définition pour S2


    #endif



    void main(void)
    {

    //----------------- Initialisation des registres utilisés ------------

    //ADCON1 = 0x0F;// Mettre le port A en mode numérique <=== inutile ? Que je la mette ou pas je ne vois pas de différence
    TRISD = 0x00; // Port D en sortie
    TRISA = 0x20; // Port A 5ème bit en entrée (RA5)
    TRISB = 0x01; // Port B 0ième bit en entrée (RB0)



    //----------------- Boutons poussoirs ------------

    PORTD = 0x03; leds 1 et 2





    while (!S2)// Appui sur S1
    {

    PORTD = 0x55; // On affiche le résultat sur les LED
    // 01010101
    }





    }
    Et ben les leds 1 et 2 ne s'allument pas, ce sont les leds 0xAA qui s'allument alors que je n'appuie sur rien du tout. J'ai découvert qu'en enlevant le "!" devant le S2 on voyait les leds 1 et 2 s'allumer mais le bouton poussoir ne change rien ....

  19. #15
    invite03481543

    Re : Communication entre PIC18 et PC

    Bonjour,

    normal, le portA doit être déclaré en numérique nécessairement dans ton cas.
    Il faut déclarer:

    Code:
    ANCON0 = 0xDF;
    ANCON1 = 0xFF;
    Ainsi tout le PORTA sera déclaré en numérique.
    Si tu veux juste déclarer en numérique le port qui t'intéresse à savoir RA5 (qui correspond aussi à AN4) dans ce cas tu as juste à déclarer:
    Code:
    ANCON0 = 0x10;
    Comme ça tu peux te servir des autres entrées pour effectuer des mesures A/D au besoin.
    @+
    Dernière modification par HULK28 ; 21/12/2011 à 09h36.

  20. #16
    invite03481543

    Re : Communication entre PIC18 et PC

    ADCON1 ne sert que pour configurer la conversion A/D.

  21. #17
    ROM42

    Re : Communication entre PIC18 et PC

    Ok je comprends.

    Néanmoins ça ne marche toujours pas :


    //----------------- Initialisation des registres utilisés ------------

    ADCON1 = 0x0F;// Mettre le port A en mode numérique
    ANCON0 = 0xDF;
    ANCON1 = 0xFF;
    TRISD = 0x00; // Port D en sortie
    TRISA = 0x20;
    TRISB = 0x01; // Port B RB0 en entrée

    //----------------- Bouton poussoir ------------

    PORTD = 0x03;


    while (!S2) // Appui sur S2
    {

    PORTD = 0xAA; // On affiche le résultat sur les LED
    // 01010101
    }

    J'ai exactement le même problème (l'histoire du "!" peut-être). Et je tenais à préciser que je programme l'ICE monté sur pilotis (pas le 18F8722) donc la référence de mon pic est : 18F87J11. Et en regardant la doc je crois que vous avez fait la confusion car vous avez dit RA5 = AN4. Or, c'est pour le 18F8722 que cela est valable. Peut-être pour le 18F87J11 ça marche aussi mais sait-on jamais.

  22. #18
    invite03481543

    Re : Communication entre PIC18 et PC

    Non pas de confusion RA5 est toujours AN4 puisque RA4 est une sortie drain ouvert et ne possède pas de port A/D.

    PS: après vérif ce n'est pas une sortie drain ouvert sur ce PIC mais néanmoins ce n'est pas non plus une entrée A/D donc RA5 est bien AN4.
    Dernière modification par HULK28 ; 21/12/2011 à 11h29.

  23. Publicité
  24. #19
    invite03481543

    Re : Communication entre PIC18 et PC

    Il faut regarder la doc, il est possible qu'il faille initialiser un autre registre, c'est souvent le cas avec des PIC ayant des ports multiplexés et c'est le cas ici avec le PORTA.
    La déclaration en C est bonne sinon, l'histoire du while(!S2), donc ça ne vient pas de ça (à condition que tu as bien déclaré S2 évidemment et câblé le BP comme il faut).
    Dernière modification par HULK28 ; 21/12/2011 à 11h14.

  25. #20
    invite03481543

    Re : Communication entre PIC18 et PC

    PMPMX doit être positionné à 0 dans le registre CONFIG3H (bit 2) pour déclarer PORTA5 sur cette patte du µC, donc il faut que tu regardes dans les bits de config de ton environnement de projet (bits fuses) et faire la bonne déclaration.
    @+

  26. #21
    ROM42

    Re : Communication entre PIC18 et PC

    Oui j'ai vu ça hier soir c'est une histoire de multiplexage .... je regarderais ça à la rentrée, je pars en vacances

    merci A+

  27. #22
    ROM42

    Re : Communication entre PIC18 et PC

    Bonjour à tous et bonne année.

    Alors dans la doc j'ai vu que le portA avait besoin d'être configuré par le registre suivant : CONFIG3H: CONFIGURATION REGISTER 3 HIGH (BYTE ADDRESS 300005h)

    Voilà une copie de la doc :



    bit 2 PMPMX: PMP Pin Multiplex bit(1)

    1 = PMP data and control multiplexed to same pins as external memory bus (PORTD and PORTE)
    0 = PMP data and control multiplexed to alternate pin assignments (PORTA, PORTF and PORTH)

    Microcontroller mode (80-pin devices only)

    Alors afin de pouvoir mettre la valeur que je veux dans le registre, il faut le déclarer avant tout mais je ne sais pas faire.

    Pour mettre une valeur dedans je crois qu'il faut tout simplement faire CONFIG3H= 0xFF par exemple.

    Pouvez-vous m'aider merci

  28. #23
    invite03481543

    Re : Communication entre PIC18 et PC

    Bonjour,

    ce n'est pas dans le code qu'il faut positionner ce bit mais dans l'IDE de ton compilateur, relis mon post#20.
    @+

  29. #24
    ROM42

    Re : Communication entre PIC18 et PC

    Dans mon IDE, je vais dans l'onglet configure=> configuration des bits...



    Je clique sur la case : configuration set in code pour pouvoir modifier le tableau :

    Sans titre.jpg


    La je clique sur le choix du bas.

    Ensuite je re coche la case configuration set in code puis je re programme => ça ne change rien (que je recoche la case set in code ou non).

    Sinon je n'ai pas réussi à afficher les fuses dans mon programme.
    Images attachées Images attachées  

  30. Publicité
  31. #25
    invite03481543

    Re : Communication entre PIC18 et PC

    Ben oui c'est normal
    Si tu recoches "set in code" il va reprendre les bits de config du code généré par ton compilo...
    C'est pour ça qu'il faut trouver dans ton IDE du compilateur l'endroit où tu choisis les bits de config puis tu recompiles et là tu retrouveras dans MPLAB cette fois les bits actifs.
    C'est quoi ton compilateur C?
    Dernière modification par HULK28 ; 05/01/2012 à 13h07.

  32. #26
    ROM42

    Re : Communication entre PIC18 et PC

    Je n'y arrive pas ... Au lycée je bossais avec un 16F877A et lorsque je créais mon wizard ça me demandait de choisir mon PIC, et quand j'arrivais sur la page de code il y avait déjà les fuses.

    là j'arrive sur ma page de code elle est vide, et à part la méthode que j'ai montré post#24 je ne vois nul part où modifier les fuses (ce serait le même problème pour activer la RS232 ou activer/désactiver le chien de garde au passage).

    Le compileur c'est C18 toolsuite je crois.

    J'utilise MPLAB 8.6, MPASM assembler, MPLINK object linker, MPLAB C18 C compiler et MPLIB librarian.

Discussions similaires

  1. [PIC18] - Liaison SPI entre 2 PIC
    Par jorg1n dans le forum Électronique
    Réponses: 14
    Dernier message: 05/04/2011, 17h25
  2. communication entre pic
    Par alainav1 dans le forum Électronique
    Réponses: 10
    Dernier message: 23/10/2010, 11h24
  3. Problème de communication XBEE pro/ Microcontrôleur (pic18)
    Par Neptis dans le forum Électronique
    Réponses: 2
    Dernier message: 17/09/2010, 16h37
  4. Communication SPI : PIC18(5V) <-> Flash ext. (3V)
    Par jorg1n dans le forum Électronique
    Réponses: 7
    Dernier message: 10/03/2010, 08h50
  5. Communication PIC18 vers DS2480 (1-wire interface)
    Par ivan1237 dans le forum Électronique
    Réponses: 2
    Dernier message: 27/01/2008, 15h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.