Dual Zahlen für 7 Segment ausgabe umrechnen

Gast #1199203
Lesenswert?

Hallo,
Bin Neu hier und hoffe jemand kann mir helfen.
Ich habe das Dual Zahlenssystem vor liegen , alle 16 Werte.
Nur lownibble 4bit code, Highnibble liegt auf 0
Ich muss diesen aber auf einem 7 Segemnt ausgeben 0-9 mit Übertrag.
Das Format liegt als 5 x 4bit vor.

Wie geht dass,
hat da jemand eine Idee?
Wäre euch wirklich Dankbar

gruss
torro
Gast #1199270
Lesenswert?

Hallo,
Erst einmal danke für die raschen Antworten,

Alos, zum ersten bekomme ich 5x 4bit in den Controller rein.
jede 4 bit stelle steht für eine 7 Segment Anzeige, angeblich 
jedenfalls.

Diie jeweiligen 4 bit werden im Dual zahlen Format geliefert, von 
0000-1111, 16 stellen.

Mein Problem ist aber das ich auf einem 7 segment ja nur 0-9 stellen 
habe.

Also ist die Frage, wie stelle ich das Dual zahlen system mit 16 Werten 
in Dezimal 0-9 um.
Das mit dem Übertag, habe ich gefragt weil doch bis 16 stellen gezählt 
werden, also ab der 10 stelle schon ein Übertag enstehen müsste, Denke 
ich jedenfalls.

Ich hoffe das ist besser zu verstehen.
Gast #1199298
Lesenswert?

Du brauchst eine Tabelle, in der die für jede Ziffer anzusteuernden 
Segmente aufsteigend hinterlegt sind. Auf diese Tabelle greift Du über 
die darzustellende Zahl zu.

Beispiel:

2:

Tabelle:

xxxxxxxx    ; Bitmuster 0
xxxxxxxx    ; Bitmuster 1
xxxxxxxx    ; Bitmuster 2  <-
xxxxxxxx    ; Bitmuster 3
xxxxxxxx    ; Bitmuster 4
......
xxxxxxxx    ; Bitmuster 9

Somit addierst Du zur Basisadresse Deiner Tabelle Deine Ziffer und 
erhältst die auzugebende Kombination.

Zuerst schaltest Du die rechte Stelle ein, gibst die Ziffer aus, dann 
die 2. von rechts usw.

Otto
Persönliche Seite #1199300
Lesenswert?

Allgemein üblich ist es, die 4 Bits im Hexadezimalsystem darzustellen 
also 0-9,A,B,C,D,E,F auf einer 7-Segmentanzeige nimmt man für die 
Buchstaben dann gerne Sonderzeichen in der Form
             _       _   
     |_| |_  |    _| |_  |_
     | | |_| |_  |_| |_  |

Du musst nun in deiner Software eine Tabelle mit 16 Bytes anlegen.
In jedem Byte steht dann ein Bit für ein Segment. Eine 1 bedeutet 
Segment ist eingeschaltet und eine 0 Segment ist ausgeschaltet. Für die 
Null könnte so ein Byte dann so aussehen: 11111100. Dabei habe ich jetzt 
folgende Belegung der Segmente mal angenommen:

 **A**
          Das Byte ist so aufgeteilt: ABCDEFGH
F     B
     
 **G**
     
E     C
     
 **D**  H

Um das Nibble nun umzurechnen in die Anzeige benutzt du das Nibble 
einfach als Pointer in deine Tabelle. Ist also dein Nibble 0 dann 
benutzt du aus der Tabelle den nullsten Wert. Ist das Nibble 9 dann halt 
den 9. Wert und ist es 15 dann den 15. Wert.

Das ganze musst du natürlich für jedes der 5 Nibble machen. Soviel zu 
den Grundlagen. Programmieren musst du nun selbst.

Sven
Gast #1199340
Lesenswert?

Ja das ist wohl so!
Ich habe es mit dem Datenpointer versucht aber er zählt wohl bis 9 und 
dann wieder null, aber von Schritt 15 auf 16 kommt wieder null.
Und genau dann erfolgt auf dem Zweiten Display ein Übertrag.
Der müsste aber doch eigentlich bei übergang 9 auf 0 entstehen.

das ist wohl das Grösste Problemm.
Oder habe ich euch da falsch verstanden?
Gast #1199361
Lesenswert?

Also hexadezimal - dann muss die Tabelle nach "9" noch die Bitmuster für 
"A" - "F" enthalten.

Du wählst den ersten Daten-Eingangs-Port (Einer) an, "verundest" ihn mit 
00001111, addierst den Wert zur Basisadresse der Tabelle, gibst diesen 
Wert an den ULN aus, schaltest die erste Stelle ein (die anderen aus).

