Hallo Michael,
ich gehe mal davon aus, dass Du bei dem Source-Code zur Übertragung der Daten in den SAA so ziemlich genau bei dem geblieben bist, was ich mir mal aus den Fingern gesaugt habe.
OK, schauen wir uns mal an was ich gemacht habe, hmmmm.
1. Zur Übetragung in den SAA hatte ich eine Funktion gebaut die nix anderes macht als 16 Bit, also ein WORD in den SAA zu plasen.
2. Diese Funktion hatten wir zwei Mal hintereinander verwendet um Konfiguration und Daten in den SAA zu schreiben.
3. Das eigentliche Übertragen der Bits zum SAA passierte nach dem Senden des Start-Bit in einer einzigen For-Schleife die von 0 bis 15 und damit 16x (für 16-Bit also) läuft.
Nun werfen wir man einen Blick auf den LM:
Freu Dich nicht zu früh, eine Komplettlösung gibts diesmal nicht. Heute ist Arbeiten angesagt
Der Blick in das Datenblatt vom LM verrät mir zunächst, das der nicht über getrennte Konfigurations- und Daten-Packet verfügt sondern alles in einem 24 Bit großen Paket enthalten hat.
So, nun einige Überlegungen für Dich zur Lösung Deines Problems:
- 16 Bit und damit ein WORD reichen nicht mehr aus.
- Die nächste größere vorzeichenlose Variable ist das LONG. Es besitzt 32 Bit. Ich weiß Du benötigst nur 24 Stück davon aber das ist auch nicht weiter schlimm. Mit der AND-Funktion lassen sich sehr schön Bits maskieren. Wenn Du nur 24 Bits brauchst dann definierst Du Dir anstelle des WORD halt ein einziges LONG und benutzt nur die Bits 0 - 23 und setzt die anderen mit AND &H00FFFFFF einfach auf 0.
- Durch Anpassung des Schleifenzählers auf 23 kannst Du dann genauso wie beim SAA aus der entsprechenden Variable die Bits zum LM schieben. Verstanden?
- So wie es aussieht ist der LM aber ein wenig dümmer wie der SAA und benötigt also auch kein Start-Bit für den Beginn einer "Sendung". Aber wie gesagt, ich habe mangels Zeit das Datenblatt nur kurz überflogen und Du sollst ja auch noch was dabei lernen. Bedeutet, Du kannst in meinem Code auf das Senden des Startbit verzichten.
- Du musst auf jeden Fall auch für BUS-Ruhe sorgen und bevor Du die Daten zum LM überträgst das das CE (Chip Enable oder Clock Enable oder was auch immer auf jedenfall das CE) von LOW (default) auf HIGH ziehen. Dann kannst Du die einzelnen Bits aus der Variable zum LM tackten.
- Damit hast Du auch eine Antwort auf die Frage, wie Du die Bits am besten aufteilen sollst.
Nun wird von Dir sicher die Frage kommen, wie Du die einzelnen Bits in die LONG-Variable bekommst
- Kein Problem!
- Du kannst mit den Befehlen SET und RESET einzelne Bits einer Variable setzenund zurücksetzen.
- Mit den Operationen AND und OR kannst Du ganze Bit-Bereiche z.B. mit anderen Variablen oder Konstanten auf 0 oder 1 oder ein anderes Bitmuster setzen.
- Mit dem Befehl SHIFT lassen sich die Bits einer Variable nach links oder rechts schieben um sie z.B. auf die richtige Position zu bringen. Ein Beispiel: VARIABLE AND &H00000000 setzt Dir eine gesamt LONG Variable auf NULL. Mit VARIABLE OR &HF werden die ersten 4 Bit (Bit0-3) auf HIGH gesetzt. Mit dem Befehl SHIFT Variable,Left,8 schiebst Du die eben gesetzten 4 Bits um 8 Bits nach links und damit nach oben und damit auf die Position Bit8-11. Üblicher Weise werden bei diesen Operationen immer Nullen nachgeschoben.
- Du siehst ganz einfach und umsonst ist nix
Als Antwort auf Deine Frage würde ich also sagen; "Durch geeignete Bit-Operationen und durch geeignete Addition von anderen Arbeitsvariablen. Hier ist ein wenig Mathematik im Binärsystem notwendig aber das ist kein Hexenwerk.
Wenn Du Probleme damit hast dann gehe runter bis auf die einzelnen Bits, male Dir ein Word als Binär-Zahl auf ein Papier und überlege Dir die einzelnen Schritte die notwneidg sind um 24 Bit mit den richtigen Inhalten zu füllen und zum LM zu übertragen.
Jetzt denke ich, hast Du genug Futter um hier erstmal loszulegen.
Ach ja, was ich Dir nicht sagen kann ist, was Du mit BO1 bis BO3 machen sollst. Dazu bin ich zu wenig Funker aber wenns bei der Binär-Mathematik klemmt dann kannst Du Dich gerne wieder melden.
Versuch mal meinen alten Code so umzubauen, dass Du einmalig 24 Bit zum LM übertragen kannst und erst dann würde ich mich mit dem Befüllen der 24 Bit auseinandersetzen. Erst die Musikinstrumente bauen und dann spielen.
Grüße,
Markus