TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: Marttyn en 22 de Octubre de 2008, 15:33:57

Título: Los pullup de I2C
Publicado por: Marttyn en 22 de Octubre de 2008, 15:33:57
Hola! estaba mirando el datasheet de una memoria I2C de microchip, y me encuentro que dice que el pin SDA necesita un pullup (normal), pero en el pin SCL no dice nada... eso quiere decir que el pullup no es necesario?

(http://i299.photobucket.com/albums/mm317/Marttyn/Electronica/mem.jpg)

yo estaba acostumbrado a este tipo de configuracion:

(http://www.robot-electronics.co.uk/images/i2ca.GIF)

Pero segun el datasheet me puedo ahorrar una resistencia...
Que opinais?
Salu2
Título: Re: Los pullup de I2C
Publicado por: Nocturno en 22 de Octubre de 2008, 15:37:10
Por el bien de tu comunicación I2C, no te ahorres esa resistencia  :D

No interpreto en ese trozo de la datasheet que no sea necesaria.
Título: Re: Los pullup de I2C
Publicado por: Marttyn en 22 de Octubre de 2008, 15:50:49
Es verdad, no especifica que NO sea necesaria, pero por logica, si te dice que SDA si necesita un pullup, y de SCL no dice nada me da a interpretar que no la necesita.... no?
Tampoco especifica si WP necesita o no un pull up, por eso se entiende que no lo lleva...
En todo el datasheet solo habla una vez de los pullup, y es en SDA
En realidad el costo de la resistencia no es el problema, sino la curiosidad de saber si es necesaria....
Tal vez para comunicacion I2C de otros dispositivos si sea necesaria, pero quizas este integrado no tiene SCL como colector abierto ¿?
No te preocupes, usare la resistencia  :D
Título: Re: Los pullup de I2C
Publicado por: Nocturno en 22 de Octubre de 2008, 16:09:43
Pensando en voz alta: el sentido de hacerlo no es otro que permitir que varios dispositivos se comuniquen a la vez sin que uno "pise" a otro. Imagina que uno está enviando un 1 a la vez que otro envía un 0.
Eso tiene sentido en la línea SDA porque es la única que todos los dispositivos pueden escribir.
La línea SCL sólo es gestionada por el que hace de master, así que quizás tengas razón y pueda prescindirse de esa pullup.
Título: Re: Los pullup de I2C
Publicado por: Marttyn en 22 de Octubre de 2008, 22:25:08
Pensando en voz alta: el sentido de hacerlo no es otro que permitir que varios dispositivos se comuniquen a la vez sin que uno "pise" a otro. Imagina que uno está enviando un 1 a la vez que otro envía un 0.
Eso tiene sentido en la línea SDA porque es la única que todos los dispositivos pueden escribir.
La línea SCL sólo es gestionada por el que hace de master, así que quizás tengas razón y pueda prescindirse de esa pullup.

La verdad esa explicacion tiene mucho sentido. El SCL siempre lo comandara un master, y si el master es un PIC, este puede enviar una señal de clock sin necesidad de un pullup (a menos que usemos el madito RA4  8))

Buscando por varios lados en todos dicen que las lineas SDA y SCL son drenador abierto, y que ambas necesitan pullup. Supongo que habra ICs que hagan de maestro sin ser un PIC, y seguro estos si necesitan el pullup.
Wikipedia (http://es.wikipedia.org/wiki/I%C2%B2C)
Robots Argentina (http://robots-argentina.com.ar/Comunicacion_busI2C.htm)

probare a ver que ocurre si no la pongo...
Título: Re: Los pullup de I2C
Publicado por: elmasvital en 23 de Octubre de 2008, 07:04:03
Tendrias que acudir al documento original de philips para verlo pero seguro que hay dispositivos master que tiene scl en colector abierto. Se dejará por compatiblidad.
Título: Re: Los pullup de I2C
Publicado por: Marttyn en 23 de Octubre de 2008, 15:14:23
Tendrias que acudir al documento original de philips para verlo pero seguro que hay dispositivos master que tiene scl en colector abierto. Se dejará por compatiblidad.

Seguramente que sea asi.
Igualmente, sin analizarlo mucho parece que los pics podrian prescindir de esa resistencia.
Tengo que probar.
Salu2
Título: Re: Los pullup de I2C
Publicado por: MGLSOFT en 23 de Octubre de 2008, 15:26:56
Por si las moscas, donde uso I2C pongo las dos pull-ups... :lol:
Título: Re: Los pullup de I2C
Publicado por: gONzAO en 04 de Abril de 2010, 13:40:53
Hola, aprovechando el hilo...

Algunos PICs, por ejemplo el 18F4550 tienen pull-ups internos en el puerto B. Ahí se encuentran los pines de las señales SDA y SCL.
¿Activar los pull-ups internos sería una alternativa a colocar pull-ups externos?
¿Alguien lo ha probado?
¿Funcionará con los pull-ups internos?

Gracias.
gONzAO
Título: Re: Los pullup de I2C
Publicado por: ASTROCAR en 04 de Abril de 2010, 15:59:31
Si es posible usar la resistencia interna pull up del micro solo tienes que decirle al pic que la vas habilitar ahora encuando a si el scl usa o no la resistencia y funciona bien en casos si pero cuando la eeprom a leer o escriber esta ya plenamente en un circuito establecido el mismo tiene su impedancia lo que seria mejor tener en el circuito programador externo de la eeprom i2c usan pull up tanto para la data como para el reloj.

Saludos y espero que se aclare el tema y para eso lo mejor es hacer las pruebas fisicas.
Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: Los pullup de I2C
Publicado por: gONzAO en 06 de Junio de 2010, 18:13:41
Hola a todos.
Estoy teniendo problemas con las comunicaciones I2C entre un PIC 18f4550 (@48MHz=12MIPS) y un par de chips: el expansor mcp23009 y el rtc ds3231.

El tema es que en ocasiones (bastante frecuente) las lecturas son incorrectas. Imagino que las escrituras también lo deben ser.
Utilizo las funciones de librería en MPLAB. Compruebo los valores devueltos por las funciones y no indican fallo.
He probado con muchos ejemplos, variando la velocidad... por lo que no creo que el codigo esté mal. De hecho, la simple escritura de un registro y la lectura a continuación no da el mismo valor que se escribió.
He comprobado que si ejecuto con el debugger, las escrituras y lecturas, paso a paso todo va correctamente.

¿Puede ser problema de las resistencias de pull-up?
Tengo colocadas resistencias de 10k. Creo que voy a cambiarlas por otras de 4k7.
¿Os ha pasado esto alguna vez?

Gonzalo
Título: Re: Los pullup de I2C
Publicado por: Diego E. en 06 de Junio de 2010, 23:46:26
Hola amigo, les cuento que en una oportunidad perdí casi un día tratando de realizar una comunicación I2C entre el PIC y otro dispositivo, todo esto se debía a que la resistencia pull-up en el pin SCL es fundamental, en algún punto de la comunicación el PIC  coloca este pin como entrada y obviamente la comunicación se llena de ruido si no está la resistencia entorpeciendo su funcionamiento.

saludos.
Título: Re: Los pullup de I2C
Publicado por: Menta en 07 de Junio de 2010, 02:27:57
Simplemente quiero recordar que el pull-up interno de los pic está constituido por transistores FET y no es lo mismo que una resistencia externa.
Además, creo que el pull-up de i2c debe tener valores aproximados de resistencia según la frecuencia máxima de trabajo
Finalmente, el pull-up en los pic se activa sólo si el pin se va a usar como entrada.

Creo que para el CLK, siendo el master el pic, no es necesario el pull-up.
Pero al menos si usan librerías de i2c de CCS creo que no va a funcionar si no se modifican estas librerías, ya que si mal no entiendo para sacar un 1 lógico usan output_float que en realidad pone el pin como entrada. Ojo con eso!!!
Título: Re: Los pullup de I2C
Publicado por: Marttyn en 07 de Junio de 2010, 05:34:03
Si, ten cuidado porque segun la velocidad que tengas puesta a la comunicacion i2c necesitaras pullups de menor valor. Yo siempre uso unas de 2k2
lo que parece claro es que si al hacer debug los valores que escribes son correctos, entonces hay un fallo de transmision.
Título: Re: Los pullup de I2C
Publicado por: RedPic en 07 de Junio de 2010, 07:45:12
Confirmo punto por punto lo que dicen los amigos Menta y Marttyn.

Por un lado las pull-up's internas se desconectan cada vez que un PIN de conmuta a salida y por otro un valor correcto para las pull-up's externa es de 2K2. Cuanto mas velocidad menor ha de ser el valor de las mismas, sin bajar de 2K. Un valor de 10K es útil para un PIN de en entrada digital pero es excesivo para un I2C.

Quiero recordar que por el Foro teníamos un hilo en que se discutía todo esto y se daban incluso las instrucciones para poder calcular el valor idóneo para un I2C a una velocidad dada. Voy a ver si lo encuentro.
Título: Re: Los pullup de I2C
Publicado por: Cryn en 07 de Junio de 2010, 13:51:02
Quizá un poquito de lo que está por acá (http://www.todopic.com.ar/foros/index.php?topic=23978.0) sirva para los cálculos de las pull-up en I2C
Título: Re: Los pullup de I2C
Publicado por: RedPic en 07 de Junio de 2010, 14:48:42
Estupendo, amigo Cryn, Si, era tu Cálculo y criterio de pull-ups en I2C (DS1307) (http://www.todopic.com.ar/foros/index.php?topic=23978.msg193580#msg193580) al hilo al que me refería.