Dann nimmst du den zweiten Daten-Eingangs-Port, UND 00001111, Tabelle, 
an ULN, zweite Stelle ein.

usw.

Dann weiter mit der ersten Stelle......
Moderator (Firma: Titel) Persönliche Seite #1199367
Lesenswert?

> Mein Problem ist aber das ich auf einem 7 segment ja nur 0-9 stellen habe.
Du hast mit 7-Segmenten 2^7 = 128 Darstellungsmöglichkeiten. Allerdings 
sind nur die wenigsten davon für einen Menschen direkt erkennbar, so 
z.B. die Zahlen 0-9.

> wie stelle ich das Dual zahlen system mit 16 Werten in Dezimal 0-9 um.
Das geht nicht, weil 0-15 (4 Bit) nicht in 0-9 dargestellt werden 
können. Du brauchst also 2 7-Segment-Anzeigen pro 4 Bit, insgesamt also 
10 Anzeigen.
Hast du die?

Willst du nur die Dezimalzahlen 0-9, oder brauchst du auch die 
Umrechnung auf die Segmente?

Du könntest es im so machen (Pseudocode):
1
   wenn       input=0  dann seg10=11111110, seg1=1111110  // Anzeige 00
2
   sonst wenn input=1  dann seg10=11111110, seg1=0110000  // Anzeige 01
3
   sonst wenn input=2  dann seg10=11111110, seg1=1101101  // Anzeige 02
4
   :
5
   sonst wenn input=15 dann seg10=01100000, seg1=1011011  // Anzeige 15
Gast #1199368
Lesenswert?

Ja aber, ich darf doch kein A-F darstellen!
Nur 0-9.
Wenn ich an den Datenpointer für die Nächsten stellen die werte für die 
Zahlen angebe funktoniert das nur bis 15 bei Sechszehn ist schluss dann 
kommt wieder 0.

oder hab  ich,s immer noch nicht geschnallt?

Also ich habe es so verstanden:
So Multiplexe ich die Anzeigen.

Anzeige_Aktualisieren:
  MOV DPTR,#1550
  MOV A,R0
  MOVC A,@A+DPTR
  LCALL Anzeige_0
  MOV A,R1
  MOVC A,@A+DPTR
  LCALL Anzeige_1
  MOV A,R2
  MOVC A,@A+DPTR
  LCALL Anzeige_2
  MOV A,R3
  MOVC A,@A+DPTR
  LCALL Anzeige_3
RET
Anzeige_0:
  MOV Port1,A
  CLR P3.0
  LCALL Pause_1mS
  SETB P3.0
RET
Anzeige_1:
  MOV Port1,A
  CLR P3.1
  LCALL Pause_1mS
  SETB P3.1
RET
Anzeige_2:
  MOV Port1,A
  CLR P3.3
  LCALL Pause_1mS
  SETB P3.3
RET
Anzeige_3:
  MOV Port1,A
  CLR P3.2
  LCALL Pause_1mS
  SETB P3.2
RET
Pause_1mS:
  MOV R7,#250
    MOV R6,#100
    Schleife0:
        Schleife01:
  DJNZ R7,Schleife0
    DJNZ R6,Schleife01
RET
(1550):
DB 3Fh,06h,9Bh,8Fh,A6h,ADh,BCh,07h,BFh,A7h,    3Fh,06h,9Bh,8Fh,A6h,ADh
DB Werte 0-9
Gast #1199394
Lesenswert?

Du liest die Ziffern von insgesammt 5 Ports mit jeweils 4-bit ein?

Jeder Port enthält die 4-bit einer Ziffer?

Es soll maximal eine 5-stellige Zahl dargestellt werden?

Dann macht es keinen Sinn höhere Werte als 9 einzulesen !

Im Prinzip kannst Du es zwar, indem Du vergleichet, ob die Ziffer >9 ist 
und dann einen Übertrag auf das nächste Register addierst, aber 
irgendwie ergibt das keinen Sinn..............
Gast #1199398
Lesenswert?

Hilfe Hilfe!
Ja das ist es ja gerade, ich versteh es ja selber schon nicht mehr!

