Autor Tema: Bus i2c muuuy lento.  (Leído 1386 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Bus i2c muuuy lento.
« en: 23 de Enero de 2022, 14:33:19 »
Saludos al foro!

Por razones de hardware me veo obligado a usar un bus i2c muuuy lento. Hasta ahora lo he solventado mediante rutinas bit-bang pero me están empezando a dar problemas.

Si utilizo la librería i2c de CCS, #use i2c(master...etc) sí que me funciona pero cuando meto los periféricos lentos no.

Podría resolver todos mis problemas si hubiera una forma de bajar la velocidad del bus i2c.

Jugando con el parámetro FAST=xxxx he conseguido ralentizarlo pero no lo suficiente. He probado el i2c_speed pero al estar el bus implementado por software (un asunto de asignación de pines) no puedo utilizarla.

¿Alguna idea?

Gracias por anticipado!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Bus i2c muuuy lento.
« Respuesta #1 en: 23 de Enero de 2022, 16:02:06 »
Saludos al foro!

Por razones de hardware me veo obligado a usar un bus i2c muuuy lento. Hasta ahora lo he solventado mediante rutinas bit-bang pero me están empezando a dar problemas.

Si utilizo la librería i2c de CCS, #use i2c(master...etc) sí que me funciona pero cuando meto los periféricos lentos no.

Podría resolver todos mis problemas si hubiera una forma de bajar la velocidad del bus i2c.

Jugando con el parámetro FAST=xxxx he conseguido ralentizarlo pero no lo suficiente. He probado el i2c_speed pero al estar el bus implementado por software (un asunto de asignación de pines) no puedo utilizarla.

¿Alguna idea?

Gracias por anticipado!

Me parece que la mínima velocidad del I2C es 100 kbit/s y no creo que sean más baja la velocidad de tus periféricos que de la mínima velocidad normalizada.

Además, si tus dispositivo son lentos para comunicarse y a la vez utilizas los famosos delays en tu código, todo tu sistema va ir al ritmo de un un caracol.

Deberías intentar programar con en multitareas con máquina de estado, para que los procesos anteriores no se apropien del CPU del microcontrolador.
« Última modificación: 23 de Enero de 2022, 16:09:23 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:Bus i2c muuuy lento.
« Respuesta #2 en: 25 de Enero de 2022, 05:21:06 »
Gracias por tu respuesta!

La razón por la que debo utilizar un bus muuuuy lento es porque las líneas SDA y SCL están muy filtradas (Filtros RC y bobinas).

Respecto a la velocidad, en esta aplicación el ir "al ritmo de un caracol" no supone ningún problema sino todo lo contrario, eso es lo que busco.

Los periféricos I2C que utilizo funcionan sin problemas a velocidades bajas. Con las rutinas I2C por bit-bang he llegado a utilizar señales de 100ms (Unos 10 Hz) y todo va bien.

El problema es que con la librería del CCS no consigo ralentizar el bus lo suficiente. Mi pregunta iba por si hay algún parámetro o registro que se pudiera "tocar" para bajar la velocidad.

Gracias por anticipado!

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Bus i2c muuuy lento.
« Respuesta #3 en: 25 de Enero de 2022, 09:02:23 »
Gracias por tu respuesta!

La razón por la que debo utilizar un bus muuuuy lento es porque las líneas SDA y SCL están muy filtradas (Filtros RC y bobinas).

Respecto a la velocidad, en esta aplicación el ir "al ritmo de un caracol" no supone ningún problema sino todo lo contrario, eso es lo que busco.

Los periféricos I2C que utilizo funcionan sin problemas a velocidades bajas. Con las rutinas I2C por bit-bang he llegado a utilizar señales de 100ms (Unos 10 Hz) y todo va bien.

El problema es que con la librería del CCS no consigo ralentizar el bus lo suficiente. Mi pregunta iba por si hay algún parámetro o registro que se pudiera "tocar" para bajar la velocidad.

Gracias por anticipado!

Yo lo que sabía de un bus I2C es que sólo debe poseer las resistencias de pull-up y la distancia entre los dispositivos debe ser corta, pensaría que estás alterando la norma establecida I2C. Las capacitancias e inductores que aparecen son parásitas.

He buscado información en inglés de filtros en las líneas de un bus I2C, pero no logro encontrarlo, sería interesante conocer ese nuevo concepto. En tal caso serían filtros para altas frecuencia, mayores que la frecuencia de la señal de reloj (EMI) y no tendrías problemas para trabajar a frecuencias normales.

Lo que si he visto se utiliza para eliminar ruido y alcanzar distancias mayores, es la utilización de transmisión diferencial, al similar a RS485.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Bus i2c muuuy lento.
« Respuesta #4 en: 25 de Enero de 2022, 09:24:43 »
Gracias por tu respuesta!

La razón por la que debo utilizar un bus muuuuy lento es porque las líneas SDA y SCL están muy filtradas (Filtros RC y bobinas).

Respecto a la velocidad, en esta aplicación el ir "al ritmo de un caracol" no supone ningún problema sino todo lo contrario, eso es lo que busco.

Los periféricos I2C que utilizo funcionan sin problemas a velocidades bajas. Con las rutinas I2C por bit-bang he llegado a utilizar señales de 100ms (Unos 10 Hz) y todo va bien.

El problema es que con la librería del CCS no consigo ralentizar el bus lo suficiente. Mi pregunta iba por si hay algún parámetro o registro que se pudiera "tocar" para bajar la velocidad.

Gracias por anticipado!

Mira, encontré este documento para mejorar la inmunidad al ruido eléctrico en comunicación I2C:

https://www.latticesemi.com/-/media/LatticeSemi/Documents/WhitePapers/HM/ImprovingNoiseImmunityforSerialInterface.ashx?document_id=50728

Se utiliza filtros RC (pasa bajos), inductores pueden dar problemas:



Y los valores son los siguientes de las resistencias y capacitores son los siguientes:



Si tomamos un ejemplo, digamos RS1 = 180 y Cf = 130 pF, la frecuencia de corte es de 6.8 MHz, que es muy alejado de la frecuencia de reloj y por lo tanto podrías trabajar a las velocidades normales de operación del bus.

También pueden utilizar un filtro en la alimentación de las resistencias de pull-up:



Pero esto tampoco debería afectar a la velocidad normalizada de comunicación.







« Última modificación: 25 de Enero de 2022, 09:28:38 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado PicMinor

  • PIC16
  • ***
  • Mensajes: 222
Re:Bus i2c muuuy lento.
« Respuesta #5 en: 21 de Febrero de 2022, 04:21:56 »
Muchas gracias por la respuesta!

Totalmente de acuerdo con tus cálculos pero mi problema es que el hardware ya está fijado y para que te hagas una idea la capacidad C1 es del orden de 100nF y las resistencias RS1, etc son bobinas son del orden de 10 mH.

Mi problema consiste en bajar la velocidad del bus I2C "por hardware" del PIC slave a frecuencias de unos cientos de hertzios.

De todas formas visto lo visto tal vez no sea posible.

Un saludo!


 

anything