mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Messwerte auf Externen EEPROM speichern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Peter H. (borntopizza)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 */
}

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Reiner_Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dannoch Dashier (Gast)
Datum:
Angehängte Dateien:

Bewertung
-1 lesenswert
nicht 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?

Autor: Luther B. (luther-blissett)
Datum:

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

Autor: Heiner (Gast)
Datum:

Bewertung
-2 lesenswert
nicht 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

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

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

Autor: Peter H. (borntopizza)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
1 lesenswert
nicht 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?

Autor: Reiner_Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.