Ber nun noch einmal etwas Genauer:
Ich lese jedes Bit über den Timer ein, je Bit ist eine zeit von ca 2us 
zeit, nicht mehr.
Vieleicht mach ich ja da schon nen fehler,
Und dann wandel ich sie um in ein lownibble, also 4 bit.
Umwandlung:
CLR A
MOV R0,ffh   'Zusammen Setzen des ersten Blocks in ein Register R0
MOV A,24h          'Das Protokoll muss Rückwärts wieder hergstellt 
werden
XRL A,R0
RL A
MOV R0,A
MOV A,23h
XRL A,R0
RL A
MOV R0,A
MOV A,22h
XRL A,R0
RL A
MOV R0,A
MOV A,21h
XRL A,R0
CPL A
MOV R0,A        'Ende des Zusammen setzen des Register R0

So komme ich zu den 4 Bit in einem Register, und so soll es auch sein!
Gast #1199415
Lesenswert?

Die Aufgabe ist innerhalb einer Zeit die Bits ein zu lesen um zu wandel 
und die werte Anzeigen.
Die einkommenden Wertde ändern sich jede Sekunde, dann kommt eine neues 
Datenprotokoll.
Ich muss die Daten (Einzelne Bits 25 gesamt) in 4 bit Segmente zusammen 
fassen und umwandel. und dann auf 5 7 Segmenten ausgeben.


Für eine Ziffer werden ja nur 4 bit (Lownibble ) benötigt.

 Ist dich Richtig?

Das Problemm das ich damit nur habe ist das, das der sender des Daten 
Protokolles Praktisch von 0-15 Zählt und dann den Übertag sendet, und 
nicht bei 0-9 und dann den Übertrag! Was ja normal wäre!

Ich bin so langsam echt verzweifelt und weiss wohl auch überhaupt keine 
Rat mehr.
Gast #1199434
Lesenswert?

Ja das Richtig, aber es geht nur um die ersten 20!
Die anderen sind für andere aufgaben.
Ich bin wohl so langsam schon ein wenig Durch mit zahlen.
1111 1111 1111 1111 1111
 5    4   3    2    1
Jeder einzellen Block stellt eine 7 Segment Anzeige dar. so ist es 
Richtig verstanden!
Hätte ich ja vieleicht auch so erklären können, aber das ist mir wohl 
nicht mehr in den Sinn gekommen.
Aber nun kommts, mit vier bit kann man ja von 0-15 Zählen im Dualen 
system.
Und genau das ist es auch, die ankommenden Daten vermitteln einen 
Übertag bei 15 auf 16 te stelle (also von 15 auf 0 ).
Vieleicht muss man diese ausbleden und eine eigenen Übertag erstellen, 
aber wie geht das?
Gast #1199445
Lesenswert?

Also ich hab mir jetzt hier den ganzen Tread durchgelesen. Und ich muss 
sagen, die Antworten/Beschreibungen von  el.torro (Gast) werden immer 
unklarer.

Deshalb jetzt folgenden klare Aufgabe an  el.torro (Gast):

Du sagst, du hast 5 x 4bit. Diese sollen eine Anzeige steuern.
Dann gib mal einige Beispiel, was an 5x4bit "reinkommt" in die 
Schaltung, und was diese bei diesem Eingangsmuster ausgeben soll.

Ich mache mal ein Beispiel:

 1.     2.     3.     4.     5.         Anzeige
--------------------------------------------------------
0000   0001   0010   0100   1000        '01248'
...

So jetzt gib mal paar Beispiele. SOnst kann dir hier keiner helfen
Gast #1199446
Lesenswert?

Du bekommst nach eigenen Angaben 5 Ziffern mit einem Wert von 0 - 15.

Diesen Wert sollst du auf 7-Seg. anzeigen.

Du verwendest dafür 5 Register um je 4 Bit zu speichern.

z.B. R0-4   01 02 03 04 05  -> Ausgabe 12345

     R0-4   01 0F 0A 03 0D  -> Ausgabe 129597

Mache aus den 5 Ziffern die du erhäst eine zusammenhängende
Zahl in Hex. Diese dann in BCD wandeln (Codebeispiele im Forum)
und mit Tabelle (wie oben) ausgeben.

gruß hans
Gast #1199458
Lesenswert?

Man Junge! MAch mal paar komplette Angaben! ALLE EIngänge! Nicht nur 
4bits!!

Gib mal paar Beispiele für alle

zB.

1.     2.     3.     4.     5.         Anzeige
--------------------------------------------------------
0000   0001   0010   0100   1000        ?
1100   1001   0010   0010   1110        ?
1111   0100   0001   0100   1000        ?
0010   1000   1111   0000   0000        ?


So. Jetzt ersetze mal die ? durch das, was bei dieser Bitkombination 
angezeigt werden soll.
Gast #1199465
Lesenswert?

Ok mach ich


1.     2.     3.     4.     5.         Anzeige
--------------------------------------------------------
0000   0001   0010   0100   1000        ?01248
1100   1001   0010   0010   1110        ?12,9,2,14
1111   0100   0001   0100   1000        ?15,4,1,4,8
0010   1000   1111   0000   0000        ?2,8,15,0,0

