I2C y UART en el mismo PIC

Hola grupo.

Estoy intentando hacer que un pic reciba comandos por uart, los interprete y se comunique con un integrado vía I2C. Como ya sabeis la mayoría de pic de la serie 16 multiplexan los puertos, y usan la uart o usan i2c.

En algunos foros se propone usar la uart por hardware y emular i2c por soft o viceversa. O emplear un segundo pic de gama baja para eso. Puesto que yo sólo necesito comunicarme con el integrado i2c (pongamos que es un sensor) a intervalos determinados de tiempo se me ocurre que podría tener la uart activada y al recibir el comando del pc le mandara un XOFF (uso el cable de un viejo ratón, no tengo el hilo CTS) y apagara la uart para activar el i2c. Cuando terminara, apago el i2c, retomo la uart, envío los resultados y mando un XON.

¿Eso sería factible? Quiero decir si las tensiones en puertos comunes no dañarían ninguno de los dos. Los puertos de RX y TX de la UART se usan para SS y SDO, por lo que veo ninguno de estos interviene en la comunicación I2C. Utilizo un 16F88 para las pruebas, programando con picc. De no serlo ¿qué soluciones me recomendais?

He pensado también en utilizar un pic con dos uarts y poner una de ellas como i2c, pero puesto que no necesito full-duplex me parece matar moscas a cañonazos.

Saludos y gracias.

Reply to
Reinoso G.
Loading thread data ...

No sé de donde habrás sacado esas informaciones, pero que yo sepa, el típico

16F876 o el 16F88 del que hablas, tienen una UART y un puerto I2C completamente independientes. No comparten ni patillas, ni registros, ni hardware. De hecho yo he usado el 16F876 con ambos periféricos funcionando a la vez, para volcar el contenido de unas I2C EEPROM a un PC, a través del puerto serie.

Otra cosa sería hablar del puerto SPI, que en algunos PICs sí que comparte patillas con la UART.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Reinoso G." escribió en el mensaje news: snipped-for-privacy@news-3.escomposlinux.org...

y

soft

de

y

para

Reply to
Pepitof

Tambien tienes la opción de implementar el I2C o el SPI en unas I/O cualquiera mediante software si la velocidad no es un inconveniente.

"Pepitof" escribió en el mensaje news: snipped-for-privacy@individual.net...

típico

a

interprete

de

yo

sensor)

uart

resultados

serlo

a
Reply to
Microbio

El viernes pudimos ver a Reinoso G. diciendo:

No acabo de entender el problema, tú mismo lo dices: las patillas para la USART _no_ intervienen en I2C, ¿cuál es el conflicto?:

formatting link
pág. 60.

Desde luego, a nivel de tensiones, que es lo que te preocupa, no hay colisión porque físicamente no comparten nada (excepto el micro, claro). El único conflicto remotamente relacionado es el tema de los niveles TTL-RS232, que estoy seguro conoces (y los MAX232 y similares).

Reply to
Franois

Mi problema era, como bien dedujo Pepitof, que confundí las patas SDA y SCL del I2C con las funciones del puerto SPI, que sí utiliza RX y TX de la UART. De cualquier modo el micro que estoy usando parece que sólo tiene I2C slave, el modo master hay que hacerlo por firmware me ha parecido entender.

Si esto es así me da igual usar las patillas asignadas, que otras cualesquiera. Lo estoy haciendo así con las macros de HT-PICC y cambiando algunas cosillas (como que no manda la señal de stop cuando debe) ya he conseguido leer y escribir en una EEPROM tipo 24LCXX; es un comienzo.

Gracias a todos.

Reply to
Reinoso G.

Pues sí, es así de estúpido. Yo la primera vez que lo leí creía que era una errata, pero es así. De hecho no hay ningún modelo de PIC de 18 pines que incluya UART y I2C completo. No sé en qué están pensando los señores de Microchip...

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Reinoso G." escribió en el mensaje news: snipped-for-privacy@news-3.escomposlinux.org...

entender.

>
Reply to
Pepitof

Bueno, eso es otra historia :-(

Es más que un comienzo, si dialogas con un dispositivo, lo harás con cualquier otro. :-)

Reply to
Franois
¿Cuales son esas macros? ¿Hay forma de conseguirlas junto con alguna descripción de su uso?

Es que yo esoy un poco verde en ese compilador, y por ahora, los programas que he hecho me los he currado yo enteros, pero si hubiera macros ya escritas para ciertas cosas, me serían muy útiles.

--


Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124


"Reinoso G."  escribió en el mensaje
news:gp9m53-6c3.ln1@news-3.escomposlinux.org...

> Lo estoy haciendo así con las macros de HT-PICC...
Reply to
Pepitof

Pues sí, vienen con el compilador. En el directorio de samples. Al menos con la versión que me bajé de donde te puedes imaginar.

Por ejemplo para I2C viene un fichero que es i2c.h, que contiene los includes y demás parámetros como la dirección i2c, etc. Luego un i2c.c que vienen rutinas para manejar o emular un i2c en modo maestro, tienes que definir los pines correspondientes y ya. Y luego viene un i2cdemo.c donde ves cómo se usa todo junto.

En ese ejemplo en concreto yo tuve que cambiar algunas cosas practicamente triviales.

Por ejemplo para la UART también hay. Vienen unas macros para inicializarla y el generador de bitrate. Y está definida una función putch para poder usar la función printf dirigiendo la salida al puerto serie.

Hay ejemplos para el adc, temporizadores, interrupciones, etc. Francamente es extraño que no los hayas visto explorando el directorio.

Si no vienen con tu versión descárgate la última de la web oficial. Aunque no tengas la clave de actvación del software los ejemplos se te copian, y dudo que no funcionen con versiones anteriores.

Por cierto, bastante buena la integración de este compilador con el simulador de mplab, yo hasta hace poco programaba en asm y ha sido espectacular el avance en unos pocos días.

Me decanté por este compilador porque fue el primero que funcionó, probé hcw o algo parecido y no compilaba, se cerraba la aplicación, probé luego ht-picc y funcionó a la primera. Desconozco otros compiladores. ¿Cuál era el que usabas tú antes y qué tal funciona?

Saludos.

Reply to
Reinoso G.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.