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 : de serge