So sehen die Daten aus die Rein kommen!
Also auch Zweistellige zahlen.
Und da liegt mein Problemm!
Also anstelle von 12 müsste ich ja eine 1 und eine 2 ausgeben.
Das geht wohl auch, aber nach 15 kommt ja dann wieder 0.

Icch hoffe du verstehst mein Problemm nun!
ansomnsten bin ich echt gexxxxt!
Gast #1199469
Lesenswert?

Ok mach ich


1.     2.     3.     4.     5.         Anzeige
--------------------------------------------------------
0000   0001   0010   0100   1000        ?01248
1100   1001   0010   0010   1110        ?12,9,2,2,14 <---- hatte nen 
fehler
1111   0100   0001   0100   1000        ?15,4,1,4,8
0010   1000   1111   0000   0000        ?2,8,15,0,0

So sehen die Daten aus die Rein kommen!
Also auch Zweistellige zahlen.
Und da liegt mein Problemm!
Also anstelle von 12 müsste ich ja eine 1 und eine 2 ausgeben.
Das geht wohl auch, aber nach 15 kommt ja dann wieder 0.

Icch hoffe du verstehst mein Problemm nun!
ansomnsten bin ich echt gexxxxt!
Gast #1199488
Lesenswert?

Nach 15 kommt wieder 0 ist ja Hexadezimal. Also die Standartdarstellung
für ein Halbes Byte, ein Nibble.
Zwei Nibbel zusammengefast ergeben 1 Byte mit einem Wertebereich
von 0 - 255.

Du hast 5 Nibbel die du in 2 1/2 Byte anordnen kannst. Wertebereich
0 - 1048575 also 7 Stellen für die Anzeige.


1.     2.     3.     4.     5.         Anzeige
--------------------------------------------------------
0000   0001   0010   0100   1000        ?01248        0001248
1100   1001   0010   0010   1110        ?12,9,2,14    0889390
1111   0100   0001   0100   1000        ?15,4,1,4,8   0999752
0010   1000   1111   0000   0000        ?2,8,15,0,0   0167680

Die Umwandlung ist ein HEXtoBCD-Konverter (Suchfunktion, Zalenausgabe
für Anzeigen).

gruß hans
Gast #1199490
Lesenswert?

Hallo Otoo,
ja das könnte auch sein, wobei es eigentlich nur lautet, die daten ein 
zu lesen um zu wandel und an zu Zeigen.
Die Daten kommen als einzelene Bits und sollen als Block zu je vier bit, 
das heist wenn vier Bit vorhanden es kommen je Block auch nur 1 oder 2 
oder 3 bit an je nach zahl, aber maximal vier. die sollen zusamengesezt 
werden als ein Nibble und am ende als Zahlen Angezeigt werden.
Da gibt es nicht so viel falsch zu verstehen, Denke ich!
Mein Problemm liegt ja auch nicht darin nicht Angezeigt zu bekommen,
aber wie schon beschrieben kann ich nur 0-9 anzeigen bekommen aber im 
Prinzip 0-15 zu fressen.

Verstehen kann ich es auch nicht , aber es ist sooo!
Und irgentwie muss es wohl machbar sein.
Gast #1199508
Lesenswert?

>1.     2.     3.     4.     5.         Anzeige
>--------------------------------------------------------
>0000   0001   0010   0100   1000        ?01248
>1100   1001   0010   0010   1110        ?12,9,2,2,14 <---- hatte nen
>fehler
>1111   0100   0001   0100   1000        ?15,4,1,4,8
>0010   1000   1111   0000   0000        ?2,8,15,0,0

Was sollen denn die Fragezeichen?



Hast du ne schriftliche AUfgabenstellung?
Gast #1199511
Lesenswert?

Frag doch den Lehrer, wie die Aufgabenstellung lautet und überlege es 
selbst.

Anstatt das Forum zu fragen:

- wie die Aufgabenstellung sein könnte
       (Kristallkugeln sind sehr selten im Jahre 2009)
- wie die Lösung aussehen könnte
       (wenn Du die Aufgabe verstanden hast, wirds wohl eine recht 
einfache Datenwandlung von Format A nach B sein)
Gast #1199530
Lesenswert?

>Mein Problemm liegt ja auch nicht darin nicht Angezeigt zu bekommen,
>aber wie schon beschrieben kann ich nur 0-9 anzeigen bekommen aber im
>Prinzip 0-15 zu fressen.

Na und, dann sind die Codes für 10-15(A-F) eben normal dekodiert nicht
darstellbar. Man nennt die auch Tetradencodes. Das ist das was man auch
Redundanz nennt (Nicht benutze Codes).
Alternativ lassen sich auch die Codes 10-15 auf eine 7-Segmentanzeige
dekodieren (per Software oder Hardware)und ausgeben.
                  
 _  |_   _  _| |_ |_
|_| |_| |_ |_| |_ |

10  11  12 13  14 15
A   B   C  D   E  F
#1199865
Lesenswert?

was-willst-du wrote:
> Frag doch den Lehrer, wie die Aufgabenstellung lautet und überlege es
> selbst.
>
> Anstatt das Forum zu fragen:
>
> - wie die Aufgabenstellung sein könnte
>        (Kristallkugeln sind sehr selten im Jahre 2009)
> - wie die Lösung aussehen könnte
>        (wenn Du die Aufgabe verstanden hast, wirds wohl eine recht
> einfache Datenwandlung von Format A nach B sein)


und ich denke auch, dass du die Aufgabe zweiteilen sollst.

Der eine Teil ist die reine Ausgabe. Da gehts nur darum, jeweils ein 
Nibble an die richtige 7-Segmentánzeige zu bringen.

Der andere Teil der Aufgabe ist es, aus einer Binärzahl die Nibble 
entsprechend aufzubereiten.

Beides hat erst mal nichts miteinander zu tun. Daher solltest du es auch 
nicht miteinander verwurschten.
Gast #1200255
Lesenswert?

Hallo,
Ja ich habs so einiger massen, Dank eurer Hilfe hier imm Forum.
Hex zu Bin war ein Guter Tip, das Brachte mich auf eine ander Idee.
Also das Ganze wahr wohl eine finte, aber das hatte ich schon vermutet.
Es Funktioniert insoweit als das es nun von 0-255 hochzählt.
Warum:
Ich habe zwei 4bit Register die ja nur mit dem Lownibble geladen waren 
zusammen gefasst zu einem 8 bit Register.
Denn daraus Resultierenden Hex wert durch Division #10d Geteilt und den 
Rest an Die 7Segment gesendet.
Funtz bis 255.
Aber ich habe ja 5x4 bit.
Wie kann ich die anderen noch dazu rechnen.
Ich Denke mann muss es wohl so sehen:
0001 0010 0011 1010 1011  alles in einer Reihe ist der Gesamt wert
 1     2    3   10   11   für alle Display,s.
Es muss also alles irgend wie zusammen gerechnet werden und dann alle 
DisPlay,s daraus errechnet werden, dann hab ich auch nicht diese 
seltsame sache mit dem Übertrag bei stelle 15.
Ich habe aber nur ein 8 bit Register und kann demnach nur immer Zwei 
zusammmen fassen.
Wie bekomme ich alle anderen Daten noch dazu.
Gast #1200474
Lesenswert?

Verstehe nicht wo du einen Übertrag überhaupt hast?
Der kommt doch gewöhnlich nur beim Rechnen in einem Akku-Register vor.
Bisher hab ich nur verstanden das du von einer Datenquelle
4 Bit parallel und x5 Nibbel seriell hast um die auf 5 x 7
Segmentanzeigen auszugeben oder hab ich das falsch verstanden?
Übrigens ist Binär 0-15 und Hex 1-9,A-F das selbe, oder nicht?
Nur die Darstellung ist eben anders. Muß eben Sinngemäß dekodiert
werden von einem Dekoderchip oder per Software?
Eine mehr visuelle Beschreibung wäre vielleicht etwas verständlicher,
z.B. über die verwendete Hardware. Das könnte zumindest ein
paar Fragen erklären.
Gast #1200482
Lesenswert?

Also zur Funktion!
Hardware ist:
AT89c4051
Uln 2803 Treiber, Daten vom Controller zu den 7 segment Anzeigen
BC558 Transistoren zum ein und Aussachalten der einzelnen 7 Segmente 
beim Multiplexen.

Zuerst einmal Bekomme ich Maximal 20bit Hintereinander Gesendet,jedes 
Bit hat etwa 2 us Bestand Zeit, dann kommt entweder nix oder das 
Nächste.
0001 0110 0011 0010 0100 soo sieht es aus!
Wuste ich aber vorher auch nicht!
Jede Sekunde kommt ein neues Protokoll mit neuen Daten. Das in diesem 
Daten protokoll der Übertag zum jeweils Nächsten Digit im dem davor 
erzeugt wird wuste ich auch nicht!
Ok das Habe ich ja erledigt, alle Bits werden über Timer TL1 innerhalb 
einer Zeit spanne eingelesen. Das Funktioniert 100%.
Das entspricht der Vorgabe!
Nun Soll ich die bits in 4 bit gruppen gruppieren, also "logisch" 5x4 
bit ( = 5x nur Lownibble).
Dann soll ich die Werte errechen und zur anzeige bringen!
Das ist es schon an Vorgabe! Denn Rest muss ich heraus finden!

