Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Module ADC et buffer du dsPIC33EP
Simlock
Membre
Membre
Messages : 21
Enregistré en : mai 2016
Localisation : Sur mon siege

#1 Message par Simlock » mer. 18 mai 2016 09:50

Bonjour,

J'ai du mal à comprendre le fonctionnement du module ADC surtout la manière de récupérer les résultats dans le ADCxBUFn. J'ai environ 15 broches analogique à lire.

Dans la doc, parfois le ADC1BUF0 sert pour récupérer le résultat de conversion de AN5 ou parfois AN8 et le problème est le même sur les autres broches. Je pense bien qu'il y a des registre à initialiser mais je comprend pas trop.

Est ce que quelqu'un peut m'expliquer s'il vous plait ?

Merci pour votre aide.

EDIT : Désolé j'ai été un peu bête. j'utilise le dsPIC33EP512MU814

Module ADC et buffer du dsPIC33EP
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#2 Message par sylvain54 » jeu. 19 mai 2016 09:48

Salut,

C'est gros comme Pic pour débuter :wink:
Autrement, tu utilises quelle compilateur ? Peux tu mettre le bout de ton code (initialisation comprise) ?

A ++

Module ADC et buffer du dsPIC33EP
Simlock
Membre
Membre
Messages : 21
Enregistré en : mai 2016
Localisation : Sur mon siege

#3 Message par Simlock » jeu. 19 mai 2016 10:12

Je ne débute pas, j'ai déjà utilisé d'autre PIC mais je ne suis pas expert non plus :-D Par contre c'est la première fois que j'utilise un dsPIC mais il m'est imposé pour mettre du code généré par SIMULINK.

Voilà mon code pour init l'ADC :

Code : Tout sélectionner

void Init_ADC ()
{
    //AD1 CLEAR
    AD1CON1 = 0x0000;       // Clock / Mode / Main
    AD1CON2 = 0x0000;       // Channel / Interrupt Config
    AD1CON3 = 0x0000;       // Clock Things
    AD1CON4 = 0x0000;       // DMA Stuff
    AD1CHS0 = 0x0000;       // Channel 0 Setup
    AD1CSSL = 0x0000;       // Channel Scan Selections (Scan AN1, Front Pot and AN15, Rear Pot)
      
    AD1CON1bits
.SAMP = 1;   // ADC Sample/Hold amplifiers are sampling
    AD1CON1bits.ADSIDL = 1; // Disontinue module operation when device enters Idle mode
    AD1CON1bits.ASAM = 1;   // Sampling begins immediately after last conversion. SAMP bit is auto-set.
    AD1CON1bits.SIMSAM = 1; // Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS<1:0> = 1x);
    AD1CON1bits.SSRCG = 0;            
    AD1CON1bits
.SSRC = 7;   // Internal Counter ends sampling and starts conversion
    AD1CON2bits.CSCNA = 1;  // Scan INputs for CH0+ during sample A bit 

    AD1CON2bits.CHPS = 2;   // Converts CH0, CH1, CH2 and CH3 */


    AD1CON3bits.ADRC = 1;   // ADC Internal RC clock */
    AD1CON3bits.SAMC = 1;   // 15TAD For Sampling

    AD1CSSLbits.CSS0 = 0;   // Enable AN0 for channel scan
    AD1CSSLbits.CSS1 = 1;   // Enable AN1 for channel scan
  
    AD1CON1bits
.ADON = 1;  // Turn on
    AD1CON1bits.SAMP = 1;  // Start Sampling
 }


Je vais faire juste avec AN0 et AN1 pour le moment pour comprendre...
J'utilise sur MPLAB XC16 1.26.

Module ADC et buffer du dsPIC33EP
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#4 Message par Guest » ven. 20 mai 2016 07:10

Bonjour

Désole de vous répondre si tard pas très dispos en ce moment.

Les CAN (définition bien de chez nous :wink: ) sont assez complexes sur ce type de µC, plutôt qu'un long discours ici http://ww1.microchip.com/downloads/en/D ... 70046E.pdf
Avec des exemples chapitre 17

A+

Module ADC et buffer du dsPIC33EP
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#5 Message par sylvain54 » ven. 20 mai 2016 10:28

Ça va être dur de t'aider car je n'ai pas ce type de PIC en stock.

Vas tu voir l'état du bit DONE qui signale que la conversion est finie ?

