Forum: Mikrocontroller und Digitale Elektronik Messwerte auf Externen EEPROM speichern


von Peter H. (borntopizza)


Angehängte Dateien:

Lesenswert?

Hi zusammen,

ich möchte mir ein kleines Geräte bauen, mit dem ich diverse Spannungen 
alle 2-3 Sekunden messen kann, um z.B. den Ladevorgang von Akkus 
Graphisch darstellen kann. Dazu würde ich einen Arduino UNO oder NANO 
verwenden und einen externen EEPROM, auf dem die Messwerte gespeichert 
werden sollen, damit  ich diese dann später am PC abrufen kann. Ich 
hätte folgende EEPROM´s zur Auswahl:

SDA 2526
SDA 2546
24C08B1
SDA 3526.

Ich habe gestern erst mal versucht mit folgender Anleitung 
http://www.netzmafia.de/skripten/hardware/Arduino/EEPROM.html Werte in 
den EEPROM zu speichern und anschliessen wieder auszulesen. Jedoch gibt 
mir der Serielle Monitor immer nur eine 2 aus. Aufgebaut habe ich das 
wie das Bild im Anhang zeigt, nur mit dem SDA2526.

Könnt ihr mir helfen, damit ich wenigstens mal einen Wert auf den EEPROM 
speichern und wieder auslesen kann.

Danke und viele Grüße!

Peter



#include <EEPROM.h>

// Groesse des EEPROMs
#define EESIZE 1024

int rnd_nr, i;

