Lägga till I2C EEPROM till Arduino
24LS256 riktar sig enligt följande: 1010A2A1A0. Om du bara arbetar med 1 EEPROM, är det enklaste att ansluta A2-A0 med marken. Detta ger den adressen för 1010000 är 0 × 50 Hex. I läsning och skrivning till EEPROM måste man inse att det har 32 kB (actuall32767) och en byte är inte tillräckligt att ta itu med alla minne.
Så när man vill skicka läsa eller skriva ansökningar, man behöver skicka två byte – för MSB eller högre slutet av adressen (8 bitar från vänster till höger), och den nästa för LSB eller nedre delen av adressen (de sista 8 bitarna från vänster till höger).
Om man vill till exempel använda adress 21000, som går så här: I binärt, 21000 är 0101001000001000. Dela som i 01010010 och 00001000 och sedan konvertera binära värdena tillbaka till numeriska byte att skicka med Wire.send().
Att låter mer komplicerat än det är, som det finns faktiskt två operander till gör så pass. Den här första är >>, också känd som "bitshift rätt". Detta kommer att ta den högsta (vänstra) delen av byten och släppa av den nedre änden, lämnar bara de första 8 bitarna. För att få lägre (höger) slutet av adressen, kan man använda operatorn &, även känd som "bitvis AND". Här operanden, när den används med 0xFF ger lägre bitarna.
Skriva data till 24LS256
Skriva data är ganska lätt. Först initiera I2C bussen med:
Wire.beginTransmission(0x50); stift A0 ~ A2 inställd GND
Skicka sedan några data. Första data som ska skickas är två byte för adress (25000) var en önskar att skriva till minnet.
Wire.send (21000 >> 8); Skicka MSB i adressen
Wire.send (21000 & 0xFF); Skicka LSB i adressen
Därefter skickar byte att lagra på adress 21000 och sedan stänga anslutningen:
Wire.send(15); bara skicka "15" som exempel
Wire.endTransmission();
Detta avslutar skrivandet. nu för läsning:
Läsa data från 24LS256
Behandlingen är mer eller mindre liknande. Först initiera anslutningen och ange adressen till data att läsa:
Wire.beginTransmission(0x50); Valda basadress
Wire.send (21000 >> 8); Skicka MSB i adressen
Wire.send (21000 & 0xFF); Skicka LSB i adressen
Wire.endTransmission();
Sedan, tillhandahålla antal data-byte att läsa börjar på den aktuella adressen:
Wire.beginTransmission(0x50); basadress
Wire.requestFrom(0x50,1); Vi vill ha en byte
Wire.Receive(inbyte);
Här är "inbyte" en byte variabel valt att lagra data Hämtad från EEPROM.
Kraften i I2C bussen är ju att olika enheter kan anslutas till samma linjer. Översta bilden visar uppsättning med två EEPROMs. Det är nyckeln naturligtvis att de har egen adress. I figuren har jag valt att använda adresser 0 × 50 och 0 × 51. Man får som av ansluter A0-A2 till marken för ett chip, men ansluter A0 till Vcc ("hög") för den andra kretsen. Adressen som är då 1010001 = 0x51
Och det är det.
En utskrift design kan hittas här
Ca. kostnad: 2 euro