INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Externer EEPROM
03.09.2015, 14:02
Beitrag #1
Externer EEPROM
Ich möchte für einen Temperaturlogger Temperaturwerte seriell über SPI in einen externen EEPROM ablegen. Bei 80% verbrauchten Speicherplatz soll ein Lämpchen angehen. Nun wollte ich die Speichervorgänge mitzählen und müsste diese für den Fall, dass Strom unterbrochen wurde ebenso in den Speicher ablegen. Nun darf man ja nicht ständig die gleiche Adresse überschreiben, wie oft geht das? verschiedene Quellen geben von 10.000 bis 100.000 alles an.Wo kann man sich bezgl. Speicheranalyse fortbilden? Zum Verständnis fange ich mit einem "leichten" Code an. Wie müsste ich diesen ändern, damit ich statt die Ziffer 44, 2 werte in den EEPROM legen und auslesen kann. Ich benutzte den EEPROM 25LC640.


CODE:

http://pastebin.com/EM674FXx

Vielen Dank.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 14:36 (Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2015 14:38 von hotsystems.)
Beitrag #2
RE: Externer EEPROM
Auch hier ist es für alle besser, den Code direkt zu zeigen. Das geht einfach mit den Code-Tags "#".

Code:
// 25LC1024 1Mbit SPI interface
//
// Device pin connections:
// 1 = CS (Chip Select) (from Arduino)  
// 2 = SO (Master In Slave Out) (from Arduino)
// 3 = +5V (WP) (from Arduino)
// 4 = 0V (Ground) (from Arduino)
// 5 = SI (Master Out Slave In) (from Arduino)
// 6 = SCK (from Arduino)
// 7 = +5V HOLD (from Arduino)
// 8 = +5V Vcc (from Arduino)
//
// This file uses the SPI library and produces higher oscillation rates than the manual methods
// for the Uno: SS/CS = pin 10, MOSI/SI = pin 11, SCK/clock = pin 13, MISO/SO = pin = 12
//

#define WRITE 2
#define READ  3
#define WREN  6

#include <SPI.h>

unsigned int data;
unsigned int address = 0;
unsigned int outval = 44;
byte invalue;

void setup()
{
  Serial.begin(9600);
  Serial.println("--------------");
  Serial.println(SS); // chip select
  Serial.println(MOSI); // master out, slave in
  Serial.println(MISO); // master in, slave out
  Serial.println(SCK); // clock
  Serial.println("--------------");
  
  // set up to match device datasheet
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2); // max clock is 20MHz, so can set high speed
  SPI.begin(); // sets up pin modes etc.
  
  // Enable writing
  digitalWrite(SS, LOW);
  SPI.transfer(WREN);
  digitalWrite(SS, HIGH);
  
  // Write One Value to One Address
  digitalWrite(SS, LOW);
  SPI.transfer(WRITE); // write instruction
  SPI.transfer((address >> 16) & 255);
  SPI.transfer((address >> 8) & 255);
  SPI.transfer(address & 255);
  SPI.transfer(outval);
  digitalWrite(SS, HIGH);
  
  delay(1000);
  
  // Read One Value from One Address
  digitalWrite(SS, LOW);
  SPI.transfer(READ); // read instruction
  SPI.transfer((address >> 16) & 255);
  SPI.transfer((address >> 8) & 255);
  SPI.transfer(address & 255);   // 3rd byte of address
  invalue = SPI.transfer(0);        // Clock out the data
  Serial.print("Read Data = ");
  Serial.println(invalue,DEC);
  
  digitalWrite(SS, HIGH);
}

