- Labornetzteil AliExpress         
Ergebnis 1 bis 6 von 6

Thema: Atmega2560 und RTC PCF8583

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2008
    Beiträge
    7

    Atmega2560 und RTC PCF8583

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich arbeite mit einem ATmega2560 (RNmega2560-Board) und programmiere in C. Das funktioniert auch inzwischen ziemlich gut.
    Über I2C wird das RNKeyLCD-Modul angesprochen. Das funktioniert ebenfalls bestens.
    Nun möchte ich auch eine Batteriegepufferte Echtzeituhr verwenden und habe mich für den häufig verwendeten PCF8583 entschieden. Eine passende Schaltung mit Pufferbatterie habe ich aufgebaut und an den I2C-Bus (mit den Abschlusswiderständen 2x4,7k) angeschlossen.
    Ansprechen kann ich den Baustein, da ich bei falscher Adressierung einen Fehler der i2c-Library (von Peter Fleury) zurück bekomme.
    Aber so wie es aussieht kann ich nichts auf den Baustein schreiben.
    Egal was ich mache, ich erhalte beim lesen immer 0xFF, egal welche Speicherstelle ich auslesen möchte.
    Auch wenn ich vorher direkt irgend einen Wert rein schreibe, lese ich unmittelbar danach wieder 0xFF.
    Der Quarz funktioniert, da ich nach einem Reset den Sekundentakt am Interrupt-Ausgang des PCF8583 sehe. Auch sind direkt am IC Pin 5 und 6 die I2C-Bus-Signale mit dem Oszilloskop zu sehen.

    Gerne poste ich auch noch meinen Code, aber ich konnte keine Unterschiede beim Vergleich mit diversen Codebeispielen im Netz finden.

    Ich hoffe, es kann mir jemand weiter helfen.

    Gruß
    hhopf

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo hhopf,

    ohne genauere Hard- und Software-Beschreibung kann man nur raten.
    Für den RP6 habe ich ein C-Beispiel gepostet, auch mit einem kleinen Schaltpan für die RTC.
    Guckst du hier:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=34467

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2008
    Beiträge
    7
    Hallo Dirk,

    Danke für die Antwort. Meine Schaltung sieht im Prinzip ähnlich aus. So wie eben nahezu alle Schaltungen, die auf diesem Chip basieren.
    Anstatt des GoldCap habe ich eine CR2032 und anstatt des darüber liegenden Widerstandes eine Diode (Kathode in Richtung PCF).
    Ich habe auch schon im Netz irgendwo genau die von mir verwendete Schaltung gesehen, scheint also normalerweise zu funktionieren.
    Ich habe auch "normale" Dioden verwendet und nicht wie hier immer wieder beschreiben Schottky-Dioden. Sollte aber für einen Versuchsaufbau vermutlich egal sein.
    SDA und SCL wie gesagt mit je 4,7k Pullup auf + gezogen. Habe ich aber auch schon mal weg gelassen, da ja am selben Bus auch noch das RNKeyLCD-Modul hängt und das möglicherweise Abschlusswiderstände drin hat

    Der Code, mit dem ich versuche, ein Byte im PCF zu schreiben sieht so aus:
    (i2c-lib von Peter Fleury)

    i2c_start(0xa2); // Adresse stimmt !
    i2c_write(0xa2);
    i2c_write(0x00); // Control-Register
    i2c_write(0x00); // Schreibe 0 in Control Register
    i2c_stop();

    das anschliessende Lesen so:
    i2c_start(0xa2);
    ic2_write(0xa2);
    i2c_write(0x00);
    i2c_rep_start(0xa3);
    i2c_write(0xa3);
    byte = i2c_readNak();
    i2c_stop();

    Ich sitze gerade nicht an dem Rechner, an dem ich den Code programmiere, deshalb hoffe ich, dass ich die Sequenzen aus dem Gedächtnis korrekt aufgeschrieben habe.
    Die Funktionen heissen je nach verwendeter Lib evtl. anders, aber ich habe auch schon exakt identische Beispiele gefunden, die die selbe Lib verwenden.

    Mit der ersten Adresse 0xA0 das selbe Ergebnis (nach Umstecken des Adress-Jumpers natürlich).
    Auch andere Speicherbereiche (z.B. RAM ab Adresse 0x10) funktionieren nicht.
    Ein Heruntertakten des RNmega2560-Moduls mittels Teiler-Fuse-Bit brachte auch nichts. Die Impulse auf dem Bus wurden entsprechend länger, aber das Ergebnis war das selbe.

    Gruß
    hhopf

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ich benutze die Fleury-Bibliothek nicht, aber müßte nicht auch das zum Lesen reichen:
    Code:
    i2c_start(0xa2); 
    i2c_write(0x00); 
    i2c_rep_start(0xa3); 
    byte = i2c_readNak(); 
    i2c_stop();
    Gruß Dirk

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2008
    Beiträge
    7
    Das werde ich gleich mal ausprobieren. Laut Datenblatt PCF muss allerdings die Slave-Adresse nochmal mitgeschickt werden.
    Aber vielleicht macht das ja i2c_start schon.


    Gruß
    hhopf

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.04.2008
    Beiträge
    7
    Das wars tatsächlich. So kann es gehen, wenn man sich nur an das Datenblatt hält
    Vielleicht hätte ich den Code der i2c_start-Routine mal genauer unter die Lupe nehmen sollen, dann wäre mir möglicherweise selbst ein Licht aufgegangen.

    Vielen Dank für die Unterstützung.

    Gruß
    hhopf

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test