Forum: Mikrocontroller und Digitale Elektronik BCDE Segement Anzeige


von Reinhard P. (reinhard_p)


Lesenswert?

Hallo zusammen,
ich habe folgendes Problem: ich muß eine Segemntanzeige konstruieren in 
der ein BCDE codiertes Signal mit "normalen" Zahlen, also ohne 
Buchstaben für 10,11,12,13,14,15, dargestellt werden soll. Alle 
Recherchen die ich bis dato gemacht habe, zeigen leider nur die 
Buchstaben an.
Ein weiteres Problem ist noch, daß die logische Null ( BCDE auf Null 
)als 1 dargstellt werden muß, sprich alle BCDE-Werte müßten um 1 erhöht 
werden.
Ich denke mal, daß ich um einen PIC nicht herum komme, leider kann ich 
aber keine PIC's programmieren.
Hat hier vielleicht einer von euch ein solches Problem schon mal gefixt 
und ist bereit mir den Code zur Verfügung zu stellen, oder ist jemand 
bereit den Code für mich zu erstellen ( gegen entsprechende Bezahlung ):

Danke vorab

Reinhard Pfeiffer

von C. H. (_ch_)


Lesenswert?

Hallo Reinhard,

ohne dir jetzt zu nahe treten zu wollen - wenn du dein Problem nicht 
genauer darstellen/erklären kannst, wirst du auch keine Antwort bekommen 
(außer dumme Sprüche).
Also, versuch's nochmal ;)

Gruß
Christian

von Karl H. (kbuchegg)


Lesenswert?

Was ist ein BCDE codiertes Signal?
Ich kenne BCD aber selbst Google kann mit BCDE nichts anfangen

von C. H. (_ch_)


Lesenswert?

Das frage ich mich auch. Aber bei BCD gibt es von Grund auf ja keine 
größere Ziffer als 9. Er verwechselt wahrscheinlich hex <-> BCD oder 
sonst was?!?

von Karl H. (kbuchegg)


Lesenswert?

C. H. schrieb:
> Er verwechselt wahrscheinlich hex <-> BCD oder
> sonst was?!?

Das denke ich auch. Das würde auch die ganze Sache mit 'den Buchstaben' 
erklären. Aber es schadet nichts, wenn er sich das nochmal überlegt und 
neu formuliert.

Dinge die interessant sind:

Wo und wie kommt 'das Signal' her?
Muss es PIC sein, oder ist das egal?
Gibt es Präferenzen für irgendwelche 7-Segmentanzeigen?

Welche Teile kannst du alleine erledigen?
* Schaltung layouten
* Platine routen
* Platine fertigen
* Programm erstellen
* Programm in den µC brennen


Um das Programm mach dir erst mal keine Sorgen. Das ist trivial (wenn 
meine Annahme stimmt was du eigentlich möchtest und wir auf AVR anstelle 
von PIC umsteigen können)

von C. H. (_ch_)


Lesenswert?

Karl heinz Buchegger schrieb:
> Um das Programm mach dir erst mal keine Sorgen. Das ist trivial (wenn
> meine Annahme stimmt was du eigentlich möchtest und wir auf AVR anstelle
> von PIC umsteigen können)
Das ist auch trivial, wenn es doch ein PIC sein soll ;)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ich denke mal, daß ich um einen PIC nicht herum komme, leider kann ich
> aber keine PIC's programmieren.
Dann nimm einen AVR, wenn du das besser kannst SCNR...

> Hat hier vielleicht einer von euch ein solches Problem schon mal gefixt
Vermutlich ja.
> und ist bereit mir den Code zur Verfügung zu stellen, oder ist jemand
> bereit den Code für mich zu erstellen ( gegen entsprechende Bezahlung ):
Vermutlich ja, aber dazu müsste derjenige erst mal wissen, was du denn 
eigentlich willst. Dabei ist ganz und gar uninteressant, wie du das 
lösen möchtest.

> ich muß eine Segemntanzeige konstruieren
Wiviele Stellen?
Wieviele Segmente?

von Peter D. (peda)


Lesenswert?

Ist doch nicht so schwer, er will wohl eine 2-stellige Anzeige benutzen.
4 Eingänge, 8 Ausgänge, d.h. ein ATTiny24 reicht.
1
uint8_t TABLE_7SEG[] = { /* hier die 9 Bitmuster einfügen */ };
2
3
int main( void )
4
  PORTB = 0x0F;
5
  DDRA = 0xFF;
