RTC FM3130 --- warum startet sie nicht

Hallo,
ich hab mir eine RTC von Ramtron zu einem Breakoutboard zusammengelötet (Vbak-Batterie ist noch nicht angebracht).
http://ramtron.com/files/datasheets/FM3130_ds.pdf
Dabei handelt es sich um eine Uhr mit indegriertem NV-Ram.
Sowohl die Uhr, als auch das Ram werden über I2C angesprochen.
Da es sich um einen 2,7-3,6V-Chip handelt, ist ein Level-Converter zwischen die Uhr und meinem Arduino Mega 2560 geschaltet.
I2C funktioniert und die einzelnen Speicherzellen lassen sich beschreiben und auslesen.

ABER: die Uhr läuft nicht! =(
Nun hab ich einen Test-Sketch geschrieben, der das Schreiben und Lesen testet und anschliessend die Uhr-Register im Sekundentakt ausliest.
Er liefert mir für díe einzelnen Zellen folgende Werte:

0 10010000
1 0
2 10000
3 0
4 0
5 0
6 111
7 1
8 1110001
9 10000000
10 10000000
11 10000000
12 10000001
13 10000001
14 10000000

Da sich mein technisches Englisch in ziemlich engen Grenzen bewegt, stellt sich mir die Frage, ob:
a) ein Register von mir falsch gesetzt wurde oder
b) der Quarz das zeitliche gesegnet hat (wie kann man das testen?)

Danke im Voraus für Eure Hilfe
Reinhard

PS.:
Nach einem Neustart liefern die ersten 2 Register folgendes:
0 10000
1 10000000
Die Uhr läuft aber immer noch nicht

#include <Wire.h>

#define CLOCK 0x68
#define FRAM 0x50

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Test_FRAM();
  Test_CLOCK();
}

void loop()
{
  CLOCK_Register();
  delay(1000);
}

void Test_FRAM()
{
  Serial.println("Starting FRAM Memory-Test");
  for ( int i=0; i<21; i++)           // Test greift auf die Speicherzellen 0-20 zu
  { 
    if (i<10) { Serial.print(" ");}   // Setzt eine Leerstelle bei einstelligen Zahlen
    
    Serial.print(i);                  // Schreibt den Wert 255 in die Zelle und überprüft dies durch Auslesen
    Serial.print("   ");
    Write_FRAM(i,255);
    Serial.print(Read_FRAM(i), BIN);
    Serial.print("   ");
    
    Write_FRAM(i,127);                // Schreibt den Wert 127 in die Zelle und überprüft dies durch binäres Anzeigen
    int Wert = Read_FRAM(i);
    Serial.print(Wert);
 
    Write_FRAM(i,0);                  // Schreibt den Wert 0 in die Zelle und überprüft dies durch binäres Anzeigen
    Serial.print("   ");
    Serial.println(Read_FRAM(i), BIN);
    }
  Serial.println("FRAM Memory-Test done!");
  Serial.println();
}

void Test_CLOCK()                     // Auslesen der Register 0-14 in binärem Format
{
  Serial.println("Starting CLOCK-Ram-Test");
  for ( int i=0; i<15; i++)
  { 
    if (i<10) { Serial.print(" ");}  // Setzt eine Leerstelle bei einstelligen Zahlen
    Serial.print(i);
    Serial.print("   ");
    Serial.println(Read_Clock(i), BIN);
  }
  Serial.println("CLOCK-Ram-Test done!");
  Serial.println();
}

void CLOCK_Register()                // Anzeigen der 15 Uhrregister in binärem Foramt im Sekundentakt
{
  for ( int i=0; i<15; i++)
  {
    Serial.print( Read_Clock(i), BIN);
    Serial.print("   ");
  }
  Serial.println();
}

void Write_Clock(byte Adr, byte Daten)
{
  Wire.beginTransmission(CLOCK);
  Wire.send(Adr);
  Wire.send(Daten);
  Wire.endTransmission();
}

byte Read_Clock(byte Adr)
{
  Wire.beginTransmission(CLOCK);
  Wire.send(Adr);
  Wire.endTransmission();
  Wire.requestFrom(CLOCK, 1);
  return (Wire.receive());
}

