Nice little test tool for linear led mapping
This commit is contained in:
parent
ef740ff88c
commit
8ef24aa43c
|
@ -1,4 +1,156 @@
|
||||||
## Simple C program used to debut the log function I used for LED control
|
## A Simple C program used to debug and examine the log function I used for LED control
|
||||||
|
|
||||||
|
The bit width (precision) for the PWM can be specified (max. 16 bit)
|
||||||
|
|
||||||
|
The Input values are integer percentages from 0-100.
|
||||||
|
|
||||||
|
The Output is a logarithmically scaling integer between 0 and the max PWM value.
|
||||||
|
|
||||||
|
``` C
|
||||||
|
/* Dump linear led values */
|
||||||
|
#include "stdio.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
//int pwmBits = 9; // Number of PWM bits
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("\nERROR: This utility expects a single parameter; the bit-width of the PWM stream\n\n");
|
||||||
|
return 1; }
|
||||||
|
|
||||||
|
int pwmBits = atoi(argv[1]);
|
||||||
|
|
||||||
|
if (pwmBits < 2 || pwmBits > 16) {
|
||||||
|
printf("\nERROR: '%s' is not an integer in the range 2-16.\n\n", argv[1]);
|
||||||
|
return 1; }
|
||||||
|
|
||||||
|
int pwmMax = pow(2,pwmBits)-1;
|
||||||
|
|
||||||
|
printf("\nThe PWM Bit width (resolution) specified is %i, pwm range is from 0 to %i\n-----------\n", pwmBits, pwmMax);
|
||||||
|
|
||||||
|
for (int val = 0; val <= 100; val++) {
|
||||||
|
int pwm = round((pow(2,(1+(val*0.02)))-2)/6*pwmMax);
|
||||||
|
printf(" %3i : %5i\n", val, pwm);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Adjust the width as necesscary and compile with:
|
||||||
|
|
||||||
|
$ gcc linearled.c -o linearled -lm
|
||||||
|
|
||||||
|
And run to see the results:
|
||||||
|
```bash
|
||||||
|
$ ./linearled 9
|
||||||
|
|
||||||
|
The PWM Bit width (resolution) specified is 9, pwm range is from 0 to 511
|
||||||
|
-----------
|
||||||
|
0 : 0
|
||||||
|
1 : 2
|
||||||
|
2 : 5
|
||||||
|
3 : 7
|
||||||
|
4 : 10
|
||||||
|
5 : 12
|
||||||
|
6 : 15
|
||||||
|
7 : 17
|
||||||
|
8 : 20
|
||||||
|
9 : 23
|
||||||
|
10 : 25
|
||||||
|
11 : 28
|
||||||
|
12 : 31
|
||||||
|
13 : 34
|
||||||
|
14 : 36
|
||||||
|
15 : 39
|
||||||
|
16 : 42
|
||||||
|
17 : 45
|
||||||
|
18 : 48
|
||||||
|
19 : 51
|
||||||
|
20 : 54
|
||||||
|
21 : 58
|
||||||
|
22 : 61
|
||||||
|
23 : 64
|
||||||
|
24 : 67
|
||||||
|
25 : 71
|
||||||
|
26 : 74
|
||||||
|
27 : 77
|
||||||
|
28 : 81
|
||||||
|
29 : 84
|
||||||
|
30 : 88
|
||||||
|
31 : 91
|
||||||
|
32 : 95
|
||||||
|
33 : 99
|
||||||
|
34 : 103
|
||||||
|
35 : 106
|
||||||
|
36 : 110
|
||||||
|
37 : 114
|
||||||
|
38 : 118
|
||||||
|
39 : 122
|
||||||
|
40 : 126
|
||||||
|
41 : 130
|
||||||
|
42 : 135
|
||||||
|
43 : 139
|
||||||
|
44 : 143
|
||||||
|
45 : 148
|
||||||
|
46 : 152
|
||||||
|
47 : 156
|
||||||
|
48 : 161
|
||||||
|
49 : 166
|
||||||
|
50 : 170
|
||||||
|
51 : 175
|
||||||
|
52 : 180
|
||||||
|
53 : 185
|
||||||
|
54 : 190
|
||||||
|
55 : 195
|
||||||
|
56 : 200
|
||||||
|
57 : 205
|
||||||
|
58 : 210
|
||||||
|
59 : 216
|
||||||
|
60 : 221
|
||||||
|
61 : 226
|
||||||
|
62 : 232
|
||||||
|
63 : 238
|
||||||
|
64 : 243
|
||||||
|
65 : 249
|
||||||
|
66 : 255
|
||||||
|
67 : 261
|
||||||
|
68 : 267
|
||||||
|
69 : 273
|
||||||
|
70 : 279
|
||||||
|
71 : 285
|
||||||
|
72 : 292
|
||||||
|
73 : 298
|
||||||
|
74 : 305
|
||||||
|
75 : 311
|
||||||
|
76 : 318
|
||||||
|
77 : 325
|
||||||
|
78 : 332
|
||||||
|
79 : 339
|
||||||
|
80 : 346
|
||||||
|
81 : 353
|
||||||
|
82 : 361
|
||||||
|
83 : 368
|
||||||
|
84 : 375
|
||||||
|
85 : 383
|
||||||
|
86 : 391
|
||||||
|
87 : 399
|
||||||
|
88 : 407
|
||||||
|
89 : 415
|
||||||
|
90 : 423
|
||||||
|
91 : 431
|
||||||
|
92 : 439
|
||||||
|
93 : 448
|
||||||
|
94 : 457
|
||||||
|
95 : 465
|
||||||
|
96 : 474
|
||||||
|
97 : 483
|
||||||
|
98 : 492
|
||||||
|
99 : 502
|
||||||
|
100 : 511
|
||||||
|
```
|
||||||
|
|
||||||
|
The code can be adapted into your custom LED setting function
|
||||||
|
|
||||||
|
|
||||||
Designed to be run on the commandline (unix), Compile with:
|
|
||||||
gcc linearled.c -o linearled -lm
|
|
||||||
|
|
|
@ -1,14 +1,29 @@
|
||||||
/* Dump linear led values */
|
/* Dump linear led values */
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
int pwmBits = 9; // Number of PWM bits
|
//int pwmBits = 9; // Number of PWM bits
|
||||||
|
|
||||||
void main() {
|
int main(int argc, char **argv) {
|
||||||
|
if (argc != 2) {
|
||||||
|
printf("\nERROR: This utility expects a single parameter; the bit-width of the PWM stream\n\n");
|
||||||
|
return 1; }
|
||||||
|
|
||||||
|
int pwmBits = atoi(argv[1]);
|
||||||
|
|
||||||
|
if (pwmBits < 2 || pwmBits > 16) {
|
||||||
|
printf("\nERROR: '%s' is not an integer in the range 2-16.\n\n", argv[1]);
|
||||||
|
return 1; }
|
||||||
|
|
||||||
int pwmMax = pow(2,pwmBits)-1;
|
int pwmMax = pow(2,pwmBits)-1;
|
||||||
|
|
||||||
|
printf("\nThe PWM Bit width (resolution) specified is %i, pwm range is from 0 to %i\n-----------\n", pwmBits, pwmMax);
|
||||||
|
|
||||||
for (int val = 0; val <= 100; val++) {
|
for (int val = 0; val <= 100; val++) {
|
||||||
int pwm = round((pow(2,(1+(val*0.02)))-2)/6*pwmMax);
|
int pwm = round((pow(2,(1+(val*0.02)))-2)/6*pwmMax);
|
||||||
printf("%i : %i\n", val, pwm);
|
printf(" %3i : %5i\n", val, pwm);
|
||||||
}
|
}
|
||||||
|
printf("\n");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue