LabVIEWForum.de - Darstellung einer Hexadezimalzahl auf drei 7Segmentanzeigen

LabVIEWForum.de

Normale Version: Darstellung einer Hexadezimalzahl auf drei 7Segmentanzeigen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute!
Ich habe folgendes Problem: Ich möchte eine Hexadezimalzahl mit drei gültigen Ziffern und einer Nachkommastelle mit Hilfe von drei 7Segmentanzeigen darstellen. Die Hex.Zahl stellt eine von einem anderem Programm erfasste Temperatur dar. Also z.B 23,5 °C oder 34,2 °C, etc... Die drei 7SegmentAnzeigen sind als elektr. Schaltung so konzipiert, dass vor jeder Anzeige jeweils ein BCD-to-7 Segment Decoder vorgeschaltet ist. Diese Decoder haben unter anderem folgende Eingänge: D,C,B,A, LE <-> Input-Port A entspricht dem 1. Bit, Port B dem 2.Bit, Port C dem 3.Bit und Port D dem 4.Bit. Mit vier Bits kann ich also locker die Zahl(en) 0 bis 9 darstellen. Wenn der Eingang LE des Decoders auf "high" is, speichert die Anzeige den gerade dargestellten Wert. Ich müsste nun doch logischerweise (über die Digitalen Output-Ports) der Messkarte, die Hexadezimalzahl bzw. die dargestellte Temperatur im LabVIEW-Programm in eine Binärzahl umwandeln und diese dann über die digitalen Ports meiner Messkarte rauschicken. Das Problem is nun folgendes: Ich habe das erstmal mit einer ganzen Zahl wie 1, 2, 3,... in Verbindung mit einem Zähler ausprobiert. Funktionierte einwandfrei.. nur hat er die Zahl auf allen drei Anzeigen gleichzeitig dargestellt. Hier kommen nun die drei Latch-Buttons zum Einsatz: Wenn "LO" gedrückt ist, speichert die Anzeige, die die kleinste Ziffer darstellt ihren Wert, wenn "L1" gedrückt speichert die mittlere Anzeige, usw. Wie ich das alles bei einer Hexadezimalzahl mit einer Nachkommastelle anzeigen soll, die sich ja auch kontinuierlich verändert (dann sollen die Latch-Buttons sich ja von selbst betätigen), bleibt mir im Moment schleierhaft. Der Dezimalpunkt der mittleren Anzeige leuchtet übrigens permanent.. das sollte also nicht dass Problem werden. Vielleicht kann mir jemand ein paar gute Ratschläge geben wie das Problem lösen könnte..?! Ich hänge z.B. schon an dem Problem eine Hex.Zahl wie meine, in eine zur Weiterverarbeitung verwertbaren Binärzahl umzuwandeln. Ich schicke mal mein Programm mit, damit man sich ein besseres Bild machen kann.
Thank´s im Voraus!
Der casio

Programm ist mit LV-8.2 erstellt
Irgendwie machst du dasselbe wie der hier:

http://www.LabVIEWforum.de/index.php?showtopic=10600

Sitzt ihr vor derselben Studienarbeit?

Verstehe ich eines richtig: Die Anzeige soll jetzt auch A,B,...F anzeigen? Dann solltest du deine Zahl auch Hexadezimal aufteilen (also durch 16 teilen) und nicht dezimal.