void Write_FRAM(byte Adr, byte Daten)
{
  Wire.beginTransmission(FRAM);
  Wire.send(00);                 // zu Testzwecken MSB-Adress-Teil fix auf 0
  Wire.send(Adr);
  Wire.send(Daten);
  Wire.endTransmission();
}

byte Read_FRAM(byte Adr)
{
  Wire.beginTransmission(FRAM);
  Wire.send(00);                 // zu Testzwecken MSB-Adress-Teil fix auf 0
  Wire.send(Adr);
  Wire.endTransmission();
  Wire.requestFrom(FRAM,1);
  return (Wire.receive());
}

Am Quarz messen bringt nichts da die Messung den Schwingkreis beeinflußt. Am ACS Ausgang komt was, raus wenn Du ihn als Frequenzausgang schaltest? (Achtung open Drain, Du brauchst eine Pullup Widerstand)

Hast Du /OSCEN (Bit D7 im Regiter 01h) auf LOW gestellt?

Oscillator Enable. When set to 1, the oscillator is halted. When set to 0, the oscillator runs. Disabling the oscillator can save battery power during storage. On an initial power-up of VDD with or without VBAK, this bit is internally set to 1, which turns off the oscillator. Battery-backed, read/write.

Grüße Uwe

Hallo Uwe, ja, ich hab schon dieses Bit auf 0 gesetzt. Und zwar habe ich das ganze Register 01h mit einem Byte = 0 beschrieben. (Siehe obige Liste: Register 1 = 0)

Zum ACS Ausgang: Also einen Pull-Up auf die +3,3V setzen. Kann ich dann mit dem Voltmeter den Ausgang prüfen? Was habe ich zu erwarten? Ein Oszilloskop hab ich nämlich nicht (steht ganz oben auf meiner Wunschliste ;-) Oder kann ich den Ausgang mit einem AnalogPin des Arduino auslesen?

thx Reinhard

Wenn Du den ACS Ausgang auf 1Hz stellst kannst Du mit einer roten LED und einem 1000ohm Widerstand zwischen ACS und +3,3V das LED blinken sehen. Es steht nirgens wieviel der ACS aushält aber 2 mA müßten es schon sein.

Wenn Du den Ausgang auf 512 Hz stellst müßtest Da ca 1,7V messen (ca die Hälfte der Versorgungsspannung). Mit dem Arduino könntest du mit pulsIn() die Zeiten lesen.

Grüße Uwe

Ich hab nun mal ganz brutal alle Register auf 0 gesetzt. Am ACS kann ich nun eine Frequenz von ca. 1,05 Hz mittels "20 mal analogRead pro Sec" feststellen.

Das bedeutet dann wohl, daß der Quarz funktioniert??? Und daß die Uhr eigenltich laufen sollte! Aber warum bleibt das Ding immer noch ohne Reaktion???

mfg Reinhard

guat, olsou dr quarz geat.
Bevor Du di Regischter ausleisn konnsch, muasch Du sie von dr Uhr kopiern.

The user registers are synchronized with the
timekeeper core using R and W bits in register 00h
described below. Changing the R bit from 0 to 1
transfers timekeeping information from the core into
holding registers that can be read by the user. If a
timekeeper update is pending when R is set, then the
core will be updated prior to loading the user
registers. The registers are frozen and will not be
updated again until the R bit is cleared to „0… R is
used to read the time.

Ersch zemm konnsch die Regischter leisn.

Zum schreibn: The user registers are synchronized with the
timekeeper core using R and W bits in register 00h
described below. Changing the R bit from 0 to 1
transfers timekeeping information from the core into
holding registers that can be read by the user. If a
timekeeper update is pending when R is set, then the
core will be updated prior to loading the user
registers. The registers are frozen and will not be
updated again until the R bit is cleared to „0… R is
used to read the time.

I hoff iaz geat’s.

Pfiati. Uwe

ES FUNZT!!! Boah! Das war ja eine schwere Geburt! Aber das Kind lebt und atmet und sagt mir jetzt auch endlich, was die Uhr geschlagen hat....

In einfachen Worten (hoffe ich): Indem das R-Bit im Register 00h auf 1 gesetzt wird, wird der aktuelle Zeitwert in die User-Register geschrieben und man kann diese auslesen. Nun setzt man das R-Bit wieder auf 0, um vor dem nächsten Lesezugriff (des aktuellen Wertes) das Spielchen mit R-Bit = 1 zu wiederholen

PS.: thx Uwe.... bin Dir ein grooooßes Bier schuldig!!!

Hallo Spaceball und Namensvetter, ich habe mir das Datenblatt für den FM3130 mal angesehen und finde das IC sehr interessant. Leider scheint das IC End-of-Live zu sein und einen wirklichen Nachfolger (1:1 Replacement) habe ich nicht gefunden. Hast du eine Bezugsquelle, wo es den Chip in kleinen Stückzahlen gibt? Bist du bereit, dein Break-Out Board zu veröffentlichen? Ich habe schon einige RTC IC's ausprobiert, aber alle hatten irgendwelche Nachteile. Der FM3130 hat alles, was ich suche. Einziger Nachteil ist, dass er nicht mit 5V arbeitet. Besonders interessant finde ich die SW Korrektur für die Genauigkeit. Deine Erfahrungen damit würden mich sehr interessieren. Gruß Reinhard

Hallo,
meine Erfahrung mit dem FM3130 sind eher kurzfristiger Natur… will heißen, dachdem ich gestern Nacht endlich das Ausleseproblem mit Uwes Hilfe gelöst habe, bin ich nun gerade vor 5min zur “Vollendung” (große Worte :wink: gekommen, und zwar hab ich als Vbak einen Kondensator angelötet.
Die ersten Tests sind sehr überzeugend.

Das Breakout-Board ist im Prinzip das Layout aus dem Datenblatt, nur etwas rudimentärer mit einer Lochstreifen-Platine (trau mich gar nicht, ein Foto rein zu stellen :smiley: )
Den Chip hab ich bei RS-Components http://de.rs-online.com/web/ gekauft.
Kostete so um die € 4,- (+€ 6,- Versand)
Er ist aktuell sicher verfügbar, da ich ihn auch erst vor 1 Woche gekauft habe.
Das +5V-Problem ist eigentlich kein Hindernis. Ich habs mit einem Level-Converter von DSS-Circuits gelöst.
http://dsscircuits.com/i2c-level-converter.html

Ich hoffe ich konnte Dir ein bischen helfen.
In ein paar Tagen kann ich auch sicher mehr berichten…

Gruß Reinhard

Das Datenblatt nennt als Ersatztyp den FM3164 http://www.ramtron.com/products/integrated/processor-companion-product.aspx?id=72 Der funktioniert auch mit 5V. Ich habe keine Bezugsquelle gefunden. Du kannst ja mal Probeexemplare bei Ramtrom bestellen. Grüße Uwe

Der FM3164 hat viele Features mehr als der FM3130, allerdings keine Alarmfunktion. Wer darauf verzichten kann, ist mit dem FM3164 wahrscheinlich besser bedient.

Gruß Reinhard

PS.: FM3130 - 8 Pin 3V FM3164 - 14 Pin 2,7-5,5V

Hab 2 Händler in China (E bay) gefunden. Grüße Uwe

Hallo Ich arbeite mit einer FM3164, benutze dein Programm, um in der Fram zu lesen und zu schreiben, und ich zweifle, dass dieser Teil funktioniert. Kannst du mir sagen, ob du etwas ändern musst? Um im EEPROM zu lesen und zu schreiben, müssen Sie alle FM3164 oder nur die Verbindung für das I2C-Protokoll verbinden? Ich muss nur den FRAM lesen und schreiben

Hi

Dir ist bestimmt bereits aufgefallen, daß der Thread, auf Den Du antwortest, bereits 7 JAHRE tot ist?

Mache bitte einen eigenen Thread auf und beschreibe dort, was Du machen willst, was Du hast, gerne mit Link (klickbar), was Du bereits umsetzen konntest.

Deinen Post hier verstehe ich nämlich nicht wirklich. Auch ist mir noch nicht ganz klar, ob FM1164 ebenfalls eine RTC ist und ob Diese statt eines EEprom ein Fram inne hat.

Alles Fragen, Die Du uns an Infos liefern kannst, damt wir Dir helfen können.

MfG