COM-Port programmieren Im Unterforum Alle anderen elektronischen Probleme - Beschreibung: Was sonst nirgendwo hinpasst
Autor |
|
|
|
BID = 7795
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
|
Hi
Ich hab mich im Internet schon ein bißchen schlau gemacht, aber zu einer wirklichen Lösung bin ich trotzdem nicht gekomme, ich will nämlich mit meinem Computer per serieller Schnittstelle mehrer LEDs ansteuern. Wie ich die Bits an die Ausgänge meines PCs kriege, weiß ich, und wenn ich mehr als die 3 Ausgänge vom RS232 haben will, brauch ich anscheinend ein Schieberegister und zur Pegelkonvertierung noch einen MAX232. Kann ich denn dann einfach mithilfe mehrerer Bitfolgen einfach in meinem Schieberegister die Bits einfach solange "durchschieben", bis die gewünschte Ausgangskombination erreicht ist? Oder muss ich dabei irgendwas besonders beachten? Oder geht es so überhaupt nicht?
Wäre für eure Hilfe echt dankbar, ich such mir nach Informationen zu speziell diesem Thema schon langsam die Finger wund
CU
Gurney |
|
BID = 7806
Simpleton Aus Forum ausgetreten
|
|
Wenn du das serielle Datenwort, das über TXD raus geht, in ein paralleles Datenwort umwandeln willst (um zum Beispiel 8 LEDs mittels der 8 Bit des Datenwortes zu steuern), brauchst du dazu einen UART Baustein oder einen programmierten Microprozessor oder eine handvoll CMOS-Bausteine um den seriellen Empfänger/Parallel Umsetzer realisieren zu können. Mit CMOS ICs 4094, 4017 und 4093 lässt sich ein einfacher serieller Empfänger für 1200 Baud Übertragungsrate mit frei schwingendem Takt-Oszillator aufbauen. Wenn du es schneller haben willst, wird es mit den einfachen CMOS Chips entsprechend komplizierter und du musst einen quarzgesteuerten Taktgenerator und Teiler einsetzen.
Bei Bedarf kann ich mal sehen, ob ich den Artikel zu dem 1200Baud Empfänger noch finde... |
|
BID = 7809
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
In diesen Foren sind verschiedentlich die Steuerleitungen wie DTR, RTS, CTS, der RS232-Schnittstelle als "mißbraucht" worden, um damit irgendetwas zu bewerkstelligen.
Du kannst damit aber tatsächlich so einfach wie es Dir vorschwebt Schieberegister, etwa ein oder mehrere 74HC164 oder CD4094, laden, wenn Du das beachtest, was ich weiter unten über die Logikpegel schreibe.
Von einer richtigen seriellen Datenübertragung kann bei dieser Zweckentfremdung der Steuerleitungen natürlich keine Rede sein.
Wenn Du die serielle Schnittstelle wie vom Hersteller vorgesehen verwenden willst, dann reicht ein einfaches Schieberegister nicht aus, weil die Schnittstelle kein Taktsignal liefert. Das muß der Empfänger selber bereitstellen, und deshalb muß er unter anderem die Übertragungsgeschwindigkeit kennen.
Laut Norm beträgt der Sendepegel für eine "0" +3V..+15V und für eine "1" -3V..-15V.
Das bedeutet, daß sowohl die Treiber- wie auch die Empfängerchips die Daten invertieren.
Aufgrund der hohen Sendepegel brauchst Du für einen Empfänger nicht unbedingt einen speziellen RS323-Receiver-Chip, ein Schutzwiderstand 50..100 kOhm vor einem normalen CMOS Eingang tut es auch, invertiert aber natürlich nicht.
Eine Realisierung eines Empfängers mit einem Schieberegister (und einem Auffangregister) einem Zähler und ein paar Logik Gates ist möglich, aber nicht ganz trivial, wie Du gleich aus der Beschreibung des Übertragungsverfahrens sehen wirst.
Einen SIO-Chip wie er im PC eingesetzt ist, etwa den 14450, wirst Du nicht verwenden können, da solche Chips für das Zusammenspiel mit einer CPU entworfen worden sind.
Sie müssen also erst mit einigen Daten programmiert werden, sonst tut sich nichts.
Deshalb sind für solche Aufgaben heutzutage ein Ein-Chip-Microprozessoren, wie etwa die PIC-Typen der Firma Microchip, das Mittel der Wahl.
Im Ruhestand befindet sich auf der Leitung eine logische "1", die Leitung führt also negative Spannung. Du kannst das ja mal nachmessen.
Wenn der Sender nun ein Byte übertragen möchte, so schickt er als erstes für eine Bitzeit, also 0,8ms bei 1200 Baud, eine "0", das sogenannte Startbit. Dadurch wird der Empfänger aufgeweckt.
Danach schickt der Sender ohne weitere Pausen die, je nach Einstellung 7 oder 8, Datenbits, falls bestellt das Paritätsbit, und zum Schluß für mindestens eine Bitzeit wieder die Ruhepolarität, das ist dann das sogenannnte Stop-Bit.
Beim Empfänger passiert folgendes:
Solange auf der Leitung eine "1" liegt, döst er einfach weiter.
Sobald die "0"-Polarität (auf der Leitung positive Spannung, am Chip wegen der Inverter Low) kommt, wartet er eine halbe Bitzeit und sieht dann, in der Mitte des Startbits, nochmal nach. (Falls dann wieder "1" anliegt schläft er wieder ein.)
Normalerweise aber wird jetzt ein interner Taktgeber und Zähler gestartet, der dann, zeitlich in der Mitte der Bits, die Daten in ein Schieberegister taktet.
Für das obige Beispiel 8-Datenbits, 1 Parity, 1 Stopbit, müßte also ein 10-Bit Schieberegister verwendet werden.
Wenn das Stopbit eingeschoben worden ist, wird der Inhalt des Schieberegisters sofort in ein paralleles Ausgaberegister übertragen, wo es solange zur Verfügung steht, bis ein neues Wort empfangen worden ist.
Die Speicherung des Parity und des Stopbits ist nicht lebensnotwendig, man macht beides, um Störungen bei der Übertragung erkennen zu können.
Wie Du nun sicher erkennst, ist der Entwurf einer solchen Logik nicht ganz einfach, während es programmtechnisch lediglich eine Fingerübung ist.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 7816
Simpleton Aus Forum ausgetreten
|
@Perl
Danke für die Erklärung der RS232 Parameter/Übertragunsverfahren etc.
Erlaube mir dagegen zu setzen, dass die Schaltung, die ich da im Kopf hatte, wirklich relativ trivial ist und sie läuft auch ohne Microprozessor oder UART. Schau doch mal drüber und gib deine Meinung dazu ab. Immerhin gibt es auch Leute wie mich, die eine diskrete Elektronik gegenüber einem Microcontroller bevorzugen.
Es führen bekanntlich viele Wege nach Rom. Und wie du zustimmen wirst ist Perl's Weg nur einer davon.
Nichts für ungut.
MfG
Stephan
[ Diese Nachricht wurde geändert von: Simpleton am 21 Nov 2002 12:35 ]
|
BID = 7818
Simpleton Aus Forum ausgetreten
|
@Gurney
Hier die versprochenen Unterlagen.
Ich hoffe diese Schaltung hilft dir weiter.
Stephan
Auszüge aus dem Buch 'Messen Steuern und Regeln mit der RS232 Schnittstelle', erschienen im Franzis-Verlag, ISBN 3-7723-6056-4, Preis ca 35 Euro
Bei Fragen wende dich ruhig per PM oder Email an mich.
Uploaded file: Simpler RS232 RX+TX mit CMOS.zip
[ Diese Nachricht wurde geändert von: Simpleton am 21 Nov 2002 12:36 ]
|
BID = 7820
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
Danke für eure schnellen (und umfangreichen) Antworten ! Ich brauche allerdings eine sehr schnelle Übertragungsgeschwindigkeit und hatte mir gedacht, da ich mir bereits ein einfaches Testprogramm zum Ansteuern von 2 LEDs geschrieben hab, dass die Ausgänge einzeln ein-und ausschaltet (was auch funktioniert ), dass ich mithilfe des Ein-und-Ausschaltens der Ausgänge direkt die Bits in das Schieberegister schieben könnte, vorrausgesetzt natürlich, es interpretiert eine steigende Flanke als 1 und eine fallende als 0 (oder halt umgekehrt). Ich muss den Zustand des Schieberegisterausgangs innerhalb von wenigen Millisekunden - evtl. auch weniger - ändern können. Geht das wohl, oder muss ich das auf jeden Fall eine von euren Lösungen nehmen? Ach ja, und der Anschluss an den PC ist eigentlich nur zu Testzwecken, irgendwann (in ferner Zukunft), soll das ganze vom PC unabhängig mit einem µProzessor gesteuert werden, aber soweit bin ich längst noch nicht
|
BID = 7821
Simpleton Aus Forum ausgetreten
|
Dann kommst du um einen Aufbau mit Microprozessor nicht herum. Ist nicht mein Gebiet.
Es wäre allerdings einfacher gewesen, wenn du die Parameter der von dir gewünschten Schaltung vorher genauer spezifiziert hättest. Es war da nichts zu lesen von 'hoher Geschwindigkeit'.
Tut mir leid, aber eine Antwort kann nur so genau sein wie die Frage. Nichts für ungut.
Du könntest dir aber mal die Beschreibung dieser Schaltungen genau durchlesen, dann wirst du feststellen, dass du mit Zwei Leitungen (eine für Takt und eine für das Datenwort) den 4094 direkt ansteuern kannst - mit schätzungsweise 1Mhz oder mehr Taktfrequenz.
Das Datenblatt zum CD4094 müsste irgendwo im Netz aufzutreiben sein.- Aber die Triggerung (welche Flanke das Datenwort übernimmt) geht auch schon aus der Schaltungsbeschreibung hervor.
Stephan
|
BID = 7824
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
Sorry, dass ich das mit der hohen Geschwindigkeit vorher nicht erwähnt habe, war meine Schuld . Aber eure Tipps sind natürlich trotzdem sehr hilfreich Ich denke, ich werde versuchen, das Schieberegister direkt anzusteuern, dann kann ich den Takt per Software bestimmen, was mir (bislang) mehr liegt als die Elektronik, hab früher hobbymäßig fürs Spieleprogrammieren C++ gelernt, die Sprache ist also auch kein Problem, aber in der Elektronik (auch Hobby) hab ich noch wenig Erfahrung.
Danke für eure Hilfe
Gurney
|
BID = 7825
Benedikt Inventar
Beiträge: 6241
|
Andere Frage:
Spricht was gegen den LPT Port ?
Damit hat man 12 Leitungen, die man einzeln ändern kann, und das 100tausend mal die Sekunde...
|
BID = 7833
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
12 Ausgänge? Das hört sich wirklich ziemlich gut an. Ich wusste zwar, dass die parallele Schnittstelle mehr hat als die serielle, aber soviele mehr... Hm, werd mal nach der Pinbelegung schaun.
|
BID = 7836
Benedikt Inventar
Beiträge: 6241
|
Pin 2-9 sind die 8Bit Datenleitungen.
Pin 1, 14, 16, 17 Control Leitungen. (als Ausgänge oder Eingänge verwendbar)
Pin 18-25: Masse
Die 5 restlichen Pins sind Eingänge.
|
BID = 7857
simon Gerade angekommen Beiträge: 15 Wohnort: Schweiz
|
@Gurney
Ich habe vor kurzem (mit grosser Hilfe von Jornbyte) eine Schaltung und auch ein C++-Programm aufgebaut, mit dem ich über einen µC einen Mikrocontroller ansteuere. Ich kann die sowohl die Schaltung, das µC Programm, als auch ein kleines C++-Programm für die serielle Übertragung geben.
Das direkte Anschliessen des Com-Ports an das Schieberegister läuft nicht mit jedem SR. Denn der Com-Port sendet nur schon beim Setzen/Löschen mit einem Protokoll das vom SR nicht verstanden wird. Habe es auch versucht und mein SR hat verrückt gespielt.
simon
PS: bei C++ würde ich das ActiveX-Steuerelement MSCOMM benutzen, da alles andere bei mir nicht geklappt hat.
[ Diese Nachricht wurde geändert von: simon am 22 Nov 2002 8:00 ]
|
BID = 8042
Gast Nichtregistrierter Benutzer |
Es geht auch ohne Mikrocontroller, aber UART muß sein.
Richtig, 16550 geht nicht, der hat einen Mikroprozessor-Bus. Aber wie wäre es mit einem CDP6402? Das ist ein UART, der auf einen Betriebsmodus 'verdrahtet' werden kann. Sozusagen ein standalone-RS232-8-Bit-Parallel-Wandler. Max232 muß natürlich auch noch sein.
Stef(an).
|
BID = 9738
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
Hi
Bei meinem Computer gibt es ein Problem, nämlich das ich den Ausgang RTS nicht ansteuern kann, TXD und DTR gehen. Das Problem tritt sowohl unter DOS als auch unter Windows auf, bei beiden COM-Ports. Das Kabel ist auch in Ordnung. Ist das normal? Muss ich da noch was besonderes einstellen? Oder ist der RTS irgendwie besonders?
|
BID = 9938
Gurney Gesprächig
Beiträge: 193 Wohnort: Stuttgart
|
Hat sich erledigt, war nur wieder zu blöd . Das mit dem Schieberegister funktioniert jetzt wunderbar
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag heute wurden bisher 17 Beiträge verfasst © x sparkkelsputz Besucher : 182423496 Heute : 2538 Gestern : 5459 Online : 381 29.11.2024 14:20 3 Besucher in den letzten 60 Sekunden alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0384519100189
|