//------------------------------------------------------------- // Umrechnung von Hex-Wert in Spannungswert - Überlauf-Problematik //------------------------------------------------------------- // Variablen int digit; int spannung; int mittelwert; int korrektur; // digit_float = 2,5/8388607 ; // funktioniert nicht ->natürlich alle andern variablen dann auch float digit = 298; //Spannungswert eines Digits +2,5V/8388607 = 2,9802325940409414817025043609744e-7 // mittelwert; // max 0x00FFFFFF, min 0x0 if (mittelwert > 0x007FFFFF) // negativer Werteberich { korrektur = (-0x000003E8 * (((mittelwert_SPI0/0x00000064) * digit) - 0x02FAF080 + 0x00001B58)); // Offsetkorrektur - 0x0007DA32 //korrekturfkt: y = -0,0001x + 0,0007 spannung = (((mittelwert/0x00000064) * digit) - 0x02FAF080 + korrektur) * (-1); // (Mittelwert / 100) * mit digit davon 5V abziehen und Offset korrigieren rprintf("SPI0 neg Spannung_dez: -%d.%07dV\n",(spannung/10000000),(spannung%10000000)); } else // positiver Bereich { korrektur = (-0x000032C8 * ((mittelwert/0x00000064) * digit) + 0x0007B890); // Offsetkorrektur + 0x000065A8 // y=-0,0013x + 0,0506 spannung = ((mittelwert/0x00000064) * digit_int + korrektur); rprintf("SPI0 pos Spannung_dez: %d.%07dV\n",(spannung/10000000),(spannung%10000000)); }; //--------------------------------------------------------------------------- int64_t spannung (= quadword) -> verursacht ebenso Überlauf