Go Down

Topic: ¿importancia de las resistencias de pull-up y los transistores en el bus I2C ?  (Read 808 times) previous topic - next topic

HereFrank

Buen día. Soy nuevo en el mundo de arduino y en la electronica, y estoy entendiendo como se comunica con sus distintos dispositivos. He leído sobre el funcionamiento del protocolo de comunicación I2C y entiendo todas sus características, como las que funciona con dos cables, es bidereccional, es una comunicación master-slave,multi-master, half-duplex entre otros...

El problema radica en el momento que vengo a entender su estructura:



Me surgen varias preguntas  :

1) entiendo este protocolo usa unas resistencias pull-up, he investigado sobre ellas y permiten que la entrada de un pin digital este normalmente en ALTO. Sin embargo he visto que es usado normalmente por ejemplo con switches o pulsadores para evitar que en la entrada del pin llegue interferencia por efecto de que queda el cable al aire. En este caso, ¿cual es la finalidad de mantener todos los pin de entrada de todos los dispositivos , tanto el master como el slave en ALTO?, ¿ayuda a una mejor comunicación entre ellos o algo así?

2) En la imagen se muestra como cada dispositivo posee un transistor, creo, esta configuración se llama open colector, sin embargo he investigado sobre ella y no logro entenderla muy bien. Tengo una breve noción en mi cabeza de su función como puede ser:

  • el hecho de que el transistor permite llevar a tierra la linea a la que esta conectado cuando la base recibe una señal, y que eso es lo que permite la comunicación entre el Master y el slave
  • que evita que ocurra una falla en caso de que varios slaves intenten comunicarse con el maestro o que permite saber a cada dispositivo cuando la linea del bus esta ocupada.

 Pero es como si tuviera todas estas ideas dispersas en mi cabeza sin poder unir las partes.

De todas esas idea que sé acerca del transistor me surgen estas preguntas :

a) "Data out" , es lo que esta en la base del transistor, si el dispositivo 1 fuera un sensor, como un acelerometro por ejemplo, este tiene que mandar sus datos al master (microcontrolador del arduino), ¿el manda esa señal por medio del transistor entonces? recibe la señal analogica del fenomeno físico, lo convierte en una señal digital, y el mismo sensor tiene la capacidad de saber que por cada 1 que mande realmente lo que recibe el master es un 0. Digo esto ultimo porque lo que entiendo es que cuando sale un dato del sensor, imagino llega a la base del transistor, este coloca a tierra la línea de datos deseada haciendo que el master conectado a la linea reciba un 0.

b) Se dice que el transistor evita que ocurra una falla en caso de que varios slaves intenten comunicarse con el maestro ¿ por que  cuando un slave se comunica esta constantemente mandado de BAJA una linea de tal forma que los otros slaves saben que la linea esta ocupada? Haciendo que sea imposible el hecho de que 2 slaves se comuniquen al mismo tiempo ya que ellos para comunicarse tiene que saber el bus esta libre cosa que se sabe por medio del transistor.

c) Puedo observar que en la línea de reloj cada dispositivo tiene una Salida de reloj ("Clock out") conectada a un transistor ¿ el transistor igualmente permite al dispositivo generar el reloj? mandado un 1 para que la línea este de BAJA y un 0 para que la línea este de ALTA . Supongo esto depende del caso, porque por ejemplo no creo que un sensor pueda ser master, por lo tanto no creo pueda generar una salida de reloj.

3) ¿que simboliza el triangulo tanto de "Clock in" como de "Data in"? , ¿acaso ambos representan un circuito integrado o microcontrolador que reciben la señal para entenderla o procesarla de alguna manera?

Espero mis preguntas sean entendibles, si no es así haganmelo saber para aclararlas más , agradecería su respuesta.

Lucario448

1) entiendo este protocolo usa unas resistencias pull-up, he investigado sobre ellas y permiten que la entrada de un pin digital este normalmente en ALTO. Sin embargo he visto que es usado normalmente por ejemplo con switches o pulsadores para evitar que en la entrada del pin llegue interferencia por efecto de que queda el cable al aire. En este caso, ¿cual es la finalidad de mantener todos los pin de entrada de todos los dispositivos , tanto el master como el slave en ALTO?, ¿ayuda a una mejor comunicación entre ellos o algo así?
Correcto. Estabiliza el estado lógico de los bits, en especial cuando el bus tiene muchos esclavos y/o la distancia física es demasiada.


