Zunächst einmal herzlichen Dank für den netten DMX Dimmer
Die Komentare im Code sind etwas verwirrend wenn man nicht gleich den Taschnrechner zückt.
LINE 63: ist natürlich die Empfangsroutine für DMX
LINE 105: Der Timer wird bei 12Mhz alle 100usec und nicht alle 1ms aufgerufen
LINE 153: Das ist die ISR vom externen interrupt von der Zero cross detection
LINE 178: Timer für die Phasenanschnittberechnung ( alle 100usec )
Bei meinen Test war der Regelweg im unteren Bereich zu klein. Erst ab einem DMX datenwert von 75 fängt die Phasenanschnitt steuerung zu arbeiten. Logisch, denn es sind 90 Schritte a´100usec definiert und die Umrechnung nach val1 ergibt 0-128. Bleiben also nur ein nutzbarer Wertebereich von 75-255 also etwa 70% des Reglerweges.
Ich habe das mit einer kleinen Tabelle erweitert ( ist ja genug Platz da ):
Code: Alles auswählen
// map table with 255 values. Three times the same value scaled down at the end
uint8_t valMap[] = {90,89,89,88,88,87,87,...7,7,6,6,5,5,4,4,3,3,2,2,1,0,0};
//new calculation of val1
val1 = valMap[dmx_buffer[dmx_adresse]];
Wie wäre es mit etwas doxygen für die Kommentare?
Beste Grüße
Karsten