|
1
|
#include <stdio.h>
|
|
2
|
#include <time.h>
|
|
3
|
#include <termios.h>
|
|
4
|
#include <errno.h>
|
|
5
|
#include <fcntl.h>
|
|
6
|
#include <QList>
|
|
7
|
|
|
8
|
|
|
9
|
|
|
10
|
float E12[]
|
|
11
|
{
|
|
12
|
100, 120, 150, 180, 220, 270, 330, 390, 470, 560, 680, 820,
|
|
13
|
1000, 1200, 1500, 1800, 2200, 2700, 3300, 3900, 4700, 5600, 6800, 8200,
|
|
14
|
10000, 12000, 15000, 18000, 22000, 27000, 33000, 39000, 47000, 56000, 68000, 82000,
|
|
15
|
};
|
|
16
|
|
|
17
|
float E24[]
|
|
18
|
{
|
|
19
|
100, 110, 120, 130, 150, 160, 180, 200, 220, 240, 270, 300, 330, 360, 390, 430, 470, 510, 560, 620, 680, 750, 820, 910,
|
|
20
|
1000, 1100, 1200, 1300, 1500, 1600, 1800, 2000, 2200, 2400, 2700, 3000, 3300, 3600, 3900, 4300, 4700, 5100, 5600, 6200, 6800, 7500, 8200, 9100,
|
|
21
|
10000, 11000, 12000, 13000, 15000, 16000, 18000, 20000, 22000, 24000, 27000, 30000, 33000, 36000, 39000, 43000, 47000, 51000, 56000, 62000, 68000, 75000, 82000, 91000
|
|
22
|
};
|
|
23
|
|
|
24
|
|
|
25
|
#define E E12
|
|
26
|
|
|
27
|
|
|
28
|
float r2( float target, float r1 )
|
|
29
|
{
|
|
30
|
return( r1 * ( ( target / 1.23 ) - 1 ) );
|
|
31
|
};
|
|
32
|
|
|
33
|
|
|
34
|
float voltage( float r1, float r2 )
|
|
35
|
{
|
|
36
|
return(1.23 * ( 1 + ( r2 / r1 ) ) );
|
|
37
|
};
|
|
38
|
|
|
39
|
|
|
40
|
float r_ges(float r1, float r2)
|
|
41
|
{
|
|
42
|
// https://studyflix.de/elektrotechnik/parallelschaltung-widerstand-4533
|
|
43
|
return( ( r1 * r2 ) / ( r1 + r2 ) );
|
|
44
|
}
|
|
45
|
|
|
46
|
|
|
47
|
int main()
|
|
48
|
{
|
|
49
|
float target=12.0;
|
|
50
|
int bestR1=-1;
|
|
51
|
int bestR2=-1;
|
|
52
|
int bestR3=-1;
|
|
53
|
float bestVoltage=1000000;
|
|
54
|
float v;
|
|
55
|
|
|
56
|
int count=sizeof(E)/sizeof(E[0]);
|
|
57
|
|
|
58
|
//printf("%g Ohm\n", r2(target, 1000.0) );
|
|
59
|
for(int i1=0; i1<count; i1++)
|
|
60
|
{
|
|
61
|
// if( ( E[i1] >= 1000 ) && ( E[i1] <= 5000 ) )
|
|
62
|
if( E[i1] == 1000 )
|
|
63
|
{
|
|
64
|
for(int i2=0; i2<count; i2++)
|
|
65
|
{
|
|
66
|
for(int i3=0; i3<count; i3++)
|
|
67
|
{
|
|
68
|
v=voltage( E[i1], r_ges( E[i2], E[i3] ) );
|
|
69
|
printf("%g V\n", v );
|
|
70
|
if( ( v >= target ) && ( v < bestVoltage ) )
|
|
71
|
{
|
|
72
|
bestR1=i1;
|
|
73
|
bestR2=i2;
|
|
74
|
bestR3=i3;
|
|
75
|
bestVoltage=v;
|
|
76
|
}
|
|
77
|
}
|
|
78
|
}
|
|
79
|
}
|
|
80
|
}
|
|
81
|
|
|
82
|
printf("%d/%d/%d\n", bestR1, bestR2, bestR3 );
|
|
83
|
printf("R1=%g\n", E[bestR1] );
|
|
84
|
printf("R2=%g\n", E[bestR2] );
|
|
85
|
printf("R3=%g\n", E[bestR3] );
|
|
86
|
printf("[R2|R3]=%g\n", r_ges( E[bestR2], E[bestR3] ) );
|
|
87
|
//v=voltage(E[bestR1], E[bestR2] );
|
|
88
|
v = bestVoltage;
|
|
89
|
printf("Result=%g; %g%%\n", v, (v-target)*(100/target) );
|
|
90
|
|
|
91
|
// References from TI:
|
|
92
|
// 3.3 V R2 = 1.7 k
|
|
93
|
// 5 V, R2 = 3.1 k
|
|
94
|
// 12 V, R2 = 8.84 k
|
|
95
|
// 15 V, R2 = 11.3 k
|
|
96
|
// For ADJ. Version R1 = Open, R2 = 0 Ω Patent Pending
|
|
97
|
v=voltage(1000, 8840);
|
|
98
|
v=voltage(1000, 3100);
|
|
99
|
v=voltage(1000, 11300);
|
|
100
|
printf("Reference=%g\n", v);
|
|
101
|
|
|
102
|
return 0;
|
|
103
|
}
|