I2c Fram Breakout einbinden

Hallo zusammen
Ich bin neu in der Arduino Welt da ich eine Anzeige mit einem Zähler benötige. Die Anzeige und der Zähler inklusive Rückstellung funktioniert schon.
Nun wäre es auch wichtig, dass der Gesamtzähler gespeichert wird und bei aus und einschalten des Boardes nicht verlohren geht.
Ich habe nun viel in Foren gelesen was ich an Hardware benötige und habe einen I2C Fram Breakout verbaut nur weis ich leider nicht wie ich ihn in den sketch einbinden muss.
Ich hoffe es kann mir wer helfen.

#include <LiquidCrystal.h>

const int  DetectorPin = 8;
const int  ResetButton = 9;

int Counter = 0;   // counter number of cookies temporarily
int CounterTotal = 0; // counter number of cookies total

int DetectorState = 1;         // current state of the Detector
int lastDetectorState = 1;     // previous state of the Detector
int ResetState = 0;            // state of the Reset Button
int buttonState = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // initialize the library with the numbers of the interface pins

void setup() {
 
  pinMode(DetectorPin, INPUT);
  pinMode(ResetButton, INPUT);
  
  lcd.begin(16, 2);

  lcd.setCursor(0, 0);
  lcd.print("curr.:");
  lcd.setCursor(0, 1);
  lcd.print("Total:");

 
}

void loop() {



  lcd.setCursor(12, 0);
    if (Counter<1000) lcd.print(" ");
    if (Counter<100) lcd.print(" ");
    if (Counter<10) lcd.print(" ");
    lcd.print(Counter);  
  
  lcd.setCursor(9, 1);
    if (CounterTotal<10000000) lcd.print(" ");
    if (CounterTotal<100000) lcd.print(" ");
    if (CounterTotal<10000) lcd.print(" ");
    if (CounterTotal<1000) lcd.print(" ");
    if (CounterTotal<100) lcd.print(" ");
    if (CounterTotal<10) lcd.print(" ");
    lcd.print(CounterTotal);
  

  DetectorState = digitalRead(DetectorPin);
  ResetState = digitalRead(ResetButton);

  // compare the buttonState to its previous state
  if (DetectorState != lastDetectorState) {
    // if the state has changed, increment the counter
    if (DetectorState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      Counter++;
      CounterTotal++;
    } 
  }
  
 lastDetectorState = DetectorState;

 if (ResetState == HIGH) {
  Counter = 0;
 
  lcd.setCursor(10, 0);
  if (Counter < 100) lcd.print("   ");
  if (Counter < 10) lcd.print("   ");
  lcd.print(Counter);
 }
 
delay(100);
}

Z_hler_ohne_Speicher.ino (1.89 KB)

Und, wo ist dein Problem?

Findest du kein Datenblatt zu deinem geheimen FRAM?

Hi

Code bitte in CODE-Tags - Du hast hier ein Quote verwendet. Im Code-Tag wird der Code in einer anderen Schrift und kopierbar angezeigt.

Nun -- noch sehe ich Da kein Hinweis auf einen FRam. Library ganz oben, eine Instanz davon erzeugen knapp danach und dann drauf zugreifen. Mit etwas Glück bringt die Library ein Beispiel mit, oder Dein Verkäufer könnte damit dienen - immerhin verkauft Der das Zeug ja - wenn man Das dann nicht benutzt (benutzen kann), wäre der Kauf ja doppelt blöd - Das sollte selbst der VK einsehen ;)

MfG

PS: Sehe ich Das richtig? Das gibt einen Keks-Zähler? (warum überall mit englischen Kommentaren um sich geworfen werden muß, erschließt sich mir dann wiederum nicht - da kann man auch in der wesentlich größeren englischen Community anfragen)

Der Datenaustausch über I2C ist relativ standardisiert über die Wire Bibliothek. Ob man Sensoren oder Speicherbausteine anspricht ist kein so großer Unterschied was das Prinzip betrifft. Wenn man das einmal allgemein verstanden hat kann man es auch auf andere ICs übertragen

Für Details wie die Adressen und den internen Aufbau des Speichers (z.B. Organisation in Seiten) muss man aber das Datenblatt anschauen

Oder du Googelst mal ob es dafür eine fertige Bibliothek gibt

Hi

Bei den Standard-I²C-Dingern wirst Du über eine Bibliothek stolpern, in Der unser Tommy56 hier die Finger drin hatte - ist zwar das Nachbar-Universum, aber immerhin in den Tiefen des WWW.