Über das Format wurde keine Ausssage getroffen, das es Dual ist habe ich 
herraus finden müssen. Es häte ja auch einfach BCD, Aiken etz.. sein 
können.

Ok soweit so Gut!
Nun habe ich die Daten eingelesen und mit Folgender Funktion zu den 4 
bit Gruppen gebildet.
_________________________________________________ ____
'TL1 Speichert die ergebnisse in die Register 21h aufwärtz
_________________________________________________ ________________
Lownibble bilden
_________________________________________________ _________________
CLR A
MOV R0,ffh 'Zusammen Setzen des ersten Blocks in ein Register R0
MOV A,24h 'Das Protokoll muss Rückwärts wieder hergstellt werden
XRL A,R0
RL A
MOV R0,A
MOV A,23h
XRL A,R0
RL A
MOV R0,A
MOV A,22h
XRL A,R0
RL A
MOV R0,A
MOV A,21h
XRL A,R0
MOV R0,A 'Ende des Zusammen setzen des Register R0
_____________________________________________
So habe ich nun ein Lownibble ( 5 lownibble in R0 bis R4) aus den 
einzellnen Daten gebildet.

Nun Weiss ich ja mittlerweile des es nicht ein Lownibble für ein Digit 
in diesem Sinne ist, wegen dem Übertrag. Also habe nun aus Zwei Register 
mit nur lownibble R0 ,R1 ein Register R3 mit 8 Bit High und lownibble 
gebildet.
Danach habe ich mit der DIV Funktion den Hex wert immer durch #10d 
geteilt und immer den Rest zu einem 7 Segment Gesendet,und weiter 
geteilt bis null.
HEX u BCD Wandlung!
Ok das Funktioniert auch und nun zählt er bis 255.

Aber ich habe 20 bit ingesamt und bislang nur 8 bit verwendet.
Meine Problemm ist nun, wie kann ich die noch verbleibenden 12 bit 
Verarbeiten.

Den Ich habe doch nur ein 8bit register und diese ist mit den ersten 8 
bit schon voll beschrieben, ansonsten würde es ja nicht bis 255 
zählen.Denke ich jedenfalls?

Ich kann natürlich die nächsten8 bit in einem Anderen Register zusammen 
fassen
aber dan habe ich ja das Problemm mit dem Übertrag am 255 aufwärtz.

Da bislang ab 255 wieder bei 0 begonnen wird und mir somit ja 255 
fehlen.
Denn ich müsste ja als nächstes mit 256,257,258 weiter zählen.

Also ich bemeke gerade selber das es unheimlich schwer ist das Ganze 
Gedanken Gut nieder zu schreiben und zu erklären.Um so schwerer ist es 
wohl es zu verstehen!
habt Gedult mit mir!

Ich Denke ich muss aus den eingelsenen Daten bits ein Gesamtwort in 
zb..HEX erstellen und daraus die 5 Digits raus rechnen.

Liege ich da Richtig?
Wenn ja, nur wie geht das?
Ich hoffe ihr verstehst nun die sache, aber wen nicht frag einfach 
explizit nach.

Na ja eines hab ich jedenfalls mal wieder gelernt.

" man wird so alt wie ne kuh und lernt immer noch dazu" !

gruss
el
Gast #1200490
Lesenswert?

Hallo ACDC,
Der Übertag entsteht dadurch das dieses Daten Protokoll 4 bit Dual Code 
sendet, mit dem kann man aber mit Pseudotetraden von 0-15 zählen.
Und so ist es wohl auch es kommen alle 16 varianten vor.
Somit muss zwangsweise ab der 09 stelle ein Übertag erfolgen der schon 
für die nächste Anzeige ist.
Das wuste ich aber vorher auch nicht!
Solche Vorgaben muss ich schon selber heraus finden!
Ich hoffe die Vorran gegangen Beschreibung erklärt es zimmlich Gut.
gruss
 el
#1200506
Lesenswert?

Dein Problem ist, dass du eigentlich 24 Bit Arithmetik betreiben 
solltest anstatt das alles auf 8 Bit Ebene isoliert abzuhandeln.

Ich würde mal damit anfangen mir zu überlegen, wie ich 2 24-Bit Zahlen 
(aufgeteilt auf mehrere Register) addieren bzw. subtrahieren kann. Mehr 
brauchst du dazu nicht.

