Hallo Kani,
Dann möchtest Du also Änderungen in der DMX-Software machen, damit sie dir die
gewünschten Steueraufgaben bei einem bestimmten Kanalwert erledigt.
Deine Annahme war schon ganz richtig. Dem Controller sagt man, was er machen in dem man folgend vorgeht:
CodeBox c
if (DmxField[0]<100)
{
// PA0= HI und PA1= LO
PORTA |= (1<<PA0);
PORTA &= ~(1<<PA1);
}
else if (DmxField[0]>155)
{
....
...
..
Die Zahl in den [] sagt dem Controller, bei welchem Kanal er das machen soll. Hierbei geht es jetzt um eine Motorsteuerung. Die Zahl hinter < bzw. > ist der Kanalwert.
Das mit dem [ und ] das ist ein Array (ein Datenfeld, eine Liste, ...).
Ich schätze mal das wird in der DMX-Software in etwa ao ablaufen ...
Das Programm liest den Datenstrom auf dem DMX-Bus, bis der Kanal ankommt,
der dem eingestellten Anfangskanal entspricht (z.B. 235). Dieser Kanalwert wird
dann in DMXField[0] übernommen. Wenn er 4 Kanäle empfängt, dann sieht es also
mit dem Start-Kanal 235 folgendermaßen aus ...
Kanal 235 => Kanalwert => DMXField[0]
Kanal 236 => Kanalwert => DMXField[1]
Kanal 237 => Kanalwert => DMXField[2]
Kanal 238 => Kanalwert => DMXField[3]
Das ist bestimmt nicht so programmiert, das der DMX-Receiver alle 512 Kanäle
empfängt. Das würde nämlich dann mit dem RAM im ATmega ziemlich eng werden.
Vor allem in C oder BASCOM. In Assembler könnte man das in Controller mit 1024
Byte reinzwängen (also mindestens ATmega16 oder 32) in nen Mega8515 oder 8535
würde es bei allen Kanälen definitiv nicht reinpassen - die haben nur 512 Byte SRAM
und der Stack braucht ja auch ein wenig
Zur Erklärung eines Arrays, einer Liste, ...
Du hast einen Variablennamen wie jede andere Variable auch und du hast einen
Typ wie bei jeder anderen Variable. Also z.B.
"Hausnummer" vom Typ Integer
Jetzt könnte man der Hausnummer einen Wert zuweisen ..
Hausnummer =12;
Wenn man jetzt eine 2te Hausnummer ablegen möchte dann könnte man eine
weitere Variable mit anderem Namen nehmen. zB ...
Hausnummer2 = 25;
Das ist bei manchen Programmen aber nachher aber sehr umständlich zu verarbeiten.
Darum nimmt man z.B. Arrays oder Listen ...
Hausnummer[0] = 12;
Hausnummer[1] = 25;
Das ist also in diesem Fall einfach eine Liste von Integerwerten, bei der man über die
Zahl in den eckigen Klammern sagen kann, welche Zeile der Liste man bearbeiten
möchte. Die Listen fangen bei manchen Sprachen mit 0 als ersten Wert an und bei
manchen anderen Sprachen mit 1 . Da muß man also etwas aufpassen.
Es gibt auch noch mehrdimensionale Arrays. Ich weiß jetzt nicht, wie die in C
geschrieben werden aber ich mach einfach mal ein Beispiel ...
Farbe[4,6] = 3;
Farbe[5,7] = 2;
Das wäre ein zweidimensionales Array. Als ob man Werte in die Kästchen eines
Karopapiers schreiben würde und dann die Zeilen und Spalten adressiert.
Das kann man natürlich noch erweitern. Man könnte zB auch folgendes schreiben ...
Erbse[3,6,2] = 12;
Das kann man sich wie in einem Würfel vorstellen. Also sozusagen mit Raum-
Koordinaten. Als ob man den Punkt in einem Raum adressieren will (Länge, Breite,
Höhe).
Soviel zu Listen, Arrays, Datenfeldern. ...
Wolln mal sehen ob man da was an der Controllersoftware drehen kann. Besteht die
Möglichkeit, mir die mal im Source zukommen zu lassen? Wenn ich dir dabei helfen
soll oder ist das wegen Copyright von Hendrik nicht möglich ?
Gruß
Dino