MfG

Warum willst du den internen EEPROM nicht verwenden?

Hi

Nunja - 100'000 Schreibzugriffe sind nun Mal 'endlich' ;) Aber ja, Du hast natürlich Recht, daß ein Arduino, Der 10x am Tag die Werte im Eeprom festhält, Das auch 10000 Tage ab kann (mindestens) - und Das sind grob geschätzt 30 Jahre (bei 333 Tagen pro Jahr ...).

Selbst die Entwicklung des Sketch wird wohl keine 1000 Schreibzugriffe erfordern, solange mein kein Parkinson auf dem Reset-Taster bekommt (ok, 2 Sekunden braucht der Arduino danach schon).

Jetzt das ABER: Der FRam ist bereits da :) (und außerdem ziemlich geiles Zeug, Das)

MfG

postmaster-ino: Nunja - 100'000 Schreibzugriffe sind nun Mal 'endlich' ;) Aber ja, Du hast natürlich Recht, daß ein Arduino, Der 10x am Tag die Werte im Eeprom festhält, Das auch 10000 Tage ab kann (mindestens) - und Das sind grob geschätzt 30 Jahre (bei 333 Tagen pro Jahr ...).

Und das gilt für jede Speicherzelle einzeln.

Hi

Jaahaaa ;) Aber im Groben wird man die Werte an einen festen Ort schreiben - dann kommt Das mit den 'nur 30 Jahre' wieder hin ... ob's mich dann noch gibt??

MfG

postmaster-ino: Aber im Groben wird man die Werte an einen festen Ort schreiben

Ich sehe keinen Grund das zu tun, wenn einem die Haltbarkeit der EEPROMs Sorgen bereitet.

Speicherstelle 0 und 1: Adresse des aktuellen Zählers (anfänglich 2)

Dorthin wird der Zähler geschrieben, zurückgelesen und falls er einen Fehler zeigte in die nächste Stelle verschoben, dessen Adresse legt man wieder in Speicherzelle 0 und 1 ab.

Hallo Vielen Dank für die schnellen Antworten. Die Informationen die ich habe is t dass es ein "Adafruit i"C Non-Volatile FRAM Breakout" ist. ich benötige denn Arduino wie schon vermutet für einen "Keks-Zähler" und will nicht das mir der Gesamt Zähler bei einem Stromausfall / ausschalten der Maschine verloren geht. Und mir wurde hier im Forum zu einem F-rom geraten da der Interne Speicher schnell voll sein soll. Sorry für meine schwachen kenntnisse.

Wenn es von Adafruit ist gibt es sicherlich eine Bibliothek dazu. Und wahrscheinlich auch eine Anleitung. Das ist da meist alles sehr gut dokumentiert. Du musst halt mal auf deren Webseite schauen

Die Informationen die ich habe is t dass es ein "Adafruit i"C Non-Volatile FRAM Breakout" ist.

Auf dem Chip findest du Hersteller und Type aufgedruckt, musst nur hinschauen :-) Auch Adafruit hat das sicherlich irgendwo aufgeschrieben.

Sorry für meine schwachen kenntnisse.

Darf ich mal grob sein? Lenke dich nicht mit sowas von deinem Problem ab. Wir bemerken deinen Kenntnisstand schon, auch ohne das du dir HIER schon zum zweiten mal versuchst ein Nietentum einzureden.

Übrigens: Du bist der einzige, der DEINE Kenntnisse verbessern kann.

Tipp: Du benötigst eigentlich nur Wire, das Datenblatt des Chips und Geduld beim üben.

horngha1: Die Informationen die ich habe is t dass es ein "Adafruit i"C Non-Volatile FRAM Breakout" ist.

LadyAda (Limor Fried, die Chefin von Adafruit) hat eine anfängerfreundliche Anleitung zusammen mit einer Programmbibliothek geschrieben.

Bei Problemen solltest Du einen I2C-Scanner auf den Arduino laden und schauen, ob die Adresse 0x53 0x50 erkannt wird.

EDIT: Adresse geändert.

Wenn man die Lötpunkte A0-A2 nicht überbrückt, ist die Standardadresse 0X50. Mit der verlinkten Lib auf der Seite die agmue verlinkt hat, braucht man die Adresse nicht zu ändern. Funktioniert mit meinem 32 KByte-FRAM einwandfrei, habe allerdings kein anderes I2C angeschlossen und musste die Adresse nicht anpassen.