Nochmal zurück zur letzten funktionierenden Version und dann nicht alles
auf einmal umbauen, sondern in kleinen Schritten. Teil für Teil.
Sowas kommt vor, dass man sich bei zuvielen Änderungen auf einmal
irgendwo ein Eigentor geschossen hat. Wohl dem, der dann ein
Versionskontrollsystem hat, oder Sicherungen von funktionierenden
Versionen, auf die er zurück gehen kann und von der ausgehend die
Transformation, diesmal in kleineren Schritten nochmal gemacht werden
kann.
Unabhängig davon: sag mal. Ist dir das nicht zu blöd, da 27 uint8_t
Variablen zu haben, die alle bis auf eine angehängte Ziffer gleich
heißen? Also mir wär das zu blöd, weil es den Code unsinnigerweise
aufbläht. Das Array ist schon lange erfunden und deine init Funktion
würde isch dann so lesen.
1 | // im Header File ...
|
2 | #define NR_LEDS 27
|
1 | ...
|
2 |
|
3 | uint8_t LED[NR_LEDS ];
|
4 | uint8_t LED_OUTPUT[ 1 + NR_LEDS / 8];
|
5 |
|
6 | void Variablen_Init(void)
|
7 | {
|
8 | uint8_t i;
|
9 |
|
10 | //Reg 0x01 = MODE2 - set to 0xFF - noninverted logic state, open-drain
|
11 | MODE2 = 0x02;
|
12 |
|
13 | // Set all Output of 0x00(0)
|
14 | for( i = 0; i < NR_LEDS; i++ )
|
15 | LED[i] = 0x00;
|
16 |
|
17 | //LED_OFF:
|
18 | LED_OFF = 0x00;
|
19 |
|
20 | //Reg 0x12 - Group PWM - Variablen
|
21 | GROUP_PWM = 0x00;
|
22 |
|
23 | //Reg 0x13 - Group Freq - Variablen
|
24 | GROUP_FREQ = 0x00;
|
25 |
|
26 | //Reg 0x14-0x17 - LED Output State Control - Variablen
|
27 | for( i = 0; i < 1 + NR_LEDS / 8; i+
|
28 | LED_OUTPUT[i] = 0xAA;
|
29 | }
|
wesentlich kürzer. Und vor allen Dingen viel leichter auf eine andere
Anzahl an Leds umzustellen. Und das betrifft nicht nur die Init
Funktion. Von deinem jetzigen Code würden über den Daumen gepeilt rund
2/3 aller Code Zeilen wegfallen.