"We are back" « oc.at

Serielle Schnittstelle

Der Arnobär! 29.02.2004 - 15:37 1198 19
Posts

Der Arnobär!

Little Overclocker
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
OS?

Der Arnobär!

Little Overclocker
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
Win98, da es ja unter WinXP ohne treiber ned funzt... :(

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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
Registered: May 2000
Location: ~
Posts: 5020
Hat das schon mal wer für Linux gemacht? Bin gerade dabei sowas fuer eine Costum VR hardware anzufangen ...

Der Arnobär!

Little Overclocker
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
@Ringding
thx für den tipp,
es ist aber gar ned so leicht darüber was zu finden...

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
@atrox
Also ich hab:
DTR ...clock?
TxD ...data
RTS ...strobe
GND ...ground

mit meiner Testschaltung verbunden. Ich hab jetzt einfach mal mein Multimeter an die Pins des SUB-D Steckers geklemmt. :D

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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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 :( 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
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
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 :)

... 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...

click to enlarge

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
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

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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Dec 2002
Location: NÖ/Elsbach
Posts: 79
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
nein, txd ist ein ausgang, es mach imho keinen sinn den künstlich zu belasten. zum erkennen einer apparatur am port ist DSR da.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz