Précision de la fonction Count-PicAxeM08.

jojojo

Senior Member
Bonjour à tous.
Je découvre avec plaisir le PicAxe, ainsi que ce forum.

Ma question concerne la variable de durée du comptage.

La doc spécifie que PicAxe accepte et traite correctement les nombres non-entiers, sous la forme habituelle (184/10, pour 18.4)

Mais ...

Let b2=183/10
Count 3,b2,b0 compte-t-il bien pendant 18.3 mS ?

Question de benêt, je sais, mais ...

Ci- joint le code qui m'amène à poser la question :

'Compte-tours PicAxe08M, pour scouter 125.
'associé à l'afficheur universel 4 vers 16
'Le temps de comptage choisi permet une grande compacité du code :
'Pour des valeurs de 1000 trm à 11000 trm,avec un incrément de 750 trm,
'b0 va contenir des valeurs de 1 à 15, idéales pour la commande du dédo.
'Plus besoin des 15 tests de valeurs
'La valeur 0 correspond à moteur arrêté, contact mis.

Let dirs=%10111
Let b2=783/10 '78.3 mS
Main:


Count 3,b2,b0 'Comptage port 3
'pendant 78.3 mS (?...)



Aff:

For b1=0 to b0 'La boucle est pour la persistance optique
If b1<8 then 'valable avec des Led's HL
Let pins=b1 'Les sorties vers le déco 4->16
Else 'sont 0, 1, 2, 4
Let pins=b1+16 'donc ...
End if

Next b1


Goto Main


Merci d'avance.
 

PieM

Senior Member
Bonjour,

Il n'y a pas de "Question de benêt" ! :)

Les variables ne peuvent être que des entiers. le picaxe ne traite pas les nombres décimaux (sauf avec un copro mathématique, FPU)

donc, en fait, l'expression Let b2=183/10 va conduire à affecter la valeur 18 à b2

Par contre, dans la commande count, la durée de comptage est une variable du type word (0 - 65535 à 4 MHz), de même que le résultat de la mesure , qui est aussi du type word.
La seule solution est donc de faire la mesure sur une durée plus longue pour que la durée soit un entier.

Mais à vrai dire je ne comprends pas trop le problème, car faire une mesure pendant 600 ms de 12000 rpm va donner un résultat de 120 et 12 pour 1200 rpm

Sinon, pour avoir une valeur qui s'incrémente de 0 à 15 par 750 rpm, il suffit de faire la mesure pendant pendant 80 ms.

1 / 0.080 * 60 = 750 et le maxi sera 15 / 0.080 * 60 = 11250
 
Last edited:

jojojo

Senior Member
Un grand merci, pour cette réponse rapide (et bonne année, au fait :) ).

Donc, si j'affecte une variable Word, au comptage, je pourrais compter pendant 78.3 mS ? (783/10)

Sinon, pour avoir une valeur qui s'incrémente de 0 à 15 par 750 rpm, il suffit de faire la mesure pendant pendant 80 ms.

Certes, mais, l'os est que j'affiche sur 15 points, et non 16. D'ou les 78.3 mS. La valeur 0 n'est pas "négociable", elle indique juste contact mis, moteur arrêté (forcément, le 4515 compte de 0 à 16 donc, quand les 4 ports du pic sont à 0, j'ai déjà la led 0 allumée).

Je joint les paramètres comptage, j'ai fait comme ça, pour minimiser l'erreur, puisqu'il est impossible de "tomber" pile.

parametrescomptage.jpg

Ce sera donc : Let w2=783/10 et Count 3,w2,b0

Merci encore.
 
Last edited:

PieM

Senior Member
Bonjour,

Ce sera donc : Let w2=783/10 et Count 3,w2,b0
Non ! w2 ne pouvant contenir qu'un entier, sa valeur sera donc 78 et non 78.3 !

Soit il faut faire la mesure sur 783 ms et diviser le résultat par 10, soit faire la mesure sur 79 ms ou 80ms , ce qui donnera la même valeur en valeurs entières ( 1 à 15).
2012-01-01 001.jpg

Mais par précaution, je ferais la mesure sur plusieurs fronts montants, en mettant à l'échelle le résultat ...

Bonne année aussi, ainsi qu'à tous ceux qui nous lisent ...
 

jojojo

Senior Member
Encore merci.

Donc, j'oublie la première moitié de la page 22 de la doc ? (section 2--Basic commands)

Arghhh ! Non, en relisant, ça y est, j'ai pigé (je sais, mais mes vieux neurones ...)

Sniff!!!

Bon on va faire avec, puisqu'il est impossible de mesurer sur 783 ms (trop long).

A bientôt.
 

jojojo

Senior Member
Mais par précaution, je ferais la mesure sur plusieurs fronts montants, en mettant à l'échelle le résultat ...

Oups, j'ai zappé ça.

Pas trop possible, dans la pratique, si je veux garder un minimum d'effet de persistance rétiniène.

Pour la fiabilité de la mesure, j'ai plutôt soigné le hard, avec mise en forme par monostable.

schema.jpg
schema.jpg
 
Top