7-segement anzeige

Gast #1804669
Lesenswert?

Hallo ich habe ein problem ich hab eine 7-Segement anzeige. Ich habe sie 
aus einen analog reciver ausgebaut und würde sie gerne am pc betreiben 
aber ich bin noch ein noob und habe nich so viel erfahrung in elektronik


schonmal Dank wür die Antworten

MFG noob
Angehängte Dateien:
Gast #1804679
Lesenswert?

> und der 7-segement triber ist MC14499P

Perfekt, da musst du dich um nichts kümmern.

Du musst die Anzeige nur an den PC anschliessen,
Masse und 5V (von einem Floppy-Stromkabel oder so)
verbinden,
und CLK und DATA und ENABLE auf der Platine finden
und z.B. an D0, D1, D2 von einem Parallelport legen.

(auf der Platine ist noch mehr drauf, z.B. ein
Infrarotempfänger, den du nicht benutzt).

Dann kannst du ein Programm schreiben, welches die
Datenbits D0, D1, D2 des Parallelports so bedient,
wie es auf Seite 3 im Datenblatt steht (alle 16 bit
nacheinander), und du siehst deine Anzeige.

Keine zusätzliche Hardware, kein zeitkritisches
Programm.

Es ist eine ziemlich ideale Platinen für den
Verwendungszweck.
Gast #1804910
Lesenswert?

LED AUS :


DIM lpt(1 to 8) AS INTEGER, i AS INTEGER, lptbyte AS INTEGER

lpt(1) = 0
lpt(2) = 0
lpt(3) = 0
lpt(4) = 1 'Anschalten
lpt(5) = 0
lpt(6) = 0
lpt(7) = 0
lpt(8) = 1 'Anschalten

lptbyte = 0

FOR i = 1 to 8
  lptbyte = lptbyte + (2 ^ (i - 1)) * lpt(i)
NEXT i

OUT 888, lptbyte 'LPT schalten


LED AN


DIM lpt(1 to 8) AS INTEGER, i AS INTEGER, lptbyte AS INTEGER

lpt(1) = 0
lpt(2) = 0
lpt(3) = 0
lpt(4) = 1 'Anschalten
lpt(5) = 0
lpt(6) = 0
lpt(7) = 0
lpt(8) = 1 'Anschalten

lptbyte = 1

FOR i = 1 to 8
  lptbyte = lptbyte + (2 ^ (i - 1)) * lpt(i)
NEXT i

OUT 888, lptbyte 'LPT schalten
Gast #1804925
Lesenswert?

Gut.
Dann musst Du jetzt nur nacheinander die Bytes mit:
 OUT 888,
an den Port ausgeben.
Zuerst solltest Du eien Zuordnung der Portausgänge zu den 3 Daten Pins 
des IC festlegen und dann eine Tabelle der zu sendenden Bytes erstellen.
Gast #1804986
Lesenswert?

Nun mal nicht so hektisch...

Im Datenblatt des IC auf Seite 4 wirds erklärt.
Wenn Du die 3 Pins des IC so wie in meinem Vorschlag angeschlossen hast, 
sieh dir das Diagramm auf der Seite an:

DATA  CLK  ENB
 X     1    1         OUT 888,3       IC nicht angewählt
 D1    1    0         OUT 888,2(+4)   IC aktiv, D1=0 oder 1
 D1    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt 
Datenbit
 D2    1    0         OUT 888,2(+4)   CLK auf high
 D2    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt 
Datenbit
usw. bis D16 dann
 D16   1    1         OUT 888,3        IC nicht angewählt

Du musst die Bytes in ein Array packen und in einer Schleife ausgeben.
#1805029
Lesenswert?

Ich denke du gehst von falschen Vorstellungen aus.
Du musst gar nichts an den IC schicken, in dem Sinne, dass du deine 
gewünschte Anzeige einfach an den Parallelport gibst und die Anzeige 
machst das dann.

Der Parallelport ist für dich einfach nur eine Möglichkeit, wie du ein 
paar Leitungen nach draussen bekommst, die du gezielt auf 0 oder 1 
setzen kannst. Das ist alles. Mehr hast du nicht zur Verfügung.

Jetzt kommt das Datenblatt ins Spiel. Das verrät dir, das der IC mit 3 
Leitungen angesprochen wird. Und es verrät dir auch in welcher 
Reihenfolge welche Leitung auf 0 oder 1 gehen muss. Oder um bei dem zu 
bleiben was du schon kennst: Wenn an den Leitungen jeweils 1 LED wäre, 
in welcher Reihenfolge welche LED aufleuchten und wieder verlöschen 
muss.

