Moin Zusammen
Vorab möchte ich mich kurz vorstellen: Ich bin Markus, 45 yo, Elektriker und Musiker und ab und hier im Forum als Leser unterwegs. Ich nutze Bascom zu Programmierung von Mikrocontrollern von Atmel, was bisher immer gut geklappt hat. Jetzt stoße ich jedoch an meine Grenzen und hoffe, dass ihr mich etwas in die richtige Richtung drehen könnt. Die Bascom-Hilfe bringt mich leider nicht weiter, da dann irgendwann auch mein Englisch nicht mehr ausreicht.
Nun zu meinem Problem:
Ich steuere mit einem Atmega664 einige Relais und LEDs meines Gitarrenamps. Das funktioniert per Taster oder seriell per Midi. Läuft tiptop. Die Daten, die per UART reinkommen, müssen am Sender entsprechend der Konfiguration im Atmega definiert sein. Funktioniert auch alles.
Jetzt soll es aber unabhängig von der Senderkonfiguration funktionieren. Ich habe am Empfänger(Atmega) einen aktuellen Zustand am PortA. Dieser soll mit einem ankommenden Bytestream (bis zu 4 Bytes) verknüpft werden und im Eeprom gesichert werden. Pro Szenario gibt es dann 2 Variablen (Bytestream und Portzustand), die im EEprom gesichert werden. Diesen Modus nenne ich Speichern. Soweit, sogut. Bis dahin sollte ich alles haben.
Im Normalbetrieb (quasi nicht im Speichern-Betrieb) soll UDR mit den Daten aus dem EEprom verlglichen werden. Gibt es eine Übereinstimmung des ankommend Bytestreams mit den bereits registrierten Streams des EEproms, soll der dazugehörigen Portzustand gesetzt werden.
Für Bytestream und Portzustand sind je ein Array angelegt, das mit einer fortlaufenden Nummer (Programmnummer), bis zu einem variablen Maximum, indiziert werden.
Casus Knacktus: Kann per Select Kolonnenvergleiche und Zuweisungen durchführen?
Serialinterrupt:
Temp = Udr 'UDR sichern
Select Case Temp
Case Midiprog(1) To Midiprog(progcount) : Porta = Presetstatus(1) To Presetstatus(progcount)
End Select
Return
Soll heißen: Wenn Temp = Midiprog(71) ist, wird dann Porta = Presetstatus(71)? Oder gibt einfachere Wege? Ich möchte keine 127 Cases einzeln schreiben.
Hoffentlich ist das alles nicht zu verwirrend ausgedrückt und Ihr könnt mein Anliegen nachvollziehen.
LG
Markus
Hier noch der Code Miditest.bas
Vorab möchte ich mich kurz vorstellen: Ich bin Markus, 45 yo, Elektriker und Musiker und ab und hier im Forum als Leser unterwegs. Ich nutze Bascom zu Programmierung von Mikrocontrollern von Atmel, was bisher immer gut geklappt hat. Jetzt stoße ich jedoch an meine Grenzen und hoffe, dass ihr mich etwas in die richtige Richtung drehen könnt. Die Bascom-Hilfe bringt mich leider nicht weiter, da dann irgendwann auch mein Englisch nicht mehr ausreicht.
Nun zu meinem Problem:
Ich steuere mit einem Atmega664 einige Relais und LEDs meines Gitarrenamps. Das funktioniert per Taster oder seriell per Midi. Läuft tiptop. Die Daten, die per UART reinkommen, müssen am Sender entsprechend der Konfiguration im Atmega definiert sein. Funktioniert auch alles.
Jetzt soll es aber unabhängig von der Senderkonfiguration funktionieren. Ich habe am Empfänger(Atmega) einen aktuellen Zustand am PortA. Dieser soll mit einem ankommenden Bytestream (bis zu 4 Bytes) verknüpft werden und im Eeprom gesichert werden. Pro Szenario gibt es dann 2 Variablen (Bytestream und Portzustand), die im EEprom gesichert werden. Diesen Modus nenne ich Speichern. Soweit, sogut. Bis dahin sollte ich alles haben.
Im Normalbetrieb (quasi nicht im Speichern-Betrieb) soll UDR mit den Daten aus dem EEprom verlglichen werden. Gibt es eine Übereinstimmung des ankommend Bytestreams mit den bereits registrierten Streams des EEproms, soll der dazugehörigen Portzustand gesetzt werden.
Für Bytestream und Portzustand sind je ein Array angelegt, das mit einer fortlaufenden Nummer (Programmnummer), bis zu einem variablen Maximum, indiziert werden.
Casus Knacktus: Kann per Select Kolonnenvergleiche und Zuweisungen durchführen?
Serialinterrupt:
Temp = Udr 'UDR sichern
Select Case Temp
Case Midiprog(1) To Midiprog(progcount) : Porta = Presetstatus(1) To Presetstatus(progcount)
End Select
Return
Soll heißen: Wenn Temp = Midiprog(71) ist, wird dann Porta = Presetstatus(71)? Oder gibt einfachere Wege? Ich möchte keine 127 Cases einzeln schreiben.
Hoffentlich ist das alles nicht zu verwirrend ausgedrückt und Ihr könnt mein Anliegen nachvollziehen.
LG
Markus
Hier noch der Code Miditest.bas