Prinzip (anhand einer Dezimalzahl gezeigt)

  du hast eine Zahl 378

und sollst die so zerlegen, dass du die Hunderter, Zehner und Einer 
einzeln kriegst.

Nichts einfacher als das

Du subtrahierst in einer Schleife ständig 100 und zählst mit wie oft das 
ging.

    Zahl = 1238

    Cnt = 0
    while( Zahl > 0 ) {
      Zahl = Zahl - 1000
      Cnt = Cnt + 1
    }

    ; an dieser Stelle enthält Cnt die Anzahl der Tausender
    ; diese werden auf die Stelle für Tausender geschrieben

    Zahl = Zahl + 1000

    Cnt = 0
    while( Zahl > 0 ) {
      Zahl = Zahl - 100
      Cnt = Cnt + 1
    }

    ; an dieser Stelle enthält Cnt die Anzahl der Hunderter
    ; diese werden gleich mal auf die 7-Seg Stelle für Hundert geschoben

    Zahl = Zahl + 100

    Cnt = 0
    while( Zahl > 0 ) {
      Zahl = Zahl - 10
      Cnt = Cnt + 1
    }

    ; an dieser Stelle enthält Cnt die ANzahl der Einer
    ; diese werden gleich mal auf die 7-Seg Stelle für Einer geschoben

    Zahl = Zahl + 10

    ; übrig sind die Einer
    ; an die entsprechende 7-Seg Stelle schieben


Bei deinen 24-Bit Zahlen ist das im Prinzip auch nicht anders. Nur dass 
du mit 24 Bit höher als bis 9999 zählen kannst. Da deine Zahlen aber 
anscheiend sowieso nicht größer als 99999 (also 5 STellen, entsprechend 
5 Stück 7-Seg Anzeigen) werden können, reicht es wenn du einfach noch 
abzählst wieviele Zehntausender in der ursprünglichen 24-Bit Zahl 
anthalten sind.

Der SChlüssel zum ganzen liegt aber darin, dass du von einer 24-Bit Zahl 
(nämlich deiner Vorgabe) die 24-Bit Zahl 0010011100010000 (entspricht 
10000 dezimal) abziehen kannst.
Gast #1200525
Lesenswert?

>Jede Sekunde kommt ein neues Protokoll
Eigentlich würde ich das als Datenstrom und nicht als Protokoll 
beschreiben
aber ich glaube das das schon verstanden wurde.
>Dann soll ich die Werte errechen und zur anzeige bringen!
Was soll denn da errechnet werden?
Willst du nicht nur die übertragenen Daten ausgeben oder irgendwelche 
Ergebnisse?

>Über das Format wurde keine Ausssage getroffen, das es Dual ist habe ich
>herraus finden müssen. Es häte ja auch einfach BCD, Aiken etz.. sein
>können.

Dual(Basis 2) ist ein Code wie BCD(Basis 10),Binär(Basis 16),
oktal(Basis 8) usw., aber lassen wir das. CPU`s können nur Dual
verarbeiten,oder?

>Ich kann natürlich die nächsten8 bit in einem Anderen Register zusammen
>fassen
>aber dan habe ich ja das Problemm mit dem Übertrag am 255 aufwärtz.
Wenn du das Register nicht shiftest passiert dem Datum(singular von 
Daten)
nichts. Das verhält sich wie ein RAM.
Ist eben eine Frage wie du deine Daten organisierst und programmierst.
Mit 8 Bit sind eben 256 Zahlenwerte (inkl.0)möglich, mit 2x8Bit=16Bit 
schon 65536 Zahlenwerte möglich. Ich sehe allerdings nicht das das 
irgendwie dein Problem löst.
Daher hier mal ein Schuß ins Blaue. Lege ein Datenfeld(array) im Ram
an in dem der Bitcode für die 7-Segmentanzeige steht. Tabellen stehen
meist in den DAtenblättern div. Dekoderchips oder man setzt sich hin und 
macht selbst eine Wahrheitstabelle.
Brauchst ja nur 7 der 8Bit.
Mit den empfangenen Zeichen steuerst du dieses Array an und die Anzeige 
zeigt die Zahl an. Mußt dann mit einer Routine alle empfangene Daten
(Datum für Datum)lesen und dann über das Array ausgeben und dann wieder 
von vorne.
Ansonsten fällt es mir schwer eine andere Lösung anzubieten.
Für heute mach ich dann erst mal Schluß.
#1200538
Lesenswert?

Mir spukt immer wieder diese Aussage im Kopf rum

> Nun Soll ich die bits in 4 bit gruppen gruppieren,
> also "logisch" 5x4 bit ( = 5x nur Lownibble).
> Dann soll ich die Werte errechen und zur anzeige bringen!
> Das ist es schon an Vorgabe!

Es tut mir leid. Aber das einzige was da halbwegs vernünftig zu dieser 
Aussage passt, ist: Auf den 5 7_Segment Anzeigen wird eine HEX Anzeige 
realisiert. Jedes Nibble wird als Hex-Zahl 0 bis F dargestellt.

Kann es sein, dass du übereifrig die Aufgabe verkomplizierst und dem 
Auftraggeber angeboten hast, dass er eine Dezimale Anzeige kriegt? Wenn 
ja, dann war das nicht sehr schlau! Deine 5 Nibbles als Hex-Zahlen 
anzuzeigen ist trivial. Deine 5 Nibbles als 24 Bit Zahl in Dezimaler 
Form anzuzeigen ist ... nun, ja ... anspruchsvoll, wenn man sowas noch 
nie gemacht hat.
Gast #1200584
Lesenswert?

Hallo Karl heinz,
Mehr aussage hab ich ja nicht!!!
Aber das mit den (Vier bit Grupieren für eine Anzeige) ist ja nicht 
weitergeführt worden.
Will heissen das ich Glaube das es Absichtlich nicht explizit erklärt 
wurde um mich in die irre zu führen.

Das Ganze ist ein Übungsprojekt, hab nur ein Kleines Gerät welches die 
Taktung bringt, in einem Gehäuse verschlossen so das ich nicht hinein 
sehen kann! Muss die Platine und Software dazu abliefern.
Dazu die Trifiale Beschreibung, als Übung!
Wenn bedenkt das ich erst einmal mir das Osiloskop zur hand genommen 
habe und eine Schreck bekamm über diese Daten.
Ich Wuste auch nicht das es Dual system ist, es ist nicht BCD da sind 
die 01 Variationen etwas anders.
Aber OK!
Ich Denke das mit dem 20 bit system ist es wohl, muss mir halt nun 
Überlegen wie das geht!
Hab ich ja nun alles soweit!

Ich Danke euch Nochmal für eure bisheriege hIlfe herzlichst,
gruss
el
#1200992
Lesenswert?

Hannes Lux wrote:
>> Binär-Siebensegment-Decoder haben will.
>
> Oder sogar nur einen BCD-Siebensegment-Decoder... ;-)
>
> Denn die ganze Eierei mit den Überträgen usw. erscheint mir recht
> praxisfremd.

Meine Rede. Genau das denk ich auch

Da 5 Nibbel rein
dort auf 5 Sieben-Segment Anzeigen raus

Jedes Nibble als Hex-Ziffer ( 0 - 9, A, B, C, D, E, F ) auf eine 
Anzeige. Fertig.

(Ganz abgesehen davon, dass man mit 20 Bits höher zählen kann, als man 
mit 5 Stellen anzeigen kann)
Gast #1201008
Lesenswert?

>Meine Rede. Genau das denk ich auch

Ich bezog mich auf das Eingangspost.
Mich würde die Überschrift der Aufgabe interessieren. Im Regelfall 
bekommt man Aufgaben (in der Schule) doch schriftlich. Ich kann mir 
nicht vorstellen, dass der Lehrer dem torro einfach so eine Schaltung in 
die Hand drückt und sagt: "So, mach mal!". In irgendeinem Zusammenhang 
mit dem Unterrichtsstoff dürfte die Aufgabe stehen.
Naja, morgen ist das halbjährige Projekt vermutlich zuende... ;)
Gast #1201158
Lesenswert?

Hallo,

Leider muss ich euch sagen das es genau so Ist!!!
Die Aufgabe wahr genau so einfach gehalten nur ein paar Bedingungen ohne 
weitere infos.

Aber OK, Das wahr eigentlich so im Nachhinein Betrachtet auch Gut so.
Ich denke so lernt man wohl auch mit Recht eigentümlichen Dingen um zu 
gehen.
Das Wahr ja wohl auch Voll absicht von ihm, Denke Ich.

So und nun darf ich mich noch einmal Herzlichst bei euch Allen die hier 
mitgewirkt haben Bedanken.
Vielen Danke für eure Kompetenten Ratschläge, dies hat zu erfolg 
geführt.

Es Funkktioniert einwandfrei!!!
Ganz einfach hex zu BCD Routine, das wars schon.

Mal sehen was er dazu sagt, so und nun muss ich noch schnell ne Platine 
Zaubern.Die ganzen Drähte möchte ich ja nicht Vorzeigen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren