¿Siempre necesita un chip de expansión GPIO cuando usa i2c?

2

RESUMEN:

Estoy tratando de aprender lo básico para entender cómo cablear un circuito simple usando el i2c. Estoy deseando construir solo un proyecto simple que involucre un LED y un botón pulsador con mi frambuesa pi. Por lo que entiendo, el "pi" ya es compatible con i2c y i2c no es una pieza de hardware, es solo un protocolo de lo que entiendo.

Sin embargo, inicialmente pensé que todo lo que tenía que hacer era conectar el pulsador y el LED a los pines SDA y SCL en los pinouts de la "pi" y estaría bien. Pero al parecer necesito un chip de expansión o algún dispositivo similar que proporcione instrucciones y registro para dispositivos como el LED y el botón PushButton.

PREGUNTA_1:

¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

Ya ordené un 579-MCP3008-I / P y un 579-MCP23017-E / SP en caso de que tenga que hacerlo. No estoy seguro de lo que significa I / P o E / SP pero me dijeron que el MCP3008 y el MCP23017 eran buenos.

PREGUNTA_2:

De mi investigación aquí y al examinar el diagrama del circuito a continuación, pensé que (ESCLAVO) los dispositivos fueron mi LED y el pulsador y luego mi dispositivo (MASTER) fue mi "pi". Asumiré que mi pi es mi dispositivo MASTER, pero mi dispositivo ESCLAVO se considerará mi chip de expansión NO el LED o el botón de presión.

Por lo tanto, mi LED y el botón pulsador no son un dispositivo esclavo o maestro, solo es una extensión del DISPOSITIVO ESCLAVO que es el chip de expansión. Tengo este derecho

Saquémiconclusióndeloqueestoyentendiendo.Perdonamidibujoporqueséquenoestáaescala.¿Puedealguiencriticarmesientiendoonoestaconfiguraciónyestaterminologíacuandosetratadeesclavosymaestros?

    
pregunta Shane Yost

3 respuestas

4

Al comunicarse, debe haber un conjunto establecido de reglas sobre cómo interactuar. Al igual que cuando hablamos unos con otros, actualmente estamos utilizando el inglés. De manera similar, los chips deben tener un protocolo establecido sobre cómo se comunican para transferir datos entre ellos.

Al hablar, las reglas involucran el uso de sonidos que forman palabras, y luego reglas que describen cómo esas palabras van juntas para formar oraciones. Al escribir, tenemos símbolos que se juntan para formar palabras, y luego las mismas reglas sobre cómo las palabras se juntan para formar oraciones.

De la misma manera, tu chip tiene dos partes de comprensión. La primera parte es el protocolo, y la segunda parte es la interfaz. I2C tiene un protocolo y una interfaz al mismo tiempo. Describe la interfaz, que son las reglas de cómo un chip debe enviar electricidad a otro (como los sonidos para hablar o los símbolos para escribir). I2C también describe un protocolo, que son reglas sobre cómo interpretar esa información transmitida a través de la interfaz (como la sintaxis de una oración).

Ahora, los tipos de dispositivos que deben comunicarse mediante I2C son cosas como microcontroladores y computadoras. Cosas que tienen un nivel suficientemente alto de "comprensión" o al menos capacidad para pensar en cosas como "direcciones" y bytes. Cuando compra un dispositivo que enumera I2C (como este elegante led enlace ), entonces sabe que lo entenderá. esas reglas tanto para la interfaz como para el protocolo de I2C, y puede interactuar directamente con ella.

Un LED "normal" (como este: enlace ) no entiende nada como I2C. Es como una bombilla, ¡solo convierte la electricidad que recibe en luz! Debido a esto, no se puede "comunicar" con I2C. De la misma manera, un botón (como este: enlace ) tampoco habla I2C. Es como el interruptor que usaste. Si presiona el botón, conecta físicamente dos de los pines en el exterior. Si desea utilizar un botón o un LED como estos, debe buscar en algo denominado pines "Entrada / Salida de uso general", también llamado GPIO. Estos son los pines en su Raspberry PI que simplemente pueden enviar voltaje "hi" y "low" a un componente (como su LED), o leer si la electricidad en un pin es "hi" o "low" en sí misma.

Ahora, con todo eso fuera del camino, ¡déjame contestar algunas de tus preguntas reales!

P1) Por lo que entiendo, el "pi" ya es compatible con i2c y i2c no es una pieza de hardware, es solo un protocolo de lo que entiendo.

