Problema con PIC16f877 y I2C

Hola, estoy intentando hacer lo siguiente:

Tengo dos PIC16f877 uno de ellos preprogramado para leer de una memoria serie 24LC512 y sacar una serie de datos. El otro PIC16f877 actualiza otra memoria igual a la anterior y contrala unos switch que intercambian el uso de las memorias.

Lo que quiero es mientras actualizo una memoria con el segundo PIC que el primero lea la otra memoria.Y asi sucesivamente, de modo que quedan independientes en cualquiera de los 2 casos:
pic1-memoria1 pic2-memoria2 y pic1-memoria2 pic2-memoria1

Lo que he hecho es quitar la memoria serie de la otra placa y coger los pines SCL y SDA y tomarlos como entrada del circuito ampliado que hace la seleccion y actualizacion de memoria.

El integrado de switch para el bus i2c que uso 74HC4066 que tiene 4 switch con 4 pines para controlarlos de modo independiente.


Mis dudas y problemas son:

1º Las resistencias pull-up las lleva la placa con el pic preprogramado, con las lines SDA y SCL las pongo delante de los 2 switch de modo que cada uno de los dos intregrados controla una memoria dando paso para un pic o el otro. Puesto que las señales van dos a dos (SCL y SDA) pues con 4 pines en lugar de 8 tengo controlados los switch.

A modo de prueba quito el segundo pic y dejo solo los switch y las dos memorias de modo que manualmente selecciono una u otra. Pero con una me funciona y con la otra no me lee bien los datos ni poniendola como inical ni al intercalarla (inicialmente las dos memorias tienen los mismos datos).

2º Cando coloque el segundo pic las resistencias pull-up las tengo que poner delante de ambas memorias o con poner dos antes de la entrada al pic sera suficiente?

Si alguien me puede hacer el esquematico con las pistas de mamera sencilla para hacer la placa x si tuviera algun error lo agradeceria.

3º Por ultimo preguntar que xq cuando programo un pic no saca exactamente lo que le digo por las patillas siendo una programacion sencilla. Tengo las appnotes de microchip si alguien puede que me de un ejemplillode como configuraria para cojer un dato del puerto D del pic y pasarlo a la memoria por I2C y depues hacer el cambio en los switch...

Ya se que es mucho pedir pero esque estoy bloqueado y no doy pie con bola :(

Gracias de antemano a todo el que conteste.

PD: Añado como adjunto un esquematico de mas menos como es, aunque no se si estara bien del todo asi que no me critiquen mucho

EDITO: pues no me deja añadirlo dice que extension dsn no permitida :(
lo he comprimido en rar y ahora si esta ^^
 

Adjuntos

  • piccam_175.rar
    6 KB · Visitas: 159
He estado mirando y tb me valdria el modo multimaestro pero no encuentro ningun ejemplo de como se usa y con el de las appnotes no me aclaro :(

Algun alma caritativa me echa una mano. Gracias ops:
 
La verdad es que no necesitas utilizar 2 Pics para tu aplicación, estas desperdiciando uno de estos ya que un solo pic de estos es mucho más que suficiente, lo que puedes hacer es utilizar un solo pic para que te haga lo que necesitas y colgar las dos memorias de la líneas SDA y SCL con sus resistencias pull-up a VCC, y revisar un poco el protocolo I2C para direccionar y manejar estas memorias por separado.
En la pagina de microchip hay tutoriales de I2C, con ejemplos para manejar memorias seriales, si buscas bien hay un ejemplo que es casi copiar y pegar y funciona bien.
Por otro lado, si no puedes manejar las dos memorias con un solo pic, entonces utiliza este ejemplo para cada pic. Aunque te digo que no hay nacesidad de utilizar dos pics para tu aplicación.
Si gustas me envias un mail, que yo te envio un ejemplo que maneja RTC DS1307, pero que es la misma cosa, a diferencia de la dirección del dispositivo (ya que cada dispositivo serial I2C tienen su propia dirección).
 
Última edición por un moderador:
fijense que andando con el mismo problema acerca de como conectar memorias I2C a un pic y leerlas asi como escribirlas correctamente me encontre un tutorial en español para utilizar todas las memorias seriales 24c02,24c04,24c08,24c16,24c32,24c64,24c128,24c256,24c512 y la 24c1025 asi como los ejemplos para conectarlas a cualquier tipo de pic, todos los ejemplos estan en ASM lenguaje ensamblador aqui:
 
Atrás
Arriba