thinBasic has serial communication module calle COMM
Check example in \thinBasic\SampleScripts\COMM\ directory that shows how to check COM ports for modem info.
Let me know.
Eros
Dear all,
I already made microcontroller module that work with RS485 protocol.
I need simple sample script in thin basic.
here is step by step my protocol:
--------------------------------
opening comm
change state of RTS pin for transmiting
send character "H" (without LF CR)
delay
change state of RTS pin for receiving
receiving data
delay
change state of RTS pin for transmiting
show the receiving data
closing comm
end
--------------------------------
in VB6 I use program like:
--------------------------------
Private Sub Command2_Click()
MSComm1.Output = "H"
Call Pause(0.2)
MSComm1.RTSEnable = True
Call Pause(0.2)
at = MSComm1.Input
Call Pause(0.2)
MSComm1.RTSEnable = False
Text1.Text = at
End Sub
--------------------------------
I hope with simple script I can develope my experiment.
thank
regard
hendryawan
thinBasic has serial communication module calle COMM
Check example in \thinBasic\SampleScripts\COMM\ directory that shows how to check COM ports for modem info.
Let me know.
Eros
www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000
Try this I dont know if it will work but it should be what you described
PS.. Have done any work with SPI bus?Uses "COMM","REGISTRY" Uses "Console" Dim Ports() As String Dim Buffer As String Dim N As Long Dim hComm As DWord hcomm = COMM_FreeFile ' ' Get all Serial ports and store in Ports array ' If Registry_PathExists("HKEYLM", "hardware\devicemap\serialcomm") Then Buffer = Registry_GetAllKeys("HKEYLM", "hardware\devicemap\serialcomm") EndIf Split(Buffer,$CRLF,Ports) For n = 1 To UBound(Ports) Ports(n) = Remain$(Ports(n),"=") Next 'Ready To Send (Output signal). '0 = Disable '1 = Enable '2 = Handshake '3 = Toggle COMM_Open("\\.\"+Ports(1) , hComm) If Err = 0 Then COMM_Set (hComm, %COMM_BAUD, 9600) COMM_Set (hComm, %COMM_STOP, 0) COMM_Set (hComm, %COMM_PARITYTYPE, 0) COMM_Set (hComm, %COMM_BYTE, 8) COMM_Set (hComm, %COMM_RTSFLOW, 1) COMM_Send(hComm, "H") Sleep (20) COMM_Set (hComm, %COMM_RTSFLOW, 0) If COMM_Get(hComm, %COMM_RXQUE) Then COMM_Recv(hComm, COMM_Get(hComm, %COMM_RXQUE), Buffer) End If Sleep (20) COMM_Set (hComm, %COMM_RTSFLOW, 1) If Buffer <> "" Then Print Buffer COMM_Close(hComm) End If PrintL Print "Finished....Press any Key" WaitKey(10) Stop
Last edited by Michael Clease; 16-02-2011 at 18:24.
Home Desktop : Windows 7 - Intel Pentium (D) - 3.0 Ghz - 2GB - Geforce 6800GS
Home Laptop : WinXP Pro SP3 - Intel Centrino Duo - 1.73 Ghz - 2 GB - Intel GMA 950
Home Laptop : Windows 10 - Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz, 2401 Mhz, 2 Core(s), 4 Logical Processor(s) - 4 GB - Intel HD 4400
Work Desktop : Windows 10 - Intel I7 - 4 Ghz - 8GB - Quadro Fx 370
I has been try to made the program with little bit strange.
here my code:
in my code I found a strange condition, the command line is :'============================================================== ' Empty GUI script created on 02-16-2011 16:53:01 by (ThinAIR) ' programming for RS485 communication Uses "COMM" Uses "CONSOLE" Dim hcomm As Long Dim sBuffer As String '---Get Comms file number and assign hcomm = COMM_FreeFile '---Set up all comms parameters COMM_Set( hcomm, %COMM_BAUD, 4800 ) COMM_Set( hcomm, %COMM_BYTE, 8 ) COMM_Set( hcomm, %COMM_NULL, FALSE ) COMM_Set( hcomm, %COMM_PARITY, FALSE ) COMM_Set( hcomm, %COMM_PARITYTYPE, 0 ) COMM_Set( hcomm, %COMM_STOP, 0 ) COMM_Set( hcomm, %COMM_RXBUFFER, 64 ) '---Open the port COMM_Open( "COM1", hcomm ) COMM_Set( hcomm, %COMM_RTSFLOW, 0 ) 'enable SN75176 to transmiting Sleep (10) COMM_Print(hComm, "H") Sleep (10) COMM_Set( hcomm, %COMM_RTSFLOW, 1 ) 'enable SN75176 to receiving Sleep (10) sBuffer = COMM_Line(hComm) 'waiting rx data with CRLF to continue Console_WriteLine(sBuffer) COMM_Close( hcomm ) Console_WriteLine("end testing") Sleep (3000) '==============================================================
sBuffer = COMM_Line(hComm) 'waiting rx data with CRLF to continue
I must add extra CRLF (two times from my microcontroller) to made program continue writing to the console.
Why this is happen?
regard
hendryawan
Last edited by ErosOlmi; 16-02-2011 at 17:31.
Really do not know because I cannot test but maybe RXTX buffer is not ready yet.
Sleep accept milliseconds so maybe 20 ms are not enough.
Maybe, as suggested by Michael, it is better to use some like:
or any other way to be sure there is something ready to be read.while not COMM_Get(hComm, %COMM_RXQUE) '---implement some timeout period otherwise you will enter into an infinite loop sleep(20) wend sBuffer = COMM_Line(hComm)
Just guessing
Eros
www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000
My circuit done with program bellow:
.......
COMM_Set( hcomm, %COMM_RTSFLOW, 1 ) 'enable SN75176 to receiving
Sleep 400
nBytes = COMM_Get(hComm, %COMM_RXQUE)
COMM_TRecv(hComm, nBytes, sBuffer, 10)
Console_WriteLine(sBuffer)
.......
thank you for all
best regard
hendryawan
Great !
Happy to see you got the way.
www.thinbasic.com | www.thinbasic.com/community/ | help.thinbasic.com
Windows 10 Pro for Workstations 64bit - 32 GB - Intel(R) Xeon(R) W-10855M CPU @ 2.80GHz - NVIDIA Quadro RTX 3000
Bookmarks