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
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
Was ist ein BCDE codiertes Signal? Ich kenne BCD aber selbst Google kann mit BCDE nichts anfangen
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?!?
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)
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 ;)
> 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?
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
Hey Peter, sag mir doch bitte den Händler deiner Glaskugel - son Ding brauch ich unbedingt ;)
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]
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
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. ;)
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!
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?
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
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
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?
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
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.
Vielleicht liest er gerade alle Seiten, die Google über BCD bringt? da wird er sich vor Ostern nicht mehr melden.
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
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
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.
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.
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.