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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum