[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
es:howtos:hardware:arm:interfacing_i2c_devices [2019/07/20 20:08 (UTC)] – [Comunicación con un dispositivo I2C] rramp | es:howtos:hardware:arm:interfacing_i2c_devices [2019/07/31 01:42 (UTC)] (actual) – Traducción completa. Comentarios y sugerencias son bienvenidas. rramp | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | <note important> | ||
====== Conectando dispositivos I2C a tu sistema ====== | ====== Conectando dispositivos I2C a tu sistema ====== | ||
Circuito Inter-Integrado (I²C o más a menudo también escrito como I2C) es un bus multimaestro en serie de un solo extremo inventado por la división de semiconductores de Philips (consulte el artículo de wikipedia para obtener más información [[http:// | Circuito Inter-Integrado (I²C o más a menudo también escrito como I2C) es un bus multimaestro en serie de un solo extremo inventado por la división de semiconductores de Philips (consulte el artículo de wikipedia para obtener más información [[http:// | ||
Línea 7: | Línea 6: | ||
Para más información, | Para más información, | ||
- | |||
- | I²C uses only two bidirectional open-drain lines, Serial Data Line (SDA) and Serial Clock Line (SCL), pulled to logic level 1 by pullup resistors. Typical voltages used are +5 V or +3.3 V although systems with other voltages are permitted and are often encountered. This has an interesting implication: | ||
====== Prefacio ====== | ====== Prefacio ====== | ||
Línea 26: | Línea 23: | ||
Siempre que haya resuelto los problemas de nivel de tensión (consulte el capítulo " | Siempre que haya resuelto los problemas de nivel de tensión (consulte el capítulo " | ||
- | El bus es multimaster, lo que significa que puedes tener muchos dispositivos (hasta 101) en el mismo bus, así que todo lo que tienes que hacer es hacer 4 conexiones: Potencia, tierra, SDA y SCL. | + | El bus es multimaestro, lo que significa que puedes tener muchos dispositivos (hasta 101) en el mismo bus, así que todo lo que tienes que hacer es hacer 4 conexiones: Potencia, tierra, SDA y SCL. |
- | Si es el primer dispositivo que conecta en el bus, puede ser necesario instalar | + | Si es el primer dispositivo que conecta en el bus, puede ser necesario instalar |
===== Detectando dispositivos conectados ===== | ===== Detectando dispositivos conectados ===== | ||
Línea 99: | Línea 96: | ||
root@pi:~# | root@pi:~# | ||
| | ||
- | así que tenemos el registro c090 como nuestro registro de temperatura. De acuerdo a la hoja de datos este es representado como un complemento a 2 de la temperatura. | + | así que tenemos el registro c090 como nuestro registro de temperatura. De acuerdo a la hoja de datos este es representado como un complemento a 2 de la temperatura. |
- | So we got c090 as our temperature reading. According to the datasheet this value is a 2's compliment of the temperature. So let's try and figure out what that would be: c090 written in binary is 1100000010010000, | + | |
16528 - 32768 = -16240 | 16528 - 32768 = -16240 | ||
- | I was unable to find in the datasheet what units this reading is in but they did mention that there was an average offset of 13200. | + | |
+ | No pude encontrar en la hoja de datos en qué unidades se encuentra esta lectura, pero sí mencionaron que había una compensación promedio de 13200. | ||
35 + ((raw value + 13200) / 280)) | 35 + ((raw value + 13200) / 280)) | ||
35 + ((13200 - 16240)/280) = 24.14 | 35 + ((13200 - 16240)/280) = 24.14 | ||
- | Considering that my current ambient temperature is about 20 Celcius | + | Considerando que mi temperatura ambiente actual es cerca de 20 grados |
- | If you want a script | + | Si quieres un script |
#!/bin/bash | #!/bin/bash | ||
Línea 152: | Línea 149: | ||
echo " | echo " | ||
- | The above script | + | El script |
- | A bash script | + | Un script |
+ | La documentación del núcleo de Linux para i2c me pareció una referencia útil (<kernel source tree>/ | ||
- | I hate showing my poor C programming capabilities but here's some code that uses i2c-dev | + | Odio mostrar mis pobres capacidades de programación en C, pero aquí hay un código que usa i2c-dev |
#include < | #include < | ||
Línea 274: | Línea 272: | ||
- | ====== | + | ====== |
- | You may end up with heterogeneous voltage level devices and if you have many devices the correct way to work around this problem is by using bidirectional | + | |
- | This is how I connected my 5v IMU pcb to a 3.3v I2C bus on my RaspberryPI: | + | Usted puede terminar con dispositivos de nivel de voltaje heterogéneo y si tiene muchos dispositivos, |
+ | Así es como conecté mi PCB IMU de 5V a un bus I2C de 3.3V en mi Raspberry | ||
+ | Tomé como supuesto que 4.4 V (5V con un diodo en serie 1N4148) seguiría siendo una tensión de alimentación tolerable para toda la pcb IMU, lo que probablemente permitiría a todos los dispositivos I2C de la pcb IMU reconocer un mínimo de 3.08 V. (4.4 * 0.7) como la tensión de nivel lógico 1 más baja y fiable, lo que le permitiría interoperar con los niveles lógicos de 3.3V de la Raspberry PI. | ||
+ | No pude encontrar si la Raspberry Pi tiene Resistencias de pullups internas en el bus I2C o si tienen que ser colocados externamente, | ||
====== Fuentes ====== | ====== Fuentes ====== | ||
<!-- If you are copying information from another source, then specify that source --> | <!-- If you are copying information from another source, then specify that source --> |