PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 32Bit Zahl in BCD umwandeln



rogerberglen
22.01.2013, 18:14
Hallo zusammen,
mache mir zur Zeit Gedanken über die Umwandlung einer 32Bit Zahl in BCD um diese auf 7-Segment-Anzeigen auszugeben. Habe auch schon verschiedene Beispiele ausprobiert. Eines davon würde mir sehr gefallen, da es sich in eine Schleife verpacken liese. Leider funktioniert das Beispiel nicht so recht. So wird z.B. bei 256 als BCD nur 250 ausgegeben. Entsprechend wird auch an anderen Stellen ein falscher BCD-Code erstellt.

Einer = A Mod 10
A = A - Einer
A = A / 10
Zehner = A Mod 10
A = A - Zehner
A = A / 10
Hunderter = A Mod 10
A = A - Hunderter
A = A / 10
Tausender = A Mod 10

gibts da noch andere Möglichkeiten?

for_ro
22.01.2013, 19:08
Hallo rogerberglen,
wahrscheinlich ist die Variable Einer als Byte definiert. Falls A > Wertebereich Byte (255) ist, geht die Berechnung nicht.
Entweder du machst Einer auch zu einer Long Variable oder du verwendest eine Temp Variable für die Zwischenergebnisse.

Thomas E.
27.01.2013, 08:02
Wie wäre es mit dem Befehl Makebcd?





Action

Convert a variable into its BCD value.





Syntax

var1 = MAKEBCD(var2)





Remarks

var1


Variable that will be assigned with the converted value.

Var2


Variable that holds the decimal value.



When you want to use an I2C clock device, which stores its values as BCD values you can use this function to convert variables from decimal to BCD.

For printing the BCD value of a variable, you can use the BCD() function which converts a BCD number into a BCD string.





See also

MAKEDEC , BCD , MAKEINT





Example

Dim A As Byte

A = 65

Lcd A

Lowerline

Lcd Bcd(a)

A = Makebcd(a)

Lcd " " ; A

End

rogerberglen
27.01.2013, 15:31
Ich habe vor 14 7-segmentanzeigen und 10 punktmatrixanzeigen mit schieberegistern zu steuern. Ich habe dazu den 74hc595 und diverse udn sowie uln als Treiber ausgesucht.
Bisher habe ich immer nur max. 8 7-Segmentanzeigen per Multiplex gesteuert.
Bei meinem letzten Versuch nur 4 Punktmatrixanzeigen zu steuern waren diese kaum ablesbar.
Ich kann deshalb noch nicht so richtig glauben, daß das mit Schieberegistern besser werden soll. Auch da findet ja auch eine Art Multiplex statt. (Daten für 1. Spalte anlegen und danach dann die 1.Zeile bestromen usw. da kann man dann doch auch fast nichts mehr erkennen, oder?

Besserwessi
27.01.2013, 16:31
Bei der Ansteuerung mit Schieberegistern muss man kein Multiplexing nutzen. Es geht auch so, das alle Segmente parallel angesteuert werden. Nur für ein Update werden die Signal serielle vom µC übertragen, fast so wie bei der SPI-Schnittstelle. Oft nimmt man je Stellen einen 74HC595 und 7oder 8 Widerstände - das reicht dann für etwa 8-10 mA je Segment, unabhängig von der Zahl der Stellen.

Thomas E.
27.01.2013, 16:46
Bei meinem letzten Versuch nur 4 Punktmatrixanzeigen zu steuern waren diese kaum ablesbar.
War der Pulsstrom durch die Segmente hoch genug? Mit 20mA erreicht man bei Multiplexing relativ wenig...

rogerberglen
27.01.2013, 18:12
Eigentlich hatte ich vor die ganzen Anzeigen parallel zu schalten und diese dann über 1 Schieberegister mit den Bitmustern zu versehen und über mehrere Schieberegister dann die einzelnen Digits (Stellen) zu steuern. Sonst würde ja vor lauter Schieberegistern die Platine ziemlich groß.
Ich müsste also 7 Leitungen für die Bitmuster, und 14 Leitungen für die 7-Segment Digits, sowie weitere 50 Leitungen für die Dot-Matrix Spalten über Schieberegister steuern.
Sieht man da überhaupt noch was wenn ich beim ersten Digit anfange und am Ende dann durch die 50 Dot-Matrix Spalten durch bin?

Thomas E.
27.01.2013, 18:39
Sieht man da überhaupt noch was wenn ich beim ersten Digit anfange und am Ende dann durch die 50 Dot-Matrix Spalten durch bin?
Wenn du schnell genug bist und der Strom durch die LEDs hoch genug ist, dann sicher.

for_ro
27.01.2013, 18:54
Sieht man da überhaupt noch was wenn ich beim ersten Digit anfange und am Ende dann durch die 50 Dot-Matrix Spalten durch bin?
Du willst 50 Spalten einzeln nacheinander einschalten? Wie groß ist denn die Matrix?
1/50 Duty Cycle kannst du im Dunkeln sicher noch gut sehen, aber bei Tageslicht wird da nicht viel von übrig bleiben.
Um normale Helligkeit der LEDs zu bekommen, müsstest du mit dem 50-fachen Strom ansteuern, also etwa 1A.
Aushalten können die evtl einen Pulsstrom von 150mA. Musst du mal im Datenblatt nachsehen.
Für die 14 x 7 Segmentanzeigen würde ich zwei MAX7119/7221 nehmen. Die können jeweils 8 Stellen ansteuern.
Bei der Matrix hängt es halt davon ab, wie groß sie wirklich ist.

rogerberglen
30.01.2013, 18:01
Die Matrix zusätzlich zu den 7-Segmentanzeigen soll 10 Buchstaben darstellen können. Also 10 7x5 Punktmatrix Anzeigen