KUrz gesagt: die ENB Leitung schaltet 'den IC als ganzes ein'. Solange 
die ENB Leitung auf 1 ist, kümmert sich der IC nicht darum, was auf den 
anderen beiden Leitungen passiert. Damit der IC darauf hört, muss ENB 
auf 0.

Und die anderen beiden Leitungen sind einfach:
An DATA legst du 1 Bit an, entweder 0 oder 1, je nachdem
Damit dieses 1 Bit in den IC übernommen wird, muss man an der CLK 
Leitung einen Puls erzeugen. Die Leitung muss also wechseln von 0 auf 1 
und wieder zurück auf 0. Mit dem letzten Teil 'zurück auf 0' wird dann 
das an der DATA Leitung anliegende Bit in den IC übernommen.
Gast #1805078
Lesenswert?

Hier, genau an dieser Stelle, entscheidet sich, ob das Dein Hobby (oder 
Dein Beruf) wird (oder welche Note Du bekommst). Die meisten von uns 
haben sich mühsam durch Buecher, Datenblätter und fremde (ganz abgesehen 
von den eigenen ;-) ) Programme gekämpft und lernen immer noch dazu.
Diesen Kampfgeist musst Du auch Dir  angewöhnen.

Wir helfen Dir gerne kostenlos, zu lernen und zu verstehen, aber umsonst 
arbeiten tun wir nicht.

Aus dem Code von Karl-Heinz und der Erklärung von HP-Freund kannst Du, 
mit ein wenig Mühe, was funktionierendes machen. Auf Deinem Niveau ist 
das schon ein beachtlicher Erfolg. Also, ran an den Speck.

Wenn Du was nicht verstehst, dann beschreibe genau, was Du gelesen hast, 
was Du davon verstehst und was nicht. Mit "ich verstehe es nicht" können 
wir nichts anfangen um Dir weiter zu helfen.
Gast #1805082
Lesenswert?

DATA  CLK  ENB
 X     1    1         OUT 888,3       IC nicht angewählt
 D1    1    0         OUT 888,2(+4)   IC aktiv, D1=0 oder 1
 D1    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
Datenbit
 D2    1    0         OUT 888,2(+4)   CLK auf high
 D2    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
Datenbit
D3     1     0
D3     0     0
usw. bis D16 dann
 D16   1    1         OUT 888,3        IC nicht angewählt
so?
#1805087
Lesenswert?

noob schrieb:
> DATA  CLK  ENB
>  X     1    1         OUT 888,3       IC nicht angewählt
>  D1    1    0         OUT 888,2(+4)   IC aktiv, D1=0 oder 1
>  D1    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
> Datenbit
>  D2    1    0         OUT 888,2(+4)   CLK auf high
>  D2    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
> Datenbit
> D3     1     0
> D3     0     0
> usw. bis D16 dann
>  D16   1    1         OUT 888,3        IC nicht angewählt
> so?

abschreiben kann jeder :-)
Gast #1805100
Lesenswert?

Ja. Richtig. Die Bits werden durchgezählt.

Wenn Du plus 4 addierst, wird das Datenbit 1, wenn Du es nicht tust, 
dann wird es 0.

So wird es Null.
>  DX    1    0         OUT 888,2   CLK auf high
>  DX    0    0         OUT 888,0   fallende CLK Flanke übernimmt

So wird es Eins.

>  D2    1    0         OUT 888,2+4   CLK auf high
>  D2    0    0         OUT 888,0+4   fallende CLK Flanke übernimmt
#1805101
Lesenswert?

Aber vielleicht solltest du erst mal wieder deine LED an den 
Parallelport höngen und noch ein bischen weiter damit experimentieren. 
Im Idealfall hast du 3 LED am Port hängen und du kannst in BASIC so 
programmierern, dass du jede einzelne LED unabhängig von den anderen ein 
und wieder ausschalten kannst. Egal welchen Zustand LED1 und LED2 haben 
musst du LED3 ein und auch wieder ausschalten können. Selbiges natürlich 
auch für die anderen beiden LED.

Das erscheint mir als Vorstufe eine vernünftige Übung für dich zu sein. 
Denn Hand aufs Herz. Was mit

  OUT 888, 2(+4)

gemacht wird ... ich glaub nicht das du das verstanden hast.
#1805665
Lesenswert?

