bekomme 24LC02 nicht ausgelesen

#3948173
Lesenswert?

Hallo,

meine uralte Funkamateur DCF77 - Digitaluhr hat den Geist aufgegeben, 
deshalb hab ich begonnen die Hardware zu modernisieren.
Dafür habe ich mir einen Arduino Uno zugelegt und zum sichern der 
Weckzeiten einen I²C EEPROM drangehängt.
Ich programmiere den Arduino (ATmega328P) aber mit Atmel Studio in 
richtigem C und muss mir deshalb die EEPROM Routinen selbst erstellen, 
schon wegen dem Lernfaktor.
Leider bekomme ich mit meinen Leseroutinen nur 0xff gelesen, auch ein 
Logikanalyzer zeigt mir das an, wogegen beim Schreiben scheinbar das 
Richtige raus geht.
Als Puffer wird folgende Struktur, auf uint8_t gecastet, übergeben:
1
typedef struct
2
{
3
  uint8_t hour, minute;
4
  uint8_t armed, active;
5
} alarm_time_t;
Was mache ich falsch?
Angehängte Dateien:
(Firma: matzetronics) #3948217
Lesenswert?

Nachdem du Lothars Tipps beherzigt hast, musst du auch noch beachten, 
das ein freier Lesevorgang (einer beliebigen Adresse) immer mit einem 
Schreibvorgang (des Adressregisters) beginnt und dann eine 'fliegende' 
Umschaltung (erneute Start Bedingung) auf den Lesevorgang folgt - siehe 
Datenblätter der 24CXX Serie.

Übringes hat der Mega auch ein internes EEPROM.
#3948392
Lesenswert?

Der 24LC22 hat keine Steuerregister, Du meinst wohl das Beschreiben des 
AVR EEPROMs und Pin 7 (WP) liegt auf Masse.
Beim Lesen Schreibe ich ja zuerst die Slaveadresse und dann mit einem 
erneutem Startzyklus die interne EEPROM-Adresse, siehe Code, also zuerst 
mit Bit 0 = 0 und danach mit Bit 0 = 1 der Slaveadresse.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren