Gast
#5328133
hallo,
ich stehe bei einem Programmierproblem total auf dem Schlauch.
In einem C Programm (Atmega 328P über ISP mit AtmelStudio 6) speichert
mir mein Programm einfache Arraywerte falsch und ich find den Fehler
nicht!
eigentlich lasse ich nur über diese Billo-Funktion:
void fill_pwm_values()
{
for (uint8_t j = 0; j < 16; j++)
{
pwm_values[j] = 100;
}
}
ein array beschreiben, welches global so
uint16_t pwm_values[16];
definiert ist.
Genutzt wird das Array dann so:
void create_pwm_values_for_spi()
{
uint8_t counter = 0;
fill_pwm_values();
for (uint8_t i = 0; i < 16; i += 2)
{
pwm_values_for_spi[counter] = ((pwm_values[i] & 0x0ff) >> 4);
pwm_values_for_spi[counter+1] = ((pwm_values[i] & 0x0f) << 4) |
(pwm_values[i+1] >> 8);
pwm_values_for_spi[counter+2] = (pwm_values[i+1]) << 8;
counter += 3;
}
}
Lasse ich mir jetzt über die watch die Werte anzeigen, zeigt er mir
irgendwelche 16bit Werte an (pwm_value[0] = 50197, pwm_value[1] = 287,
pwm_value[2] = 8224, pwm_value[3] = 0, pwm_value[4] = 7876 ...)
Wenn ich meine Funktion einzeln in ATMEL-Studio teste, zeigt mir die
watch die richtigen Werte an. Was ist denn da los? Die Werte ändern sich
auch dauernd. Im Anhang mein Test-Code, es muss irgendwie an dem liegen,
aber ich find den Fehler nicht.
Ist bisher nur Testcode, es speichert eigentlich nur ein 16-bit-Array,
zerlegt die 16bit-Werte SPI-kompatibel in 8bit und sendet diese an den
TLC.
Über den Timer wird ein Takt erzeugt und mitgezählt, brauch ich für die
Ansteuerung des TLC5940. Ob das alles schon so funktioniert weiß ich
nicht, weil ich ja schon vorher stecken bleibe...
Danke für etwaige Hilfe,
c.