void loop()
{

Der Wert, den du speichern möchtest, wird in der Variable "outval" abgelegt und gelesen aus der Variablen "invalue".
Den 2. Wert legst du im nächsten Adress-Byte ab.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 14:46
Beitrag #3
RE: Externer EEPROM
alles klar Chef, wird gemacht.
soweit hab ich das verstanden, jedoch habe ich noch nicht herausgefunden wie ich die Adresse zuweise.

unsigned int address = 0; (statt der null kann hier alles stehen), denn wenn ich versuch in eine neue Adresse einen Wert zu schreiben und die alte Adresse mit dem alten Wert auszulesen, erscheint bei mir jedes mal der zu letzt gespeicherte Wert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 15:09 (Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2015 15:28 von hotsystems.)
Beitrag #4
RE: Externer EEPROM
(03.09.2015 14:46)Erbsenhirn schrieb:  alles klar Chef, wird gemacht.
soweit hab ich das verstanden, jedoch habe ich noch nicht herausgefunden wie ich die Adresse zuweise.

unsigned int address = 0; (statt der null kann hier alles stehen), denn wenn ich versuch in eine neue Adresse einen Wert zu schreiben und die alte Adresse mit dem alten Wert auszulesen, erscheint bei mir jedes mal der zu letzt gespeicherte Wert.

Das hätte ich jetzt genau so gemacht. Dazu solltest du mal das Datenblatt zu Rate ziehen oder nochmal googeln. Ich werde es auch mal tun.

In diesem Beitrag steht einiges, was dir helfen sollte.

https://www.arduino.cc/en/Tutorial/SPIEEPROM

Und hier ist ein Beitrag, welcher sehr ausführlich ist und auch helfen sollte.

http://fluuux.de/2013/04/daten-im-eeprom...-zuweisen/

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 15:41
Beitrag #5
RE: Externer EEPROM
(03.09.2015 15:09)hotsystems schrieb:  
(03.09.2015 14:46)Erbsenhirn schrieb:  alles klar Chef, wird gemacht.
soweit hab ich das verstanden, jedoch habe ich noch nicht herausgefunden wie ich die Adresse zuweise.

unsigned int address = 0; (statt der null kann hier alles stehen), denn wenn ich versuch in eine neue Adresse einen Wert zu schreiben und die alte Adresse mit dem alten Wert auszulesen, erscheint bei mir jedes mal der zu letzt gespeicherte Wert.

Das hätte ich jetzt genau so gemacht. Dazu solltest du mal das Datenblatt zu Rate ziehen oder nochmal googeln. Ich werde es auch mal tun.

In diesem Beitrag steht einiges, was dir helfen sollte.

https://www.arduino.cc/en/Tutorial/SPIEEPROM

Und hier ist ein Beitrag, welcher sehr ausführlich ist und auch helfen sollte.

http://fluuux.de/2013/04/daten-im-eeprom...-zuweisen/


Gut Danke, hab auch noch einen weiteren Code gefunden, ich melde mich bald wieder Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2015, 16:12
Beitrag #6
RE: Externer EEPROM
Alles klar, danke für die Rückmeldung.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  String in EEPROM Speichern BennIY 2 417 27.06.2016 10:23
Letzter Beitrag: BennIY
  Grundlagenfrage EEPROM Tobias1984 3 499 14.04.2016 10:43
Letzter Beitrag: Bitklopfer
  Attempt to write outside of EEPROM memory anwo 1 378 12.02.2016 11:06
Letzter Beitrag: anwo
  Ins eeprom schreiben/lesen anwo 10 1.794 07.02.2016 20:05
Letzter Beitrag: rpt007
  Suche Konzept für ein Inhaltsverzeichnis eines EEPROM avoid 0 313 27.01.2016 10:49
Letzter Beitrag: avoid
  float in eeprom goldfisch 4 673 28.12.2015 18:54
Letzter Beitrag: Bitklopfer
  Auf externen EEPROM schreiben diode1990 5 981 08.11.2015 22:57
Letzter Beitrag: diode1990
  stm32f103c8t6 EEPROM löschen opa michi 9 1.281 29.10.2015 20:57
Letzter Beitrag: Klaus(i)
  ESP8266 EEPROM Probleme Pf@nne 5 2.458 09.10.2015 18:00
Letzter Beitrag: Pf@nne
  [EEPROM.h] Unterschied read()/write() und EEPROM[]? gregors 5 885 19.08.2015 19:59
Letzter Beitrag: gregors

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste