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édente | ||
communication_protocole_i2c [2022/09/07 08:45] – [Exemple entre Raspberry Pi et Arduino Leonardo] serge | communication_protocole_i2c [2022/09/07 09:33] (Version actuelle) – [Communication avec le protocole I2C] serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Communication avec le protocole I2C ====== | ====== Communication avec le protocole I2C ====== | ||
+ | {{ : | ||
=====Ressources===== | =====Ressources===== | ||
Ligne 7: | Ligne 7: | ||
* **[[https:// | * **[[https:// | ||
* https:// | * https:// | ||
+ | |||
+ | |||
+ | =====Installation sur une Pi===== | ||
+ | |||
+ | 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===== | =====Exemple à revérifier===== | ||
* https:// | * https:// | ||
- | |||
=====Exemple entre Raspberry Pi et Arduino Leonardo===== | =====Exemple entre Raspberry Pi et Arduino Leonardo===== | ||
Ligne 20: | Ligne 62: | ||
from smbus2 import SMBus | from smbus2 import SMBus | ||
- | + | addr = 44 | |
- | addr = 42 | + | |
bus = SMBus(1) | bus = SMBus(1) | ||
- | sleep(1) | + | sleep(0.1) |
E = 0 | E = 0 | ||
Ligne 29: | Ligne 70: | ||
global E | global E | ||
try: | try: | ||
- | b2 = bus.read_i2c_block_data(addr, | + | b2 = bus.read_i2c_block_data(addr, |
b = bytearray(b2) | b = bytearray(b2) | ||
pos = (b[0] << 8) + b[1] | pos = (b[0] << 8) + b[1] | ||
Ligne 41: | Ligne 82: | ||
e = 0 | e = 0 | ||
nbr = 1000 | nbr = 1000 | ||
- | print(" | + | tempo = 0.03 |
+ | pos = 0 | ||
while n < nbr: | while n < nbr: | ||
n += 1 | n += 1 | ||
pos1 = request() | pos1 = request() | ||
- | | + | |
- | pos2 = request() | + | # #print(pos1) |
- | sleep(0.025) | + | if pos1 != pos: |
- | if pos1 and pos2 and nbr % 2 == 0: | + | pos = pos1 |
- | print(pos2 - pos1) | + | print(pos) |
- | + | | |
- | + | d = ((((time() - t)/nbr) - tempo))*1000 | |
- | d = ((((time() - t)/nbr) - 0.035)*1000) | + | print(" |
- | print(" | + | |
print(" | print(" | ||
bus.close() | 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' | ||
+ | """ | ||
</ | </ | ||
Ligne 61: | Ligne 110: | ||
<code C++> | <code C++> | ||
#include < | #include < | ||
- | #include <AS5048A.h> | + | #include <Encoder.h> |
- | // 10 = SS | + | // Interrupt |
- | // false = no debug | + | const int ENC_Z = 7; |
- | AS5048A angleSensor(10, false); | + | // Objet Encoder |
+ | Encoder myEnc(0, 1); | ||
+ | // I2C | ||
+ | const byte MY_ADDRESS = 44; | ||
+ | // Variable globale | ||
+ | long val = 0; | ||
+ | int hi = 0; | ||
+ | int lo = 0; | ||
- | const byte MY_ADDRESS = 42; | + | void index_ISR(){ |
- | int val = 0; | + | |
+ | } | ||
- | void setup() | + | void setup() { |
- | | + | //Serial.begin(115200); |
- | // Capteurs Panauto | + | // I2C |
- | | + | Wire.begin (MY_ADDRESS); |
+ | Wire.onRequest(requestEvent); | ||
- | Wire.begin | + | pinMode(ENC_Z, INPUT_PULLUP); |
- | | + | |
- | } | + | } |
- | void loop() {} | + | void loop() { |
+ | val = myEnc.read(); | ||
+ | delayMicroseconds(500); | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | | ||
void requestEvent () | void requestEvent () | ||
- | | + | |
- | int ang = angleSensor.getRotationInDegrees()*10; | + | // |
- | + | byte buf [2]; | |
- | val = ang; | + | buf [0] = val >> 8; |
- | byte buf [2]; | + | buf [1] = val & 0xFF; |
- | buf [0] = val >> 8; | + | Wire.write (buf, 2); |
- | buf [1] = val & 0xFF; | + | } |
- | Wire.write (buf, 2); | + | |
- | } | + | |
</ | </ | ||
=====Pull-up Resistors===== | =====Pull-up Resistors===== | ||
- | https:// | + | * https:// |
+ | * **[[https:// | ||
- | {{: | + | On tire le signal vers le **+** avec une résistance sur SDA et SDL: |
+ | {{ : | ||
communication_protocole_i2c.1662540353.txt.gz · Dernière modification : 2022/09/07 08:45 de serge