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

Intégration d'un convertisseur A/N MCP3204



  1. #1
    jorg1n

    Intégration d'un convertisseur A/N MCP3204


    ------

    Bonjour à tous,

    je viens vers vous car je souhaite intégrer un convertisseur A/N 12 bits avec 4 entrées, voici la bête MCP3204:

    http://www.datasheetcatalog.com/data.../MCP3204.shtml

    Voilà mes entrées : 3 tensions analogiques 0 - 5V (tensions images d'un courant)

    Et le convertisseur sera en liaison SPI avec mon PICs (PIC18F6722).

    Je souhaite donc avoir quelques conseils pour l'intégrer et ensuite un peu d'aide pour de développement du soft pour gérer la SPI (je pense que ça va être le plus dur!!)...si possible bien sûr .

    Je fais un petit schéma pour vous montrer comment je pense l'intégrer dans ma chaine de mesure, et je vous le transmets...

    Je vous remercie d'avance pour vos conseils...
    Bonne journée à tous

    -----

  2. Publicité
  3. #2
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Voila j'ai fais un petit schéma rapidement,

    pour préciser un peu, j'ai deux 5V différents sur ma carte:
    5V pour la partie analogique: 5VA / masse
    5V pour la partie numérique : 5VD / 0V

    J'ai donc alimenter le MCP3204 avec ces 2 alimentations:

    5VD -> VDD (MCP3204)
    5VA -> Vref (MCP3204)

    Que pensez vous du schéma?

    Et au point de vue soft, je vais regarder la doc technique du circuit, mais si vous avez des conseils a me préconiser... je suis preneur

    Merci d'avance
    Images attachées Images attachées

  4. #3
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Juste une petite question...
    est il nécessaire de rajouter des petits condensateurs de découplage sur les alimentations du MCP3204 VDD et Vref..

    Merci d'avance et j'attends vos critiques sur mon schéma!!!

  5. #4
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Personne n'a de conseils pour utiliser ce type circuit en liaison SPI...
    sur le principe.

    Je regarde de mon coté, et je vous transmets ce que j'ai fais...

    Merci d'avance

  6. A voir en vidéo sur Futura
  7. #5
    Qristoff
    Animateur Électronique

    Re : Intégration d'un convertisseur A/N MCP3204

    Salut,
    Si tu souhaites obtenir une bonne précision de ton ensemble, je te conseille d'utiliser un AD584 pour à la fois la réf 5V du CAN et le 2,5V de la polarisation, sinon tu peux avoir des écarts de gains entre les voies.
    Tout existe, il suffit de le trouver...!

  8. #6
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous,

    Merci Qristoff pour ton conseil, mais j'utilise déjà une référence 5V issu d'un LT1461, et le 2,5V aussi.

    En ce qui concerne mon alimentation Vdd du MCP3204, pouvez vous me dire si je dois la découpler avec un petit 100 nF...

    Et sinon au point de vu soft, j'avance (j'espère dans le bon sens... ) mais pouvez vous me donnez des infos si vous avez...

    Je vous remercie d'avance , bonne journée à tous

  9. Publicité
  10. #7
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour,

    voila ce que j'obtiens au point de vu soft pour gérer le MCP3204:

    Fonction d'initialisation du module MSSP:
    Code:
    void Init_SSP( void )
    {
    	SSP1STAT = 0b00000000; // Master sample data in middle, data xmt on rising edge
    	SSP1CON1 = 0b00110000; // enable Master SPI, bus mode 1,1, FOSC/4
    
    
    //	SSP1STAT = 0b01000000; // Master sample data in middle, data xmt on rising edge
    //	SSP1CON1 = 0b00100000; // enable Master SPI, bus mode 0,0, FOSC/4
    }
    Voila ensuite ma fonction pour acquérir le résultat de la conversion sur la channel 0 (la valeur de SSPBUF change pour CH1,...) et ensuite le transformer sur un entier de 16 bits:
    Code:
    void Read_Adc_Channel_0( void )
    {
    CS = 0; 									// Select MCP3204
    SSPBUF = 0x03; 								// Initialise le bus SPI/ select CH0
    while ( !STAT_BF ); 						// Attente de la fin de la réception
    DataByteHigh = SSPBUF; 						// Transfert la donnée
    
    SSPBUF = 0x83; 								// Initialise le bus SPI/ select CH0
    while ( !STAT_BF ); 						// Attente de la fin de la réception
    CS = 1; 									// DeSelect MCP3204
    DataByteLow  = SSPBUF; 						// Transfert la donnée
    
    ResultAD = (DataByteHigh*256)+DataByteLow;	// Calcul du résultat sur un entier
    ResultAD &= 0x0FFF;							// Récupération des 12 bits
    }
    Et voila le calcul pour récupérer la valeur sur un Float:
    Code:
    Float VanI1;
    
    VanI1 = ((float)ResultAD) * qMCP; 								    // Calcul de la tension présente sur l'entrée du convertisseur 12bits (Float)
    Et pour finir la déclaration de mes variables:
    Code:
    #define qMCP 1.2207e-3	// quantum pour un CAN 12bits 0v-5v
    extern char DataByteLow, DataByteHigh ;
    extern unsigned int ResultAD;
    Je n'ai pas encore testé en réel, je n'ai pas encore le composant, mais pouvez vous me faire part de vos suggestions si il y a...

    Et j'espère que ce petit post servira a d'autre pour mettre en oeuvre un circuit de genre..

    Merci d'avance...

  11. #8
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Mon projet n'intéresse pas beaucoup de monde a ce que je vois...

  12. #9
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous...

    Pas de spécialistes pour ce genre de composant en liaison SPI...

    Bonne journée à tous

  13. #10
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    ... Problème, je viens de tester, et rien!!!
    Mon registre SSPBUF est toujours à 0xFF...

    Auriez vous une petite idée??
    Merci d'avance

  14. #11
    carcan

    Re : Intégration d'un convertisseur A/N MCP3204

    Salut !

    j'utilise des MCP3204 et 3208 avec des PIC et compilateur CCS.
    Si tu veux que je t'envoie des exemples, laisse moi ton mail en mp.

    A+
    Laurent

  15. #12
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Merci Marcan,

    je t'ai envoyé mon mail par MP...
    Je te tiens au courant ensuite

  16. Publicité
  17. #13
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Rien à faire...j'essaye toujours de trouver une solution (en attendant les exemples de Marcan) mais je n'arrive à rien, je n'arrive pas à "gérer" la communication SPI...
    Marcan si tu es par là, ne m'oublie pas ...

    Je retourne à mon MCP3204...

    Bonne journée à tous

  18. #14
    carcan

    Re : Intégration d'un convertisseur A/N MCP3204

    Hello !

    je ne t'oublie pas, mais j'ai la crève et ce genre d'infos est au boulot ...

    J'ai quand même trouvé quelque chose et je viens de t'envoyer un mail, je regarderai lundi si j'ai des exemples plus simples.

    A+
    Laurent

  19. #15
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour Carcan et les autres,

    il est vrai que l'exemple que tu m'as transmis est un peu compliqué, vu qu'il s'agit du driver pour générer les signaux (bits à bits) sur la broche DIN du MCP3208 (semblable au 3204).

    J'ai essayé quand même de suivre la procédure et de réaliser la communication avec la liaison SPI, mais sans succès,...

    Alors je compte sur toi pour que tu arrives a dénicher des bons exemples avec la "liaison SPI"..

    Je te remercie d'avance
    Bonne journée

  20. #16
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour,

    voila, j'ai réussi a faire communiquer mon PIC avec le MCP3204, en utilisant le driver fourni dans la librairie du compilateur C de CCS... je l'ai adapté pour le compilateur C18, voila le résultat :
    Code:
    /***************************************************************
    Nom   :void Init_ADC( void );)
    Role  :
    ****************************************************************/
    void Init_ADC( void )
    {
    	TRISCbits.TRISC3 = 0;   // SCK en sortie
    	TRISCbits.TRISC4 = 1;   // SDI en entrée
    	TRISCbits.TRISC5 = 0;   // SDO en sortie 
    
    	MCP3204_CS = 1; 
    }
    
    
    /***************************************************************
    Nom   : void Read_Adc_Channel_2( void )
    Role  : Lecture de la tension VBAT3 sur 12 bits
    ****************************************************************/
    long Read_Analog_MCP (unsigned char channel, unsigned char mode)
    {
     unsigned char ctrl_bits;
     unsigned long DataByteHigh;
     unsigned int DataByteLow;
    
       if(mode!=0)
          mode=1;
    
    	MCP3204_CLK = 0;
    	MCP3204_DIN = 1;
    	MCP3204_CS = 0;
    
        ctrl_bits=channel;
    
        ctrl_bits=ctrl_bits<<1;
    
        if(mode==1)                  // In single mode
           ctrl_bits |= 1;
       else                          // In differential mode
          ctrl_bits &= 0xfe;
    
       ctrl_bits=ctrl_bits<<1;       // Shift so LSB is start bit
       ctrl_bits |= 1;
    
       write_adc_byte( ctrl_bits, 7);// Send the control bits
    
       DataByteHigh=read_adc_byte(4);
       DataByteLow=read_adc_byte(8);
    
       MCP3204_CS = 1;
    
    
    return((DataByteHigh<<8)|DataByteLow);
    
    }
    
    void write_adc_byte(unsigned char data_byte, unsigned char number_of_bits) 
    {
       unsigned char i;
    
       DELAY_10US(1);
       for(i=0; i<number_of_bits; ++i) 
    		{
            MCP3204_CLK = 0;
            if((data_byte & 1)==0)
               MCP3204_DIN = 0;
            else
               MCP3204_DIN = 1;
            data_byte=data_byte>>1;
            DELAY_10US(5);
            MCP3204_CLK = 1;
            DELAY_10US(5);
       }
    }
    
    
    unsigned char read_adc_byte(unsigned char number_of_bits) 
    {
       unsigned char i,data;
    
       data=0;
       for(i=0;i<number_of_bits;++i) 
    	{
          MCP3204_CLK = 0;
          DELAY_10US(5);
          shift_left(&data,1,MCP3204_DOUT);
          MCP3204_CLK = 1;
          DELAY_10US(5);
       }
       return(data);
    }
    
    
    void shift_left( unsigned char *dest, unsigned char nb, unsigned char data )
    {
      if( data )
      {
        while(nb)
        {
          *dest <<= 1;
          *dest |= 1;
          nb--;
        }
      }
      else
      {
        *dest <<= nb;
      }
    }
    
    void convert_to_volts( long int data, char volts[6]) {
       unsigned char i, d, div_h, div_l;
       long int temp,div;
       
       div=4095/5;
    
       if(data>=4090)
          data=4095;
    
       for(i=0;i<=4;i++) {
         temp=data/div;
       
         volts[i]=(unsigned char)temp+'0';
    
         if(i==0) {
           volts[1]='.';
           i++;
         }
         temp=div*(unsigned char)temp;
         data=data-temp;
         div=div/10;
       }
       volts[i]='\0';
    }
    [Je sais, c'est long, mais je préfère tout mettre au cas où quelqu'un souhaiterai faire quelque chose de similaire...]

    Par contre, la valeur mesurée n'est pas stable du tout...
    Lorsque sur l'entrée CH0, j'ai 3,976 V (au multimètre), j'ai une valeur affichée qui varie entre 3,963 et 4,011... comment faire pour que cela soit plus stable?
    - Utiliser une "vraie" liaison SPI (module MSSP du PIC) et non pas un driver de génération de signaux comme je l'ai fais?
    -Modifier le Hard?

    Pour informations, pour le MCP3204, j'ai juste un C de 100nF pour le découplage de l'alimentation (Vdd), et de plus, les connexions entre le PIC et le MCP3204 sont faites par des fils de 10 cm de longueur environ soudés directement sur les broches de mon PIC (boitier TQFP....je ne vous raconte pas le temps que j'y ai passé...)


    Je vous remercie d'avance

    PS: Marcan, je suis toujours preneur pour ton exemple avec le module SPI du PIC...et encore merci pour ta précieuse aide...

  21. #17
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous...

    je suis toujours avec mon problème de variations...pourriez vous me dire comment régler cela... d'où le problème peut il venir??

    Merci d'avance

    Bonne journée à tous

  22. #18
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous,

    bon j'ai presque trouvé le problèmes, j'ai branché en parallèle sur l'entrée de mesure un condensateur 1µF chim. et là beaucoup moins de variations, alors je suppose que je dois ajouter un peu de filtrage...

    Quelle cellule RC mettre donc, 4K7 et 100nF... ou plus??

    Merci d'avance et bonne après midi a tous

  23. Publicité
  24. #19
    carcan

    Re : Intégration d'un convertisseur A/N MCP3204

    Salut !

    je n'ai pas encore retrouvé mon applicationqui utilisait le SPI hardware, mais je m'étais basé d'un exemple fourni avec le compilateur CCS pour faire mon programme.

    Pour le MCP3208 (ou 04), mets un tantale de 1µF entre la masse analogique et l'entrée Vref, le plus près possible du composant.

    A+
    Laurent

  25. #20
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Salut Carcan,

    la solution du driver me convient, et en ce qui concerne le découplage de Vref, j'avais mis un condensateur de 10nF..dois je le remplacer par le 1µF?

    Et que me conseille tu pour le filtrage de ma mesure en entrée du MCP3204??

    Merci encore Carcan

  26. #21
    carcan

    Re : Intégration d'un convertisseur A/N MCP3204

    Hello !

    ton condo de découplage tantale, tu peux le souder en // avec ton 10nF déja présent. Pour le filtrage des signaux d'entrée, un simple circuit RC suffit en général, mais pour le déterminer, tu dois regarder à l'oscillo "le look" de ton signal (pour voir à quelle fréquence il est perturbé).

    A+
    Laurent

  27. #22
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Je te remercie pour les informations...

    Bonne fin de journée à toi..

  28. #23
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour,

    je souhaiterai faire une petite évolution de mon système, et je me pose quelques questions.... du moins, une:

    Peux ton avoir un MCP3204, et avoir 2 PICs qui viennent récupérer les infos sur le MCP?

    Si oui, ça veut dire que au point de vu hard, j'ai les broches SDO/ SDI / SCK du PIC1 qui sont relié a celle du PIC2, et SDO est relié à DIN, SDI à DOUT, et SCK à CLK du MCP, par contre, en ce qui concerne la broche /CS du MCP?? A l'heure actuelle, elle est relié a SS de mon PIC1, mais là comment faire??

    Merci d'avance....

    PS: en fait ça fait 2 questions...

  29. #24
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous,

    j'ai réfléchis sur le problème, mais j'ai l'impression que 2 maitres ne peuvent pas interroger un seul et même esclave...

    Voila ce que je souhaite faire au final (voir image )...

    J'ai 2 microcontrolleurs, qui doivent récupérer les informations sur le convertisseur A/D...

    Comment faire??

    Merci d'avance
    Images attachées Images attachées

  30. Publicité
  31. #25
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Je peux peut etre me brancher directement en // sur le bus SPI:
    DIN(mcp) / SDO (µc1) / SDO (µc2)
    DOUT(mcp) / SDI (µc1) / SDI (µc2)
    CLK(mcp) / SCK (µc1) / SCK (µc2)
    /CS(mcp) / SS(µc1) / SS (µc2)

    et avoir deux fils (a et b) entre le µC1 et le µC2 afin de dire à l'autre si il utilise ou non le MCP:
    -le µC1 met "a" a 1 -> le µC1 utilise le MCP, le µC2 ne fait rien
    -le µC1 a finit avec le MCP, il met "a" a 0.
    -le µC2 met "b" a 1 -> le µC2 utilise le MCP, le µC1 ne fait rien
    -le µC2 a finit avec le MCP, il met "b" a 0.
    et ainsi de suite...

    Par contre au niveau du cablage, il n'y a pas de risque si par exemple le SS (µC1) et le SS(µC2) soit relié ensemble, 2 sorties reliées entre elles???

    Merci d'avance pour votre aide...

  32. #26
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Personne n'a une petite idée sur le sujet...

    Merci d'avance

  33. #27
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour à tous...

    personne ne souhaite m'aider... ( )

    Merci d'avance

  34. #28
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Bonjour,

    je reviens vers vous pour le même problème :
    je souhaiterai faire une petite évolution de mon système, et je me pose quelques questions.... du moins, une:

    Peux ton avoir un MCP3204, et avoir 2 PICs qui viennent récupérer les infos sur le MCP?

    Si oui, ça veut dire que au point de vu hard, j'ai les broches SDO/ SDI / SCK du PIC1 qui sont relié a celle du PIC2, et SDO est relié à DIN, SDI à DOUT, et SCK à CLK du MCP, par contre, en ce qui concerne la broche /CS du MCP?? A l'heure actuelle, elle est relié a SS de mon PIC1, mais là comment faire??

    Merci d'avance....
    Merci encore

  35. #29
    DAUDET78

    Re : Intégration d'un convertisseur A/N MCP3204

    Citation Envoyé par jorg1n Voir le message
    J'ai 2 microcontrolleurs, qui doivent récupérer les informations sur le convertisseur A/D...
    Tu auras des conflits hard ingérables entre ton convertisseur et tes deux PICs.

    Branche ton convertisseur sur un seul PIC et fait l'échange de mesure entre tes deux PICs par une liaison série (asynchrone, I²C , SPI ...)
    J'aime pas le Grec

  36. #30
    jorg1n

    Re : Intégration d'un convertisseur A/N MCP3204

    Merci DAUDET,

    Je vais donc partir alors sur cette solution, le µC1 (maitre) récupère les infos du convertisseur, et le µC2 vient récupérer les infos en liaison SPI sur le µ1...

    Je vous tiens au courant de l'avancement..

    Merci encore

Discussions similaires

  1. Integration VHDL d'un µP
    Par mohogues dans le forum Électronique
    Réponses: 0
    Dernier message: 15/01/2009, 16h22
  2. Intégration d'un qutient avec ln...
    Par nokthib dans le forum Mathématiques du collège et du lycée
    Réponses: 9
    Dernier message: 28/06/2008, 22h47
  3. choix d'un convertisseur
    Par alcasot dans le forum Électronique
    Réponses: 1
    Dernier message: 07/08/2007, 19h04
  4. Intégration d'un DUT en ENSC
    Par Kjeldahl dans le forum Orientation après le BAC
    Réponses: 1
    Dernier message: 06/07/2006, 18h44
  5. Réponses: 2
    Dernier message: 17/08/2005, 10h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.