Forum: Mikrocontroller und Digitale Elektronik EEPROM via I2c programmieren


von Bastian (Gast)


Lesenswert?

Hallo Leute,

ich verzweifle langsam, was den Schreib- / Lesevorgang meines AT24C1024 
betrifft.

Ich verwende ein uC51-Derivat (MSC1210) und den besagten AT24C.

Folgenden Code habe ich geschrieben:
//SCHREIBEN

              if(i2c_selectslave(160+1)&0xFF00) printf("FEHLER");
                else
                {
             WDSERV();
             i2c_sendstart();
             i2c_setbyte(160);
             i2c_setbyte(0x05);
             i2c_setbyte(0x05);
             i2c_setbyte(0x75);
              i2c_sendstop();

            //LESEN
            i2c_sendstart();


           i2c_selectslave(160+1);
              ack=i2c_receiveack();
                if(ack==0) printf("DATA: %d",i2c_getbytee());
                    else
                        {
                           i2c_wait();
                        }
                    i2c_sendstop();

Das ganze befindet sich momentan noch in einer Endlosschleife.
Leider bekommen ich immer nur 255 ausgegeben.

Woran kann das liegen?

MfG und vielen Dank,
Bastian

von I2C (Gast)


Lesenswert?

Bastian schrieb:
> printf("DATA: %d",i2c_getbytee());

Schreibfehler bei i2c_getbytee() ?

Hast Du einen Oszi um was messen zu können?

Gruß

von Daniel V. (danvet)


Lesenswert?

Hast du das schon gelesen ?:

http://www.atmel.com/Images/doc1471.pdf


Deine Bytes die du sendest sind falsch.

von Bastian (Gast)


Lesenswert?

Hallo,

getbytee ist korrekt :-) In den Wickenhäuser-Bibliotheken ist das leider 
so geschrieben worden. Oszi werde ich wohl gleich mal zu Rate ziehen.

von Bastian (Gast)


Lesenswert?

Daniel V. schrieb:
> Deine Bytes die du sendest sind falsch.

Hallo Daniel,

gelesen habe ich es, wahrscheinlich aber etwas überlesen :-(

Was meinst Du mit den falsch gesendeten Bytes?

Gruß,
Bastian

von Daniel V. (danvet)


Lesenswert?

Bastian schrieb:
> Daniel V. schrieb:
>> Deine Bytes die du sendest sind falsch.
>
> Hallo Daniel,
>
> gelesen habe ich es, wahrscheinlich aber etwas überlesen :-(
>
> Was meinst Du mit den falsch gesendeten Bytes?
>
> Gruß,
> Bastian

Sorry hab mich vertan, du schreibst ja zuerst auf das EEPROM, aaaaber: 
EEPROMs sind recht langsam, beachte daher die Schreibzeit Tw. Mal im 
Dokument nachlesen!

von Bastian (Gast)


Lesenswert?

Das heißt, ich sollte eine Wartezeit (i2c_wait();) einfügen?

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

Hallo Basti.

Eine andere Möglichkeit

'ACKNOWLEDGE POLLING'

Das heisst, daß nach dem STOP, das das Schreiben initiiert, der MC
solange in einer Schleife hängt, bis das EEPROM fertig ist und sein AKN 
sendet.

Ist in allen  Datenblätter der EE-PROMs, die ich kenne, beschrieben.
Beim AT24C1024 Datenblatt: Seite 9 ziemlich unten.
So eine Schleife, wie dort beschrieben, ist ja einfach zu 
implementieren.
Dann bist du immer auf der sicheren Seite,

Vielleicht hilft es weiter.

73 Wilhelm

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.