Forum: Mikrocontroller und Digitale Elektronik PCF8583 mit 24LC1025 über I²C Kompatibilitätsprobleme


von Georg I. (georgi)


Lesenswert?

Hallo,

Ich würde gerne einen Datenlogger zusammenbauen, welcher Daten mit einem 
Uhrzeitstempel in ein exteres EEPROM abspeicehrt. Dazu würde ich gerne 
mit Hilfe eines PIC und PCF8583 Daten auf den 24LC1025 speichern 
(kommunikation ist I²C).

Meine ersten Versuche den PCF8583 mit der Adresse 0xA0 und den 24LC1025 
mit der Adrese 0xA4 getrennt anzusprechen (zwei eigene Schaltungen) 
funktionierten einwandfrei.Jedoch wenn ich beide in eine gemeinsame 
Schltung gebe, kann ich den 24LC1025 nicht richtig auslesen. Ich erhalte 
beim Auslesen des EEPROMs immer dern Wert 255.

Kann es sein, dass man diese zwei Bausteine nicht zusammen verwenden 
kann?

vielen Dank für eure Hilfestellung

von Nico (nico123)


Lesenswert?

Sollte eigentlich problemlos funktionieren!
Wie groß sind deine Pullup-Widerstände an Daten- und Taktleitung?

von JoergL (Gast)


Lesenswert?

Schaltplan? Wie sind die Adresspins des 24LC1025 verschaltet?
24LC1025 auf Adresse A4 heißt oberer Block des Memory-Arrays und 
A0=A1=Low?
Wie willst Du dann den unteren Block des Chips ansprechen, dessen 
Adresse beißt sich dann mit dem PCF.

von Georg I. (georgi)


Lesenswert?

Die physikalische Adressen des 24LC1025 beträgt A4 und es funktioniert 
ja auch. Die Memory adresse hat ja nichts mit der physikalischen zu 
tun!!

von Georg I. (georgi)


Lesenswert?

Miene Pullup-Widerstände betragen 10k, habe es aber auch schon mit 7k5 
auch schon probiert

von Bronco (Gast)


Lesenswert?

Bekommst Du ein ACK vom 24LC1025?
Bist Du sicher, daß Du es auf der richtigen I2C-SlaveAdresse ansprichst?
Funktiert es, wenn der PCF ausgebaut ist?

Du kannst auch mal in einer Schleife nach den vorhandenen I2C-Slaves 
suchen, d.h. einfach alle Slave-Adressen durchtingeln und schauen, wer 
sich mit ACK meldet...

von JoergL (Gast)


Lesenswert?

Georg I. schrieb:
> Die physikalische Adressen des 24LC1025 beträgt A4

Dann hast Du das Datenblatt nicht richtig verstanden.
Bitte Kapitel 5 lesen, speziell Figure 5-1.

> und es funktioniert ja auch.

Warum rufst Du hier dann um Hilfe?

> Die Memory adresse hat ja nichts mit der physikalischen zu tun!!

So ? Das Datenblatt behauptet das Gegenteil. S.O.

Als Pullups sind Werte <= 4.7k zu empfehlen, es seidenn die 
Leitungslängen sind wirklich sehr, sehr kurz.

von Georg I. (georgi)


Lesenswert?

Adressiert ist es richtig, denn wenn ich den PCF bzw. den EEPROM 
ausbaue, funktioniert der jeweils andere Baustein.

von Georg I. (georgi)


Lesenswert?

Laut Figure 5-1 ergibt die Adresse 10100100 -> 0xA4

Der EEPROM funktioniert nur alleine ohne PCF

die leitungen sind sehr kurz und ich habe bis jetzt immer 10k 
Widerstände verwendet, jedoch werde ich 4k7 auch versuchen

von ich (Gast)


Lesenswert?

Georg I. schrieb:
> Adressiert ist es richtig, denn wenn ich den PCF bzw. den EEPROM
> ausbaue, funktioniert der jeweils andere Baustein.
>
dann zeige doch endlich mal dein Programm!

von Georg I. (georgi)


Lesenswert?

Adressierung für EEPROM:
schreiben:
  i2c_start();
  i2c_write(0xA4);
  i2c_write(1);
  i2c_write(1);
  i2c_write(50);        //Wert 50 wird abgespeichert
  i2c_stop();
lesen:
    i2c_start();
    i2c_write(0xA4);
    i2c_write(1);
    i2c_write(1);
    i2c_start();
    i2c_write(0xA5);
    x = i2c_read(0);
    i2c_stop();

Adressierung für PCF:
schreiben:
  i2c_start();
  i2c_write(0xA0);
  i2c_write(0x01);
  i2c_write(hs_set);
  i2c_stop();
lesen:
    i2c_start();
    i2c_write(0xA0);
    i2c_write(0x01);
    i2c_start();
    i2c_write(0xA1);
    hs_hex = i2c_read(0);

von JoergL (Gast)


Lesenswert?

Wie werden hier I2C-Fehler bearbeitet, z.B. NACKs?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.