Guten Tag,
gibt es eine möglichkeit den parallelport zu drosseln?
Projekt:
Eine Häuserlicht steuerung für die Modellbahn mit wenig Kabeln.
jedes hauß bekommt ein ystie 2x2x0,6 mit den Leitungen:
1 +
2 - (kommt vom vorherigem Häuser zähler)
3 Led An
4 Hausinterner Zähler
der p port soll mir einen 4017 zählen lassen.
Der 4017 kann nur bis ca 5mhz, der port macht aber weit mehr als 100mhz.
Lösungenidee:
1.
Ich könnte einen 5mhz takt an einen Eingang legen und bei jede pos.
Flanke verknüpfen.
2.
Mit der SLEEP funktion? wenn ich SLEEP 1 eingebe dann funktioniert alles
wie ich will, bloß vielviel zu langsam.
Könnt ihr mir eine Idee oder sogar eine Lösung geben?
Ich kann leider keinen Strobe Signal vom zähler oder andere IC`s
verwenden weil es mit 4017 verbaut ist.
Nick K. schrieb:> Der 4017 kann nur bis ca 5mhz,
In der alten CMOS-Version.
> der port macht aber weit mehr als 100mhz.
Ganz sicher nicht. Mit einfachem Bitbanging auf der PC-Seite ist es kaum
möglich, damit mehr als 1 bis 2 MHz zu erzeugen, auch wenn der PC selbst
mit zig GHz getaktet wird.
Die Maßeinheit schreibt sich übrigens mit großem "M": MHz (Megahertz).
Mit kleinem "m" geschrieben mHz wären es Millihertz - das ist ein
Milliardstel von einem Megahertz.
Danke für die antworten.
Könnt ihr mir bitte erklären warum es funktioniert wenn ich den befehl
SLEEP 1
benutze?
ohne den befehl geht nix.
was mache ich falsch?
welchen 4017 soll ich nutzen? ist ja noch tauschbar weil sicherlich die
Pin belegung gleich bleibt.
Ja sorry ich meine Mhz.
Weil dein Anschlußkabel und Schaltung schlechte elektrische
Eigenschaften haben bzw. die Schaltung einfach schlecht ist.
Sagt zumindest meine Glaskugel. Die ist so schlecht, daß du noch nicht
mal einige 10-100kHz übertragen kannst. Und wenn du Sleep benutzt sind
es nur noch unter 1kHz.
Portbelegung:
Ausgang 1(bitadresse-1) = LED AN
Ausgang 2(bitadresse-2) = Zähler im Haus
Ausgang 3(bitadresse-4) = Zähler der die Häuser bestimmt.
Ausgang 4(bitadresse-8) = Reset
mein program im kurzen:
Do
Out(888),0
Out(888),3
Out(888),0
Out(888),3
Out(888),0
Out(888),2
Out(888),0
Out(888),2
Out(888),0
Out(888),2
Out(888),0
Out(888),2
Out(888),1
Out(888),8
Loop
Jetzt sollte beim 2ten Haus die LED 4 leuchten.
dafür gibt es am parallelport die pins 1, 10 und 11. (1 am PC ausgang,
10 und 11 eingang) - wenn das sendende programm gut geschrieben wurde
bekommt man dami eine beliebig langsame übertragung zustande
Abend.
kann es sein das ich wirklich zu wenig geschirmt habe?
auf meinem testboard hab ich nur ungeschrimte drähte.
aber an meinem programm is nix falsch?
zu den Häusern liegen 2 verschiedene Kabeltypen, einmal ein 4x2 cat7
Kabel oder ein 2x2x0,6 ystie(telefonkabel)
bitte werft doch mal paar probleme in den raum:(
achja eins noch: was, bitte, ist ein ystie ?
> jedes hauß bekommt ein ystie 2x2x0,6 mit den Leitungen:http://www.bing.com/search?q=ystie&form=MOZSBR&pc=MOZI
Kannst Du eine Schaltplanskizze anfertigen und uns deine Software näher
bringen. Die Software wird ja nicht nur aus den paar Zeilen OUT(888)
bestehen, oder?
Neben der Schaltplanskizze wäre auch ein Photo vom tatsächlichen Aufbau
hilfreich. Nicht alles, was im Schaltplan toll aussieht, muss auch in
der Realität so umgesetzt sein ...
http://retired.beyondlogic.org/ecp/ecp.htm
Du kannst zwischen den "outs" etwas rechnen. Verlangsamt auch. :)
Die Kabel müssen schon ordentlich geschirmt sein, wenns soo schnell
gehen soll. Muss es aber nicht.
http://de.wikipedia.org/w/index.php?title=Datei:IEEE1284-PrinterCableAB_pinout.jpg&filetimestamp=20070412153754
Wenn Du uns gesagt hast, womit Du proggrammierst, dann schauen wir mal,
ob es nicht ausnahmsweise ein "SLEEP 10ms" oder sowas gibt. ;)
Wenn Du 400hex (OUT(1912),3 etc.) auf deine Basisadresee oben drauf
legst und den Parallelport in den ECP mOdus schaltest, kannst Du tolle
Sachen anstellen,Link oben dabei...
Danke für die Antworten!
Ich programmiere mit qbasic und ja mehr programm ist noch nicht weil ich
es erstmal testen will, später wird da mal ne Tabelle drum gebastelt;)
J-Y(ST)Y 2x2x0,6 meinte ich.
Schaltplan lade ich dann mal hoch.
"Weil dein Anschlußkabel und Schaltung schlechte elektrische
Eigenschaften haben bzw. die Schaltung einfach schlecht ist."
Oder es wurde sich auf die Pullups im Parallelport verlassen, was auch
nicht gerade hilft.
Nick K. schrieb:> Danke für die Antworten!>> Ich programmiere mit qbasic und ja mehr programm ist noch nicht weil ich>> Schaltplan lade ich dann mal hoch.
du willst ersthaft eine neuentwicklung mit einer programmiersprache
machen, die vor 15 jahren zum letzten mal aktiv ausgeliefert wurde, nur
auf einem betriebssystem aus der gleichen zeit läuft und das man auf
moderner hardware (fast) nicht mehr zum laufen bekommt?
des menschen wille ist sein himmelreich
im ernst - ich würde dir folgenden plan vorschlagen:
1. du beschäftigst dich mit den grundlagen von mikrocontrollern
2. du baust dir eine µC schaltung, die vom pc steuerbefehle per rs232
entgegen nimmt (hier tuts auch ein usb-rs232 adapter) und dann an den
vier pins wackelt wie du es brauchst. eigentlich sollte dazu ein
tiny2313 oder so ausreichen.
3. du baust diese schaltung in deine modellbahnanlage ein
alternativen zu 2 und 3:
a) du baust die an den pc angebaute platine gar nicht und dafür eine
ganze hand voll slave-platinen, die dann per rs485 oder rs422 direkt vom
pc angesteuert werden (usb-rs232 peitsche + rs232-rs422 adapter oder
gleich in einem stück müsste es auch geben)
b) du baust schritt 2 wie oben beschrieben auf, dazu eine handvoll
slave-platinen mit einem geeigneten bus-system deiner wahl (rs422,
rs485, i2c, spi, ...)
Nick K. schrieb:> Ja Pullups habe ich nicht mit angebracht, werde es aber testen.
tut mir leid, aber ich kann hier beim besten willen keinen schaltplan
erkennen.
Braucht nicht unbedingt eine uC-Schaltung - irgendwas was GPIO über USB
zur Verfügung stellt würde da auch schon helfen (zB die üblichen
FTDI-Chips!)...
Aber wenn er nun schon mit OUT(888),3 soo schön direkt auf die Register
zugriff hat? warum nicht. Läuft da eben ne alte 386er Maschine mit 8MB
Ram und einer 40MB Platte. DANN kann er aber auch die Register
verwenden um sie einzulesen. Was liegt hier näher, als das Timer
Register selbst zu verwenden??
Der Timer sitzt an Adresse 0x40,(dezimal)64.
Also los:
1
dummy_read = INP(64)
2
los = INP(64)
3
DO
4
dummy_read = INP(64)
5
stop = INP(64)
6
d = los - stop
7
IF d < 0 THEN d = d + 256
8
LOOP WHILE d < 90
die 90 bestimmt, oft die Schleife ausgeführt wird, also wie lange
zwischen den "OUT(888),x" Befehlen gewartet wird.
Bist Du programmtechnisch in der Lage, eine Subroutine mit Qbasic zu
schreiben, wo Du das einbindest? Wäre praktisch. Sonst musst Du das
zwischen jeden "OUT(888),x" Befehl kopieren.
Soo - Port gedrosselt. Aufgabe erfüllt ;))
Axelr.(unangemeldet, sry))
Viel Erfolg noch :)
macht irgentiwe kein Sinn, sich den Kopf zu zerbrechen um sich zu
erinnern, wie das früher mit dem QBasic ging, wenn es eh keine Sau
initeressiert.
Die Option TIMER hatte ich zB. schlicht über die Jahre vergessen.
Na - egal...
Axelr.