Enkel EEPROM modul för Arduino eller andra microcontroller
EEPROMs komma till hands om du vill lagra vissa uppgifter utan att förlora den. Många mikrokontrollers komma med vissa interna EEPROM, men eftersom EEPROMs har ett ändligt (men stort) antal skriver innan de börja bli felaktig, min anal glans karaktär alltid haft problem med att använda det interna EEPROM.
Det finns andra skäl för varför du kanske vill använda en extern EEPROM: data inloggning som du bara vill byta en EEPROM snarare än att läsa upp din mikrokontroller i fältet.
Hur som helst, jag ville bara dela en enkel 5 minuters bygga EEPROM modul som är lite enklare än en tidigare jag publicerade.
BOM
1 x 24LC256 EEPROM (eller andra storlek)
2 x 4 k 7 motstånd
stripboard 5 remsor av 8
8-pin DIL IC socket (valfritt)
Jag använder en 24LC256. Det är en 256 kiloBIT EEPROM så i själva verket endast 32 kiloBYTE EEPROM i min traditionella sätt att tänka. Dessa är inte dyrt. Kan fås för runt 80 ct USD.
Även om styrelsen kan också användas för mindre EEPROMS, som en 24C 32, skulle jag avråda från att. Om det är vad du behöver, köpa en 50 ct DS1307 RTC modul som inkluderar en 24C 32 (vilket är faktiskt 4kByte).
Hur som helst, 24LC256 är en I2C EEPROM, vilket är ganska standard och som utnyttjar lätt
Pins A0, A1 och A2 Välj I2C adresser, (A0 = pin1, A1 = pin1, A2 = pin3).
Kampanjen är följande
1 | 0 | 1 | 0 | A2 | A1 | A0 | x |
Om du ansluter stift A0, kommer A1, A2 till GND I2C adress alltså 1010000 = 0x50 hexadecimalt.
Om du ansluter dem alla till Vcc man 1010111 = 0x57.
Som 0x50 är en adress som används ofta, beslöt jag att ansluta A2 och A1 till marken och A0 till Vcc, vilket ger 0x51. Det gjorde också designen en tadd enklare.
Stift 7 är "WriteProtect" PIN-koden som måste dras hög för ReadOnly och låg för läsning/skrivning. Självklart anslutit jag den till marken.
Dra upp motstånd är båda 4k 7
Du kommer att hitta många EEPROM bibliotek i Arduino Playground jag tenderar att använda följande kod för att läsa och skriva:
void writeData (int enhet, unsigned int addr, byte data)
skriver en byte data 'data' till chipet på I2C adress "enhet",
i minnesplatsen 'Lägg till'
{
om (addr > 65535)
addr = addr | B00001000;
Wire.beginTransmission(device);
Wire.write((int)(addr >> 8)); vänster-en del av pekaren adress
Wire.write((int)(addr & 0xFF)); och rätt
Wire.write(data);
Wire.endTransmission();
Delay(10);
}
byte readData (int enhet, unsigned int Lägg)
läser en byte av data från minnet plats 'Lägg till' i chip på I2C adress "enhet"
{
byte resultatet; värdet som returneras
Wire.beginTransmission(device); dessa tre rader ställa pekaren
placera i EEPROM
Wire.write((int)(Add >> 8)); vänster-en del av pekaren adress
Wire.write((int)(Add & 0xFF)); och rätt
Wire.endTransmission();
Wire.requestFrom (enhet, 1); nu får de data-byten...
resultat = Wire.read();
returnera resultat; och returnera den till följd av funktionen readData
}
Särskilda anmärkningar om använder 24LC1025
Denna styrelse kan också användas för större EEPROMS, men... om du använder det för 24LC1025, måste du göra en liten anpassning. Med detta chip knytas A2 måste till Vcc för att det ska fungera.
24LC1025 har en inre adressering gränsen begränsning som är uppdelad i två segment av 512K bitar. Block Välj bit "B0" att kontrollera åtkomst till varje segment.
Adressing bestäms av 1010B0A1A0R /-W där den "Block Välj bit används för att ta itu med lägst eller högre 512k blockera chip har således 2 olika adresser. med A0A1 val som i min bräda är de:
1010101 = 0x55
1010001 = 0x51
För minnet är tillgång från 0..65535 I2C adressen för minneschip 0x51. Om du vill komma åt minnet mellan 65536..131071 är Chip adressen 0x55
Du kan inte skriva över 65535..65536 byte gränsen med bryta operationen i två anropa samtal. En chip 0x51, den andra till chip 0x55.