Hallo.
Nachdem ich letztes Jahr an diesem Projekt gescheitert bin, versuche ich
derzeit wieder das Beispiel 3 ("Intelligenter Lösungsansatz") aus diesem
Artikel:
http://www.mikrocontroller.net/articles/Soft-PWM
auf 16 Ports auszuweiten, was soweit auch funktioniert.
Was nicht funktioniert, ist ein Wechsel der PWM-Werte, also der
Helligkeiten mit denen die LEDs leuchten.
Ich habe ein [16][100] array erzeugt, das für die 16 Kanäle jeweils 100
Helligkeitswerte enthält.
Es soll jeweils beim ersten Helligkeitswert begonnen werden, nach kurzer
Zeit soll dann der nächste Helligkeitswert geladen werden usw.
Aus
1 | memcpy(pwm_setting, t1, 8);
|
2 | pwm_update();
|
wurde
1 | if (flag == 1) // Daten sollen aktualisiert werden
|
2 | {
|
3 | flag = 0;
|
4 | if (spalte >= 100)
|
5 | {
|
6 | spalte=0;
|
7 | }
|
8 | for (i=0;i<16;i++) // aus jeder Zeile ein Wert
|
9 | {
|
10 | rowstatus[i] = i; // Für freie Zuordnung der Zeilen hier ändern
|
11 | memcpy(&pwm_setting[i], &array[i][spalte],1); // Schreibe Elemente aus Spalte "spalte" in pwm_setting
|
12 | }
|
13 | // if ( PINC & (1<<PINC0) ) {spalte++;} // Für zukünftige Benutzung
|
14 | spalte++;
|
15 | pwm_update();
|
16 | }
|
Mit 8 Kanälen hat das mit dieser Methode schonmal funktioniert (nein,
den genauen Quelltext habe ich vermutlich nicht mehr), mit 16 Kanälen
zuckt die Kiste nur rum, bei Bedarf könnte ich ein Video liefern.
Der Code kompiliert sauber durch, ich hänge den Quelltext und das
Makefile an. Damit es wirklich vollständig ist kommt dazu noch eine
Textdatei mit dem Output von make und avrdude.
Da ich keine Ahnung habe was da noch kaputt sein könnte, möchte ich
hiermit um Hilfe bitten.
Schonmal vielen Dank und Grüße, Andi M