6
  for(;;){
7
    uint8_t in = (PINB & 0x0F) + 1;
8
    uint8_t ones = in % 10;
9
    uint8_t tens = in / 10;
10
    PORTA = TABLE_7SEG[ones] + tens ? 0x80 : 0;
11
  }
12
}


Peter

von C. H. (_ch_)


Lesenswert?

Hey Peter, sag mir doch bitte den Händler deiner Glaskugel - son Ding 
brauch ich unbedingt ;)

von Karl H. (kbuchegg)


Lesenswert?

Peter Dannegger schrieb:
> Ist doch nicht so schwer,

Sagt ja auch keiner :-)
Aber ich würds gerne von ihm hören. Schliesslich
[quote]
ich muß eine Segemntanzeige konstruieren
[/quote]

von Paul Baumann (Gast)


Lesenswert?

Man muß nicht immer mit Kontrollern arbeiten:
Ein BCD-zu Sieben-Segment-Dekoder und ein BCD-zu Dezimal-Dekoder
miteinander verbunden und mit 2 Anzeigeelementen ginge da auch.

MfG Paul

von Draco (Gast)


Lesenswert?

Paul Baumann schrieb:
> Man muß nicht immer mit Kontrollern arbeiten:
> Ein BCD-zu Sieben-Segment-Dekoder und ein BCD-zu Dezimal-Dekoder
> miteinander verbunden und mit 2 Anzeigeelementen ginge da auch.
>
> MfG Paul

Da wäre nur noch das Problem mit den -1 ;) wobei dies dann ja wiederrum 
kein BCD Code mehr wäre.

Und kommt auch auf den verwendeten Treiber an. Ich habe hier 7seg 
Treiber die sehr wohl auch Buchstaben darstellen ab einer 0b1010. Sollte 
er keinen BCD Treiber nutzen, bleibt sowieso nur noch multiplexen und 
ein eigener Code übrig. Aber das weiß man ja nicht. ;)

von Sebastian (Gast)


Lesenswert?

wie wäre es mit einem BCD zu Dezimaldecoder und dann den Dezimal zu 
7-Segment Decoder als Diodennetzwerk.
Ich habe leider keinen dezimal zu 7-Seg. Decoder gefunden, dann wäre das 
mit dem -1 kein Problem.
Interessant ist auch die Verwendung eines alten EEPROMs!

von MarioT (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ist doch nicht so schwer, er will wohl eine 2-stellige Anzeige benutzen.

Konnte ich nicht erkennen.

Reinhard P. schrieb:
> ohne Buchstaben für 10,11,12,13,14,15,

Soll die Anzeige dunkel bleiben?

Reinhard P. schrieb:
> Ein weiteres Problem ist noch, daß die logische Null ( BCDE auf Null
> )als 1 dargstellt werden muß, sprich alle BCDE-Werte müßten um 1 erhöht
> werden.

Was soll bei "9" angezeigt werden?

von Michael U. (amiga)


Lesenswert?

Hallo,

Sebastian schrieb:
> wie wäre es mit einem BCD zu Dezimaldecoder und dann den Dezimal zu
> 7-Segment Decoder als Diodennetzwerk.
> Ich habe leider keinen dezimal zu 7-Seg. Decoder gefunden, dann wäre das
> mit dem -1 kein Problem.
> Interessant ist auch die Verwendung eines alten EEPROMs!

2 alte (E)EPROMS a 8 Bit oder einer mit 16 Bit wäre die sparsamste 
Variante.
Je eine 7-Segmentanzeige an je 8 Bit, A0-A3 die Daten und die Bitmuster 
gebrannt und fertig.

So schöne alte Sachen wie 74S188 könnte man auch gut nehmen...

Gruß aus Berlin
Michael

von Michael U. (amiga)


Lesenswert?

Hallo,

MarioT schrieb:
> Peter Dannegger schrieb:
>> Ist doch nicht so schwer, er will wohl eine 2-stellige Anzeige benutzen.
>
> Konnte ich nicht erkennen.
>
> Reinhard P. schrieb:
>> ohne Buchstaben für 10,11,12,13,14,15,
>
> Soll die Anzeige dunkel bleiben?
>
> Reinhard P. schrieb:
>> Ein weiteres Problem ist noch, daß die logische Null ( BCDE auf Null
>> )als 1 dargstellt werden muß, sprich alle BCDE-Werte müßten um 1 erhöht
>> werden.
>
> Was soll bei "9" angezeigt werden?

Er will eine 2-stellige Anzeige, die die Codes 0x00 - 0x0F als 1...16 
anzeigt...
Wetten? ;-)

Gruß aus Berlin
Michael