Gruß, Jens
Hallo Jens,
erstma dickes sorry, dass ich erst jetzt antworte! Hatte nebenbei viel zu tun und kann mich daher erst jetzt wieder auf mein Programm konzentrieren.. zu deiner Vermutung würde ich sagen, dass du damit voll ins Schwarze getroffen hastWink
Das Ding ist einfach, dass wir zwei uns schon den Kopf zerbrochen haben, wie wir das nun am besten programmieren. Könntest du mir eventuell dabei helfen, wie man eine Dezimalzahl mit drei gültigen Stellen (also z.B 23,4 °C) in drei "unabhängige Kompenten" zerlegt, so dass man mit den drei Ziffern weiterarbeiten kann? Ich möchte damit dann, bzw. hab ich mir das so gedacht, jeweils eine Ziffer (also in meinem Beispiel oben die "2", die "3" und die "4" mittels 3 VI´s "Array indizieren" dann auf die Ausgänge "Port A, Port B, Port C und Port D" schicken. Da dieser Vorgang aber ja nicht gleichzeitig erfolgen darf (oder?) hatte ich mir gedacht, das in eine "flache Sequenzstruktur" zu packen, mit dieser zeitlichen Struktur könnte man doch so schnell hintereinander auszuführende Abläufe realisieren, oder?!
Noch zu deiner Frage: Wir wollen "nur" die Zahlen 0 bis 9 auf den 7-Segment-Anzeigen darstellen... allerdings halt unabhängig und da ist auch genau unser Problem: Bisher haben wir es ja geschafft "eine" Zahl auf alle drei Anzeigen gleichzeitig zu schicken. Nur wie schickt man drei unterschiedliche Ziffern auf drei Anzeigen?? Wir haben dafür ja "nur" vier Digitale Ports, eben Port A, B, C und D zur Verfügung. Und halt die drei Latch Ports L0, L1 und L2. Auch ein Problem von uns.. wie bekommt man denn diese drei Portausgänge so im Programm automatisch geschaltet, dass sie solange auf "high" sind, bis sich die jeweilige Ziffer ändert.
Ich hoffe, du kannst mir ein wenig weiterhelfen.. wer echt super!!!

Ps: Habe gesehen, dass dein Wohnort Schweinfurt ist. Aus der Stadt komme ich nämlich her!
Viele Grüße also an die HeimatSmile

Der casio
' schrieb:wie man eine Dezimalzahl mit drei gültigen Stellen (also z.B 23,4 °C) in drei "unabhängige Kompenten" zerlegt, so dass man mit den drei Ziffern weiterarbeiten kann?
Es gibt zwei grundsätzliche Möglichkeiten:
1. Möglichkeit: Einen String draus machen mit dem Format "%04.1f". Der String sieht dann z.B. so "04.5" oder "12.3" aus. Nun zerlegst du den String: Position 1 = 1. Stelle. Position 2 = zweite Stelle. Position 4 = dritte Stelle. Die jeweilige Stelle wandelst du mit einem entsprechenden Element in eine Zahl um.
2. Möglichkeit: Du zerlegst die Zahl mit mathematischen Operationen: SGL/DBL-Zahl mal 10 nehmen. Zahl nach INT wandeln. Jetzt mit DIV und MOD die Zahl der Reihe nach zerlegen.

Zitat:Ich möchte damit dann, bzw. hab ich mir das so gedacht, jeweils eine Ziffer (also in meinem Beispiel oben die "2", die "3" und die "4" mittels 3 VI´s "Array indizieren" dann auf die Ausgänge "Port A, Port B, Port C und Port D" schicken. Da dieser Vorgang aber ja nicht gleichzeitig erfolgen darf (oder?)
Richtig. Dieser Vorgang darf nicht gleichzeitig erfolgen.

Zitat:hatte ich mir gedacht, das in eine "flache Sequenzstruktur" zu packen, mit dieser zeitlichen Struktur könnte man doch so schnell hintereinander auszuführende Abläufe realisieren, oder?!
Im Prinzip ja.

Zitat:Bisher haben wir es ja geschafft "eine" Zahl auf alle drei Anzeigen gleichzeitig zu schicken. Nur wie schickt man drei unterschiedliche Ziffern auf drei Anzeigen?? Wir haben dafür ja "nur" vier Digitale Ports, eben Port A, B, C und D zur Verfügung. Und halt die drei Latch Ports L0, L1 und L2. Auch ein Problem von uns
Z.B. so:
Schritt 1 (S1): Alle Latches aus. S2: 10ms warten. S3: Daten für Ziffer Eins auf Bus legen. S4: 10ms warten. S5: Latch für Ziffer eins aktivieren. S6: 50ms warten. S7: Latch für Ziffer ein aus. S8: 10ms warten. S9: Daten für Ziffer Zwei auf Bus legen. S10=S4 usw.

Die Zeiten (auch S8) an sich sollen bleiben. Den genauen Wert muss man ausprobieren.
Ich hab mal ein Muster gemacht. Für den Bus machst du eine Task mit Byte-Zugriff und für die Latches auch.

Lv80_img
Referenz-URLs