A1) Con una interfaz, es bastante tedioso e intensivo de CPU sentarse en un bucle y establecer repetidamente el pin "hi" y "low" y luego esperar un período de tiempo preciso para enviar sus datos. Como a menudo nos gustaría enviar los datos y luego hacer que la CPU haga algo más, muchos microcontroladores y CPUS incluyen secciones de hardware que comprenden cómo transformar los datos de una serie de bits en las señales eléctricas necesarias para comunicarse utilizando ciertos dispositivos. protocolos Dentro de tu raspberry pi, hay un conjunto especial de registros (o al menos ubicaciones de memoria) que, cuando se escriben, pueden hacer que algunos de tus pines se comporten de una manera consistente con las especificaciones I2C. Al hacer esto en Linux a través del kernel, esto puede ser bastante difícil, por lo que muchos diseñadores usarán "memmap" y / dev / mem para alternar esas ubicaciones de memoria directamente. Esto es bastante complicado y es probable que tenga que encontrar referencias más sustanciales de las que puedo proporcionar.

P2) ¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

A2) Como dije anteriormente, si no está dispuesto a usar los pines GPIO que ya están disponibles en la frambuesa pi, tendrá que encontrar un dispositivo que pueda transformar la información de I2C en una forma más sencilla que su LED y pulsador. botón "entender".

Q3) ¿Quién es el maestro y quién es el esclavo en mi bus I2C?

A3) Por lo tanto, solo hay un dispositivo en I2C que puede iniciar la comunicación a la vez. En este caso, el único dispositivo que debería ser un maestro es la frambuesa pi. Si, de hecho, tiene un botón pulsador que está habilitado para I2C, le dirá a la frambuesa pi que pregunte al botón esclavo "¿está presionado o no?" y el botón responderá, y luego usarás esa información.

Espero que ayude!

    
respondido por el Kit Scuzz
1
  

Estoy deseando construir solo un proyecto simple que incluya un LED y un botón pulsador con mi Raspberry Pi.

No necesitas I2C para eso. Usar I2C es una ingeniería excesiva inadecuada para leer un interruptor y encender y apagar un LED.

Desde tu circuito, diría que deberías probar este circuito primero y entender

  • Ley de Ohm
  • Por qué un LED no tiene una resistencia fija
  • El papel de una resistencia limitadora de corriente

simular este circuito : esquema creado usando CircuitLab

V1 serían dos baterías AA en un soporte.

El LED debe ser algo así como un LED "indicador" verde de 5 mm (no un LED diseñado para la iluminación). Debería ser barato porque lo vas a destruir.

Un LED de este tipo generalmente tiene un voltaje directo de 2V y está diseñado para iluminarse bien a una corriente de 10 mA. Sin embargo, si lo maneja a más de 2 V, la resistencia aparente disminuirá rápidamente (ya que es un dispositivo de unión semiconductor, no un dispositivo resistivo normal) y la corriente aumentará rápidamente hasta el punto donde la parte de trabajo del LED se calienta mucho. se quema.

Después de eso sugiero conectar un botón a (digamos) GPIO23 y un LED (más una resistencia limitadora de corriente) a GPIO24. Este ejemplo puede ser útil.

  

¿Necesito un chip de expansión GPIO para conectarme a mi "pi" antes de poder comenzar a conectar dispositivos usando la funcionalidad i2c?

No. Algunos dispositivos "hablan" I2C ellos mismos. Por ejemplo, el sensor de temperatura TMP100 . Puedes conectarlos directamente a una Raspberry pi. No necesitas un chip de expansión GPIO.

  

¿Quién es el maestro y quién es el esclavo en mi bus I2C?

La pi de frambuesa sería el maestro.

    
respondido por el RedGrittyBrick
0

El RPI tiene capacidad para i2c (no estoy seguro de si está basado en hardware o software, pero esa es otra historia), y tiene un GPIO básico.

I2C es un protocolo de bus direccionado, destinado a comunicarse entre un maestro y un esclavo (O múltiples maestros y múltiples esclavos). Tú (el usuario) le dices a Bob (el maestro) que le diga a Mike (el esclavo) que haga la tarea X, para la que Mike fue contratado.

GPIO, por otro lado, significa "Salida de entrada de propósito general". Le dices a Bob que haga la Tarea X, que puede ser encender una luz, y lee un interruptor para saber cuándo encender / apagar dicha luz.

El RPI se puede usar con pines GPIO directos para encender o apagar un led (es de 3.3v y solo es capaz de una salida de 20 mA directamente). IIRC, los pines SDA y SCL en el RPI se pueden usar tanto en el modo I2C como en el modo GPIO, pero como hay muchos pines GPIO solo, use esos en lugar de mezclarlos.

Entonces, para responder a su pregunta escrita, SÍ, i2c requiere un expansor de puerto GPIO i2c o un controlador led para encender / apagar un LED y para responder a su problema real NO, no lo hace No es necesario que I2C encienda / apague un LED, use los GPIO RPI en su lugar.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas