Go Down

Topic: Mode burst analogique (Read 6867 times) previous topic - next topic

Touf2638

Haifger, Es tu sûr que ce PRESCALE agit sur le FREERUN MODE. N'agit-il pas que lorsque l'on met le trigger sur timer ?

haifger

Touf2638:
Quote
Haifger, Es tu sûr que ce PRESCALE agit sur le FREERUN MODE. N'agit-il pas que lorsque l'on met le trigger sur timer ?


Ouaip, chuis sûr :)

En fait, en relisant tes message j'ai l'impression que tu n'as pas bien compris le rôle de cette fréquence de l'ADC (et toutes mes excuses par avance s'il s'avère que c'est moi qui en fait n'a pas compris tes messages :)

Donc : le convertisseur analogique-numérique utilise pour fonctionner une horloge (disons ADCclock) qui est synchronisée sur l'horloge principale (Mclock), mais le première est plus lente que la seconde, d'un facteur au minimum égal à 2 (p. 1332). C'est PRESCAL qui règle le facteur entre ces deux horloges.

Là ou je pense tu n'a pas compris, c'est que la fréquence que tu règle via PRESCAL n'est pas directement la fréquence des conversions, mais seulement celle de l'horloge. Or il faut plusieurs cycles de l'horloge ADCclock pour effectuer une conversion. Je n'ai pas encore suffisamment pratiqué le SAM3X pour être beaucoup plus précis, mais si on dit (au pif) qu'il faut 13 cycles pour effectuer une seule conversion (c'est le cas des AVR), alors la fréquence des conversions proprement dites est ADCclock/13, que tu sois en mode « free running » ou pas.

D'ailleurs, sur ce µc, et contrairement aux AVR, on peut modifier le nombre de cycles nécessaires à une conversion, notamment grâce aux champs TRANSFER, TRACKTIME, STARTUP (et j'en passe) de ADC_MR, voir notamment les graphes de la page 1333. Bien sûr tout ceci a (ou doit avoir) une influence sur la précision de la mesure.

Voilà, et toutes mes excuses si j'ai ré-expliquer des choses que tu connaissais déjà :)

Touf2638

Autre question, normalement pour ecrire dans les registres cités, il faut retomber le WPEN du registre ADC_WPMR (datasheet p1345: This register can only be written if the WPEN bit is cleared in "ADC Write Protect Mode Register" on page 1365.)
Je ne l'avais pas fait dans mon code et pourtant ça marchait. Quel est l'explication, environnement arduino ?
Idem pour l'affectation des pins aux voies. Cela marche comme indiqué p1331 soit AD7 sur PA16(A0 de l'arduino) et AD6 sur PA24(A1 de l'arduino) Pourtant aucune modif de ma part sur le PIO CONTROLLER qui est sensé faire cette affectation (j'ai loupé un truc ?! :smiley-sad-blue:).

Code: [Select]

void setup()
{

//  int t=analogRead(0);

// Configuration free running adc 7 (pin A0)
  ADC->ADC_MR |= 0x80; // Mode FREERUN
  ADC->ADC_CR=2; // Demarrage convertisseur
  ADC->ADC_CHER=0xC0; // Activation voies 6 et 7 (A1 et A0)
  Serial.begin(115200);
}

void loop()
{


  Serial.println(ADC->ADC_CDR[6]);
  Serial.println(ADC->ADC_CDR[7]);
  Serial.println("____");
  delay(1000);
}

Touf2638

Non, Non c'est très bien expliqué Haifger, c'est moi qui n'avait pas compris (je galère un peu avec la datasheet  XD). Et pour ma deuxieme question t'as une explication ?

haifger

Non désolé, comme je le disais plus haut je n'ai pas suffisamment pratiqué la Due pour répondre à ces questions. Mais de toute façon si ça fonctionne « tout seul » c'est soit que l'environnement Arduino l'a fait à l'insu de ton plein gré, soit qu'il s'agit des valeurs par défaut du micro (ce qui à mon avis est certainement le cas pour le mode de protection d'écriture des registres).

