#include "i2cmaster.h" #include #include #include #include #include #include //wegen sprintf const unsigned long int RCAL_Value = 200000; . . . int main(void) { unsigned char RealHigh; unsigned char RealLow; unsigned char ImagHigh; unsigned char ImagLow; unsigned int I=0; unsigned int R=0; float Imp; float Mag; float Gain; char a[20]; // used in LCD-ROutine RealHigh = i2c_readNak(); // Read Real Data Highbyte from 0x95 . RealLow = i2c_readNak(); // Read Real Data Lowbyte from 0x95 . ImagHigh = i2c_readNak(); // Read Imag Data Highbyte from 0x95 . ImagLow = i2c_readNak(); // Read Imag Data Lowbyte from 0x95 R = (uint16_t)RealHigh*256+RealLow; //Casting if(R>0x7fff) //2er Complement Wandlung { //ist das richtig so???? R=R&0x7fff; R=0x10000-R; } I = (uint16_t)ImagHigh*256+ImagLow; if(I>0x7fff) { I=I&0x7fff; I=0x10000-I; } sprintf(a, "1R_%d", R); lcd_send(BEFEHL, LCD_CLEAR); lcd_write(a); sprintf(a, "1I_%d", I); lcd_send(BEFEHL, LCD_LINE2); lcd_write(a); sekunde(10); Mag = sqrt((I*I)+(R*R)); // Calculating Magnitude Gain = 1/RCAL_Value/Mag; // Calculating Gain Factor sprintf(a, "M%li", (unsigned long int)Mag); lcd_send(BEFEHL, LCD_CLEAR); lcd_write(a); sekunde(10); sprintf(a, "G%li", (unsigned long int)Gain); lcd_send(BEFEHL, LCD_CLEAR); lcd_write(a); sekunde(10); //ab hier...erneute messung RealHigh = i2c_readNak(); // Read Real Data Highbyte from 0x95 . RealLow = i2c_readNak(); // Read Real Data Lowbyte from 0x95 . ImagHigh = i2c_readNak(); // Read Imag Data Highbyte from 0x95 . ImagLow = i2c_readNak(); // Read Imag Data Lowbyte from 0x95 // Casting Results R = (uint16_t)RealHigh*256+RealLow; if(R>0x7fff) { R=R&0x7fff; R=0x10000-R; } I = (uint16_t)ImagHigh*256+ImagLow; if(I>0x7fff) { I=I&0x7fff; I=0x10000-I; } Mag = sqrt(I*I+R*R); // Calculating new Magnitude Imp = 1/(Gain*Mag); // Calculating Impedance using gain from upper calc. sprintf(a, "%li", (unsigned long int)Imp); lcd_send(BEFEHL, LCD_CLEAR); lcd_write(a); sekunde(5);