Register 17-1: ADCON1: A/D Control Register 1 (Continued)
bit 1 SAMP: A/D Sample Enable bit
1 = At least one A/D sample/hold amplifier is sampling
0 = A/D sample/hold amplifiers are holding
When ASAM = 0, writing ‘1’ to this bit will start sampling
When SSRC = 000, writing ‘0’ to this bit will end sampling and start conversion

bit 0 DONE: A/D Conversion Status bit (Rev. B silicon or later)
1 = A/D conversion is done
0 = A/D conversion is NOT done

Cleared by software or start of a new conversion
Clearing this bit will not effect any operation in progress




Potasse le doc que Mai a mis à ta disposition et commence par la lecture d'un seul port analogique. Es tu sur que ton Pic démarre ? je mets toujours une petite led qui clignote au démarrage du Pic pour être sur de mon coup.

Bon courage.

A ++

Module ADC et buffer du dsPIC33EP
Simlock
Membre
Membre
Messages : 21
Enregistré en : mai 2016
Localisation : Sur mon siege

#6 Message par Simlock » ven. 20 mai 2016 12:00

Oui mais il n'est pas vraiment là mon problème.

Code : Tout sélectionner

void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
{
  IFS0bits.T1IF    = 0;
  
    if 
(AD1CON1bits.DONE)
    {
        AD1CON1bits.DONE = 0;

        if(ADC1BUF1 > 512)
            LED1 = 1;
        else
            LED1 
= 0;

        AD2CON1bits.SAMP = 1;  // Start sampling again
        
    
}
}


Enfaîte je n'arrive pas à comprendre dans quel buffer va être enregistré ma conversion. Ici, je ne test qu'un seul buffer car j'utilise qu'un seul port analogique sur mon proto mais sur ma futur carte j'en ai 15 à utiliser.

J'aimerais comprendre comment fonctionne l'ordre de conversion du CAN. Je pourrais très bien les tester un à un jusqu'à savoir que tel buffer c'est telle entrée analogique mais bon...

J'avais trouvé la doc du CAN du dsPIC33Ep mais il montre un code et la conversion se passe comme sur l'image par exemple. Regardez la page 40 de cette doc : http://ww1.microchip.com/downloads/en/D ... 70621c.pdf et c'est ça que je n'arrive pas à m'expliquer.

Je veux faire au plus simple. Le channel 0 pour avoir toute mes conversions en 12 bits.
AN0 --> ADC1BUF0
AN1 --> ADC1BUF0
...
AN15 --> ADC1BUFF

Mais c'est surtout que je veux le comprendre. Je crois que il y a un lien avec MUXA et MUXB.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Module ADC et buffer du dsPIC33EP
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#7 Message par sylvain54 » ven. 20 mai 2016 12:15

Simlock a écrit :
Je veux faire au plus simple. Le channel 0 pour avoir toute mes conversions en 12 bits.
AN0 --> ADC1BUF0
AN1 --> ADC1BUF0
...
AN15 --> ADC1BUFF

.


Je ne suis pas d'accord avec ce que tu dis par rapport au schéma que tu joins
AN0 => ADC1BUF1
AN1 => ADC1BUF2
AN2 => ADCBUF3
.... Jusquà AN5 => ADC1BUF7
Attention!! AN8 => ADC1BUF0

Module ADC et buffer du dsPIC33EP
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#8 Message par Guest » ven. 20 mai 2016 13:13

Bon je vois que tu as trouvé la doc pour ton µC ,c'est mieux que ma doc pour un 30F :wink:
A+

Module ADC et buffer du dsPIC33EP
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#9 Message par Guest » ven. 20 mai 2016 17:59

voila un exemple sur 24F avec les MUXA et MUXB et timer3 si cela peut inspirer
10-bit ADC with simultaneous sampling.c

regarde les exemples dans ton DOC :wink:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Module ADC et buffer du dsPIC33EP
Simlock
Membre
Membre
Messages : 21
Enregistré en : mai 2016
Localisation : Sur mon siege

#10 Message par Simlock » lun. 23 mai 2016 16:21

Je sais sylvain54... j'ai bien vu mais j'ai dit que c'est ce que je voulais faire... j'ai donné la doc et la page donc si tu descends plus bas tu tombes sur cette image
2016-05-23_16-13-41.png

Et on voit que ADC1BUF2 maintenant est pour AN9 et il y d'autres endroit dans la doc où ADC1BUF0 est pour AN2.

Je veux comprendre quels registres me permettent de changer l'ordre de conversion pour faire :
AN0 --> ADC1BUF0
AN1 --> ADC1BUF0
...
AN15 --> ADC1BUFF

Merci mai pour l'exemple, je vais regarder ça
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : kakal62 et 8 invités