von MarioT (Gast)


Lesenswert?

Michael U. schrieb:
> Er will eine 2-stellige Anzeige, die die Codes 0x00 - 0x0F als 1...16
> anzeigt...
> Wetten?

Leuchtet ein. Man müsste jetzt wissen warum?

von Michael U. (amiga)


Lesenswert?

Hallo,

MarioT schrieb:
> Michael U. schrieb:
>> Er will eine 2-stellige Anzeige, die die Codes 0x00 - 0x0F als 1...16
>> anzeigt...
>> Wetten?
>
> Leuchtet ein. Man müsste jetzt wissen warum?

Hat er doch geschrieben, weil er sowas konstruieren muß...

Wird heutzutage soviel Überflüssiges mit soviel Aufwand konstruiert, da 
kommt es auf sein Projekt auch nicht mehr an. ;-))

Gruß aus Berlin
Michael

von Karl H. (kbuchegg)


Lesenswert?

Ich finds immer wieder faszinierend:

Da 'müssen' Leute irgendwelche Sachen bauen, die eigentlich nicht so 
schwer zu realisieren sind, und die jeder Bastler, der ein bischen was 
auf dem Kasten hat, in weniger als einer Stunde bauen kann. Ich frag 
mich dann immer: Warum 'müssen' sie das eigentlich bauen? Gibt es da 
keinen anderen, der weiß wie es geht? Und warum 'muss' er sich gleich 
mit so etwas 'Schwierigem' abplagen, gibts kein einfacheres 
Einsteigerprojekt?

Da kommt dann eine halb ausgegorene Anfrage, bei der ein paar Fragen 
offen bleiben und dann ... wird natürlich nachgefragt, wild spekuliert 
.... aber vom Fragesteller hört man nichts mehr. Offenbar ist es dann 
doch nicht so wichtig, dass er das bauen 'muss', wenn er nicht eine 
halbe Stunde später noch mal reinschaut ob vielleicht jemand geantwortet 
hat.

Schaun wir mal, wies weiter geht.

von MarioT (Gast)


Lesenswert?

Vielleicht liest er gerade alle Seiten, die Google über BCD bringt? da 
wird er sich vor Ostern nicht mehr melden.

von Reinhard P. (reinhard_p)


Lesenswert?

Hallo zusammen,

da habe ich mich wohl wirklich sehr ungeschickt angestellt und es hapert 
an Infos. Das werde ich nun versuchen zu korrigieren. Gleichzeitig 
möchte ich mich bei allen Teilnehmern entschuldigen.

Es handelt sich um ein BCD codiertes Signal, also Zahlen von 0..15. Da 
die Zahlen 10,11,12,13,14,15 in allen mir bekannten Anzeigen aber als 
Buchstaben dargestellt werden, oder werden ganz unterdrückt, kann ich 
eine fertige Anzeigeeinheit nicht einsetzen. Es müssen alle Zahlen von 
0..15 dargestellt werden. Am besten wäre da noch eine führende Null , 
also 01,02.....
Der größte Haken aber ist, daß zu allen Werten eine 1 addiert werden 
muß, so daß nun Zahlen von 1..16 dargestellt werden, was den Einsatz 
einer fertigen Anzeigeeinheit unmöglich macht.
So bin ich auf die Idee gekommen, einen PIC, und da ist es mir egeal 
welcher Type es da ist ( ich habe davon eh keine Ahnung....Asche auf 
mein Haupt ) einzusetzen.
Als Anzeige selbst würde ich gerne möglichst kleine LCD 
7-Segmentanzeigen verwenden.

Wenn ihr mir hier weiterhelfen könntet wäre das echt toll.

Glück auf

Reinhard Pfeiffer

von Joachim (Gast)


Lesenswert?

Hallo

Da stimmt irgendwas nicht.
Wenn mich meine UNI-Kentnisse nicht verlassen habenm, sagt BCD
das eine Dezimalstelle (0..9) binär dargestellt wird.

Die 10...15 oder A...F tauchen da garnicht auf.
Das währe dann bereits die Zehnerstelle, die in einer eigenen
BCD-Stelle dargestellt wird.

Fruß
Joachim

von MarioT (Gast)


Lesenswert?

Joachim schrieb:
> Das währe dann bereits die Zehnerstelle, die in einer eigenen
> BCD-Stelle dargestellt wird.

Ich glaube es gibt IC's BCD zu 7 Segment die das machen. Hat natürlich 
normalerweise nichts mit BCD zu tun.

von Karl H. (kbuchegg)


Lesenswert?

