EEPROMs son útiles si desea almacenar algunos datos sin perderlo. Muchos microcontroladores cuentan con algunas EEPROM interna, pero como EEPROMs tienen un número finito (aunque muy grande) de las escrituras antes empiezan a ser defectuoso, mi carácter retentivo anal siempre tuvo un problema con el uso de esa EEPROM interna.
Hay otras razones también por qué querrá usar una EEPROM externa: datos de registro en que solo quieren intercambiar un EEPROM, en lugar de tener que leer su microcontrolador en el campo.
De todos modos, sólo quería compartir un módulo EEPROM de estructura simple 5 minutos que es un poco más simple que una anterior que publiqué.
Lista de materiales
1 x EEPROM 24LC256 (o el otro tamaño)
4 k 7 resistencias 2 x
tiras de placa perforada 5 de 8
zócalo DIL IC de 8 pines (opcional)
Estoy usando una 24LC256. Es un kiloBIT 256 EEPROM por lo que en realidad sólo un 32 kilobytes EEPROM en mi forma de pensar tradicional. Estos no son de caros. Se puede tener para alrededor de 80 USD de ct.
Aunque la Junta se puede utilizar también para EEPROMS más pequeños, como un C 24 32, aconsejaría contra eso. Si eso es lo que necesita, comprar un módulo de RTC DS1307 ct 50 que incluye a 24C 32 (que es realmente 4kByte).
De todos modos, la 24LC256 es una EEPROM I2C, que es bastante estándar y que hace uso fácil
Pines A0, A1 y A2 seleccionan las direcciones I2C (A0 = pin1, A1 = pin1, A2 = pin3).
La dirección es la siguiente
1 | 0 | 1 | 0 | A2 | A1 | A0 | x |
Así que si conectas los pines A0, A1, A2 Dirección GND el I2C será 1010000 = 0 x 50 en hexadecimal.
Si conectas a Vcc será 1010111 = 0x57.
Como 0 x 50 es una dirección que es de uso frecuente, decidí conectar A2 y A1 A0 a Vcc, que da 0x51 y tierra. También hizo el diseño un tadd más simple.
7 el PIN es el pin 'WriteProtect' que necesita ser tirado alto para sólo lectura y bajo de lectura/escritura. Obviamente que conectado a tierra.
El levante de resistencias son ambos 4k 7
Usted encontrará muchas bibliotecas EEPROM en el Arduino Playground tienden a usar el siguiente código para leer y escribir:
void writeData(int device, unsigned int addr, byte data) // writes a byte of data 'data' to the chip at I2C address 'device', // in memory location 'add' { if ( addr > 65535 ) addr = addr | B00001000; Wire.beginTransmission(device); Wire.write((int)(addr >> 8)); // left-part of pointer address Wire.write((int)(addr & 0xFF)); // and the right Wire.write(data); Wire.endTransmission(); delay(10); } byte readData(int device, unsigned int add) // reads a byte of data from memory location 'add' in chip at I2C address 'device' { byte result; // returned value Wire.beginTransmission(device); // these three lines set the pointer // position in the EEPROM Wire.write((int)(add >> 8)); // left-part of pointer address Wire.write((int)(add & 0xFF)); // and the right Wire.endTransmission(); Wire.requestFrom(device, 1); // now get the byte of data... result = Wire.read(); return result; // and return it as a result of the function readData }
Notas especiales si utiliza el 24LC1025
Esta tabla puede utilizarse también para EEPROMS más grande, pero... Si lo usas para el 24LC1025, deberás hacer una pequeña adaptación. A2 debe vincularse con este chip a Vcc para funcione.
El 24LC1025 tiene una limitación de límite de direccionamiento interno que se divide en dos segmentos de 512K bits. Selección de bloque de bits 'B0' para controlar el acceso a cada segmento.
La dirección está determinada por 1010B0A1A0R /-W en el que el ' bloque select pedacito se utiliza para tratar la parte inferior o superior 512k bloquear el chip así tiene 2 direcciones diferentes. con la selección A0A1 como en mi tabla son:
1010101 = 0x55
1010001 = 0x51
Memoria de acceso de 0..65535 la dirección de I2C para el Chip de memoria es 0x51. Si desea acceder a memoria entre 65536..131071 la dirección de Chip es 0x55
No se puede escribir en el límite de bytes de 65535..65536 con la operación se rompe en dos llamadas write(). Uno a 0x51, el otro a la viruta 0x55 de la viruta.