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
> 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.
noob schrieb:> aber ich bin noch ein noob und habe nich so viel erfahrung in elektronik
Dann wirst Du sie erstmal für einige Monate beiseite legen müssen.
Du brauchst nämlich Grundlangen in HW und SW.
Peter
noob schrieb:> das programm sol so aussehen das da Buttons sint und wen ich da> raufklich soll dan die zahl erscheinen und ich habe keine ahnung wie das> geht -.-'
Keine Lust sich einzulesen, hoffnungsloser Fall oder Troll
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
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.
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.
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.
Wenn Du frustriert und müde bist, dann mach eine Pause.
Du packst das schon. Nur Mut.
Die Programmierstunde kostet Dich hier wahrscheinlich so um die 60 Euro.
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.
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?
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 :-)
noob schrieb:> ich habe d3 hinzu gefügt ist databit d3 richtig ?
Ja, klar. Du musst in Summe 16 Bits ausgeben! (eigentlich 20, wenn wir
die Position des Dezimalpunktes auch noch mit dazu nehmen).
Das Datenbit wir an die DATA Leitung angelegt und dann macht CLK zuerst
auf 1 und dann wieder auf 0.
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
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.
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.
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
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.
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.
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
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.
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.
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
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
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
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 :-)
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
Lehrmann Michael schrieb:> Hehe freut mich - war ja ne schwere Geburt =)
Warten wirs ab :-)
Geht ja noch weiter.
Ich kann die nächste Frage schon förmlich riechen :-)
als Beispiel: 32
32 / 10 -> 3
|
+----------+
v
32 - ( 3*10 ) -> 2 ==> 2 ausgeben, 3 ausgeben
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