Hallo BASCOM-Freunde ^^.
Für mein aktuelles Projekt, einer 24-Port RGB-Steuerung mit 2 Mikrocontrollern, wobei ein Controller die RGB-Steuerung UND WEITERE FUNKTIONEN übernimmt, der 2te dann nur für die Steuerung der 24 Ausgangsports zuständig ist. Zwischen beiden Controllern besteht eine permanente 5-Bit-Anbindung (sprich über 5 I/O-Pins), da mit eine Datenbus-Anbindung für diese Zwecke doch etwas aufwändig ist.
Mein Problem dabei ist die Wahrheitstabelle. Momentan ist noch nicht ganz raus, ob ich alle möglichen der 31 Wahrheitszustände auch aufbrauchen werde, aber es ist durchaus real.
Meine Frage nun ist die Folgende:
Gibt es in Bascom eine (einfache) Möglichkeit, massiv Code einzusparen? Bei 30 geschriebenen Zeilen sind bereits gut 40% des 8KB-Speichers weg, und das ist schlecht. Das Programm selbst für jeden angesteuerten Zustand ist (noch) recht simpel und überschaubar, aber der Controller ist noch zu weitaus mehr fähig, weshalb ich den Platz später gern auch anderweitig nutzen würde.
Der Code zeigt die Wahrheitstabelle... Es müssen dabei immer ALLE Pins benannt sein, auch die inaktiven, damit es zu keinem Logikfehler kommen kann...
Code:
If Bit1 = 0 And Bit2 = 0 And Bit3 = 0 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 1 ' 00001
If Bit1 = 0 And Bit2 = 0 And Bit3 = 0 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 2 ' 00010
If Bit1 = 0 And Bit2 = 0 And Bit3 = 0 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 3 ' 00011
If Bit1 = 0 And Bit2 = 0 And Bit3 = 1 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 4 ' 00100
If Bit1 = 0 And Bit2 = 0 And Bit3 = 1 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 5 ' 00101
If Bit1 = 0 And Bit2 = 0 And Bit3 = 1 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 6 ' 00110
If Bit1 = 0 And Bit2 = 0 And Bit3 = 1 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 7 ' 00111
If Bit1 = 0 And Bit2 = 1 And Bit3 = 0 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 8 ' 01000
If Bit1 = 0 And Bit2 = 1 And Bit3 = 0 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 9 ' 01001
If Bit1 = 0 And Bit2 = 1 And Bit3 = 0 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 10 ' 01010
If Bit1 = 0 And Bit2 = 1 And Bit3 = 0 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 11 ' 01011
If Bit1 = 0 And Bit2 = 1 And Bit3 = 1 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 12 ' 01100
If Bit1 = 0 And Bit2 = 1 And Bit3 = 1 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 13 ' 01101
If Bit1 = 0 And Bit2 = 1 And Bit3 = 1 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 14 ' 01110
If Bit1 = 0 And Bit2 = 1 And Bit3 = 1 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 15 ' 01111
If Bit1 = 1 And Bit2 = 0 And Bit3 = 0 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 16 ' 10000
If Bit1 = 1 And Bit2 = 0 And Bit3 = 0 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 17 ' 10001
If Bit1 = 1 And Bit2 = 0 And Bit3 = 0 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 18 ' 10010
If Bit1 = 1 And Bit2 = 0 And Bit3 = 0 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 19 ' 10011
If Bit1 = 1 And Bit2 = 0 And Bit3 = 1 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 20 ' 10100
If Bit1 = 1 And Bit2 = 0 And Bit3 = 1 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 21 ' 10101
If Bit1 = 1 And Bit2 = 0 And Bit3 = 1 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 22 ' 10110
If Bit1 = 1 And Bit2 = 0 And Bit3 = 1 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 23 ' 10111
If Bit1 = 1 And Bit2 = 1 And Bit3 = 0 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 24 ' 11000
If Bit1 = 1 And Bit2 = 1 And Bit3 = 0 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 25 ' 11001
If Bit1 = 1 And Bit2 = 1 And Bit3 = 0 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 26 ' 11010
If Bit1 = 1 And Bit2 = 1 And Bit3 = 0 And Bit4 = 1 And Bit5 = 1 Then Programmwahl = 27 ' 11011
If Bit1 = 1 And Bit2 = 1 And Bit3 = 1 And Bit4 = 0 And Bit5 = 0 Then Programmwahl = 28 ' 11100
If Bit1 = 1 And Bit2 = 1 And Bit3 = 1 And Bit4 = 0 And Bit5 = 1 Then Programmwahl = 29 ' 11101
If Bit1 = 1 And Bit2 = 1 And Bit3 = 1 And Bit4 = 1 And Bit5 = 0 Then Programmwahl = 30 ' 11110
Zuletzt noch eine Frage:
Für das Ansteuern einer Ausgangs-Pinbank: Da ich 24 Ausgänge beschalten muss, bedeutet dies immer 3 komplette Pinbänke. Kann ich zum Ansteuern folgende Schreibweise verwenden?:
Code:
If Programmwahl = 1 then
Portb = &B10101010 : Portc = &C10101010 : Portd = &D10101010
Habe zu der oberen Schreibweise leider nicht viel gefunden, weshalb ich sicherheitshalber noch einmal nachfrage.
Danke euch.
LG - Maik
Lesezeichen