Lightweight Linear Mapping Library (e.g. ADC Conversion)
linmap.h is a header-only C library that provides a way to map numerical values from one range to another.
Check out the example output in here
ADC CONVERSION MACRO OUTPUT EXAMPLE
MILLI_VOLT_REFERENCE : 3300
ADC_BIT_COUNT : 10
SCALING_FACTOR : 10
Fixed Linear Conversion (8-bit)
ADC Value --> Millivolt --> ADC Value
ADC Value
Millivolts (Fixed Point)
ADC From mV (Fixed Point)
error
0
0
0
0
64
206
63
-1
128
156
48
-80
192
107
33
-159
256
0
0
0
320
206
63
-1
384
156
48
-80
448
107
33
-159
512
0
0
0
576
206
63
-1
640
156
48
-80
704
107
33
-159
768
0
0
0
832
206
63
-1
896
156
48
-80
960
107
33
-159
1024
0
0
0
Millivolt --> ADC Value --> Millivolt
MV Value
ADC From mV (Fixed Point)
Millivolts (Fixed Point)
error
0 mV
0
0
0
100 mV
31
100
0
200 mV
62
200
0
300 mV
13
41
-3
400 mV
44
141
-3
500 mV
75
241
-3
600 mV
27
87
-1
700 mV
58
187
-1
800 mV
9
29
-3
900 mV
40
129
-3
1000 mV
71
229
-3
1100 mV
23
74
-2
1200 mV
54
174
-2
1300 mV
6
19
-1
1400 mV
37
119
-1
1500 mV
68
219
-1
1600 mV
19
61
-3
1700 mV
50
161
-3
1800 mV
2
6
-2
1900 mV
33
106
-2
2000 mV
64
206
-2
2100 mV
16
51
-1
2200 mV
47
151
-1
2300 mV
78
251
-1
2400 mV
29
93
-3
2500 mV
60
193
-3
2600 mV
12
38
-2
2700 mV
43
138
-2
2800 mV
74
238
-2
2900 mV
26
83
-1
3000 mV
57
183
-1
3100 mV
8
25
-3
3200 mV
39
125
-3
3300 mV
70
225
-3
Fixed Linear Conversion (16-bit)
ADC Value --> Millivolt --> ADC Value
ADC Value
Millivolts (Fixed Point)
ADC From mV (Fixed Point)
error
0
0
0
0
64
206
63
-1
128
412
127
-1
192
619
191
-1
256
825
255
-1
320
1032
319
-1
384
1238
383
-1
448
1445
447
-1
512
1651
511
-1
576
1858
575
-1
640
2064
639
-1
704
2270
703
-1
768
2477
767
-1
832
2683
831
-1
896
2890
895
-1
960
3096
959
-1
1024
3303
1023
-1
Millivolt --> ADC Value --> Millivolt
MV Value
ADC From mV (Fixed Point)
Millivolts (Fixed Point)
error
0 mV
0
0
0
100 mV
31
100
0
200 mV
62
200
0
300 mV
93
300
0
400 mV
124
400
0
500 mV
155
500
0
600 mV
186
600
0
700 mV
217
700
0
800 mV
248
800
0
900 mV
279
900
0
1000 mV
310
1000
0
1100 mV
341
1100
0
1200 mV
372
1200
0
1300 mV
403
1300
0
1400 mV
434
1400
0
1500 mV
465
1500
0
1600 mV
496
1600
0
1700 mV
527
1700
0
1800 mV
558
1800
0
1900 mV
589
1900
0
2000 mV
620
2000
0
2100 mV
651
2100
0
2200 mV
682
2200
0
2300 mV
713
2300
0
2400 mV
744
2400
0
2500 mV
775
2500
0
2600 mV
806
2600
0
2700 mV
837
2700
0
2800 mV
868
2800
0
2900 mV
899
2900
0
3000 mV
930
3000
0
3100 mV
961
3100
0
3200 mV
992
3200
0
3300 mV
1023
3300
0
Fixed Linear Conversion (32-bit)
ADC Value --> Millivolt --> ADC Value
ADC Value
Millivolts (Fixed Point)
ADC From mV (Fixed Point)
error
0
0
0
0
64
206
63
-1
128
412
127
-1
192
619
191
-1
256
825
255
-1
320
1032
319
-1
384
1238
383
-1
448
1445
447
-1
512
1651
511
-1
576
1858
575
-1
640
2064
639
-1
704
2270
703
-1
768
2477
767
-1
832
2683
831
-1
896
2890
895
-1
960
3096
959
-1
1024
3303
1023
-1
Millivolt --> ADC Value --> Millivolt
MV Value
ADC From mV (Fixed Point)
Millivolts (Fixed Point)
error
0 mV
0
0
0
100 mV
31
100
0
200 mV
62
200
0
300 mV
93
300
0
400 mV
124
400
0
500 mV
155
500
0
600 mV
186
600
0
700 mV
217
700
0
800 mV
248
800
0
900 mV
279
900
0
1000 mV
310
1000
0
1100 mV
341
1100
0
1200 mV
372
1200
0
1300 mV
403
1300
0
1400 mV
434
1400
0
1500 mV
465
1500
0
1600 mV
496
1600
0
1700 mV
527
1700
0
1800 mV
558
1800
0
1900 mV
589
1900
0
2000 mV
620
2000
0
2100 mV
651
2100
0
2200 mV
682
2200
0
2300 mV
713
2300
0
2400 mV
744
2400
0
2500 mV
775
2500
0
2600 mV
806
2600
0
2700 mV
837
2700
0
2800 mV
868
2800
0
2900 mV
899
2900
0
3000 mV
930
3000
0
3100 mV
961
3100
0
3200 mV
992
3200
0
3300 mV
1023
3300
0
Floating Linear Conversion (reference)
ADC Value --> Millivolt --> ADC Value
ADC Value
Millivolts (float)
ADC From mV (int)
error
0
0.00 mV
0
0
64
206.45 mV
64
0
128
412.90 mV
128
0
192
619.35 mV
192
0
256
825.81 mV
256
0
320
1032.26 mV
320
0
384
1238.71 mV
384
0
448
1445.16 mV
448
0
512
1651.61 mV
512
0
576
1858.06 mV
576
0
640
2064.52 mV
640
0
704
2270.97 mV
704
0
768
2477.42 mV
768
0
832
2683.87 mV
832
0
896
2890.32 mV
896
0
960
3096.77 mV
960
0
1024
3303.23 mV
1024
0
Millivolt --> ADC Value --> Millivolt
MV Value
ADC From mV (int)
Millivolts (float)
error
0 mV
0
0.00 mV
0.00
100 mV
31
100.00 mV
0.00
200 mV
62
200.00 mV
0.00
300 mV
93
300.00 mV
0.00
400 mV
124
400.00 mV
0.00
500 mV
155
500.00 mV
0.00
600 mV
186
600.00 mV
0.00
700 mV
217
700.00 mV
0.00
800 mV
248
800.00 mV
0.00
900 mV
279
900.00 mV
0.00
1000 mV
310
1000.00 mV
0.00
1100 mV
341
1100.00 mV
0.00
1200 mV
372
1200.00 mV
0.00
1300 mV
403
1300.00 mV
0.00
1400 mV
434
1400.00 mV
0.00
1500 mV
465
1500.00 mV
0.00
1600 mV
496
1600.00 mV
0.00
1700 mV
527
1700.00 mV
0.00
1800 mV
558
1800.00 mV
0.00
1900 mV
589
1900.00 mV
0.00
2000 mV
620
2000.00 mV
0.00
2100 mV
651
2100.00 mV
0.00
2200 mV
682
2200.00 mV
0.00
2300 mV
713
2300.00 mV
0.00
2400 mV
744
2400.00 mV
0.00
2500 mV
775
2500.00 mV
0.00
2600 mV
806
2600.00 mV
0.00
2700 mV
837
2700.00 mV
0.00
2800 mV
868
2800.00 mV
0.00
2900 mV
899
2900.00 mV
0.00
3000 mV
930
3000.00 mV
0.00
3100 mV
961
3100.00 mV
0.00
3200 mV
992
3200.00 mV
0.00
3300 mV
1023
3300.00 mV
0.00
Linear Conversion (AVR 8-bit e.g. atmega328p)
ADC
Millivolt
ADC back
error
0
0
0
0
64
230
11
-53
128
205
10
-118
192
180
9
-183
0
0
0
0
Fixed Linear Conversion (AVR 8-bit e.g. atmega328p)
ADC
Millivolt
ADC back
error
0
0
0
0
64
230
11
-53
128
205
10
-118
192
180
9
-183
0
0
0
0
Floating Linear Conversion (AVR 32-bit Soft Float float e.g. atmega328p)
ADC Value --> Millivolt --> ADC Value
ADC Value
Millivolts (float)
ADC From mV (int)
error
0.000000
0.00 mV
0
0
64.000000
1254.90 mV
64
0
128.000000
2509.80 mV
128
0
192.000000
3764.71 mV
192
0
256.000000
5019.61 mV
256
0
Millivolt --> ADC Value --> Millivolt
MV Value
ADC From mV (int)
Millivolts (float)
error
0 mV
0
0.00 mV
0.00
100 mV
5
98.04 mV
-1.96
200 mV
10
196.08 mV
-3.92
300 mV
15
294.12 mV
-5.88
400 mV
20
392.16 mV
-7.84
500 mV
25
490.20 mV
-9.80
600 mV
30
588.24 mV
-11.76
700 mV
35
686.27 mV
-13.73
800 mV
40
784.31 mV
-15.69
900 mV
45
882.35 mV
-17.65
1000 mV
51
1000.00 mV
0.00
1100 mV
56
1098.04 mV
-1.96
1200 mV
61
1196.08 mV
-3.92
1300 mV
66
1294.12 mV
-5.88
1400 mV
71
1392.16 mV
-7.84
1500 mV
76
1490.20 mV
-9.80
1600 mV
81
1588.24 mV
-11.76
1700 mV
86
1686.27 mV
-13.73
1800 mV
91
1784.31 mV
-15.69
1900 mV
96
1882.35 mV
-17.65
2000 mV
102
2000.00 mV
0.00
2100 mV
107
2098.04 mV
-1.96
2200 mV
112
2196.08 mV
-3.92
2300 mV
117
2294.12 mV
-5.88
2400 mV
122
2392.16 mV
-7.84
2500 mV
127
2490.20 mV
-9.80
2600 mV
132
2588.24 mV
-11.76
2700 mV
137
2686.27 mV
-13.73
2800 mV
142
2784.31 mV
-15.69
2900 mV
147
2882.35 mV
-17.65
3000 mV
153
3000.00 mV
0.00
3100 mV
158
3098.04 mV
-1.96
3200 mV
163
3196.08 mV
-3.92
3300 mV
168
3294.12 mV
-5.88
3400 mV
173
3392.16 mV
-7.84
3500 mV
178
3490.20 mV
-9.80
3600 mV
183
3588.24 mV
-11.76
3700 mV
188
3686.27 mV
-13.73
3800 mV
193
3784.31 mV
-15.69
3900 mV
198
3882.35 mV
-17.65
4000 mV
204
4000.00 mV
0.00
4100 mV
209
4098.04 mV
-1.96
4200 mV
214
4196.08 mV
-3.92
4300 mV
219
4294.12 mV
-5.88
4400 mV
224
4392.16 mV
-7.84
4500 mV
229
4490.20 mV
-9.80
4600 mV
234
4588.24 mV
-11.76
4700 mV
239
4686.27 mV
-13.73
4800 mV
244
4784.31 mV
-15.69
4900 mV
249
4882.35 mV
-17.65
5000 mV
255
5000.00 mV
0.00