Hi, i've tried to store a float variable into eeprom and i couldnt achieve it , when i printf it outputs NNDD ! strange thing , however it works fine with integers
typedef union { unsigned char array[sizeof(float)]; float gain; } ahmed; ahmed temp; // to save value EDATA1=temp.array[0]; //put 78 in edata 0 //GN0L EDATA2=temp.array[1]; //put 51 in edata 1 //GN0M EDATA3=temp.array[2]; //put 2 in edata 2 //GN0H EDATA3=temp.array[3]; // to retrive value temp.array[0]=EDATA1; temp.array[1]=EDATA2; temp.array[2]=EDATA3; temp.array[3]=EDATA4; // to print value printf("%1.0f",(float)temp.gain); //Output result to UART
.
Sorry about the typo in the above code , by the way its worked when printing the float , but it doesnt save it into the eeprom , however it does save integers
void Save_Gain(void) { //First byte of gain (GN0L). EADRH=0x00; //set page address at 00h high byte (03ff) EADRL=0x00; //low byte EDATA1=temp.array[0]; //put 78 in edata 0 //GN0L EDATA2=temp.array[1]; //put 51 in edata 1 //GN0M EDATA3=temp.array[2]; //put 2 in edata 2 //GN0H EDATA4=temp.array[3]; ECON=0x05; //erase page ECON=0x02; //write EDATA1-4 into pre-erased ECON=0x04; //verify page HW_Delay(50); } void Get_Gain(void) { EADRH=0x00; //set page address at 00h high byte (03ff) EADRL=0x00; //low byte ECON=0x01; /*read current 4byte page of FlashEE //into EDATA1,2,3,4*/ //HW_Dalay(20); // GN0H=EDATA3; //put saved value in gain register H //GN0H=255; //HW_Dalay(20); // GN0M=EDATA2; //put saved value in gain register M // GN0M=255; //HW_Dalay(20); temp.array[0]=EDATA1; //put saved value in gain register L temp.array[1]=EDATA2; temp.array[2]=EDATA3; temp.array[3]=EDATA4; // GN0L=255; //HW_Dalay(20); }