2) En la imagen se muestra como cada dispositivo posee un transistor, creo, esta configuración se llama open colector, sin embargo he investigado sobre ella y no logro entenderla muy bien. Tengo una breve noción en mi cabeza de su función como puede ser:

  • el hecho de que el transistor permite llevar a tierra la linea a la que esta conectado cuando la base recibe una señal, y que eso es lo que permite la comunicación entre el Master y el slave
  • que evita que ocurra una falla en caso de que varios slaves intenten comunicarse con el maestro o que permite saber a cada dispositivo cuando la linea del bus esta ocupada.
  • Correcto. Por esa razón I2C se considera "estado activo bajo"; al ser colector abierto, se tiene que activar la base del transistor para transmitir un cero (lógica invertida en este sentido, como una compuerta NOT).
  • Incorrecto. El maestro es el "árbitro del bus", y además lo que determina cuál esclavo debe actuar, solo los primeros 7 bits (dirección del esclavo) del byte inicial de toda transacción I2C. El conflicto en el bus ocurre cuando más de un esclavo escucha la misma dirección, y la transacción es de solicitud (lectura); el byte resultante viene siendo el AND de todos los bits transmitidos por todos los esclavos activos. El bus se desocupa cuando cuando ambas líneas SDA y SCL se mantienen en estado alto, usualmente después del último bit ACK.


a) "Data out" , es lo que esta en la base del transistor, si el dispositivo 1 fuera un sensor, como un acelerometro por ejemplo, este tiene que mandar sus datos al master (microcontrolador del arduino), ¿el manda esa señal por medio del transistor entonces? recibe la señal analogica del fenomeno físico, lo convierte en una señal digital, y el mismo sensor tiene la capacidad de saber que por cada 1 que mande realmente lo que recibe el master es un 0. Digo esto ultimo porque lo que entiendo es que cuando sale un dato del sensor, imagino llega a la base del transistor, este coloca a tierra la línea de datos deseada haciendo que el master conectado a la linea reciba un 0.
Así es. Cuando la transacción es de lectura, es el esclavo quien tiene control sobre la línea SDA (hasta que el maestro responda con un NACK); y sí, la lógica está invertida (para transmitir un cero, se activa la base del transistor)


b) Se dice que el transistor evita que ocurra una falla en caso de que varios slaves intenten comunicarse con el maestro ¿ por que  cuando un slave se comunica esta constantemente mandado de BAJA una linea de tal forma que los otros slaves saben que la linea esta ocupada? Haciendo que sea imposible el hecho de que 2 slaves se comuniquen al mismo tiempo ya que ellos para comunicarse tiene que saber el bus esta libre cosa que se sabe por medio del transistor.
Aquí no te puedo decir si es correcto o no, pero sé que el transistor es como un interruptor que manda la línea SDA a tierra; la detección de estados es con otro método.
Además, el esclavo que no se le haya "llamado", simplemente ignora las líneas (o las muestrea pasivamente si es un "sniffer"); esto hasta reconocer que la transacción ha terminado para así estar atento por si en la próxima le corresponde (dirección coincide).
El señalamiento de bus ocupado es relevante cuando hay múltiples maestros (de ahí que sean "árbitros").

c) Puedo observar que en la línea de reloj cada dispositivo tiene una Salida de reloj ("Clock out") conectada a un transistor ¿ el transistor igualmente permite al dispositivo generar el reloj? mandado un 1 para que la línea este de BAJA y un 0 para que la línea este de ALTA . Supongo esto depende del caso, porque por ejemplo no creo que un sensor pueda ser master, por lo tanto no creo pueda generar una salida de reloj.
A menos que el esclavo en algún "modo independiente" haga de maestro para hablar con un similar a manera de red interna, como una especie de escalabilidad sin microcontrolador. Normalmente, el maestro es quien debe proveer los pulsos del reloj, para así marcar el ritmo de cuándo se debe muestrear un bit en SDA.
La otra posibilidad es que se use para una técnica llamada "estiramiento del pulso del reloj"; con el objetivo de compensar cualquier desfase o rezago que el esclavo pueda tener al momento de enviar/recibir un byte.

3) ¿que simboliza el triangulo tanto de "Clock in" como de "Data in"? , ¿acaso ambos representan un circuito integrado o microcontrolador que reciben la señal para entenderla o procesarla de alguna manera?
Al no tener círculo en la punta, no es una compuerta NOT, ni dos entradas para que sea un comparador, amplificador operacional u otro tipo de compuerta; corríjanme si estoy equivocado, pero creo que simplemente simboliza una entrada digital.

HereFrank

    Quote
    a) "Data out" , es lo que esta en la base del transistor, si el dispositivo 1 fuera un sensor, como un acelerometro por ejemplo, este tiene que mandar sus datos al master (microcontrolador del arduino), ¿el manda esa señal por medio del transistor entonces? recibe la señal analogica del fenomeno físico, lo convierte en una señal digital, y el mismo sensor tiene la capacidad de saber que por cada 1 que mande realmente lo que recibe el master es un 0. Digo esto ultimo porque lo que entiendo es que cuando sale un dato del sensor, imagino llega a la base del transistor, este coloca a tierra la línea de datos deseada haciendo que el master conectado a la linea reciba un 0.

    RESPUESTA: Así es. Cuando la transacción es de lectura, es el esclavo quien tiene control sobre la línea SDA (hasta que el maestro responda con un NACK); y sí, la lógica está invertida (para transmitir un cero, se activa la base del transistor)
    Si el proceso es efectivamente como lo plantee me causa cierta interrogativa el proceso de transmisión de información de un sensor al arduino. Si el sensor recibe la señal analogica, y la convierte a digital para mandarla al arduino por el bus I2C entonces yo supongo que lo que el arduino recibe por medio del bus I2C son datos meramente digitales. Si es es así ¿por que son usadas las entradas analogicas A4 y A5 en un arduino uno para usar el bus I2C?. ¿No se deberían usar una dos entradas digitales? 

    Quote
    A menos que el esclavo en algún "modo independiente" haga de maestro para hablar con un similar a manera de red interna, como una especie de escalabilidad sin microcontrolador. Normalmente, el maestro es quien debe proveer los pulsos del reloj, para así marcar el ritmo de cuándo se debe muestrear un bit en SDA.
    La otra posibilidad es que se use para una técnica llamada "estiramiento del pulso del reloj"; con el objetivo de compensar cualquier desfase o rezago que el esclavo pueda tener al momento de enviar/recibir un byte
    Lo siento, no quede muy claro con tu respuesta quizás no me explique bien, me refiero a que en la imagen que mostré hay un transistor conectado a la linea de reloj en TODOS los dispositivos. Lo que yo quiero saber es :

    • si efectivamente ese transistor es para generar la señal de reloj (Igualmente con la logica inversa)
    • si esa imagen es como una especie de representación genérica, porque yo supongo que aquellos dispositivos que son "menos inteligentes" como un sensor no pueden generar el pulso de reloj, porque nunca serán master, por lo tanto no han de tener este transistor.

    Quote
    Al no tener círculo en la punta, no es una compuerta NOT, ni dos entradas para que sea un comparador, amplificador operacional u otro tipo de compuerta; corríjanme si estoy equivocado, pero creo que simplemente simboliza una entrada digital.
    Entonces he de suponer es la entrada digital al circuito integrado de por ejemplo un sensor, que recibe las directrices del master.[/list]

    Lucario448

    Si el sensor recibe la señal analogica, y la convierte a digital para mandarla al arduino por el bus I2C entonces yo supongo que lo que el arduino recibe por medio del bus I2C son datos meramente digitales. Si es es así ¿por que son usadas las entradas analogicas A4 y A5 en un arduino uno para usar el bus I2C?. ¿No se deberían usar una dos entradas digitales?
    Tu pregunta es válida.
    Efectivamente, I2C es un protocolo digital, pero el motivo por el que específicamente sean esos pines, es algo del fabricante del microcontrolador.

    Verás, el micro tiene casi la cantidad necesaria de pines para todos los periféricos que incorpora. Muchos pines son multifuncionales, por ejemplo, el pin A5 tiene las siguientes funciones:

    • Sexta entrada del multiplexor del ADC.
    • E/S de propósito general (exacto, funciona también como salida digital).
    • Está conectado al generador de pulsos de reloj de la interfaz I2C (SCL).
    • Es el bit 5 del puerto C ("puerto" es forma a "bajo nivel" de referirse a un grupo de GPIOs).
    • Es el disparador número 5 de la interrupción por cambio de estado (PCINT) del grupo C (esta interrupción hace posible funciones como SoftwareSerial).

    Dato curioso: los Arduinos basados en ATmega328P en realidad tienen tres GPIOs más que los disponibles en la placa: entre el pin 13 y los Ax hay dos, pero se usan para el oscilador externo de 16 MHz; el otro es nada más y nada menos que donde se conecta el botón de RESET. Para poder utilizarlos como GPIO, hay que cambiar uno de los "fuses" del micro.


    si esa imagen es como una especie de representación genérica, porque yo supongo que aquellos dispositivos que son "menos inteligentes" como un sensor no pueden generar el pulso de reloj, porque nunca serán master, por lo tanto no han de tener este transistor.
    Posiblemente sea una representación genérica pero de un maestro; el esclavo es opcional que tenga un transistor en SCL (y si no lo tiene para hacer las veces de maestro, lo hace para "estirar" el pulso del reloj)

    HereFrank

    Ok perfecto estoy totalmente claro, entonces se podría decir que se le dice entrada analógica supongo para agruparla de alguna manera, pero entonces se podría decir que a pesar es analógica tiene una especie de "funciones especiales" determinadas por el fabricante.

    Go Up