Tfou57

#20
May 17, 2015, 12:12 am Last Edit: May 17, 2015, 06:06 pm by Tfou57
Bonjour
J'ai également une Arduino Due et je recherche à utiliser 4 entrées analogiques en FastADC pour gérer un feedback de position de chacun des 4 actionneurs.
A terme j'aurais même peut-être 6 feedback à gérer.

J'ai essayé le code de Touf2638 ( post 17 du 26 juin 2013) , il fonctionne très bien pour la lecture des pins Input analogique  A0 et A1 de l'Arduino Due

Je n'arrive pas à lire d'autres pins que A0 et A1 même en adaptant le n° de "SAM3X8E PIN FUNC" que j'ai sur un diagramme PINOUT de la Due
Mon problème provient certainement de ma non compréhension de la partie "Setup" du code.

Je recherche en vain dans le SAM3X_Datasheet ATMEL -11057 -A000062_du 28-05-12 de 1467pages
Je tourne en rond depuis plusieurs jours sans arriver à comprendre les 3 lignes ci-dessous extraites du code de Touf2638

 "ADC->ADC_MR |= 0x80; // Mode FREERUN"
 :smiley-confuse: 0x80 correspond à quoi ? :o 
je ne trouve pas 0x80 pour mettre en mode FreeRun , par contre je trouve à la page 1347:
 "FREERUN: Free Run Mode" value 1 = ON Free Run Mode: Never wait for any trigger.

"ADC->ADC_CR=2; // Demarrage convertisseur"
 :smiley-confuse: Dans le datasheet , je ne trouve pas 2 pour le démarrage du convertisseur >:(
A la page 1344 , je trouve :
ADC Control RegisterSTART: Start Conversion = 1 = Begins analog-to-digital conversion.

"ADC->ADC_CHER=0xC0; // Activation voies 6 et 7 (A1 et A0)"
 :smiley-confuse:  Quel est le rapport entre "0xC0" et les pins A1 et A0
en regardant le datasheet à la page 1350 "ADC Channel Enable Register" , j'ai d'abord pensé à tord que "C0" était le "CH0" du tableau et qu'il suffisait de définir le 1er canal utilisé (A0 = CH0). Mais cela ne semble pas être si simple :smiley-confuse:


 :) Peut-on m'expliquer comment on arrive respectivement à : ? :)

"0x80"      pour la ligne  "ADC->ADC_MR |= 0x80; // Mode FREERUN"

   "2"        pour  la ligne  "ADC->ADC_CR=2; // Démarrage convertisseur"

"0xC0"     pour la ligne "ADC->ADC_CHER=0xC0; // Activation voies 6 et 7 (A1 et A0)"
               Comment "0xC0" se rapporte à A0 et A1 ?


Cela me permettra de mieux déchiffrer ce datasheet et le mettre le pied à l'étrier sur sa lecture

Merci pour toute votre aide qui me sera très précieuse! :)

Tfou57

#21
May 17, 2015, 10:50 am Last Edit: May 17, 2015, 06:05 pm by Tfou57
Bonjour ,
post de hier soir , j'avais oublié de mettre le lien vers le datasheet que ce post semblait prendre en référence : la version du 28 mi 2012  http://www.keil.com/dd/docs/datashts/atmel/sam3xa/doc11057.pdf

Depuis une version de mars 2015 une mise à jour est sortie , mais les n° des pages sont légèrement différents

Merci de l'aider à comprendre comment on trouve ces 3 informations:

"0x80"      pour la ligne  "ADC->ADC_MR |= 0x80; // Mode FREERUN"
                :o Où trouve-t-on ce 80 en hexa dans le datasheet à propos de FREERUN ?

   "2"        pour  la ligne  "ADC->ADC_CR=2; // Démarrage convertisseur"

