Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > 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); > > > > }