Temps de réponse fonction READADC

Emile

Senior Member
Bonjour à tous,

Une question par simple curiosité, est ce que le fait de faire lire l'entrée ADC et par la suite de faire une comparaison de valeur pour choisir tel ou tel programme ralenti l'éxecution de celui-ci ?

Quelle durée théorique entre la mise sous tension du PICAXE et l'exécution du programme suite à la comparaison de valeur grace à READADC ?

Cela se compte en µsecondes ? Millisecondes ?

Merci

Emile
 

PieM

Senior Member
Si il y a plus de 25 comparaisons, en fonction de l'organisation du programme, et du code utilisé, cela peut effectivement prendre du temps. Mais il faudrait avoir une idée du programme pour en dire plus.
 

westaust55

Moderator
Comme une synchronisation approximative chaque prise de commande de PICAXE environ 250 micro-secondes à accomplir.

Certains tels que READTEMP prennent 750 millisecondes et peut-être READADC pourrait prendre plus de 250 micro-secondes

Par conséquent les plus SI… dactylographiez ALORS la comparaison que vous faites si le résultat est trouvé seulement après beaucoup de comparaisons cela prendra quelques moulin-secondes au total pour arriver à la prochaine partie du programme.
 

Emile

Senior Member
Un programme de ce genre que je viens d'écrire.



SYMBOL VALEURCALIB = W5
SYMBOL TENSIONR1 = W6
SYMBOL TENSIONR2 = W7
SYMBOL INTENSITER1 = W8
SYMBOL VALEURREADADC = W9
SYMBOL VALEUREVCC = W10
SYMBOL VALEURER2 = W11


comparateur:

calibadc10 VALEURCALIB ‘ lire la valeur de calcul Vcc dans W5
readadc10 0 ,VALEURREADADC ‘ lire la valeur du point milieu dans W9
VALEUREVCC = 1023 * 6 / VALEURCALIB / 10 ‘ Connaître la valeur de Vcc

TENSIONR1 = VALEURREADADC * VALEUREVCC / 1023 ‘ Connaître la tension aux bornes de R1
TENSIONR2 = VALEUREVCC - TENSIONR1 ‘ Connaître la tension aux bornes de R2

INTENSITER1 = TENSIONR1 / 220 ‘ Connaître intensité dans le circuit

VALEURER2 = TENSIONR2 / INTENSITER1 ‘ Connaître la valeur ohmique de R2
debug w12


If VALEURREADADC <= 1000 and VALEURREADADC >= 900 then prog1

If VALEURREADADC <= 899 and VALEURREADADC >= 800 then prog2

If VALEURREADADC <= 700 and VALEURREADADC >= 600 then prog3



goto comparateur






prog1: high 1
pause 100
low 1
goto comparateur

prog2: high 2
pause 100
low 2
goto comparateur

prog3: high 3
pause 100
low 3
goto comparateur



Quelle timing pour arriver à executer par exemple le sous programme prog1 ?

Merci :)

Emile.
 
Last edited:

PieM

Senior Member
Quel est l'intérêt de calibrer l'entrée adc ? la tension d'alimentation varie ?
D'autant plus que cette valeur n'est pas utilisée dans le reste du programme!

De toute façon, quand on utilise un réseau de résistance, il est inutile de faire tout ces calculs de tension, d'intensité, etc, puisque la tension mesurée est par définition proportionnelle à la résistance.
La valeur de la tension réelle importe peu. Le diviseur de tension donnera toujours la méme valeur (0 à 255) en résultat d'un readadc quelle que soit la tension Vcc !

si c'est un réseau de 25 résistances, chaque noeud aura pour résultat de mesure avec un readadc, un multiple de 255/25, donc de 10.2.

Dans le principe, le programme se limite donc à:

SYMBOL VALEURREADADC = W9


comparateur:

readadc 0,VALEURREADADC

VALEURREADADC = VALEURREADADC/10 donnera directement un nombre entre 0 et 25

d'où pour le test :
branch VALEURREADADC, (prog1,prog2,prog3, ....)
goto comparateur

prog1:
.....
goto comparateur
etc ...
 

Emile

Senior Member
Oui j'ai tendance à compliquer les choses ....:(

Si je résume.

Tu lis la valeur ADCO dans W9

Tu divises par 10 le résultat pour le limiter à 25.

Et si je comprends bien si W9 = 1 donc avec branch ca va dans le prog 1 si W9 = 2 prog 2 ... ?

Et pour le temps que mettra le programme à atteindre prog 1 , d'apres toi ?

Merci

EMILE
 

PieM

Senior Member
Et si je comprends bien si W9 = 1 donc avec branch ca va dans le prog 1 si W9 = 2 prog 2 ... ?

Et pour le temps que mettra le programme à atteindre prog 1 , d'apres toi ?
En fait W9 va commencer à 0 quand le commutateur est sur 0V, et si W9 est à 0, il va pointer sur la première adresse contenue dans les parenthèses.

branch W9, (prog0, prog1 ...)

Quant au temps, il devrait être inférieur à la milliseconde, guère mesurable. Vu le projet, ça ne devrait pas être critique !

Petit correctif: j'ai supposé que c'est un commutateur à 25 positions. Il y a donc 24 résistances identiques.
En utilisant un readadc10, la valeur à chaque noeud sera un multiple de 1023/24 soit 42.6. Il faut donc diviser par 42 la valeur mesurée dans w9.
 
Top