Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: EEPROM Ergbeniss falsch warum? Kategorie: Programmierung C (von PeterS - 29.11.2010 15:24)
Als Antwort auf EEPROM Ergbeniss falsch warum? von Jenny - 24.11.2010 11:49


Hallo Jenny,

Dein erstes Problem ist, das man beim Lesen von mehreren Bytes nur beim letzten ein NACK
schickt, davor immer ein ACK.

Zweitens, wenn man mehr als ein Byte liest oder schreibt, so führt man automatisch ein Page
Write durch. Beim Lesen ist das kein Problem, aber beim Schreiben muÃ? man darauf achten,
das man nicht mehr Bytes als eine Page aufeinmal schreibt. Ein Beispiel:

Man hat z.B. eine Page Size von 32 Bytes (24C64). Man möchte auf Speicherdresse 57 zehn Bytes
schreiben. Auf die 2. Seite (Bytes 32-63) passen aber nur 7 Bytes (57-63). D.h. man muÃ? erst
7 Bytes ab Adresse 57 schreiben, danach das EEPROM neu adressieren und die fehlenden 3 Bytes
ab Adresse 64 schreiben.

Gruss Peter

> Hallo an alle,
>
> ich habe mich am Beispiel von der Doku mit dem Speichern von Daten auf
> das interne EEPROM befasst.
> Wenn ich nur einen Wert gebe zu speichern und anschlieÃ?end auslese,
> erhalte ich den richtigen Wert.
> Versuche ich aber nun zwei Werte nach der Berechnung auszugeben, stimmt der
> erste Wert aber der zweite ist falsch.
>
> x Wert=-7.5
> y Wert=-122.5
>
> Muss ich denn sozusagen ein Page Write durchführen?
> Oder woran kann es liegen?
>
> Ich habe diese Beispielprogramm benutzt um die Funktion und Programmierung
> eines EEPROM besser zu verstehen. Später möchte ich ein externes EEPROM über
> I2C ansprechen und Daten speichern und auslesen.
>
> �ber Eure hilfe wäre ich sehr dankbar.
>
> void main(void)
>
> {
>
>     word address;
>     int datax,EEPROM_datax,datay,EEPROM_datay;
>     address=0x20;
>     datax=25;
>     datay=65;
>
>     PRO_BOT128_INIT();
>     I2C_Init(I2C_100kHz );
>
>     // write data to 24C64 (8k x 8) EEPROM
>
>     I2C_Start();
>     I2C_Write(0xA0);                              // DEVICE ADDRESS : A0
>
>     I2C_Write(address>>8);                         // HIGH WORD ADDRESS
>
>     I2C_Write(address);                            // LOW WORD ADDRESS
>
>     I2C_Write(datax);
>     I2C_Write(datay);                                // write Data
>     I2C_Stop();
>
>     AbsDelay(5);                                   // delay for EEPROM Write Cycle
>
>
>
>     // read data from 24C64 (8k x 8) EEPROM
>
>     I2C_Start();
>
>     I2C_Write(0xA0);                               // DEVICE ADDRESS : A0
>
>     I2C_Write(address>>8);                         // HIGH WORD ADDRESS
>
>     I2C_Write(address);                            // LOW WORD ADDRESS
>
>     I2C_Start();                                   // RESTART
>
>     I2C_Write(0xA1);                               // DEVICE ADDRESS : A1
>
>     EEPROM_datax=I2C_Read_NACK();
>     EEPROM_datay=I2C_Read_NACK();
>     I2C_Stop();
>
>     float x,y;
>
>     if(EEPROM_datax>10)
>     {
>         EEPROM_datax=(10- EEPROM_datax);
>
>         x=(EEPROM_datax*0.5);
>     }
>
>     if(EEPROM_datay>10)
>     {
>
>        EEPROM_datay=(10 - EEPROM_datay);
>
>        y=(EEPROM_datay*0.5);
>      }
>
>
>     float str[3];
>     str[1]=x;
>     str[2]=y;
>
>     Str_Printf(str,"%1.2f",x);
>     Msg_WriteChar(97);
>     Msg_WriteChar(120);
>     Msg_WriteChar(61);
>     Msg_WriteText(str);
>     Msg_WriteChar(13);
>
>
>     Str_Printf(str,"%1.2f",y);
>     Msg_WriteChar(97);
>     Msg_WriteChar(121);
>     Msg_WriteChar(61);
>     Msg_WriteText(str);
>     Msg_WriteChar(13);
>            
> }


    Antwort schreiben


Antworten:

Re: EEPROM Ergbeniss falsch warum? (von Jenny - 29.11.2010 18:31)
    Re: EEPROM Ergbeniss falsch warum? (von PeterS - 29.11.2010 22:26)
        Re: EEPROM Ergbeniss falsch warum? (von Jenny - 30.11.2010 11:25)
            Re: EEPROM Ergbeniss falsch warum? (von PeterS - 30.11.2010 13:42)
                Re: EEPROM Ergbeniss falsch warum? (von Jenny - 30.11.2010 14:28)
                    Re: EEPROM Ergbeniss falsch warum? (von PeterS - 30.11.2010 15:47)