void setup()
  {
  Serial.begin(9600);
  Serial.println("Schreibe Zufallszahlen ...");
  for (i = 0; i < EESIZE; i++)
    {
    rnd_nr = random(255);
    EEPROM.write(i, rnd_nr);
    }
  Serial.println("Lese EEPROM ...);
  for (int a=0; a < EESIZE; a++)
    {
    rnd_nr = EEPROM.read(a);
    Serial.print("Adresse: ");
    Serial.print(a);
    Serial.print(" Inhalt: ");
    Serial.println(rnd_nr);
    delay(25);
    }
  }

void loop()
  {
  /* Empty loop */
  }

Das folgende Programm zeigt das Lesen und Schreiben von Float oder 
Strings.

#include <EEPROM.h>

void setup()
  {
  float f = 123.456;              /* Float zum Schreiben */
  float g;                        /* Fuer das Lesen */
  char Hello[] = "Hello World!";  /* String */
  char Buffer[100] = {0};         /* Fuer das Lesen */

  int adresse = 0;              /* EEPROM-Startadresse */

  Serial.begin(9600);

  EEPROM.put(adresse, f);       /* Float schreiben */
  adresse += sizeof(float);     /* Groesse eines Float addieren */
  EEPROM.put(adresse, Hello);   /* String schreiben */

  adresse = 0;                  /* Adresse wieder auf 0 setzen */
  EEPROM.get(adresse, g);       /* Daten einlesen und Ausgeben */
  Serial.println(g, 3);
  adresse += sizeof(float);
  EEPROM.get(adresse, Buffer);
  Serial.println(Buffer);

  /* Hexdump EEPROM */
  for (int i = 0; i < (sizeof(float)+sizeof(Hello)); i++)
    Serial.println(EEPROM[i],HEX);
  }

void loop() {
  /* Empty loop */
}

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Vorweg: der SDA2526 ist ein sehr altes Device und hat sowieso nur 256 
Speicherzellen à 8 Bit. (#define EESIZE 256)
Der Schlüssel liegt aber in der Adresse des Chips. Wenn du alle 
Adressleitungen (A0-A2) mit Masse verbindest, ist die I²C Adresse 0xA0, 
bzw, in der 7-bit Schreibweise 0x50. Daraufhin überprüfe mal bitte 
sowohl die Beschaltung des Chips als auch die Datei 'EEPROM.h'.
Logischerweise muss der Chip mit SDA und SCL korrekt an den Arduino 
angeschlossen werden. GND muss verbunden sein und der Chip braucht auch 
+5V. Dein 'Plan' zeigt das zwar so, aber Kontrolle ist besser. I²C 
braucht Pullups an SDA und SCL. Du solltest also noch 2 Widerstände mit 
1k-2,2k von beiden Leitungen gegen +5V legen.

: Bearbeitet durch User
von Reiner_Gast (Gast)


Lesenswert?

Peter H. schrieb:
> Graphisch darstellen kann. Dazu würde ich einen Arduino UNO oder NANO
> verwenden und einen externen EEPROM, auf dem die Messwerte gespeichert

> Ich habe gestern erst mal versucht mit folgender Anleitung
> http://www.netzmafia.de/skripten/hardware/Arduino/EEPROM.html Werte in
> den EEPROM zu speichern und anschliessen wieder auszulesen. Jedoch gibt

Wenn du Daten im externen EEPROM speichern willst, hilft es wenig, wenn 
du das interne EEPROM der AVR ansprichst...

Stichwort ist hier I2C... Ein google nach "EEPROM I2C ARDUINO" liefert 
z.B. das hier: https://playground.arduino.cc/Code/I2CEEPROM

von Dannoch Dashier (Gast)


Angehängte Dateien:

Lesenswert?

Peter H. schrieb:
> Danke und viele Grüße!

Bist seit drei Monaten hier angemeldet und schaffst es nicht
dieese einfachen Regeln zu beachten?

Der Schaltplan ist unter aller Sau, das kann man besser
machen, scho allein als Respekts-Erzeugung gegenüber der
Leserschaft (die ja helfen soll). Oder braucht's keinen
Respekt?

von Luther B. (luther-blissett)


Lesenswert?

Mit <EEPROM.h> kannst du nur den internen EEPROM verwenden, der in 
deinem Atmega verbaut ist.

von Heiner (Gast)


Lesenswert?

Dannoch Dashier schrieb:
> Bist seit drei Monaten hier angemeldet und schaffst es nicht
> dieese einfachen Regeln zu beachten?

Antworte einfach nicht, wenn´s dir nicht passt. Punkt.

lg. Heiner

von H.Joachim S. (crazyhorse)


Lesenswert?

Analoge Messwerte haben sinnvollerweise meist mehr als 8bit. Wenn du nun 
nicht irgendwie packen willst heisst das 2Byte Speicherplatz/Messwert.
Alle 2 Sekunden -> für eine Stunde brauchst du schon mal 4kByte, mit 
deinen Kleckerteilen kommst du da nicht weit.
Die gibts auch in "gross" für kleines Geld.
Und vielleicht willst du auch mal schneller messen - dann könnte die 
lange Schreibzeit der herkömmlichen Eeproms stören. Also würde ich an 
deiner Stelle direkt auf FRAM setzen. Ja, sind teurer. Aber bei einem 
Stück spielt das wohl kaum ne Rolle.

von Stefan F. (Gast)


Lesenswert?

Du kannst die Messwerte auch im viel größeren internen EEprom des 
Mikrocontrollers speichern und über die USB Schnittstelle zum PC 
übertragen.

von Peter H. (borntopizza)


Angehängte Dateien:

Lesenswert?

Hi, danke erstmal für die Antworten.

Ich habs auch mal mit dem Sketch im Anhang probiert. 
http://profhof.com/eeprom-als-externer-speicher/

Damit hats auch nicht geklappt.

Zu dem Link von Rainer habe ich noch eine Frage und zwar verstehe ich 
nicht so ganz wie ich da Werte in den EEPROM speichere und diese wieder 
auslese. Bräuchte ich da nicht eigentlich einen 2. Sketch?

Okay, und wie würde dann so ein sketch aussehen, wo ich den internen 
EEPROM nutze?

von Stefan F. (Gast)


Lesenswert?

> wie würde dann so ein Sketch aussehen, wo ich den internen EEPROM nutze?

Wir werden Dir hier keine kompletten Programme vorkauen, es sei, wir 
haben zufällig was passendes vorliegen.

Wie man auf das interne EEPROM zugreift, ist in der Dokumentation zu 
Arduino und in zahlreichen Tutorials (auch Videos) beschrieben.

Ich habe ja schon zur Kenntnis genommen, dass die jungen Leute von heute 
immer weniger lesen und auch eine magere Aufmerksamkeitsspanne haben. 
Dennoch sollte man sich zuerst selbst informieren, bevor man Fragen 
stellt.

Durch Internet und Google ist der Zugang zu Informationen unglaublich 
einfach geworden. Warum nutzt du diese Technik nicht?

von Reiner_Gast (Gast)


Lesenswert?

Peter H. schrieb:
> Ich habs auch mal mit dem Sketch im Anhang probiert.
> http://profhof.com/eeprom-als-externer-speicher/
>
> Damit hats auch nicht geklappt.

Auf der Seite ist auch ein Sketch für einen I2C Scanner abgebildet
Hast du den schon mal probiert? Wird das EEPROM überhaupt am Bus 
gefunden?

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.