#include #include #include long RtTbl[50]; int ReadRt() { FILE *f = fopen("epcos.txt", "r"); if (!f) { printf("Can't open epcos.txt\n"); return 0; } int cnt = 0; while (!feof(f)) { long r; int res = fscanf(f, "%ld", &r); if (res != 1) break; RtTbl[cnt] = r; cnt++; } fclose(f); return cnt; } int bresenham(int da, int dt, int adc) { int a = 0, t = 0; int d = 0; for (a = 1; a < da; a++) { if (d < 0) d += 2*dt; else d += 2*(dt - da); if (d >= 0) t++; if (a == adc) return t; } return t; } void main() { textmode(C4350); clrscr(); int cnt = ReadRt(); long RtFirst = RtTbl[0]; long RtLast = RtTbl[cnt - 1]; printf("Read %d values of Rt. MinRt = %ld, MaxRt = %ld.\n", cnt, RtLast, RtFirst); int bits = 10; int steps = 1 << bits; double Vcc = 5.0, Vref = Vcc, Vlsb = Vref / steps; printf("Vlsb = %8.6f for Vref = %5.3f on %d-bit ADC\n\n", Vlsb, Vref, bits); double R = 15000.0; printf("R = %f\n", R); int dADC[50]; dADC[0] = 0; printf("*****************************************************\n"); printf("* T * Rt * U(R) * dU(R) * ADC * dADC *\n"); printf("*****************************************************\n"); double PrevU = 0.0; long PrevADC = 0; for (int t = -55, i = 0; t <= 125; t += 5, i++) { long Rt = RtTbl[i]; double U = R*Vcc / (Rt + R); double dU = U - PrevU; if (dU < Vlsb*5) dU = 0.0; if (U > Vref) U = Vref; long ADC = U / Vlsb; dADC[i] = ADC - PrevADC; printf("* %4d * %8ld * %7.5f * %7.5f * %4ld * %4d *\n", t, Rt, U, dU, ADC, dADC[i]); PrevU = U; PrevADC = ADC; } printf("*****************************************************\n"); for (i = 0; i < cnt - 1; i++) printf("%d, ", dADC[i]); printf("\n"); getch(); for (int a = 12; a < 905; a++) { int sa = 12; int tr = -1000; for (int i = 5, t = -20; i < cnt; i++, t += 5) { int da = dADC[i + 1]; if (a >= sa && a < sa + da) { if (a == sa) tr = t; else tr = t + bresenham(da, 5, a - sa); break; } else sa += dADC[i + 1]; } printf("* %4d * %3d *\n", a, tr); } }