RS232 / seriale Schnittstelle / COM-Port ansprechen

Übersicht BlitzBasic DLLs und Userlibs

Neue Antwort erstellen

 

BadDeath

Betreff: RS232 / seriale Schnittstelle / COM-Port ansprechen

BeitragMi, Aug 06, 2008 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Very Happy

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: [AUSKLAPPEN]
.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: [AUSKLAPPEN]
;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

BeitragMi, Aug 06, 2008 22:44
Antworten mit Zitat
Benutzer-Profile anzeigen
PCI Boards mit RS Schnittstelle gibt es in jedem guten Online Shop. Wink
 

BadDeath

BeitragMi, Aug 06, 2008 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
... 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

BeitragMi, Aug 06, 2008 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Für statisch nicht, für Oszilatoren ja.
 

Coffee

BeitragSa, Aug 09, 2008 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
oO eine fertiglösung
jetz hab ich für jugend forscht alles selber geschrieben *lol*
*Mjam*
 

DjDETE

BeitragSa, Okt 18, 2008 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 18, 2008 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 18, 2008 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Okt 18, 2008 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Very Happy
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.

Christoph

Betreff: Beide COM-Ports parallel ansprechen

BeitragMi, Apr 22, 2009 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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?
 

Tpro

Betreff: Messdaten vom ATmega 32

BeitragMo, Jul 20, 2009 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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: [AUSKLAPPEN]

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: [AUSKLAPPEN]


$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

BeitragDi, Jul 21, 2009 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jul 21, 2009 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jul 21, 2009 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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: [AUSKLAPPEN]
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

BeitragDi, Jul 21, 2009 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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.... Sad

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

BeitragSa, Jun 11, 2011 11:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Smile

Wäre über baldige Antwort sehr erfreut...

Gruss
RoLo

Neue Antwort erstellen


Übersicht BlitzBasic DLLs und Userlibs

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group