Modifications

Sauter à la navigation Sauter à la recherche
3 616 octets ajoutés ,  11 novembre 2012 à 16:16
Ligne 105 : Ligne 105 :  
  <nowiki>#!/usr/bin/env python
 
  <nowiki>#!/usr/bin/env python
 
# -*- coding: latin-1 -*-
 
# -*- coding: latin-1 -*-
 +
 +
import time
 +
import RPi.GPIO as GPIO
 +
 +
GPIO.setmode( GPIO.BCM )
 +
DEBUG = 1
 +
 +
# Lit les données SPI d'une puce MCP3008, 8 canaux disponibles (adcnum de 0 à 7)
 +
def readadc( adcnum, clockpin, mosipin, misopin, cspin ):
 +
        if( (adcnum > 7) or (adcnum < 0)):
 +
                return -1
 +
 +
        GPIO.output( cspin, True )
 +
 +
        GPIO.output( clockpin, False ) # met Clock à Low
 +
        GPIO.output( cspin, False )    # met CS à Low (active le module MCP3008)
 +
 +
        commandout = adcnum # numéro de channel
 +
        commandout |= 0x18  # OR pour ajouter Start bit + signle-ended bit
 +
                            # 0x18 = 24d = 00011000b
 +
        commandout <<=3    # décalage de 3 bits à gauche
 +
 +
        # Envoi des Bits sur le bus SPI
 +
        for i in range(5):
 +
                # faire un AND pour determiner l'état du bit de poids le plus
 +
                # fort (0x80 = 128d = 10000000b)
 +
                if( commandout & 0x80 ): # faire un AND pour déterminer l'état du bit
 +
                        GPIO.output( mosipin, True )
 +
                else:
 +
                        GPIO.output( mosipin, False )
 +
                commandout <<= 1 # décalage de 1 bit sur la gauche
 +
 +
                # Envoi du bit mosipin avec signal d'horloge
 +
                GPIO.output( clockpin, True )
 +
                GPIO.output( clockpin, False )
 +
 +
        # lecture des bits renvoyés par le MCP3008
 +
        # Lecture de 1  bit vide, 10 bits de données et un bit null
 +
        adcout = 0
 +
        for i in range(12):
 +
                # Signal d'horloge pour que le MCP3008 place un bit
 +
                GPIO.output( clockpin, True )
 +
                GPIO.output( clockpin, False )
 +
                # décalage de 1 bit vers la gauche
 +
                adcout <<= 1
 +
                # stockage du bit en fonction de la broche miso
 +
                if( GPIO.input(misopin)):
 +
                        adcout |= 0x1 # active le bit avec une opération OR
 +
 +
        # Mettre Chip Select à High (désactive le MCP3008)
 +
        GPIO.output( cspin, True )
 +
 +
        # Le tout premier bit (celui de poids le plus faible, le dernier lut)
 +
        # est null. Donc on l'elimine ce dernier bit en décalant vers la droite
 +
        adcout >>= 1
 +
 +
        return adcout
 +
 +
# Broches connectées sur l'interface SPI du MCP3008 depuis le Cobbler
 +
# (changer selon vos besoins)
 +
SPICLK = 18
 +
SPIMISO = 23
 +
SPIMOSI = 24
 +
SPICS = 25
 +
 +
# Initialisation de l'interface SPI
 +
GPIO.setup(SPIMOSI, GPIO.OUT)
 +
GPIO.setup(SPIMISO, GPIO.IN)
 +
GPIO.setup(SPICLK, GPIO.OUT)
 +
GPIO.setup(SPICS, GPIO.OUT)
 +
 +
# Potentiomètre 10KOhms raccordés sur le canal ADC #0
 +
potentiometer_adc = 0
 +
 +
while True:
 +
        # Lecture analogique, retourne une valeur entre 0 et 1023
 +
        # pour une valeur de tension entre 0 et VRef (3.3v)
 +
        trim_pot = readadc( potentiometer_adc, SPICLK, SPIMOSI, SPIMISO, SPICS )
 +
 +
        print( "Valeur: " + str( trim_pot ) )
 +
 +
        # convertir en tension
 +
        print( "tension: "+ str( (3.3*trim_pot)/1024 ) )
 +
 +
        # attendre une demi-seconde
 +
        time.sleep(0.5)
 +
</nowiki>
 +
 +
Ce qui produit le résultat suivant:
 +
 +
<nowiki>Valeur: 665
 +
tension: 2.14306640625
 +
Valeur: 666
 +
tension: 2.1462890625
 +
Valeur: 665
 +
tension: 2.14306640625
 +
Valeur: 668
 +
tension: 2.152734375
 +
Valeur: 665
 +
tension: 2.14306640625
 
</nowiki>
 
</nowiki>
    
Pour savoir comment télécharger et exécuter ce programme sur votre Py, nous vous proposons de prendre connaissance de notre premiers articles sur [[Rasp-Hack-LED|Raspberry Pi et LED]]  
 
Pour savoir comment télécharger et exécuter ce programme sur votre Py, nous vous proposons de prendre connaissance de notre premiers articles sur [[Rasp-Hack-LED|Raspberry Pi et LED]]  
 +
 +
== Commande de volume ==
 +
AdaFruit propose un exemple plus avancé basé sur ce montage.
 +
 +
L'exemple propose de modifier le volume du son en fonction de la position du potentiomètre.
 +
 +
Cet exemple est disponible sur le site [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/script AdaFruit Learning System]
    
Source: [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi AdaFruit Learning System]
 
Source: [http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi AdaFruit Learning System]
29 836

modifications

Menu de navigation