1.11.9

News

Page  1 sur 3  > >>

2019-01-16
Catégorie : Arduino
Posté par : xavier
Un Circuit imprimé pour plusieurs sketches
2018-06-07
Catégorie : Arduino
Posté par : xavier
Des pistes pour developper un projet a base d'Arduino
2017-09-23
Catégorie : Expositions
Posté par : xavier

Les 4/5 Novembre 2017, au parc Savoie Expo de Chambéry (Savoie), se tiendra l'exposition Savoie Modelisme.

CMS - 1.11.9 - Bartolome
 

Plus loin

Plus loin

Plus loin... Il s'agit en fait de déporter les entrées sorties, les multiplier, en utilisant le bus I2C et un PCF8574.

Quelques notions pour continuer:

==

Égal à

!=

Différent de

<

Plus petit que

>

Plus Grand que

<=

Plus petit ou égal à

>=

Plus Grand ou égal à

&&

Et logique

||

Ou logique

!

Non logique

~

bitwise non

&

bitwise et

^

bitwise ou exclusif

|

bitwise ou inclusif

<<

bitshift left: décalage à gauche

>>

bitshift right: décalage à droite

&=

compound bitwise et

|=

compound bitwise ou

Les opérations bitwise sont des opérations bit à bit. Il est possible de les associer (en anglais compound). Toutes ne sont pas utilisées dans cet exemple!

Programme N°10:

// ========================================================
// I2C PCF 8574
// ========================================================
#include<Wire.h>

// liste des adresses Pcf possible

// 000 0x20
// 001 0x21
// 010 0x22
// 011 0x23
// 100 0x24
// 101 0x25
// 110 0x26
// 111 0x27

#define I2Cadress 0x27
byte x=0;
byte y=0;
int cpt=0;

// ========================================================
void test() {
    Wire.requestFrom(33,1);
    if(Wire.available()) // Test la disponibilité du bus I2C {
        x=Wire.read(); // Réception des données
    }
}
// ========================================================
// Envoi d'un bit au Pcf
// ========================================================
void sendPcfByte(int address, int octet) {
    Wire.beginTransmission(address); // Début de transmission au PCF8574
    Wire.write(octet); // Envoi des données au PCF8574
    Wire.endTransmission(); // Fin de Transmission
}
// ========================================================
// Envoi d'un octet au Pcf
// ========================================================
void sendPcfBit(int address, int port, int val) {
    Wire.beginTransmission(address); // Début de transmission au PCF8574
    // lecture du status PCF8574
    Wire.requestFrom(address,1);
    if(Wire.available()) { // si la requête est disponible
        x=Wire.read(); // Réception des données
    }
    if (val==LOW) {
        Wire.write(x &=~(1<<port)); // effacement du bit
    } else {
        Wire.write(x |=(1<<port)); // set bit
    }
    Wire.endTransmission(); // Fin de Transmission
}
// ========================================================

void setup() {
    Wire.begin();
}

// ========================================================
void loop() {
    if (y==0x55) {y=0xAA;} else {y=0x55;}
    // sendPcfByte(I2Cadress,y); //Send byte to PCF8574
    sendPcfBit(I2Cadress, cpt, HIGH);
    delay(500);
    sendPcfBit(I2Cadress, cpt, LOW);
    if (cpt++>7) {
        cpt=0;
    }
}


Commentaires

Le PCF8574 permet de déporter 8 entrées sorties. Le bus I2C n'en PCF8574 sur le bus (voir les adresses ci dessus)

 

A remarquer:

- Wire.begin permet d'initialiser le bus I2C

- Wire.beginTransmission(address) permet de commencer la transmission qui s'acheve avec Wire.endTransmission()

- Wire.requestFrom(address,1) permet de verifier que le PCF souhaité est disponible, en combinaison avec if(Wire.available())

- Wire.available() permet de savoir si le PCF a quelque chose a transmettre. Si c'est le cas Wire.read() permet d'en faire l'acquisition. (pas utilisé dans cet exemple!, c'est pour cela que le code est en rouge)

- Je n'ai pas utilisé les entrées, car elles ne sont pas fondamentales pour notre hobby.

- J'ai à votre disposition les 2 circuits suivants:

Le premier est un shield qui se positionne sur un Arduino

Le second, plus petit est un PCF8574 sur lequel on peut enficher un signal lumineux avec masse commune. Il est possible d'en connecter plusieurs en série

Entre chaque circuit, 4 fils forment le bus I2C. Chaque circuit pouvant être séparé du suivant de plusieurs dizaines de cm.



Le shield propose plusieurs possibilités:

- 8 boutons sur une seule entrée

- départ Bus I2C

- 3 servo moteurs

- 3 * 2 leds

Previous page: Les machines d'état  Page suivante : Toujours Plus loin