RS232 / seriale Schnittstelle / COM-Port ansprechen
Übersicht

BadDeathBetreff: RS232 / seriale Schnittstelle / COM-Port ansprechen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kennt ihr noch die RS232-Schnittstelle, dieses kleine 9-polige Etwas auf eurem Motherboard? Die ist nämlich für viele tolle Sachen gut, auch wenn sie heute schon vom Aussterben bedroht ist...
Mit ihren 3 Ausgängen und 4 Eingängen lässt sie sich ideal zum Experimentieren verwenden. Es lassen sich z.B. Temperaturen messen, kleine automatische Ampeln bauen, Widerstände und Kondesatoren messen, eine "Soundkarte" und Radio bauen und vieles mehr! ![]() Burkhard Kainka hat eine DLL geschrieben, mit der sich die Ausgänge getrennt steuern lassen, Zeitmessungen durchgeführt werden kann und die Zustände der Eingänge abgefragen werden kann. Und für diese DLL habe ich eben eine UserLib für BB3D geschrieben und ein kleines Beispiel. Userlib: Code: .lib "Port.dll"
OpenCom%(Com$):"OPENCOM" CloseCom%():"CLOSECOM" SendByteCom%(Byte%):"SENDBYTE" ReadByteCom%():"READBYTE" DTR%(Val%):"DTR" RTS%(Val%):"RTS" TXD%(Val%):"TXD" CTS%():"CTS" DSR%():"DSR" RI%():"RI" DCD%():"DCD" DelayCom%(Milli%):"DELAY" DelayUSCom%(Milli%):"DELAYUS" TimeenitCom%():"TIMEINIT" TimeInitUSom%():"TIMEINITUS" TimeReadCom%():"TIMEREAD" TimeReadUSCOM%():"TIMEREADUS" RealtimeCom%(Bool%):"REALTIME" Beispiel: Code: ;Erstmal einen Port öffnen:
;Wenn der Erste nicht geht, wird der 2. ;versucht. Sollte dieser auch nicht gehen, ;kommt ein Runtimeerror. Die Funktion ;OpenCom() gibt auch ein Handle zurück. ;Man kann schlicht und einfach "COM1" ;nehmen oder auch z.B. "COM1,1200,N,8,1". ;COM1 = zuöffnender Port ;1200 = Bitrate (Baud) ;N = Parity ;8 = Bits ;1 = Stopbits If Not OpenCom("COM1") If Not OpenCom("COM2") RuntimeError ("Fehler beim Portöffnen!") Else AppTitle "COM-Port: 2" End If Else AppTitle "COM-Port: 1" End If Local vTXD% Local vRTS% Local vDTR% While Not KeyHit(1) Cls ;Zustandsanzeige der Ausgägnge Text 10,10, "Ausgägnge:" Text 20,25, "TXD (1): " + vTXD Text 20,40, "RTS (2): " + vRTS Text 20,55, "DTR (3): " + vDTR ;Zustandsanzeige der Eingänge Text 10,80, "Eingänge:" Text 20,95, "CTS: " + CTS() Text 20,110,"DSR: " + DSR() Text 20,125,"DCD: " + DCD() Text 20,140,"RI: " + RI() ;Umschalten der Ausgänge If KeyHit(2) Then vTXD = Not vTXD If KeyHit(3) Then vRTS = Not vRTS If KeyHit(4) Then vDTR = Not vDTR ;Ausgänge aktualisieren TXD(vTXD) RTS(vRTS) DTR(vDTR) Wend ;Port schließen und Programm beenden CloseCom() End Die DLL mit Beispiel-Datein für VB6 gibt es auf der Homepage von B. Kainka. Das Buch kann ich nur weiterempfehlen, denn dort sind nicht nur die Codes erklärt, sondern auch der Quellcode der DLL und Schaltpläne - aber alles recht einfach erklärt. ISBN: 978-3-89576-113-3 Nachtrag: Ich experimentiere gerne mit dieser Platine, sie lässt sich leicht selbst löten und bietet viele Steckplätze. |
||
-~= real coders just code in binary =~- |
- Zuletzt bearbeitet von BadDeath am Fr, Aug 29, 2008 17:12, insgesamt 2-mal bearbeitet
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
PCI Boards mit RS Schnittstelle gibt es in jedem guten Online Shop. ![]() |
||
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
... oder auf einigen Boards, wie bei meinem Asus A8N-SLI. Aber die virtuellen USB -> COM-Adapter sind für Echtzeitprojekte wie Widerstandsmessung glaube ich zu langsam. | ||
-~= real coders just code in binary =~- |
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Für statisch nicht, für Oszilatoren ja. | ||
Coffee |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oO eine fertiglösung
jetz hab ich für jugend forscht alles selber geschrieben *lol* |
||
*Mjam* |
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, vielleicht bin ich ein Noob aber ich frage trotzdem mal:
1. Du schreibst zu Beginn 9-Polig und dann 3 Ausgänge & 4 Eingänge -> 2 Pole tot? 2. Wie spreche ich jetzt z.b. Pol 1, Pol 2,... an? MfG DjDETE |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu 2:
Zitat: Userlib:
SendByteCom%(Byte%):"SENDBYTE" ReadByteCom%():"READBYTE" Edit: Zu 1 hilft Google oder Wikipedia http://de.wikipedia.org/wiki/E...nd_Stecker Ist wohl klar, das du GND z.B. nicht Ansprechen kannst, oder ? |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
- Zuletzt bearbeitet von Lunatix am Sa, Okt 18, 2008 15:07, insgesamt einmal bearbeitet
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich hat nur eine Leitung keine Funktion der Datenübertragung. Dieser Pin, der 5., ist die Masse. Der zweite Pin, RxD, ist die serielle Empfangsleitung und wird in dem Buch auch benutzt, aber nur wenn es eben um Datenübertragung z.B. über Infrarot geht, ist aber auch ein Eingang.
Die einzelnen Pins spricht man über ihre Namen an. So ist der erste DCD und dessen Zustand lässt sich über die bool'sche Funktion DCD() abfragen. Möchte man die dritte Leitung, also TxD, öffnen oder schließen, ruft man TXD(1) bzw. TXD(0) auf. Bei Wikipedia findest du die einzelnen Leitungen mit ihren Namen und die Anordnung: http://de.wikipedia.org/wiki/E...nd_Stecker |
||
-~= real coders just code in binary =~- |
DjDETE |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ![]() |
||
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden. |
![]() |
ChristophBetreff: Beide COM-Ports parallel ansprechen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich beschäftige mich zur Zeit mit den COM-Ports des PCs und bin auf das Problem gestoßen, dass ein COM-Port zu wenig Eingänge für mein Vorhaben hat. Jetzt würde ich gerne beide COm-Ports parallel ansprechen um die doppelte Anzahl an Ein- und Ausgängen zu benutzen. Mein Problem ist jetzt, dass Opencom zwar ein Handle zurückliefert, jedoch die Ein und Ausgangsfunktionen keinen Parameter für ein Handle besitzen. Kann ich die decls so umändern, dass das funktioniert? |
||
TproBetreff: Messdaten vom ATmega 32 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi
Ich verwende den ADC von einem ATmega32 um Messdaten zu erfassen und sie via UART (~RS232) über einen entsprechenden USB adapter der einen COM Port simuliert an den PC zu senden. Das funktioioniert auch hervorragend solange ich das ganze mit dem Hyperterminal auslese. Der Befehl ReadByteCOM() funktioiniert allerdings nicht. da bekomme ich immer nur verschiedene Werte zurück die nicht dem gesendeten entsprechen. hier der BB code: Code: com=OpenCom("COM9,115200,N,8,1") Print com While Not KeyHit(1) wert=ReadByteCom() Print wert Wend CloseCom() End und der Bascom code (das was auf dem µC läuft) Code: $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 115200 '9600 Config Adc = Single , Prescaler = Auto 'ADC anwerfen Start Adc dim wert as word dim test as byte Do test = 150 print test Loop End statt den hier gesendeten 150 kommt irgendwas um 50 an, dieser Wert schwank auch noch. Kann mir irgend wer erklären wo das Problem liegt? Mal abgesehn davon wäre das sicher auch ein gute Lösung für Christoph, wenn du einen Microcontroller (µC) verwendest dann hast du das Problem mit den wenigen IO-Ports nicht so schnell wieder... (der ATmega hatt 40 davon) Danke im Vorraus |
||
Der Optimist: "Das Glas ist halb voll"
Der Pessimist: "Das Glas ist halb leer" Der Ingenieur: "Das Glas ist doppelt so groß wie es sein müsste" |
![]() |
hazumu-kun |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf ich den seriellen Druckerport empfehlen.
Hab mir mit dem Byte an ausgangsleitungen mal en LED Lauflicht gebastelt. |
||
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann -> nicht omnipotent |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
hier steht eine Hardware, die ist schon etwas älter und wurde ursprünglich in Q-Basic geschrieben (diese Uralt Sprache) nunja da steht Zitat: Open "COM1:2400,N,8,2,CS10000,DS" AS#1
Hinweis: COM1 = serielle Schnittstelle1 CS10000 = CTS wird maximal 10 Sekunden überprüft AS#1 = Ein- und Ausgangssignal 1 wie kann ich das denn jetzt mit der DLL umsetzen ? Wäre echt nett wenn jemand helfen könnte. Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
- Zuletzt bearbeitet von TimBo am Di, Jul 21, 2009 18:34, insgesamt einmal bearbeitet
BadDeath |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was ist denn mit "AS#1" gemeint? Dass alle Ausgänge auf 1 gesetzt werden?
Jedenfalls könnte ich mir für den Rest das so vorstellen: Code: OpenCom("COM1,2400,N,8,2")
Local CTSOn% = 0 Local StartZeit% = Millisecs() While Millisecs() - StartZeit =< 10000 If CTS() = 1 then CTSOn = 1 : Exit wend .... |
||
-~= real coders just code in binary =~- |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
danke für den Tipp, ich habe nochmal nachgelesen wie das im Englischen beschrieben ist, da steht AS#1 = input and output channel 1 vll. erkennt dann erst die Software, dass eine Verbindung zu ihr aufgebaut wurde denn: Wenn ich mit der Beiliegenden Software den Stream öffne und dann die Software beende, funktioniert der Kontakt, ich kann mit writebyte befehle senden, aber selber den Stream zu öffnen mit OpenCom("COM1,2400,N,8,2,CS10000") geht anscheinend nicht.... ![]() Need Help TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo zusammen
ich beschäftige mich jetzt auch seit einiger Zeit mit Seriellen-Schnittstellen, und ich habe mal eine Frage: Kann man auch verschiedene Spannungen an die Ausgänge anlegen? (Wenn ja wie? - Ich will +15V am ausgang haben...) Wikipedia konnte mir nicht helfen(http://de.wikipedia.org/wiki/EIA-232) -> oder ich habe es einfach nicht verstanden... ![]() Wäre über baldige Antwort sehr erfreut... Gruss RoLo |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group