ich habe mir vor kurzen einen ArtNet Node und ein Paar der Funkmodule bestellt. Bis jetzt funktioniert alles sehr gut und ich bin ziemlich überrascht, dass ich schon so weit gekommen bin, obwohl ich in Elektronik nur die absoluten Basics kenne und auch noch nie mit der Programmierung mit Mikrocontrollern zu tun hatte. Da ich aber für mein häusliches Projekt eine kleine Änderung an der Software vornehmen möchte, versuche ich, an dieser Stelle auch noch einen Schritt weiter zu kommen.
Es geht um folgendes:
Ich möchte in der Wohnung mehrere DMX-Controller mit den eingebauten Funk-Empfangsmodulen mit dem Lichtschalter aus- und einschalten. Jetzt besteht das Problem, dass bei der aktuellen Software das DMX-Signal nur per Funk übertragen wird, wenn sich am Signal irgendwas geändert hat. Das ist an sich eigentlich eine ganz vernünftige Sache. Allerdings weiß das Empfangsmodul nach dem Power-On von dem konstanten DMX-Signal nichts, weil der Sender es natürlich nicht für nötig hält, hier jemanden was mitzuteilen, wenn's nichts neues gibt. Der Sender sollte also idealerweise ungefähr jede Sekunde einmal das Signal aus dem Buffer per Funk rausjagen.
Hier die Fragen:
Wenn ich es im Forum richtig verstanden habe, hat eine ältere Software-Version das Signal permanent gesendet. Ist die noch irgendwo verfügbar, bzw. ist es zu empfehlen, hier einen Schritt zurückzugehen?
Ansonsten habe ich mir mal den Quellcode von Ulrich angeschaut, und versucht einigermaßen zu kapieren, was da läuft. Hier eine prinzipielle Frage: Kann ich hier mit fehlerhafter Software an der Hardware irgendwas kaputt machen, bzw. sie in einen Zustand versetzen, dass man nichts mehr draufspielen kann? Ich benutze zum Aufspielen der Software das absolute Base-Kit mit Druckerkabel und Widerständen.
Würde es funktionieren, wenn ich in der main-Funktion die Endlos-While-Schleife für die Senderoutine folgendermaßen abändere? Ich habe den valid-Flag für das DMX-Signal global bzw. volatile gesetzt und benutze den bereits für die Empfangsroutine initialisierten Counter. Nach einer festgelegten Anzahl NLOOPS_REPEAT soll vorgetäuscht werden, dass wieder ein neues DMX-Signal gekommen ist. Da ich den Code noch nicht wirklich verstanden habe, wollte ich fragen, ob jemand weiß, ob das so funktionieren könnte? Gibt es eine Möglichkeit die Anzahl der Loops mittels des Prozessortaktes mit der Zeit zu korrelieren?
Im Voraus schon vielen Dank für die Hilfe!
Viele Grüße
Korbi
Code: Alles auswählen
while(1)
{
if(new_dmx_data > 0)
{
new_dmx_data--;
//512 Kanäle werden zu je 32Bytes a 16 Packete versendet
memcpy((unsigned char*)&dmx_tmp_buffer[1],(unsigned char *)&dmx_buffer[(packet_cnt*32)],32);
dmx_tmp_buffer[0] = packet_cnt;
packet_cnt++;
if(packet_cnt == TRANSMIT_BLOCKS)
{
packet_cnt = 0;
}
rf22_sendpacket(dmx_tmp_buffer,33); //Packetcounter und 32DMX Bytes
counter = 0;
}
else
{
if(dmx_valid)
{
counter++;
}
}
if(counter >= NLOOPS_REPEAT)
{
new_dmx_data = TRANSMIT_REPEAT;
}
.....