Warum die 3 LED?
Weil du 3 Leitungen von dieser Platine bedinen musst.
Wenn du die LED da drann hast (und auch schon ein wenig Übung im 
Ansteurn dieser LED), kannst du ja auch mal die Zusatzplatine mit ihren 
3 Leitungen mit dazu anhängen (und die LED drann lassen). Das müsste 
eigentlich funktionieren. Der Vorteil: Deine LED zeigen dir dann an, was 
dein Programm macht und du kannst (überhaupt wenn dein Programm die 
Leitungen gaanz langsam bedient) an, welche Leitung wann was macht.

Und das ist allemal besser, als wenn man im Dunkeln stochert und nicht 
weiß, warum die externe Schaltung nicht reagiert.


Ich hätte dir ja gerne vorgeschlagen, mit dem Modul ohne steuernden 
Computer zu spielen. Modul an die Versorgung anschliessen und dann die 
Steuerleitungen einfach mal an + bzw. - halten, wie es laut Datenblatt 
erfoderlich ist. Aber das scheiter daran, dass man so das 
unvermeindliche Prellen nicht los wird und so keine sauberen Pulse 
erzeugen kann.
Gast #1805688
Lesenswert?

ich weiß immer noch nicht wie das program weiter geht :(


DATA  CLK  ENB
 X     1    1         OUT 888,3       IC nicht angewählt
 D1    1    0         OUT 888,2(+4)   IC aktiv, D1=0 oder 1
 D1    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
Datenbit
 D2    1    0         OUT 888,2(+4)   CLK auf high
 D2    0    0         OUT 888,0(+4)   fallende CLK Flanke übernimmt
Datenbit
usw. bis D16 dann
 D16   1    1         OUT 888,3        IC nicht angewählt
#1805723
Lesenswert?

noob schrieb:
> ich weiß immer noch nicht wie das program weiter geht :(


Das was du da hast, ist erst mal gar kein Programm.
Da ist links die Spalte, in der aufgeschlüsselt ist, welche Leitung wann 
auf 0 bzw. 1 bzw. uninteressant (X) gehen soll, bzw das gewünschte 
Datenbit annehmen muss.

Die mittlere Spalte ist der Programmtext, der am Parallelport die in der 
ersten Spalte aufgeschlüsselten Bits tatsächlich herstellt  und die 
rechte Spalte ist die Kommentierung was da passiert


Du solltest allen Ernstes mit was einfacherem anfangen, so hat das wenig 
Sinn, wenn du uns diese "Skizze" als "das Programm" verkaufen willst.
Gast #1805738
Lesenswert?

mein pc hat einen parallelport
ist es so richtig

 Out(888, 3)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 2 + 4)
        Out(888, 0 + 4)
        Out(888, 3)
#1805749
Lesenswert?

noob schrieb:
> mein pc hat einen parallelport
> ist es so richtig

Gehs in einzelnen Schritten durch.

Welche Leitung nimmt welchen Zustand an? (Wie hast du die Leitungen 
eigentlich angeschlossen?)

Nahmen wir mal an
  Enable  ENB ist am Parallelport an Pin D0
  Daten                           an Pin D1
  und CLK                         an Pin D2


dort seien jetzt auch noch Leds drann. In der folgenden Aufstellung sei 
# eine LED die leuchtet (der Ausgang ist auf 1), bzw sei o eine LED die 
nicht leuchtet (der Ausgang ist auf 0)

                                    D2      D1      D0
                                   (CLK)   (DATA)  (ENB)
>
>  Out(888, 3)
3 ist binär 00000011, also           o       #       #

laut unserer Zuordnung von D2, D1 und D0 zu den Leitungen heisst das:
Enable ist auf 1, Daten auf 0, CLK auf 0.
Da Enable auf 1 ist, interessiert sich der IC für die anderen Leitungen 
nicht

>         Out(888, 2 + 4)

2+4 = 6, binär 00000110              #       #        0

Enable hat offenbar auf 0 gewechselt, d.h. der IC horcht auf die 
Leitungen. Aber auch CLK ist auf 1 gegangen. Aus dem Datenblatt wissen 
wir: Das darf er, der IC reagiert erst, wenn CLK wieder auf 0 geht

>         Out(888, 0 + 4)

0+4 = 4,  binär 00000100             o       #        o


Holla, genau das hat CLK jetzt gemacht: Von 1 auf 0 zu wechseln. D.h. 
der IC hat das was an DATA ansteht (nämlich eine 1) übernommen.

Von den 20 SChiegeregisterbits im IC

     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | 1 | X | X | X | X | X | X | X | X | X | X | X | X | X | ...
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+

hat das erste einen definierten Wert zugewiesen bekommen. VOn den 
anderen wissen wir nichts, daher hab ich ein X reingemalt

>         Out(888, 2 + 4)

2+4 = 6,  binär 00000110            #        #        o

gegenüber vorher ist CLK wieder auf 1 gegangen. Aus dem Datenblatt: das 
ist dem IC egal, da passiert nichts

>         Out(888, 0 + 4)

4,  binär 00000100                  o         #       o

wieder ist an CLK eine fallende Flanke aufgetreten, ein Übergang 1->0
Und wieder bedeutet er für das IC, dass es den an DATA anliegenden 
Zustand (eine 1) in das Schieberegister übernehmen soll.
Die 20 BIts im IC werden um 1 Stelle nach rechts geschoben, und die 1 
aus dem DATA Eingang kommt ganz links rein

Damit haben wir
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | 1 | 1 | X | X | X | X | X | X | X | X | X | X | X | X | ...
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+

und so gehts weiter und weiter, bis alle 20 Bits im Schieberegister 
gelandet sind.
#1805752
Lesenswert?

noob schrieb:
> wenn ich das mache kommt ...7 und wenn ich noch mal mach ....

Das Problem ist, dass du zwar ein 'Programm geschrieben hast' aber nicht 
weißt
* wie es funktioniert.
* was eigentlich an den 7-Seg rauskommen müsste.


Mein Rat steht immer noch:
Sieh zu, dass du

* dein Programm extrem langsam ablaufen lassen kannst
  Am besten wäre es, wenn du in Einzelschritten druchgehen kannst
  so dass du von einem OUT zum nächsten genau untersuchen kannst,
  was sich am Port tut und auch überlegen kannst, was das jetzt
  für das IC bedeutet.

* ein paar LED zusätzlich an den Ausgang bekommst, die dir anzeigen
  wie die betreffende Ausgangsleitung steht: leuchten für 1, nicht
  leuchten für 0
#1805767
Lesenswert?

noob schrieb:
> ok aber wo her wei? ich welche bits ich machen soll

Du weisst ja, was du ausgeben willst.

Im Datenblatt ist eine Tabelle

   0000   0
   0001   1
   0010   2
   0011   3
   ....


d.h. mit jeweils 4 Bit steuert man eine Anzeige an

Wenn die erste Stelle links eine 3 anzeigen soll,

   0011   3

dann muss ins Schieberegister

     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | 0 | 0 | 1 | 1 | X | X | X | X | X | X | X | X | X | X | ...
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+

     | 4 Bits für    | 4 Bits für    |  4 Bits für   |  4 Bits ...
     | die 1.te 7Seg | die 2.te 7Seg | die 3.te 7Seg |  die 4.te ..


die 4 Bits, die für diese Stelle zuständig sind, sind auf 0011, genau 
wie es die Tabelle vorschreibt. (und praktischerweise ist das dann auch 
die interne Darstellung einer 3 im PC)


Steht alles im Datenblatt. Zum Teil auch mit Zeichnungen, damit es die 
des Englischen nicht mächtigen Japaner auch begreifen.
#1805774
Lesenswert?

noob schrieb:
> und die anderen stellen sind für die anderenn segemente ?

Spätestens jetzt ist es hoch an der Zeit wieder einen Blick ins 
Datenblatt zu werfen.
Da sind Zeichnungen und Tabellen drinn, für diejenigen die nur Japanisch 
oder Kisuaheli lesen können. Nur mit den Zeichnungen/Tabellen alleine 
kann man verstehen (wenn man ein wenig darüber nachdenkt) wie das 
funktioniert.
#1805789
Lesenswert?

noob schrieb:
> ich habe es geschaff eine drei zumachen

Möglich.

>         Out(888, 3)
>         Out(888, 2 + 4)
>         Out(888, 0 + 4)
>         Out(888, 2 + 4)
>         Out(888, 0 + 4)

Aber sicher nicht mit dem hier angegebenen Programm. Bzw. Wenn diese 5 
Zeilen zu einer 3 an den 7-Seg führen, dann höchstens zufällig. Vor 
allen Dingen deshalb weil

* du nur 2 Bits ausgibst
* die eigentliche 7-Segment Anzeige erst dann auf die neue Bitsituation
  im Schieberegister reagiert, wenn Enable wieder auf 1 gezogen wird.
  Und auch davon ist in dem 5-Zeiler nichts zu sehen
#1805795
Lesenswert?

noob schrieb:
> das solte ne 1 sein ist aber ne sieben ...
1
     Out(888, 2 + 4)            // 1. Bit ausgeben
2
         Out(888, 0 + 4)
3
         Out(888, 2 + 4)        // 2. Bit ausgeben
4
         Out(888, 0 + 4)
5
         Out(888, 2 + 4)        // 3. Bit ausgeben
6
         Out(888, 0 + 4)
7
         Out(888, 3)            // zur Anzeige duchschalten
8
         Out(888, 2 + 4)
9
         Out(888, 0 + 4)

4 Bits!
Du brauchst 4 Bits für eine Stelle! Nicht 3

> ne 1 sein

Für eine 1 musst du die Bits  0001  an das IC übergeben. Wo genau machst 
du das? Du schiebst 3 mal ein 1-Bit raus!

bei 0001

ist die Reihenfolge   ein 1 Bit rausgeben. Dazu muss DATA auf 1 sein!
                      ein 0 Bit rausgeben. Dazu muss DATA auf 0 sein!
                      ein 0 Bit rausgeben. Dazu muss DATA auf 0 sein!
                      ein 0 Bit rausgeben. Dazu muss DATA auf 0 sein!


Diese beiden Anweisungen zusammen
1
         Out(888, 2 + 4)
2
         Out(888, 0 + 4)
schieben ein 1 Bit in das Schieberegister.
Diese beiden Anweisungen zusammen
1
         Out(888, 2 + 0)
2
         Out(888, 0 + 0)
schieben eine 0 in das Schieberegister.
#1805812
Lesenswert?

Diese beiden Anweisungen zusammen
1
         Out(888, 2 + 4)
2
         Out(888, 0 + 4)
schieben ein 1 Bit in das Schieberegister.

Diese beiden Anweisungen zusammen
1
         Out(888, 2 + 0)
2
         Out(888, 0 + 0)
schieben eine 0 in das Schieberegister.

Noch einfacher kann ich es dir jetzt wirklich nicht mehr machen. Jetzt 
mutiert das alles zu 'Malen nach Zahlen'. Du brauchst nur noch 
Codebausteine zusammenzusetzen
#1805817
Lesenswert?

noob schrieb:
> ist das so richtig
mal sehen

>  Out(888, 3)
>         Out(888, 2 + 0)      eine 0
>         Out(888, 0 + 0)
>         Out(888, 2 + 0)      noch eine 0
>         Out(888, 0 + 0)
>         Out(888, 2 + 4)      eine 1
>         Out(888, 0 + 4)
>         Out(888, 2 + 0)      und eine 0
>         Out(888, 0 + 0)
>         Out(888, 3)


wenn ich die in der Reihenfolge in der sie eingeschoben werde aufmale

zuerst die 0                       0
dann eine 0 nachegschoben          00
dann kommt eine 1                  100
dann wieder eine 0                 0100

das ist dann wohl nicht ganz 11 :-)
#1805828
Lesenswert?

