El 24LS256 trata como sigue: 1010A2A1A0. Si sólo trabajas con 1 EEPROM, lo más fácil es conectar A2 A0 con tierra. Esto le da la dirección de 1010000 que es 0 × 50 hexagonal. En lectura y escritura a la EEPROM hay que darse cuenta de que tiene 32 kB (actuall32767) y un byte no es suficiente para atender toda la memoria.
Así que cuando uno quiere lee o escribe solicitudes, lo que tiene que enviar dos bytes, uno para la MSB o extremo más alto de la dirección (los 8 bits de izquierda a derecha) y otro para el LSB o extremo inferior de la dirección (el finales 8 bits de izquierda a derecha).
Si por ejemplo uno quiere usar dirección 21000, que va como sigue: en binario, 21000 es 0101001000001000. Divide en 01010010 y 00001000, luego convertir los valores de binario a numéricos bytes a enviar con Wire.send().
Que suena más complicado de lo que es, de hecho hay dos operandos para hacerlo. Este primero es >>, también conocido como 'derecho de enmascaramiento'. Esto llevará la parte más alta (izquierda) del byte y dejar el extremo inferior, dejando sólo los primeros 8 bits. Para obtener el extremo inferior (derecha) de la dirección, se pueden utilizar el operador &, también conocido como 'AND bit a bit'. Este operando, cuando se utiliza con 0xFF dará los bits más bajos.
Escribir datos en el 24LS256
Datos de la escritura están bastante fáciles. Primero inicializar el bus I2C:
Wire.beginTransmission(0x50); para pines A0 ~ A2 establece una toma de tierra
luego enviar algunos datos. Los primeros datos a enviar son los dos bytes de la dirección (25000) eran uno quiere escribir en la memoria.
Wire.Send (21000 >> 8); enviar el MSB de la dirección
Wire.Send (21000 & 0xFF); enviar el LSB de la dirección
Posteriormente enviar el byte para almacenar en dirección 21000 y luego cerrar la conexión:
Wire.Send(15); simplemente enviar '15' como ejemplo
Wire.endTransmission();
Concluye la escritura. ahora para la lectura:
Lectura de datos de la 24LS256
La lectura es más o menos similar. Primero inicializar la conexión y la dirección de los datos a leer:
Wire.beginTransmission(0x50); Dirección base elegido
Wire.Send (21000 >> 8); enviar MSB de la dirección
Wire.Send (21000 & 0xFF); enviar el LSB de la dirección
Wire.endTransmission();
Entonces, el número de bytes de datos a leer a partir de la actual dirección de la fuente:
Wire.beginTransmission(0x50); Dirección base de
Wire.requestFrom(0x50,1); Queremos un byte
Wire.Receive(inbyte);
Aquí, 'inbyte' es una variable byte seleccionada para almacenar los datos recuperados de la EEPROM.
La potencia del bus I2C es que varios dispositivos pueden conectarse a la misma línea. La figura superior muestra tan para arriba con dos EEPROMs. Es clave por supuesto que cada uno tiene su propia dirección. En la figura he decidido usar direcciones de 0 × 50 y 0 × 51. Uno obtiene por A0-A2 de conexión a tierra para un chip, pero conectando A0 a Vcc ('alta') para el segundo chip. La dirección resultante es entonces 1010001 = 0x51
Y eso es todo.
Un diseño de la impresión se puede encontrar aquí
Aprox. costo: 2 euros