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 ---
- 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 ---
Modérateur : Jérémy
Module ADC et buffer du dsPIC33EP
Re !
Je reviens car je me penche dessus en ce moment.
Je me sert de la doc que j'ai donné plus haut page 47. Un exemple de code où 4 entrées analogique sont converties sur CH0 (ce qu'il me faut).
J'ai modifier le code pour utiliser seulement AN0, AN1, AN2, AN3 :
Et la ou je récupère la conversion :
Mais la LED2 et la LED3 ne bougent toujours pas. La LED1 change bien d'état en fonction de mon potar. Il y a seulement une conversion sur ADC1BUF0 mais pas le reste.
Je ne comprend toujours pas donc arriverez vous avec ce code à me guider un peu mieux...
Je reviens car je me penche dessus en ce moment.
Je me sert de la doc que j'ai donné plus haut page 47. Un exemple de code où 4 entrées analogique sont converties sur CH0 (ce qu'il me faut).
J'ai modifier le code pour utiliser seulement AN0, AN1, AN2, AN3 :
Code : Tout sélectionner
void Init_ADC ()
{
/* Set port configuration */
ANSELBbits.ANSB0 = 1; // Ensure AN0/RB0 is analog
ANSELBbits.ANSB1 = 1; // Ensure AN1/RB1 is analog
ANSELBbits.ANSB2 = 1; // Ensure AN2/RB2 is analog
ANSELBbits.ANSB3 = 1; // Ensure AN3/RB3 is analog
ANSELBbits.ANSB4 = 1; // Ensure AN3/RB4 is analog
ANSELBbits.ANSB5 = 1; // Ensure AN3/RB5 is analog
//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.AD12B = 1; // 12 bit
AD1CON1bits.ASAM = 1; // Sampling begins immediately after last conversion. SAMP bit is auto-set.
AD1CON1bits.SSRC = 7;
AD1CON2bits.CSCNA = 1; // Scan INputs for CH0+ during sample A bit
AD1CON2bits.SMPI = 3;
AD1CON3bits.ADCS = 0x0F;
AD1CON3bits.SAMC = 0xF;
AD1CSSL = 0x007F; // Select AN0, AN1, AN2 and AN3 for scanning
AD1CHS0bits.CH0SA = 0; // Select AN0 for CH0 +ve input
AD1CHS0bits.CH0NA = 0; // Select Vref- for CH0 -ve input
AD1CON1bits.ADON = 1; // Turn on
}
Et la ou je récupère la conversion :
Code : Tout sélectionner
while (!_AD1IF);
_AD1IF = 0;
if (ADC1BUF0 > 512)
LED1 = 1;
else LED1 = 0;
if (ADC1BUF1 > 512)
LED2 = 1;
else LED2 = 0;
if (ADC1BUF2 > 512)
LED3 = 1;
else LED3 = 0;
Mais la LED2 et la LED3 ne bougent toujours pas. La LED1 change bien d'état en fonction de mon potar. Il y a seulement une conversion sur ADC1BUF0 mais pas le reste.
Je ne comprend toujours pas donc arriverez vous avec ce code à me guider un peu mieux...
Module ADC et buffer du dsPIC33EP
bonjour
Pourquoi scanner an0......an6 ->7F
si tu veux an0:an3
AD1CSSH = 0x0000;
AD1CSSL = 0x000F; // Select AN0, AN1, AN2,AN3 pour scanner
Tu as bien mis 4 potentiomètres 1 sur chaque entrée? Car la tournure de ta phrase nous fait penser le contraire, je peux me tromper
il faudrait voir ,d'optimiser tout cela en passant comme dans l'exemple,directement par les registres plutôt que par leurs bits du registre
par exemple :
ANSB=0x0F;
Fait un test ainsi et repost le code ,c'est plus facile de lire les registres
sinon je ne vois rien de particulier
A+
PS
Pourquoi scanner an0......an6 ->7F
si tu veux an0:an3
AD1CSSH = 0x0000;
AD1CSSL = 0x000F; // Select AN0, AN1, AN2,AN3 pour scanner
Tu as bien mis 4 potentiomètres 1 sur chaque entrée? Car la tournure de ta phrase nous fait penser le contraire, je peux me tromper
il faudrait voir ,d'optimiser tout cela en passant comme dans l'exemple,directement par les registres plutôt que par leurs bits du registre
par exemple :
ANSB=0x0F;
Fait un test ainsi et repost le code ,c'est plus facile de lire les registres
sinon je ne vois rien de particulier
A+
PS
Module ADC et buffer du dsPIC33EP
Que je scanne de AN0 à AN3 ou AN6, je ne pense pas que ça change grand chose. J'ai testé ADC1BUF4 à 6 et aucun résultat non plus. J'ai bien un potar sur chaque entrées.
Les bits de registre c'est parce que je pensais qu'il serait plus facile de voir qu'est ce que j'ai configuré à la lecture. Vu que ça ne fonctionne pas et que c'est des tests...
Les bits de registre c'est parce que je pensais qu'il serait plus facile de voir qu'est ce que j'ai configuré à la lecture. Vu que ça ne fonctionne pas et que c'est des tests...
Code : Tout sélectionner
void Init_ADC ()
{
// /* Set port configuration */
ANSELBbits.ANSB0 = 1; // Ensure AN0/RB0 is analog
ANSELBbits.ANSB1 = 1; // Ensure AN1/RB1 is analog
ANSELBbits.ANSB2 = 1; // Ensure AN2/RB2 is analog
ANSELBbits.ANSB3 = 1; // Ensure AN3/RB3 is analog
ANSELBbits.ANSB4 = 1; // Ensure AN3/RB4 is analog
ANSELBbits.ANSB5 = 1; // Ensure AN3/RB5 is analog
AD1CON1 = 0x04E4; // Enable 12-bit mode, auto-sample and auto-conversion
AD1CON2 = 0x040C; // Sample 4 channels alternately using channel scanning
AD1CON3 = 0x0F0F; // Sample for 15*TAD before converting
AD1CON4 = 0x0000;
AD1CSSH = 0x0000;
AD1CSSL = 0x000F; // Select AN0, AN1, AN2 and AN3 for scanning
AD1CHS0bits.CH0SA = 0; // Select AN5 for CH0 +ve input
AD1CHS0bits.CH0NA = 0; // Select Vref- for CH0 -ve input
AD1CON1bits.ADON = 1; // Turn on
}
Module ADC et buffer du dsPIC33EP
Module ADC et buffer du dsPIC33EP
Je commence à avoir un résultat. Je m'en excuse mais c'est le module UART qui perturbait ce que je faisais. le mappage UART pointait sur les même broches que les LED sur le prototype microchip que j'utilise.
Ducoup avec AD1CON2 = 0x040C : le résultat AN1 et AN2 est récupéré dans ADC1BUF1 car ma led réagissait avec les deux potar...
Avec AD1CON2 = 0x404 : j'ai bien AN0 dans ADC1BUF0 et AN1 dans ADC1BUF1 mais je ne récupère plus rien après.
Avec AD1CON2 = 0x400 : j'ai seulement AN0 dans ADC1BUF0 et plus rien après.
Merci maï pour ton aide. Avec ADC1CON2 = 0x300 j'ai le même résultat que pour AD1CON2 = 0x400
Enfaite je testais l'exemple de la doc mais tu ne regardes pas au bon endroit du-coup quand tu dis
"Increments the DMA address after completion of every sample/conversion operation"
car j'ai le bit ADDMAEN = 0 soit : ADC interrupt is generated at the completion of every sample/conversion operation
Je ne sais pas ce que ça change réellement pour ADC1BUFx après ^^
Ducoup avec AD1CON2 = 0x040C : le résultat AN1 et AN2 est récupéré dans ADC1BUF1 car ma led réagissait avec les deux potar...
Avec AD1CON2 = 0x404 : j'ai bien AN0 dans ADC1BUF0 et AN1 dans ADC1BUF1 mais je ne récupère plus rien après.
Avec AD1CON2 = 0x400 : j'ai seulement AN0 dans ADC1BUF0 et plus rien après.
Merci maï pour ton aide. Avec ADC1CON2 = 0x300 j'ai le même résultat que pour AD1CON2 = 0x400
Enfaite je testais l'exemple de la doc mais tu ne regardes pas au bon endroit du-coup quand tu dis
"Increments the DMA address after completion of every sample/conversion operation"
car j'ai le bit ADDMAEN = 0 soit : ADC interrupt is generated at the completion of every sample/conversion operation
Je ne sais pas ce que ça change réellement pour ADC1BUFx après ^^
Module ADC et buffer du dsPIC33EP
Module ADC et buffer du dsPIC33EP
maï a écrit :Si tu utilises int je ne vois pas sont traitement .Dans l'exemple que j'ai fourni avec un 24F il y a celui ci
et pour Vref+ ???
Pour Vref+ je suis pourtant sur VCC. Si VCFG<2:0> = 0 Alors VREFH = AVDD soit VCC dans mon cas et VREFL = AVSS soit GND. Non ?
J'ai enfin quelque chose de correcte. Je remet le code de l'init pour qu'on soit tous d'accord :
Code : Tout sélectionner
void Init_ADC ()
{
// /* Set port configuration */
ANSELBbits.ANSB0 = 1; // Ensure AN0/RB0 is analog
ANSELBbits.ANSB1 = 1; // Ensure AN1/RB1 is analog
ANSELBbits.ANSB2 = 1; // Ensure AN2/RB2 is analog
ANSELBbits.ANSB3 = 1; // Ensure AN3/RB3 is analog
ANSELBbits.ANSB4 = 1; // Ensure AN3/RB4 is analog
ANSELBbits.ANSB5 = 1; // Ensure AN3/RB5 is analog
AD1CON1 = 0x04E4; // Enable 12-bit mode, auto-sample and auto-conversion
AD1CON2 = 0x047E; // Sample 4 channels alternately using channel scanning
AD1CON3 = 0x0F0F; // Sample for 15*TAD before converting
AD1CON4 = 0x0000;
AD1CSSH = 0x0000;
AD1CSSL = 0x007F;
AD1CHS0bits.CH0SA = 0; // Select AN5 for CH0 +ve input
AD1CHS0bits.CH0NA = 0; // Select Vref- for CH0 -ve input
AD1CON1bits.ADON = 1; // Turn on
}
Et maintenant j'ai :
ADC1BUF0 = AN0
ADC1BUF1 = AN1
ADC1BUF2 = AN2
ADC1BUF3 = AN3
ADC1BUF4 = AN4
ADC1BUF5 = AN5
Je comprend pas très bien le fonctionnement de SMPI. Je vais essayé de le comprendre mais si quelqu'un comprend qu'il n'hésite pas
J'ai obtenu le résultat que je voulais merci pour ton aide maï. Si jamais je comprend le principe d'ordre de conversion je post !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 117 invités