Der Arnobär!
Little Overclocker
|
Hi Leutz,
Ich will ein 8bit Schieberegister (4094) über die Serielle Schnittstelle ansprechen. Nur leider klappt das noch nicht so ganz.
Wie muss ich die Serielle unter C / C++ ansprechen damit ich das Schieberegister direkt ansteuern kann... (hängen 8 LED's an den 8 parallelen Ausgängen).
Unter C habe ich es mit dem befehl _outp(); versucht, scheint aber nicht zu funzen...
_outp(0x3F8, 0xD1); ...0x3F8 für COM1 / 0xD1 für irgendwelche daten
Kennt sich jemand von euch damit aus, oder kennt gute Links dazu, ich hab nämlich wirklich nichts aufschlussreiches gefunden... *frustrated*
Ich hoff mir kann da wer weiterhelfen.
|
Ringding
Pilot
|
OS?
|
Der Arnobär!
Little Overclocker
|
Win98, da es ja unter WinXP ohne treiber ned funzt...
|
Ringding
Pilot
|
Such dir erst mal eine gute Doku zur Programmierung der seriellen Schnittstelle. In PC Intern 4 war eine gute drin, sonst weiß ich nix. Musst du selber suchen.
|
SYSMATRIX
Legend Legend
|
Hat das schon mal wer für Linux gemacht? Bin gerade dabei sowas fuer eine Costum VR hardware anzufangen ...
|
Der Arnobär!
Little Overclocker
|
@Ringding thx für den tipp, es ist aber gar ned so leicht darüber was zu finden...
|
atrox
in fairy dust... I trust!
|
also im tutorial thread hab ich ein paar links, wie man serielle anspricht, schon vor längerem hineingestellt.
ABER HALT!
wie hast du/willst du das 4094 an der seriellen anschliesen? nachdem du vermultich nur eine asynchrone serielle ohne clock signal hast: selbst wenn du strobe und output-enable auf high ziehst, brauchst du immer noch ein clock und ein data signal - das wirst du wohl mit den handshake-signalen emulieren und den UART (RX/TX) damit praktisch umgehen, oder ?
PS: ich hätte sowas vermutlich zuerst an der parallelen schnitstelle versucht, da gäbe es ein strobe-signal daß sich prima misbrauchen ließe. ich setze als shift-rergister für gewöhnlich einen 74xx595 ein, aber für die serielle ist der CD4094 dem 74hcX4049 bzw dem xx595 wegen der höheren eingangsspannungen eindeutig überlegen. lass den aufbau jetzt aber so wie er ist, mit ein bishen bit-banging an den handshake-signalen sollte es genauso gehen.
Bearbeitet von atrox am 29.02.2004, 20:37
|
Der Arnobär!
Little Overclocker
|
@atrox Also ich hab: DTR ...clock? TxD ...data RTS ...strobe GND ...groundmit meiner Testschaltung verbunden. Ich hab jetzt einfach mal mein Multimeter an die Pins des SUB-D Steckers geklemmt. ![:D](/images/smilies/biggrin.gif) Bei Start meines Programmes flutscht der RTS von -12V auf +12V, der TxD pendelt zwischen 5-6V (beim Senden), was heist das er wohl was sendet (dank for-Schleife), nur der DTR geht von -12V auf +12V und tut nix mehr, darum bezweifle ich das der irgendwas clockt (hab nur wo gesehen das das clock sein soll)... Meinst du mit Bit-Banging von den DTR/RTS Handshakes sowas wie den DTR z.b. in gewissen abständen on/off zu schalten um ein künstliches clock zu erzeugen? Gibts davon wo ne Anleitung wie man sowas realisieren kann? Ich kenn mich mit der Materie leider ned so wirklich aus, bin dankbar für jede hilfe!
Bearbeitet von Der Arnobär! am 29.02.2004, 23:46
|
atrox
in fairy dust... I trust!
|
du wirst das TxD nicht verwenden können, das jagt die daten mit der eingestellten baud-rate raus, aber das shiftregister braucht für jedes bit einen clock. mit bit-banging meine ich genau das: zb data an dtr und clock an rts. für jedes bit setzt du nun dtr und schaltest rts kurz auf high und dann wieder auf low. weil du sonst keine leitungen mehr frei hast, wirst du den rest an defaults anschliesen müssen (strobe an high, oe an high usw...) wo hast du vcc angeschlossen ? die eingangssignale dürfen nämlich nicht höher werden als vcc. wie schützt du eingänge vor den negativen spannungen am seriellen port ? wenn du das nicht gemacht hat, ist der chip womöglich schon kaput ![:(](/images/smilies/frown.gif) je nachdem wie viel die schutzdioden im ic aushalten. letztere kann man oft auch direkt in die schaltungsüberlegungen miteinbeziehen: dh zb 10k-30k vor jedem eingang, und die schutzdioden leiten dann schon die negativen spannungen ab.
|
Der Arnobär!
Little Overclocker
|
Also ich hab DTR, TxD und RTS über jeweils einen 10k Widerstand mit den Pins am Schieberegister verbunden. Alle drei Pins sind dann noch zusätzlich mit jeweils einer Zenerdiode 4V7 gegen Masse verbunden um die ~5V TTL Spannung zu garantieren. Bei -12V hab ich -0,7V am IC Pin... Das heißt also ich brauche eigentlich nur zwei Leitungen zum übertragen, die ich einfach selbst steuern kann... Das macht die sache ja gleich viel einfacher ![:)](/images/smilies/smile.gif) ... Aber muss ich dem Register denn nicht sagen wenn ich die 8 bits hineingeschoben habe das es die übernehmen soll und an den Ausgängen speichern soll bis die nächsten 8 reingeschoben sind? o_O Dachte nämlich das da der Strobe oder der OutputEnable gut wäre...
|
atrox
in fairy dust... I trust!
|
so wie ich das verstanden habe, ist strobe pegelgesteuert und nicht flankengesteuert: dh du kannst es einfach an vcc hängen, damit es ständig durchschaltet. da das reinshiften wohl deutlich unter < 20ms in anspruch nehmen wird, wirst du mit dem freien auge den vorgang kaum mitbekommen (wenn du natürlich irgendeine machine steuerst, ist das natürlich nicht egal, aber fürs auge....)
sicherheitshalber nochmal ins datenblatt schauen, ob das wirklich so ist, hab grad keine zeit das nachzulesen.
edit: ja die schaltung ist schön aufgebaut, auch die pegel absicherung - mit der einschränkung, daß sich txd - wie oben erklärt- wegen der fehlenden clock nicht eignet.
Bearbeitet von atrox am 01.03.2004, 18:11
|
Der Arnobär!
Little Overclocker
|
ja, strobe scheine pegelgesteuert zu sein. Hab mir mit nem NE555 nen kleinen Taktgenerator gebaut (<1Hz) und den Strobe an Vcc gelegt, den Clock mit dem Takt des NE555 verbunden und den Data über Kabel per hand mal auf high und low gesetzt um das ganze mal durchzuspielen. Wenn ich den Data des Registers auf high setzte, sprang jeweil immer die erste Led an und das 'bit' schob sich schön durch ![:D](/images/smilies/biggrin.gif) Nur was ich noch nicht geregelt habe ist das "übergeben" an die Ausgänge. Müsste ich dafür nicht zeitlich alle 8 bit's den Strobe kurz auf high setzen um die Werte nur, nachdem die 8 bits's im Register sitzen, auf die Ausgänge übertragen? Also wenn ich '00000100' Senden würde, will ich ja auch nur das immer der 6. Pin auf high ist, was heist das ich den strobe triggern müsste... Könnte man das so realisieren das ich mit RTS glocke, mit DTR die bits setze und nach jeweils 8x bit setzen 1x über den TxD genau 1bit sende den ich mit Strobe verbunden habe um den zu triggern? EDIT: Was noch ein prob. ist, ist das wenn ich nur DTR und RTS ohne den TxD anhänge, der pc nichtmehr checkt das der port in use ist, konnte DTR und RTS nicht mehr auf high setzen da er keinen TxD erkennt... das bedeutet den müsste ich zumindest auf Masse schalten...?
Bearbeitet von Der Arnobär! am 01.03.2004, 18:43
|
atrox
in fairy dust... I trust!
|
wie gesagt, bei den meisten anwendungen ist es nicht so tragisch wenn man den vorgang des hineinschiftens sehen würde, weil es viel zu schnell geht, daß es das auge mitbekommen würde.
deshalb kann man strobe fix an vcc hängen
|
Der Arnobär!
Little Overclocker
|
Kann ich den TxD einfach mit Masse kurzschließen oder (oder über einen Widerstand), denn mein programm erkennt sonnst kein Gerät am Ausgang!?
|
atrox
in fairy dust... I trust!
|
nein, txd ist ein ausgang, es mach imho keinen sinn den künstlich zu belasten. zum erkennen einer apparatur am port ist DSR da.
|