Reinhard P. schrieb:

> Es handelt sich um ein BCD codiertes Signal, also Zahlen von 0..15.

Dann kann es nicht BCD sein.
BCD ist per Definition:  4 Bits, die die Werte von 0 bis 9 annehmen 
können.

Entweder ist dein 'Signal' nicht BCD oder du hast übersehen, dass die 
Werte 10..15 gar nicht vorkommen können.

Ich geh mal von ersterem aus.
Du hast also 4 Eingangsleitungen.
Gut. Wo kommen die her?

> die Zahlen 10,11,12,13,14,15 in allen mir bekannten Anzeigen aber als
> Buchstaben dargestellt werden, oder werden ganz unterdrückt, kann ich
> eine fertige Anzeigeeinheit nicht einsetzen. Es müssen alle Zahlen von
> 0..15 dargestellt werden. Am besten wäre da noch eine führende Null ,
> also 01,02.....

Das ist alles kein Problem

> Der größte Haken aber ist, daß zu allen Werten eine 1 addiert werden
> muß, so daß nun Zahlen von 1..16 dargestellt werden

Auch das ist kein Problem

> So bin ich auf die Idee gekommen, einen PIC, und da ist es mir egeal
> welcher Type es da ist ( ich habe davon eh keine Ahnung....Asche auf
> mein Haupt ) einzusetzen.

Die Idee, da einen PIC einzusetzen, ist schon nicht schlecht.
Klar kann man das alles auch diskret aufbauen, aber das artet dann in 
ein IC-Grab aus. Mit einem µC ist das deutlich einfacher :-)

> Als Anzeige selbst würde ich gerne möglichst kleine LCD
> 7-Segmentanzeigen verwenden.

Ist das noch verhandelbar? Solch kleine LCD haben meistens keinen 
Controller, so dass der µC die korrekte Ansteuerung eines LCD auch noch 
mit übernehmen muss. Machbar ist das, keine Frage. kleine ordinäre 
7-Segment LED Anzeigen sind einfacher anzusteuern.

von MarioT (Gast)


Lesenswert?


von Sebastian (Gast)


Lesenswert?

Also, mal ein konkreter Ansatz, falls ich den OP richtig verstanden 
habe:

4 Bits sollen in Segmente einer eineinhalbstelligen Ziffernanzeige 
umcodiert werden. Dabei entspricht 0000 der Anzeige "1", 1111 der 
Anzeige "16".

Diese Aufgabe kann mit kombinatorischer Logik gelöst werden, man 
benötigt keine Zustände, die durchlaufen werden müssen, d.h. keine 
Speicherelemente.

Es werden lediglich 8 Ausgangssignale benötigt, da man die vorlaufende 
"1" zusammenfassen kann, indem man beide Segmente parallel schaltet. 
Schließlich leuchten diese immer zugleich.

Füher hätte man so einen Decoder wahrscheinlich als Tabelle geschrieben 
und in einen TTL PROM gebrannt. Gibt's aber meines Wissens nicht mehr, 
kann außerdem heute kaum noch einer beschreiben.

Also bleiben zwei Möglichkeiten: Entweder man vereinfacht die logischen 
Gleichungen, die sich ergeben aus dem Verhältnis zwischen gewünschten 
Ausgangszuständen (leuchtende Segmente) und möglichen Eingangszuständen 
(4-Bit-Zahl) und baut das ganze mit Standardgattern auf, oder man 
programmiert sich einen kleinen GAL. Mit Glück paßt das in einen 16V8, 
die findet man auch heute noch leicht. Diodenlogik ginge übrigens auch, 
nebenbei gesagt.

In jedem Fall muß man einen Weg finden, das gewünschte logisch 
auszudrücken. Ob nun für einen Logikcompiler wie CUPL oder ABEL, oder 
als Grundlage für die Handverdrahtung, ist egal.

Beispiel, ganz formlos:
Namen der Ausgänge: qa, qb, qc, qd, qe, qf, qg, qh (Segmente a bis g der 
Ziffernanzeige, h ist die vorlaufende Eins)
Namen der Eingänge: ia, ib, ic, id

Ansatz: Wenn ia, ib, ic und id Null sind, leuchtet die Ziffer 1.
Dann müssen also die Segmente b und c leuchten, diese bilden die Eins.

Das kann man analog für jeden anderen Zustand schreiben. Für die 
Optimierung ist es jedoch besser, von den Segmenten auszugehen, und sich 
zu überlegen, bei welchen Zuständen diese leuchten.

