Modifications

Sauter à la navigation Sauter à la recherche
2 471 octets ajoutés ,  12 décembre 2015 à 10:59
Ligne 60 : Ligne 60 :     
== Faire encore mieux ==
 
== Faire encore mieux ==
 +
=== Parasites, lecture multiple et moyenne ===
 +
Il est également possible de réaliser des lectures en rafale et de les stocker dans un tableau.
 +
 +
Cela permet d'effectuer une moyenne sur plusieurs lectures, une façon d'amortir l'implication d'une valeur parasite. Vous aurez en effet remarqué que la valeur varie sensiblement d'une lecture à l'autre même si vous ne bougez pas le potentiomètre.
 +
 +
Cela est provoqué par les différentes perturbations comme:
 +
* Le bruit sur l'alimentation (surtout USB),
 +
* Les connexion imparfaites (surtout sur les breadboard)
 +
* La longueur des fils... qui sont sensibles au perturbation électromagnétique.<small><br />blindez les et/ou utiliser une paire torsadée</small>
 +
 +
La fonction {{ADC.read_timed(buf, 10)}} permet de faire de multiples captures sur une entrée et remplir un tableau. Il faut cependant faire attention au type de tableau passé en entrée... sinon vous passez en échantillonnage 8bits (avec des valeurs lue de 0 à 255).
 +
 +
==== Lecture en échantillonnage 8 Bits ====
 +
Dans l'exemple suivant, issu de la doc officielle, les valeurs retournées varient entre 0 et 255. En effet, en passant un {{fname|bytearray}} à la fonction {{read_timed()}} nous indiquons aussi que l'espace de stockage est un tableau de Byte (d'Octet)... et un Byte/Octet est stocké sur 8 bits. Par conséquent, le convertisseur passe en résolution 8 bits.
 +
 +
<nowiki></nowiki>
 +
 +
=== Lecture en échantillonnage 12 bits ==== 
 +
Si vous avez été attentif au point précédent, vous savez maintenant qu'il faut faire attention à la création de la mémoire tampon (''buffer'') pour pouvoir réaliser des lectures multiples en 12bit.
 +
 +
Voici la marche à suivre pour garder un échantillonnage 12 bits (valeurs de 0 à 4095):
 +
 +
<nowiki>import pyb, array
 +
# Utiliser une constante pour identifier la broche
 +
adc = pyb.ADC( pyb.Pin.board.X19 )
 +
# Créer et initialize un Buffer (mémoire tempon) capable de recevoir
 +
# des valeurs 12bits.
 +
buf = array.array('H')
 +
for i in range(10): buf.append( 0 )
 +
# Passez votre curiosité dans la structure du tableau
 +
#  print( buf )
 +
# vous aurez une réponse comme celle-ci:
 +
#  array('H', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
 +
 +
 +
# Faire une lecture de valeur analogique dans le buffer
 +
# à une fréquence de 10 Hertz (cela prendra 10 secondes)
 +
adc.read_timed(buf, 10)
 +
# Afficher les valeurs
 +
for valeur in buf:
 +
    print( valeur )
 +
# calcul de la moyenne
 +
print( 'Moyenne: %s' % (sum(buf)/len(buf)) )</nowiki>
 +
 +
 
=== Seuil d'allumage (threshold) ===
 
=== Seuil d'allumage (threshold) ===
 
Vous voulez parfois activer une sortie lorsqu'une valeur a atteint un certain seuil. Pour faire cela avec un potentiomètre, changez le code de {{fname|loop()}} comme suit :
 
Vous voulez parfois activer une sortie lorsqu'une valeur a atteint un certain seuil. Pour faire cela avec un potentiomètre, changez le code de {{fname|loop()}} comme suit :
29 836

modifications

Menu de navigation