hilfe bei eeprom

hi, ich habe gerade eben einen kleinen counter mit display und der eeprom gebaut. wie man es erwartet zählt er hoch und wenn man ihn resettet macht er da weiter wo er aufhört. und dann hab ich weiter rumprobiert und finde es merkwürdig dass er sebst bei EEPROM.read(13107201) noch irgendwelche einträge findet... ich nutze den sainsmart uno R3 und wollte wissen wie viel addressen denn das ding hat oder gibts da vieleicht ein sketch für, dass so addressen durchprobiert bis es halt keine mehr gibt

hoffe ihr versteht mich ;) MFG Schulbus

Der UNO hat 1kB EEEPROM, also 1024 Byte und die Adressen gehen entsprechend von 0 bis 1023.

Was höhere Werte betrifft, kann ich mir denken, dass das vielleicht in der AVR libc abgefangen wird (z.B. durch eine Modulo Division): http://www.nongnu.org/avr-libc/user-manual/group__avr__eeprom.html Steht aber nicht dabei was genau gemacht wird.

ist die lib von der du sprichst auch die standard arduino lib für eeprom

Ich glaube auch daß einfach die höheren Stellen als 1023 nicht berücksichtigt werden und nur die untersten 10 Bit als Adresse verwendet werden. Dennoch würde ich mich auf Adressen von 0 bis 1023 beschrenken. Grüße Uwe

schulbus: ist die lib von der du sprichst auch die standard arduino lib für eeprom

Ja. Die Arduino EEPROM Library kapselt lediglich die zwei Byte Funktionen

Bei der Geschichte tritt auch noch ein normaler Integer Überlauf auf, da die Parameter der Arduino Funktion int sind, aber dann hat man immer noch Werte die Größer als der Speicher sind.

ok, trotzdem würde mich interessieren woher er dann die ganzen werte herbekommt, in addresse 32.000 war auch ne zahl drin gespeichert... ich kann 32.000 dann auch für den counter benutzen und es funktioniert dann auch wie gehabt...

oder speichert die eeprom lib dass vieleicht noch woanders ab?

Natürlich wird da nicht 32000 verwendet. Speicher mal in 32000 was ab und lese dann 256 aus. 32000 mod 1024 = 256

Das muss aber nicht so sein. Du kannst auch einfach mal über alle 1023 Adressen iterieren, alles auslesen und schauen wo es drin steht:

void findCell(byte value)
{
    for(int i = 0; i < 1024; i++)
    {
       if(EEPROM.read(i) == value)
       {
          Serial.print("gefunden @");
          Serial.println(i);
       }
    }
}