Hallo zusammen, ich komme zu keiner schnellen sinnvollen Lösung:
Problem:
ATTiny2313, AVR-GCC, TI TLC5940 über SPI angeschlossen
Der TI möchte gerne PWM bzw DotCorrection Values in 6 bzw 12 Bit haben.
Über SPI wird dann ein zusammenhängender Block rausgeschoben, also 96
bzw 192 Byte.
Nun suche ich nach einer Möglichkeit, den rauszuschiebenden Block
möglichst ohne große Umwege zu "erstellen".
1 | void TLC5940_SPISendBuffer(unsigned char *ucBuffer, unsigned char ucLen);
|
Nun könnte man sich vorstellen, die Variablen als Bitfelder abzulegen,
also z.B.
1 | typedef struct
|
2 | {
|
3 | unsigned int uiPWMValue:12;
|
4 | } TPWMValue;
|
5 |
|
6 | TPWMValue g_PWM[16];
|
7 |
|
8 | g_PWM[0].uiPWMValue = 0x0;
|
9 | g_PWM[1].uiPWMValue = 0x10;
|
10 |
|
11 | TLC5940_SPISendBuffer((unsigned char*)g_PWM, sizeof(g_PWM));
|
Nun kommen aber beim Zugriff immer wieder die Einzelbytes raus.
Gewünscht:
1 | Zielbuffer[0] = 0x0
|
2 | Zielbuffer[1] = 0x0
|
3 | Zielbuffer[2] = 0x10
|
und nicht
1 | Zielbuffer[0] = 0x0
|
2 | Zielbuffer[1] = 0x10
|
3 | [...]
|
Irgendwelche spontanen Ideen? Klar, so geht es nicht, aber irgendwelche
Ideen, wie das schnell gemacht werden könnte?
Gruss,
Henning