communication_protocole_i2c
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteDernière révisionLes deux révisions suivantes | ||
communication_protocole_i2c [2022/09/05 07:58] – serge | communication_protocole_i2c [2022/09/07 09:19] – [Pull-up Resistors] serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Communication avec le protocole I2C ====== | ====== Communication avec le protocole I2C ====== | ||
- | **Je suis rentré de vacances** | ||
+ | =====Ressources===== | ||
+ | Seulement 2 fils, les appareils sont définis par des adresses. | ||
+ | * **[[https:// | ||
+ | * **[[https:// | ||
+ | * https:// | ||
- | =====Pull-up Resistors===== | + | =====Installation sur une Pi===== |
- | https:// | + | |
+ | From https:// | ||
+ | |||
+ | <code bash> | ||
+ | sudo nano / | ||
+ | |||
+ | # Find the line containing dtparam=i2c_arm=on | ||
+ | # Add i2c_arm_baudrate=< | ||
+ | dtparam=i2c_arm=on, | ||
+ | </ | ||
+ | |||
+ | Reboot Raspberry Pi\\ | ||
+ | Create a simple test script to verify the speed | ||
+ | |||
+ | Switch to home directory | ||
+ | cd ~ | ||
+ | Create shell script | ||
+ | nano i2cspeed.sh | ||
+ | Copy and paste the following lines of code | ||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | var=" | ||
+ | var=${var// | ||
+ | printf " | ||
+ | </ | ||
+ | Change file permissions | ||
+ | chmod +x i2cspeed.sh | ||
+ | |||
+ | Execute test script | ||
+ | ./ | ||
+ | |||
+ | =====Installation sur Arduino===== | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * [[https:// | ||
+ | |||
+ | =====smbus2===== | ||
+ | La lib I2C python | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | =====Exemple à revérifier===== | ||
+ | * https:// | ||
+ | |||
+ | =====Exemple entre Raspberry Pi et Arduino Leonardo===== | ||
+ | **Contexte**: | ||
+ | |||
+ | ===Code python pour la Pi en master=== | ||
+ | <code python> | ||
+ | from time import time, sleep | ||
+ | from smbus2 import SMBus | ||
+ | |||
+ | addr = 44 | ||
+ | bus = SMBus(1) | ||
+ | sleep(0.1) | ||
+ | E = 0 | ||
+ | |||
+ | def request(): | ||
+ | global E | ||
+ | try: | ||
+ | b2 = bus.read_i2c_block_data(addr, | ||
+ | b = bytearray(b2) | ||
+ | pos = (b[0] << 8) + b[1] | ||
+ | except IOError: | ||
+ | pos = None | ||
+ | E += 1 | ||
+ | return pos | ||
+ | |||
+ | t = time() | ||
+ | n = -1 | ||
+ | e = 0 | ||
+ | nbr = 1000 | ||
+ | tempo = 0.03 | ||
+ | pos = 0 | ||
+ | while n < nbr: | ||
+ | n += 1 | ||
+ | pos1 = request() | ||
+ | # #if n % 200 == 0: | ||
+ | # # | ||
+ | if pos1 != pos: | ||
+ | pos = pos1 | ||
+ | print(pos) | ||
+ | sleep(tempo) | ||
+ | d = ((((time() - t)/nbr) - tempo))*1000 | ||
+ | print(" | ||
+ | print(" | ||
+ | bus.close() | ||
+ | """ | ||
+ | freq = 100 000 Hz avec adaptateur | ||
+ | Temps de transmission 0.93 ms | ||
+ | Nombre d' | ||
+ | freq = 100 000 Hz avec adaptateur et pull up | ||
+ | Temps de transmission 1.02 ms | ||
+ | Nombre d' | ||
+ | """ | ||
+ | </ | ||
+ | |||
+ | ===Code pour Arduino Leonardo=== | ||
+ | <code C++> | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | // Interrupt | ||
+ | const int ENC_Z = 7; | ||
+ | // Objet Encoder | ||
+ | Encoder myEnc(0, 1); | ||
+ | // I2C | ||
+ | const byte MY_ADDRESS = 44; | ||
+ | // Variable globale | ||
+ | long val = 0; | ||
+ | int hi = 0; | ||
+ | int lo = 0; | ||
+ | |||
+ | void index_ISR(){ | ||
+ | myEnc.write(0); | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | // | ||
+ | // I2C | ||
+ | Wire.begin (MY_ADDRESS); | ||
+ | Wire.onRequest(requestEvent); | ||
+ | |||
+ | pinMode(ENC_Z, | ||
+ | attachInterrupt(digitalPinToInterrupt(ENC_Z), | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | val = myEnc.read(); | ||
+ | delayMicroseconds(500); | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | } | ||
+ | |||
+ | void requestEvent () | ||
+ | { | ||
+ | //val = myEnc.read(); | ||
+ | byte buf [2]; | ||
+ | buf [0] = val >> 8; | ||
+ | buf [1] = val & 0xFF; | ||
+ | Wire.write (buf, 2); | ||
+ | } | ||
+ | </ | ||
+ | =====Pull-up Resistors===== | ||
+ | * https:// | ||
+ | * **[[https:// | ||
- | {{: | + | On tire le signal vers le **+** avec une résistance sur SDA et SDL: |
+ | {{ : | ||
communication_protocole_i2c.txt · Dernière modification : 2022/09/07 09:33 de serge