Tabellen unc Co
Hallo Afu,
das ist nicht schwer. Ich stelle die Hypothese in den Raum, dass Du die Zahl (Bytewert) welche Du auf einer dreistelligen 7-Segment-Anzeige ausgeben möchtests in einer Variable X bereits schon durch Deinen Drehgeber und die Railaisansteuerung verfügbar hast.
Gut, also stellen wir uns mal die Frage wie weiter machen.....
Fakt ist, dass Du für die einzelnen drei Segmente die Einer, Zener, und Hunderter extrahieren musst. Das geht durch mathemastische ganzzahlige Division.
z.B. so: (angenommen X ist 136)
1. Hunderter = X / 100 (Ergebnis sollte 1 sein)
2. X = X - (Hunderter * 100) (gefundene Hunderter von Gesamtsumme abziehen, Rest in diesem Fall 36)
3. Zener = X / 10 (Ergebnis solle 3 sein)
4. X = X - (Zener * 10) (gefundene Zener von Gesamtsumme abziehen, Rest in diesem Fall 6)
5. Einer = X
Zugegeben, die Umsetzung ist vielleicht eine Holzhammer-Methode aber zum Verständnis sicherlich Zielführen. Zu beachten ist noch, dass es für Integer-Divisionen bei BASCOM das Backslash '\' gibt. Die Berechnung des Restbertrages kann man auch über Module MOD machen. Schau dazu einfach mal in die BASCOm Hilfe.
So, nun gehe ich weiter davona us, dass Du in den Variablen Zener, Einer und Hunderter sauber nur noch Ziffern von 0 bis 9 bzw. von 0 bis zwei für die Hunderter stehen hast.
Das mit der Tabelle ist in BASCOM auch kein Hexenwerk. Tabellen definiert man mit einem Label und dem Statement DATA. Du kannst Also damit ganz einfach ein Butmuster für ein Sieben-Segment definieren.
Beispiel:
Code:
Mappingtable:
DATA &B00000000 ' für Zahl 0
DATA &B00110000 ' für Zahl 1
...
DATA &B01111111 ' für Zahl 9
Achtung: Dies ist nur ein Beispiel. Welches Bit Du für welche Zahl auf 1 oder 0 setzt hängt von Deiner Beschaltung ab!
Weiter ist noch bei DATA zu beachten, dass (O-Ton BASCOM Hilfe) :
- Integer and Word constants must end with the %-sign.
- Long constants must end with the &-sign.
- Single constants must end with the !-sign.
- Double constants must end with the #-sign.
Für weitere Infos schau mal in die BASCOM Hilfe unter dem Begriff DATA.
Nun hat BASCOm weiter einen "virtuellen" Tabellenzeiger welchen Du mit dem Befehl
RESTORE Mappingtable
auf den Anfang der Tabelle setzen kannst. RESTORE benötigst Du, wenn Du sequentiell mit READ alle Elemente aus der Tablel lesen möchtest. Schau Dir hierzu mal die BASCOm Hilfe an. Ich gehe darauf nun nicht weiter ein weil ein anderes Verfahren für Dich viel besser geeignet ist.
Das heißt : Lookup().
Mit der Funktion LookUp() kannst Du indiziert jede Position Deiner Tabelle auslesen. Mit LookUp( 0, Mappingtable ) holst Du das erste Byte aus Deiner Tabelle, in diesem Fall den Bytewert für die Zahl 0. Mit LookUp( 9, Mappingtable) holst Du das 10 Byte aus Deiner Tabelle, in diesem Fall das Bitmuster für die Zahl 9.
Hast Du gemerkt, dadurch das LookUp immer mit 0 anfängt kannst Du mit Deinen variablen für Einer und Zener und Hunderter direkt auf die Tabelle zugreifen und Dir das Bitmuster herausholen.
Wenn Du die 7-Segment-Anzeigen direkt an drei separaten Ports hängen hast dann ist der Rest auch simple.
1. Einer, Zener, Hunderter berechnen
2. für Jede Ziffer das Bitmuster (Byte) mit LoopUp aus der Tabelle holen
3. Jedes Byte für die einzelnen Ziffern auf dem jeweiligen Port ausgeben.
So, nun habe ich Dir genug Kanonenfutter geliefert um mal loszulegen. Ja, es ist wie schon angekündigt keine Komplettlösung aber glaube mir, das macht es spannender und ich hoffe mit meinen Ausführen hier, Dir die relevanten und notwendigen Informationen gegeben zu haben.
Übrigens, einen ähnlichen Beitrag gibt es auch schon hier im Forum. Der Benutzer heißt Michael, frag mich nicht nach seinem NickName. Er htte zunächst das gleiche Problem, ist dann allerdings um Ressourcen zu sparen auf Multiplexbetrieb der Anzeige umgestiegen. Aber die Grundproblematik mit der Anzeige und der Tabelle war die gleiche.
Grüße,
Markus