Version 0.3 vom 06.01.2016 12:52:30
Einsetzbar mit der Arduino IDE. Die Lib basiert auf Wire.
I2C EEProm Library für Arduino, evtl. in einer neueren Fassung
Dieses Dokument, evtl. in einer neueren Fassung
- Größtenteils aufrufkompatibel mit der Arduino EEPROM Lib
- Unterstützung vieler I2C EEProms
- Relativ einfache Erstellung von User definierten EEProms
- Geringer RAM Verbrauch
Hinzufügen weiterer EEProms ist jederzeit möglich.
Atmel | |||
Classname | Size | Page Size | Adressmode |
AT24C01 | 128 | 8 | 1 |
AT24C02 | 256 | 8 | 1 |
AT24C04 | 512 | 16 | 1 |
AT24C08 | 1024 | 16 | 1 |
AT24C16 | 2048 | 16 | 1 |
AT24C32 | 4096 | 32 | 2 |
AT24C64 | 8192 | 64 | 2 |
AT24C128 | 16384 | 64 | 2 |
AT24C256 | 32768 | 64 | 2 |
AT24C512 | 65536 | 128 | 2 |
STMicroelectronics | |||
Classname | Size | Page Size | Adressmode |
M24C01 | 128 | 16 | 1 |
ST24C01 | 128 | 8 | 1 |
M24C02 | 256 | 16 | 1 |
ST24C02 | 256 | 8 | 1 |
M24C04 | 512 | 16 | 1 |
ST24C04 | 512 | 8 | 1 |
M24C08 | 1024 | 16 | 1 |
ST24C08 | 1024 | 16 | 1 |
M24C16 | 2048 | 16 | 1 |
M24C32 | 4096 | 32 | 2 |
M24C64 | 8192 | 32 | 2 |
M24128 | 16384 | 64 | 2 |
M24256 | 32768 | 64 | 2 |
M24512 | 65536 | 64 | 2 |
Microchip | |||
Classname | Size | Page Size | Adressmode |
MC24C01C | 128 | 16 | 1 |
MC24AA02E48 | 256 | 8 | 1 |
MC24AA025E48 | 256 | 16 | 1 |
Für eine Menueführung wollten viele Strings verwaltet werden. Selbst das F() Macro war nur bedingt hilfreich, es wurde knapp mit dem Flash Speicher. Das im AVR eingebaute EEPROM hat am Anfang Linderung gebracht, aber mit zunehmender Größe des Projektes reichte es auch nicht mehr. Und sowieso sind die EEProms des AVR eher klein.
Abhilfe versprach das sowieso schon auf der verwendeten RTC verbaute Atmel AT24C32 I2C EEProm. Bei der Suche nach brauchbaren Libs ist mir einiges Gutes unter gekommen. Aber auch viele gruselige Dinge. Was aber allen gemeinsam war, sie decken nur wenige Typen ab. Und jede Lib hat ihre eigenen Methoden, welche wenig Ähnlichkeiten mit den Methoden der original Arduino EEProm Lib haben.
Diese Library liegt als Zip Datei vor. Im Library Manager der Arduino IDE, die Zip Datei auswählen und installieren.
Hauptmenu -> Sketch -> Include Library -> Add .ZIP Library
Diese Lib basiert auf Wire. In der setup() Funktion muss ein Wire.begin() gemacht werden. Die verwendeten EEProms müssen das "ACKNOWLEDGE POLLING" beherrschen.
Hier die status.ino aus den examples/Beispielen der Library#include <Wire.h> #include <I2C_EEPROM.h>AT24C32<> eep; // Das EEProm auf der china üblichen RTC, default Adresse 0x50 (80)
void setup() { Serial.begin(9600); Wire.begin();
// die Speichergröße des EEProm wird in der Klasse gespeichert // kann also ausgelesen werden, ohne dass das EEProm wirlich // bereit ist Serial.print("EE Prom lenth: "); Serial.println(eep.length());
if(eep.ready()) // eeprom bereit ? { // eeprom wurde gefunden, und ist bereit Serial.println ("EEProm ist bereit!"); }else { // eeprom hat nicht geantwortet // Auch direkt nach dem schreiben blockiert das eeprom ein paar ms Serial.println("EEProm ist nicht bereit, Verkabelung prüfen "); } }
void loop() {
}
Eine Methode begin() gibt es nicht. Es besteht hier keine Notwendigkeit für eine solche Methode.
Length gibt die größe des EEProms zurück.
Read liest 1 Byte von der angegebenen Adresse
Write schreibt 1 Byte an die angegebenen Adresse
Update nutzt intern read() und write(). Es wird nur geschrieben wenn sich die Daten unterscheiden.
Put schreibt einen beliebigen Variableninhalt an gegebenen Adresse. Die notwendige Länge wird selbst berechnet. put() ruft intern update() auf.
Get liest einen beliebigen Variableninhalt von der gegebenen Adresse. Die notwendige Länge wird selbst berechnet.
Nicht implementiert.
Ready liefert true, wenn der Baustein bereit ist.
fastBlockWrite schreibt einen beliebigen Datenblock an die angegebene EEProm Addresse. Das Paging wird intern abgehandelt.
fastBlockRead liest einen beliebigen Datenblock von der angegebenen EEProm Addresse. Das Paging wird intern abgehandelt.
fastBlockRead() und fastBlockWrite() sind deutlich fixer (ca 6 mal), als put() und get(). Der Geschwindigkeitsvorteil wird erkauft durch den Verzicht auf das vorherige prüfen, ob sich die Daten unterscheiden. Desweiteren wird das Page schreiben/lesen der Bausteine unterstützt.
Nach Schreibvorgängen braucht das EEProm etwas Zeit um den Vorgang abzuschließen. Hier kann eine Callback Funktion aufgerufen werden um diese Zeit zu nutzen. Es ist nicht ratsam, in der Callback Funktion, weitere EEProm Aufrufe zu tätigen.