Natürlich kann man bei programmierbarer Logik auch die 
Tabellenschreibweise nutzen. Hier: 
http://www.eng.mu.edu/~perezjc/eece143/Lecture05.pdf wird ab Seite 30 
"HEX7SEG.PLD" ein einfacher BCD-Decoder beschrieben. Dieses Beispiel ist 
anschaulich, und die Tabelle dort müßte lediglich um ein Segment 
erweitert und an die gewünschte WDarstellung angepaßt werden.

von Reinhard P. (reinhard_p)


Lesenswert?

Hallo zusammen,

wie Sebastian es beschriebn hat, genau so sollte es sein:"

4 Bits sollen in Segmente einer eineinhalbstelligen Ziffernanzeige
umcodiert werden. Dabei entspricht 0000 der Anzeige "1", 1111 der
Anzeige "16"."

Karl heinz Buchegger Anmerkung/Frage zur LCD-Anzeige:
Ja es können auch LED-Anzeigen sein, nur klein müssen sie sein, da in 
dem Gehäuse sehr wenig Platz ist.

Tschuldigung das ich nicht immer sofort antworte, aber ich sitze nicht 
permanent am PC, sondern nur sporadisch.

Nochmals Danke an alle die sich die Zeit genommen haben über mein 
Problem nachzudenken.

Glück auf

Reinhard Pfeiffer

von Michael U. (amiga)


Lesenswert?

Hallo,

mit PIC habe ich nichts im Sinn, bei AVR würde mir ein Tiny26 einfallen.
PA0...PA7 Segment A-G, PB0.PB3 Eingänge für die Daten, PB4, PB5 die 
Anoden(Katoden) der 7-Segmentanzeigen. Da kleine Anzeigen sollte der 
Segmentstron im zulässigen bereich bleiben, Vorwiderstände eben passend 
auswählen.

7-Segment Bitmuster paarwesie für beide Stellen als Tabelle ins Flash, 
Timerinterrupt für den Stellen-Multiplex, Endlosschleife um 
Eingangsdaten einzulesen, *2 und zum Tabellenanfang dazu, erste Stelle 
holen und setzen zweite Stelle holen und setzen.

Tiny26, 2x Segmentanzeige, 7x Widerstand, 100n am AVR.

Wenn nötig eben noch Pegelanpassung der Eingänge.

Gruß aus Berlin
Michael

von Sebastian (Gast)


Lesenswert?

Hier mal ein Schnipsel Logikbeschreibung, passend für PALASM oder CUPL 
(aber nicht getestet!)
1
CHIP GAL1 GAL16V8
2
3
PIN I1; IN LSB
4
PIN I2;
5
PIN I3;
6
PIN I4; IN MSB
7
8
PIN QA; OUT SEG A
9
PIN QB;
10
PIN QC;
11
PIN QD;
12
PIN QE;
13
PIN QF;
14
PIN QG;
15
PIN QH; OUT +1
16
17
T_TAB
18
19
( I1 I2 I3 I4 >> QA QB QC QD QE QF QG QH )
20
  0  0  0  0  :  0  1  1  0  0  0  0  0 ; 1
21
  0  0  0  1  :  1  1  0  1  1  0  1  0 ; 2
22
  0  0  1  0  :  1  1  1  1  0  0  1  0 ; 3
23
  0  0  1  1  :  0  1  1  0  0  1  1  0 ; 4
24
  0  1  0  0  :  1  0  1  1  0  1  1  0 ; 5
25
  0  1  0  1  :  1  0  1  1  1  1  1  0 ; 6
26
  0  1  1  0  :  1  1  1  0  0  0  0  0 ; 7
27
  0  1  1  1  :  1  1  1  1  1  1  1  0 ; 8
28
  1  0  0  0  :  1  1  1  1  0  1  1  0 ; 9
29
  1  0  0  1  :  1  1  1  1  1  1  0  1 ; 10
30
  1  0  1  0  :  0  1  1  0  0  0  0  1 ; 11
31
  1  0  1  1  :  1  1  0  1  1  0  1  1 ; 12
32
  1  1  0  0  :  1  1  1  1  0  0  1  1 ; 13
33
  1  1  0  1  :  0  1  1  0  0  1  1  1 ; 14
34
  1  1  1  0  :  1  0  1  1  0  1  1  1 ; 15
35
  1  1  1  1  :  1  0  1  1  1  1  1  1 ; 16

Sollte ich mich über Ostern langweilen, kann ich das Zeug mal versuchen 
zu kompilieren. Habe nur gerade diese steinalten Tools nicht auf dem 
Laptop.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.