EEPROMs van pas komen als u sommige gegevens opslaan wilt zonder verliezen. Vele microcontrollers komen met enkele interne EEPROM, maar zoals EEPROMs een eindige (hoewel zeer groot) aantal schrijft voordat hebben ze beginnen steeds defect, mijn anaal nulspanningsveilig karakter had altijd een probleem met het gebruik van die interne EEPROM.
Er zijn andere redenen ook waarom u zou willen gebruiken een externe EEPROM: gegevens inloggen die je gewoon wilt ruilen een EEPROM eerder dan moetend uw microcontroller in het veld voorgelezen.
Anyway, ik wilde alleen maar delen een eenvoudige 5 minuten bouwen EEPROM module die is een beetje eenvoudiger dan een voorafgaande die ik heb gepubliceerd.
Stuklijst
1 x 24LC256 EEPROM (of ander formaat)
2 x 4 k 7 weerstanden
klemmenstrook 5 strips van 8
8 pins DIL IC socket (optioneel)
Ik ben met behulp van een 24LC256. Dat is een 256 k EEPROM dus in feite alleen een 32 kiloBYTE EEPROM in mijn traditionele manier van denken. Deze zijn niet te duur. Annuleerteken zitten had voor ongeveer 80 ct USD.
Hoewel de Raad van bestuur kan ook worden gebruikt voor kleinere EEPROMS, zoals een 24C 32, zou ik adviseren tegen. Als dat is wat je nodig hebt, koop een 50 ct DS1307 RTC module met een 24C 32 (dus eigenlijk 4kByte).
Anyways, de 24LC256 is een I2C EEPROM, die is vrij standaard en welke maakt gebruik gemakkelijk
Pinnen A0, A1 en A2 Selecteer de I2C-adressen, (A0 = pin1, A1 = pin1, A2 = pin3).
De aanpak is als volgt
1 | 0 | 1 | 0 | A2 | A1 | A0 | x |
Als u verbinding maakt met pinnen A0, zal A1, A2 naar GND de I2C adres dus 1010000 = 0x50 in de hexadecimale notatie.
Als u verbinden met hen alle Vcc zullen het 1010111 = 0x57.
Als 0x50 een adres dat vaak wordt gebruikt is, besloten heb ik A2 en A1 verbinden met grond en A0 tot de Vcc, waardoor 0x51. Ook maakte het ontwerp een tadd eenvoudiger.
Pin 7 is de 'WriteProtect' pin die moet worden getrokken HIGH voor ReadOnly en laag voor lezen/schrijven. Uiteraard ik aangesloten op de grond.
De pull up weerstanden zijn beide 4k 7
U vindt vele EEPROM bibliotheken in de Arduino Playground ik ben geneigd te gebruiken de volgende code om te lezen en schrijven:
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 }
Speciale notities als met behulp van de 24LC1025
Dit bord kan ook worden gebruikt voor grotere EEPROMS, maar... als je het gebruiken voor de 24LC1025, moet u een kleine aanpassing. Met deze chip worden A2 moet gekoppeld aan de Vcc daarvoor te bedienen.
De 24LC1025 heeft een interne adressering grens beperking is verdeeld in twee segmenten van 512K bits. Blok selecteren bit 'B0' toegang tot elk segment.
De aanpak wordt bepaald door 1010B0A1A0R /-W waarin de ' Blok selecteren bits wordt gebruikt om aan te pakken van de lagere of hogere 512k blokkeren de chip heeft dus 2 verschillende adressen. met de selectie van de A0A1 zoals in mijn boord zijn die:
1010101 = 0x55
1010001 = 0x51
Voor geheugen is toegang van 0..65535 de I2C adres voor de geheugen-Chip 0x51. Als u toegang wilt tot geheugen tussen 65536..131071 is het Chip-adres 0x55
U kunt niet schrijven over de grens van de byte 65535..65536 met het breken van de werking in twee write() oproepen. Een chip van 0x51, de andere naar chip 0x55.