noob schrieb:
> das war die 2

Ja.
Das stimmt auch mit der Figure 1 aus dem Datenblatt überein, nach der 
das LSB bei den jeweiligen 4 Bits links steht.
Ist mir bisher entgangen. Aber eigentlich bist ja du der Datenblattleser


 Also

 Im Schieberegister muss

     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+
     | 1 | 1 | 0 | 0 | X | X | X | X | X | X | X | X | X | X | ...
     +---+---+---+---+---+---+---+---+---+---+---+---+---+---+

eingeschoben werden, damit das als

   0011 (oder '3') angesehen wird.

Die rechte Stelle der 4-er Gruppe wird als letztes eingeschoben.

Deine Sequenz schiebt

    0010

ins Schieberegister und das ist laut Tabelle tatsächlich eine 2
#1806055
Lesenswert?

noob schrieb:
> nix nur das meine segement anzeige beim pc start zahlen aus gibt und ich
> wollt wissen warum

Warum fragst du das dann nicht gleich so?

Die Antwort:
Weil sich da wohl der BIOS Hersteller eine Debug Möglichkeit eingebaut 
hat, wie er den Service Technikern ein Instrument in die Hand geben 
kann, damit die beim Booten verfolgen können, welche Teile noch 
durchlaufen, welche nicht, und welche fehlerhaft arbeiten.

Und das ganze indem man ein Gerät an den LPT ansteckt auf dem diese 
Codes erscheinen.

Also wohl eine Variante hiervon
http://www.pchell.com/hardware/beepcodes.shtml

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