Saludos foreros picmaniacos.
Un gusto escribir este post y tratar de ser parte del engrandecimiento de este foro.
He teido muchos problemas con el protocolo I2c. Este proyecto es parte de un circuito de nanoposicionamiento a piezoeléctricos (de hecho de resolución subnanométrica, del orden de 1x10^-10 [m]). Para lo cual uso 3 DACs de 18 bits (X,Y y Z), más un cuarto que impondrá la corriente de tunelaje (del orden de 1 ó 2 [nA]). Bien, una parte de la instrumentación ya está comprada, la otra la diseño yo. Ya me comunicqué con los DACs (PCM69). Pero el sistema diseñado incluye un Master y 4 esclavos en bus I2c. El Master le dice a cada esclavo el paso que debe de tomar (voltaje de salida).
El problema objetivamente es que no recibo lo que quiero recibir, al menos no en el momento en que se supone debería recibirlo. Y lo peor, es que la comunicación entre los PICs se muere. Uso de Master: 16F886 y de Esclavo: PIC16F88. El 16F88 (que sólo puede ser Slave). He visto que muchísimos foreros tienen problemas de comunicación con bus I2c. Empecé con Isis, todo simulado, pero me cansé de hacer pruebas, navegando encontré que Isis no es muy confiable para el bus I2c. Pero debo decir que yo he hecho proyectos completos usando el bus I2c para memorias I2c EEPROMs. Y ese es el chiste, Isis sirve excelentemente con memorias I2c EEPROMs (y con los relojes DS130x), mas no estoy seguro de lo bien que funcione con otros dispos. Después de muchas pruebas abandoné ISIS y como en este momento, a depurar bit a bit. Para lo cual cuento con un logger digital que además es capaz de depurar I2c, SPI, etc...
Es uno de los mejores juguetes que he comprado, el logger digital me permite tomar muestras de hasta 24 [MHz] en un bus de 8 bits. Por 150 dólares, puedes ser la envidia de tus compañeros electrónicos
(
http://www.saleae.com/logic/features/ ). En fin, conectando todo, me dispuse a ver la comunicación, que no estaba del todo mal... En la imagen DSCN0584 se aprecia el circuito ( lo armé muy rápido, ya sé que se ve feo) y en la imagen DSCN0585 se ve el loger con su programa de fondo.
Ahora bien, el circuito usado es simplemente ambos PICs conectados a travás de clock y datos de I2c, más un led cada uno (sobre RB7), para comprobar que los PICs prenden y ejecutan su programa.
El problema... logré la comunicación, pero no es satisfactoria, de inicio el micro suele no responder bien cuando el Master quiere leer al Slave y lee 0xFF... pero después de algunas lecturas, los micros se ponen las pilas y empiezan la comunicación de lectura como debe de ser, es como si en lectura, al principio arrojara basura (ver imagen Log Completo y Log Primer Byte Read). La escritua, está bien, o eso parece (ver Log Primer Byte Write) Y lo más raro, es que aunque he colocado la lectura y escritura en un ciclo infinito, la comunicación se muere completamente a los casi 32 [ms] (y no, no hay WDT activado, ver final del log en imagen Log Completo). En un post, Nocturno comenta que es problema de overflow del buffer de I2c... no sé si eso me pase aquí.
Los programas son los expuestos (Master y Slave). Si alguien quiere ayudar, se lo agradecería mucho, por mi parte; rendirme no es opción, esto queda porque queda. Además, no he visto que nadie ponga a prueba el CCS a prueba por medio de un logger, y he visto muchos posts de intentos fallidos. Sería bueno postear una solución 100 % confiable, porque por más que navego, no hallo post que me oriente, o... ¿será que busco mal? Alguien ilumíneme si es así...