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

Problème CAN PIC18F45K22



  1. #1
    denver60

    Problème CAN PIC18F45K22


    ------

    Bonjour à tous !

    J'ai commencé hier la programmation de mon PIC18F45K22 afin de réaliser mon projet de fin d'étude. Pour se faire, j'utilise : un PICKIT3 avec la demoboard PICDEM2+ v2010.

    Pour mes premiers pas dans la programmation de mon projet, j'ai voulu programmer mes entrées analogiques. En effet, je dois faire l'acquisition 4 données Analogiques. Pour le moment je me suis limiter à faire la lecture de la "tension de sortie" du potentiomètre de la carte PICDEM2+ relié à AN0. Et c'est là que cela coince, car le résultat de ma conversion n'évolue jamais ! Voici le programme que j'ai créé :

    #include <p18f45k22.h>
    #include "adc.h" //Bibliothèque de fonctions pour le CAN 10bits

    #pragma config WDTEN = OFF // Watch Dog Timer disabled
    #pragma config FOSC = INTIO67 // Internal Oscillator Block, RA6 & RA7 enabled
    #pragma config DEBUG = ON // Background Debug enabled
    #pragma config LVP = OFF // Low Voltage Programming disabled
    #pragma config MCLRE = INTMCLR // RE3 enabled, MCLR disabled

    unsigned int ADC_Result = 0 ; //Variable où se trouvera le résultat de la lecture du CAN

    /* Déclarations des arguments de configuration du CAN */
    unsigned char config = 0x00, config2 = 0x00, config3 = 0x00 ;

    void main()
    {
    /* Initialisation des registres */
    OSCCON = 0x62 ;
    PORTA = 0x00 ;
    PORTB = 0x00 ;
    TRISA = 0x01 ;
    TRISB = 0x00 ;
    ANSELA = 0b00000001 ;


    CloseADC();

    /* Configuration du CAN */
    config = ADC_FOSC_2 | ADC_RIGHT_JUST | ADC_2_TAD ;
    config2 = ADC_CH0 | ADC_INT_OFF;
    config3 = ADC_REF_VDD_VDD | ADC_REF_VDD_VSS ;
    OpenADC(config, config2, config3) ;

    while(1)
    {
    ConvertADC() ;
    while(BusyADC()) ;
    ADC_Result = (unsigned int) ReadADC() ;
    CloseADC() ;
    }
    }

    Voici le résultat :

    prog_µc.jpg

    Je pense avoir suivi les démarches décrites dans le Datasheet du micro, mais il ne veut rien savoir. Et ce que je trouve d'autant plus étonnant c'est qu'avec mon multimètre je mesure en permanence une valeur de quasi 5V sur AN0...

    Par avance, merci de votre précieuse aide.

    -----

  2. Publicité
  3. #2
    denver60

    Re : Problème CAN PIC18F45K22

    Bon j'ai fait de nouveaux essaie hier et je suis particulièrement inquiet pour tout vous dire.

    Le point positif est que j'ai réussi à faire fonctionner mon CAN, en préconfigurant moi-même tous les registres et sans utiliser la moindre fonction fourni par la librairie adc.h . Mais alors à quoi sert-elle ??

    Voici mon nouveau code :

    #include <p18f45k22.h>
    #include "adc.h" //Bibliothèque de fonctions pour le CAN 10bits

    #pragma config WDTEN = OFF // Watch Dog Timer disabled
    #pragma config FOSC = INTIO67 // Internal Oscillator Block, RA6 & RA7 enabled
    #pragma config DEBUG = ON // Background Debug enabled
    #pragma config LVP = OFF // Low Voltage Programming disabled
    #pragma config MCLRE = INTMCLR // RE3 enabled, MCLR disabled

    unsigned char ADC_ResultL = 0, ADC_ResultH = 0 ; //Variable où se trouvera le résultat de la lecture du CAN

    void main()
    {
    /* Initialisation des registres */
    OSCCON = 0x62 ;
    PORTA = 0x00 ;
    PORTB = 0x00 ;
    TRISA = 0x01 ;
    TRISB = 0x00 ;
    ANSELA = 0x2F ;
    ADCON0 = 0b00000000 ;
    ADCON1 = 0b00000000 ;
    ADCON2 = 0b10001000 ;

    while(1)
    {
    ADCON0bits.ADON = 1 ;
    ADCON0 = 0X03;
    while(ADCON0bits.NOT_DONE) ;
    ADC_ResultL = ADRESL ;
    ADC_ResultH = ADRESH ;
    ADCON0bits.ADON = 0 ;
    }
    }

    Franchement je ne comprends pas vraiment pourquoi le programme avec les fonctions de la librairies adc.h ne fonctionne pas. Je me suis pourtant appuyé sur un exemple fourni par Microchip.

    Aussi quelque pourrait me dire à quoi sert l'instruction suivante : #define USE_OR_MASKS ??

    Par avance merci de vos réponses !

  4. #3
    RISC

    Re : Problème CAN PIC18F45K22

    Salut,

    Sur quel exemple t'es-tu basé pour écrire ton code ?
    J'ai utilisé les librairies du C18 de multiples fois sans problème jusqu'à présent. Il faut faire attention à certains paramètres pour le convertisseur :
    a/ ne pas excéder la fréquence d'échantillonnage
    b/ laisser suffisamment de temps pour faire l'acquisition dans le sample & hold

    Pour ce qui concerne #define USE_OR_MASKS, dans ton cas il faut mettre cette ligne...car tu utilises des "|" entre tes masques
    Ce define permet, suivnat le style que tu préferres, d'utiliser les masques avec des | ou les masques avec des &

    Vérifies la valeur des registres ADCONx en mode DEBUG avec ton exemple utilisant la librairie et l'autre n'utilisant pas la librairie.
    Tu trouveras certainement l'erreur ou la valuer qui n'est pas configurée correctement.

    Télécharges le code de ta carte PICDEM2PLUS (nouvelle version noire) : http://www.microchip.com/picdem2plus
    . Tu trouveras un fichier ou une fonction (voltmeter...) qui montre comment initialiser l'ADC. Cependant cet exemple n'utilise pas les librairies.

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

  5. #4
    denver60

    Re : Problème CAN PIC18F45K22

    Pour écrire le code utilisant les librairies, je me suis appuyé sur un exemple de l'utilisation de l'ADC qui se trouve là : C:\Program Files\Microchip\mplabc18\v3.40 \doc\PIC18F Peripheral Library Help Document.chm

    Dans ce fichier, j'ai trouvé les différentes librairies disponibles pour utiliser les périphériques internes à mon PIC18F45K22.

    Concernant les registres ADCONx, j'avais vérifié leurs valeurs et c'était complètement délirant. Rien à voir avec les configurations que je leurs envoyais en argument grâce à la fonction OPENADC().

    J'ai regardé l'exemple du voltmètre et c'est grosso modo la même chose que mon code sans les fonctions d'adc.h .

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :
  8. #5
    paulfjujo

    Re : Problème CAN PIC18F45K22

    bonjour,

    J'ai eu aussi des problemes avec OpenAdc avec un 18F46K22..
    la doc de la bibliotheque date un peu et je pense qu'il manque des infos, par rapport aux nouveaux controllers
    ayant beaucoup plus de possibilites.
    donc, je ne l'utilise plus et je fais comme toi, une init directe des registres ..
    puis j'utilise ensuite les fonctions ConvertADc() et ReadADC() .. et cela va bien..

    Code:
    //init pour lecture ADC 10 bits
     ADCON0bits.ADON=1;   // ch0 selected , ADC enabled
     ADCON1bits.TRIGSEL=0 ; // trigger from CCP5
     ADCON2bits.ADFM=1;     // right justified
     ADCON2bits.ACQT2=1;
     ADCON2bits.ACQT1=1;
     ADCON2bits.ACQT0=0;    // 16 TAD
     ADCON2bits.ADCS2=0;
     ADCON2bits.ADCS1=1;
     ADCON2bits.ADCS0=0;    // Fosc/32
     ADCON1bits.PVCFG1=0;   // +Vref = +5V AVdd
     ADCON1bits.PVCFG0=0;
     ADCON1bits.NVCFG1=0;   // -Vref = Gnd AVss
     ADCON1bits.NVCFG0=0;
     for (j=0;j<3;j++)              / lecture de 4 voies
     {
       ADCON0=1+ (j<<2);
      Delay10TCYx( 10 ); // Delay for 100TCY
      ConvertADC(); // Start conversion
      while( BusyADC() );
      M = ReadADC(); // Read result
      itoa(M,txt);
      Put_RS('M');
      Put_RS(j+48);
      Put_RS('=');
      k=PutStr_RS(txt);
      Put_RS(TAB);
      Led_Rouge=!Led_Rouge;
      Tempo(5000L);
      }
      CRLF();
      CloseADC(); // Disable A/D converter


    par contre dans le code de ton post #1, il y a un CloseADC() dans la boucle while
    alors qu' il devrait etre à l'exterieur .

    Code:
    while(1)
    {
    ConvertADC() ;
    while(BusyADC()) ;
    ADC_Result = (unsigned int) ReadADC() ;
    CloseADC() ; 
    }

Discussions similaires

  1. Etude de fonctions et problème (qui me pose problème ahah)
    Par matosdu06 dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 12/10/2011, 18h54
  2. Problème adware.agent.NGZ et problème d'ouverture de mes pages IE
    Par Stitch69 dans le forum Sécurité et malwares : désinfectez votre machine
    Réponses: 8
    Dernier message: 03/08/2011, 20h03
  3. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  4. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par mat_the_bad_boy dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53
Découvrez nos comparatifs produits sur l'informatique et les technologies.