vendredi 30 août 2013

Comment utiliser le MCP23017 I2C Port Expander Avec le Raspberry Pi - Partie 2

Dans "Comment utiliser le MCP23017 I2C Port Expander Avec le Raspberry Pi - Partie 1", J'ai expliqué comment configurer votre Pi pour utiliser I2C pour que vous puissiez connecter un "16-bit extension de port MCP23017" à elle.  
Si vous avez suivi cet article et obtenu votre circuit vous êtes prêt à contrôler la puce en utilisant un script Python simple.

Dans cet article, nous allons nous concentrer sur le contrôle des sorties. Nous utilisons les trois premiers axes de l'ensemble "AMP". Il y a une autre série de huit broches (GPB0 - GPB7) qui peuvent être contrôlés de la même manière avec quelques modifications de code.

Pour ce type de projet une calculatrice qui peut convertir entre binaire, décimal et hexadécimal est extrêmement utile. Il y a beaucoup de calculatrices qui peuvent le faire et sont disponible pour votre système d'exploitation, si vous utilisez un ordinateur de bureau ou portable.  

Un convertisseur binaire, facile à utiliser, peut être trouvé ici.


Script Python pour les Sorties

Voici un exemple de script qui comptera 1-8 définir les trois premières broches AMP que ça se passe:
1:  import smbus  
2:  import time  
3:  bus = smbus.SMBus(0) # Rev 1 Pi uses 0  
4:  #bus = smbus.SMBus(1) # Rev 2 Pi uses 1  
5:  DEVICE = 0x20 # Device address (A0-A2)  
6:  IODIRA = 0x00 # Pin direction register  
7:  OLATA = 0x14 # Register for outputs  
8:  GPIOA = 0x12 # Register for inputs  
9:  # Set all GPA pins as outputs by setting  
10:  # all bits of IODIRA register to 0  
11:  bus.write_byte_data(DEVICE,IODIRA,0x00)  
12:  # Set output all 7 output bits to 0  
13:  bus.write_byte_data(DEVICE,OLATA,0)  
14:  for MyData in range(1,8):  
15:   # Count from 1 to 8 which in binary will count  
16:   # from 001 to 111  
17:   bus.write_byte_data(DEVICE,OLATA,MyData)  
18:   print MyData  
19:   time.sleep(1)  
20:  # Set all bits to zero  
21:  bus.write_byte_data(DEVICE,OLATA,0)  

Vous pouvez le télécharger directement sur votre Pi en utilisant:

wget  http://www.raspberrypi-spy.co.uk/archive/python/i2c_outputs.py

 Vous pouvez exécuter le script avec la commande suivante: 

sudo python i2c_outputs.py 

Le script ci-dessus effectue les actions suivantes: 
Importe les bibliothèques smbus et le time.
Crée un objet smbus appelé "bus" Configure certaines constantes 
Définit toutes les broches AMP comme sorties 
Définit toutes les broches AMP à zéro 
Compte Des valeurs de 1 à 8 et définit les broches AMP à l'équivalent binaire d'attente 1 seconde entre chaque étape.
Rend finalement AMP à zéro 

Ce que vous devez voir est les témoins s'allument dans une séquence binaire: 

000.001.010.011.100.101.110.111 

La chose la plus importante à noter est que lors de l'envoi des données à un registre que vous avez à régler tous les 8 bits en une seule fois. 
Donc, pour configurer toutes les broches AMP comme sorties que vous envoyez 0000000 au registre IODIRA. 
Pour régler tous comme entrées que vous devez envoyer 1111111 binaire, hexadécimal ou 255 décimal ou 0xFF. Pour définir GPA0-3 comme sorties et GPA4-8 comme intrants nécessaires pour configurer 1111000 binaire, décimal ou hexadécimal 240 0xF0. 

C'est la même histoire pour le réglage des broches de sorties. 
Si vous avez configuré les broches AMP comme des sorties et vous souhaitez définir GPA1 élevé et tous les autres broches faible, vous devez envoyer 00000010 au registre Olata. 
Si vous souhaitez définir GPA2 et GPA7 haut vous enverriez 10000100. 

Traduction CBO, de la source : 

Aucun commentaire:

Enregistrer un commentaire