Búsqueda personalizada
Como siempre: No es tan difícil como parece.
Alarma GSM con USB programable (3d)
Ampliación a través de I2C de la alarma
En ocasiones hay que tener una memoria que se pueda sustituir, ampliar, modificar, etc. Es posible la necesidad de más entradas o salida. Colocar un reloj independiente al microcontrolador. El puerto I2C no está de más implementarlo en el circuito.
En la búsqueda por el famoso Internet no he podido localizar como conectar dos memoria 24LC256 al mismo controlador usando la librería estándar de Ccs. Veamos que hay que hacer para poder conectar dos o más memorias (sirve para saber que hay que modificar en otras estándar de otros modelos de I2C).
Por lo general los pic tiene el hadware del I2C en el puerto N. Como está ocupado por el teclado, lo primero es cambiarlo a otro puerto. Como en el esquema se puede apreciar se ha colocado en el puerto E. Para poder trabajar por el hay que hacer una pequeña modificación en la librería estándar 24256.C del Ccs.
modificamos la original cambiando las patillas del SDA y SCL. por el puerto E según la conexión que se realice de las EEprom. El archivo quedaría así:
El protocolo de escritura dice que hay que enviar el primero el número de dispositivo. El número se programa con la conexión de las patillas del 24LC256 A0, A1 Y A2. Colocando todas a GND sería el dispositivo 0 y en forma binaria si colocamos A0 a Vdd sería el dispositivo 1, y así progresivamente.
El envío del número de dispositivo se envía en la línea 42 de la escritura y en la línea 58 que es de la lectura.
El dato en hexadecimal empieza por 'a' lo que indica que es una memoria... (Ver datasheet del dispositivo) que no se ha de modificar. De esa forma el dispositivo sabe que se le está ablando a el. Como hay un cero no se puede enviar datos a otro dispositivo. Lo mismo ocurre con la lectura de un dato. Para poder manejar más dispositivos hay que realizar unas modificaciones.
Lo primero es poder enviar un dato más. Para ello modificamos las dos funciones (subrutinas, para mi).Como es un número lo que enviamos le asignamos a cada subrutina una variable más a la que llamaremos 'dispositivo'. (Aunque aparecela variable como int hay que poner byte).
Ahora manipulamos el dato para adaptarlo. Se enviará el número de dispositivo (del 0 al 7). Según el protocolo I2C el bit de menos peso representa la lectura o escritura.
Corremos a la izquierda el número que enviamos y se le suma el tipo de dispositivo (recordar que la EEprom es el 0xA0). Con eso ya podemos escribir en la EEporm.
Realizar lo mismo en la lectura de la EEprom. Y modificar la línea en la que pide la lectura (las primeras son para identificar el dispositivo).
Ahora solo queda realizar la llamada al dispositivo cero (0) que funcionaba correctamente y llamar al dispositivo uno (1) que no funcionaba. Llamamos a la escritura y a la lectura del dato que escribimos
Indica la escritura en el registro 21 el dato a guardar es 0xD1 en el dispositivo 1. La lectura es del registro 21 del dispositivo 1. Se pasa al LCD
Y el resultado una vez ejecutado el programa es:
El dato enviado se visualiza en el LCD sin errores.
Como siempre: No es tan difícil como parece.
Gracias por visitar mi blog personal. Si te ha gustado:
haz el favor de hacer clic en los anuncios de google que aparecen al
principio de cada entrada y date una vuelta por por ellos. Son céntimos
lo que aporta pero me ayudas a seguir subiendo cosas. Gracias.
No hay comentarios:
Publicar un comentario