Forum: Mikrocontroller und Digitale Elektronik I²C EEPROM Verwalten/Organisieren (lesen)


von Rudolf Z. (rudolf_z37)


Lesenswert?

Hallo Fachleute,
ich bin gerade am Überlegen wie ich mein EEPROM das ich mit 
aufgezeichneten Daten gefüllt habe, auslesen soll.

Kurz zum Verständnis.
Alle 15 min macht mein Projekt eine Messung, der Messwert ist 1byte Groß 
und wird in ein I²C EEPROMgeschrieben. Dabei wird die EEPROM 
Speicheradresse immer um 1 höher gezählt.
Zusätzlich wird jeden Tag vor der ersten Messung das Datum in das EEPROM 
geschrieben. (RTC unterstützt)

Somit sieht mein EEPROM Inhalt wie folgt aus.
(ich fange bei der Adresse 0x65 (101) an weil ich noch andere Werte im 
vorderen Bereich speichere)

ERSTER TAG:
0x65 (101)  -->  255    Start/End Zeichen
0x66 (102)  -->  20     TAG
0x67 (103)  -->  11     MONAT
0x68 (104)  -->  12     JAHR
0x68 (105)  -->  xx     erster Messwert
……  (weitere Messwerte in Summe also 96)
0x68 (199)  -->  xx     Messwert
0xC8 (200)  -->  xx     letzter Messwert
ZWEITER TAG:
0xC9 (201)  -->  255    Start/End Zeichen
0xCA (202)  -->  21     TAG
0xCB (203)  -->  11     MONAT
0xCC (204)  -->  12     JAHR
0xCD (205)  -->  xx     Messwert
……  (weitere Messwerte in Summe also 96)
0x12B (299)  -->  xx    Messwert
0x12C (300)  -->  xx    letzter Messwert
Usw…….
Wenn ich das verständlich beschrieben habe, seht ihr das ein Tag bei mir 
immer 100Byte braucht.


Jetzt muss ich es irgendwie realisieren das ich einen bestimmten Tag im 
EEPROM finde.
Wie macht man das normalerweise / am besten?
•       Das EEPROM nach aufeinander folgenden Kombinationen Bsp.
       (255.21.11.12) durchsuchen? (alsojedes Byte auslesen und
        vergleichen) Habe testweise Probiert, 1000byte lesen und
        vergleichen dauert 7sec. Würde für mich bei 64Kbytezu lange
        dauern.
•       Oder versuche ich mich an der Adresse lang zu hangeln? Also
        gesuchtes Datum in die„wahrscheinliche“ Speicheradresse Wandeln.

Ich habe viel zu dem Thema gesucht, jedoch Leider nix gefunden. Ich 
denke ihr könnt mir bestimmt weiterhelfen, danke schon jetzt für 
Antworten.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, wenn du kontinuierlich schreibst, also alle 15min einen Datensatz, 
brauchst du den Zeitstempel doch gar nicht. Aber stört auch nicht 
weiter.

Zum Suchen: auch ganz einfach. Ersten Zeitstempel lesen, Adresse des 
gesuchten berechnen, fertig, dauert nicht mal 1ms.

Willst du wirklich suchen - dafür gibts auch schnelle Algorithmen.
-auf halber Speicherkapazität lesen
-Datensatz vorhanden?
-falls nein: untere "halbe Hälfte" lesen
-falls ja: Datum zu gross/zu klein/gerade passend?

Dementsprechend weiterverzweigen, findet man recht schnell.

von Schnupp (Gast)


Lesenswert?

Du liest einfach das Datum an der ersten Speicherstelle aus und dann 
ermittelst du die Differenz zwischen diesem Datum und dem gesuchten 
Datum. Die Differenz ergibt die Tagesdifferenz vom ersten Datum zum 
gesuchten Datum.

Dann liest du einfach die Speicherzellen ab Tagesdifferenz * 100 aus. So 
oder so ähnlich sollte es recht fix ohne viel Rechenaufwand gehen.

von Rudolf Z. (rudolf_z37)


Lesenswert?

Hallo Joachim,

danke für deine Antwort, das sind sehr gute Lösungen, wieso komm ich da 
nicht selber drauf.

Ich werde mir das jetzt mal ins Programm einbauen. Danke nochmal:)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.