"0xC0"     pour la ligne "ADC->ADC_CHER=0xC0; // Activation voies 6 et 7 (A1 et A0)"
               Comment "0xC0" se rapporte à A0 et A1 ?
                :o Où trouve-t-on ce C0 en hexa dans le datasheet?

Merci pour tous vos pistes  :)




dfgh

#22
May 17, 2015, 11:13 am Last Edit: May 17, 2015, 03:01 pm by dfgh
hello
c'est la data sheet qui te dit de mettre à 1 le bit 7 de ADC_MR pour etre en mode free_run
(doc 11057 page 1345)
donc en hexa 1000 0000 pour les bits 7,6,5,4,3,2,1,0.

idem pour ADC_CR page 1344 il faut mettre le bit 1 à 1 pour lancer le convertisseur
donc en hexa 0000 0010 pour mettre à 1 le bit 1
extrait de la doc:
• START: Start Conversion
0 = No effect.
1 = Begins analog-to-digital conversion

et pour ADC_CHER en mettant 1100 000 tu valide les bits 7 et 6  qui correspondent aux voies 7 et 6
 page 1350 de la doc

Tfou57

#23
May 17, 2015, 12:21 pm Last Edit: May 17, 2015, 06:05 pm by Tfou57
:) Merci la rapidité et de la pertinence de votre réponse ! :) 

En suivant vos explications , je suis arriver à retrouver tous les chiffres hexa mis dans le code de Touf2638 ! :  Impeccable  , cela fonctionne même sur d'autres pins prise au harsard !

je n'arrivais pas à comprendre le tableau de la page1345 car je ne pensais pas que au-dessus de FREERUN le "7" était le bit 7
 :smiley-confuse: Je débute , la mécanique et bien éloigné de ce monde de micro-contrôleurs

 :) Je profite de ce post pour vous demander si le code de Touf2638 est optimisé pour un FastADC le plus rapide


Dans mon projet j'aurais également à augmenter la fréquence de Output PWM et augmenter la rapidité des ports digitaux.
 :smiley-confuse: Avez vous des liens en Français concernant l'Arduino Due à me fournir ? :smiley-confuse:

Merci encore de m'avoir mis le pied à l'étrier de la compréhension du datasheet ! :)  :)  :)

dfgh

#24
May 17, 2015, 04:45 pm Last Edit: May 17, 2015, 04:49 pm by dfgh
ADCSRA est un registre du 328 donc sur UNO (je ne l'ai pas trouvé sur DUE)
bit 7 = ADC enable donc =1 donc en hexa =0x8?
bits 2 à 0 =ADPS2à ADPS0=prescaler de 1 à 7 donc division de 2 à 128 par puissances de 2
d'où en hexa 0x81 à 0x87
data sheet du 328 page 255


Tfou57

#25
May 17, 2015, 05:40 pm Last Edit: May 17, 2015, 05:52 pm by Tfou57
@dfgh,
Merci de ton aide pertinente,
A propos de l'augmentation de fréquence des Output PWM  et de l'augmenter la rapidité des ports digitaux , j'ouvrirais certainement dans un futur proche 2 posts distincts sur le forum français après avoir tenté le déchiffrage des posts en anglais sur ces sujets.

Pour l'instant je suis également un post sur le forum DUE Anglais à propos de l'augmentation de fréquence des PWM des cartes Arduino Due

http://forum.arduino.cc/index.php?topic=131323.0


Il me vient une question.!
Après avoir modifier un code dans le but d'augmenter la fréquence des PWM , peut-on via le Serial monitor mesurer la fréquence PWM obtenue?
eci dans le but de vérifier son efficacité du code modifié car je ne possède pas d'oscilloscope !


Je suis entrain d'essayer de comprendre (déchiffrer) plusieurs posts et articles en anglais

Je regarde régulièrement du côté du forum spécifique Arduino Due qui est en langue anglaise.

 

Go Up