PDA

View Full Version : RS485 Comms



koossa
- 18th January 2008, 13:55
Good day

I am using the SN75176 to communicate (RS485) between two PICs.
For testing my cable is about 1m long running @ 4Mhz using PIC16F877.
I have a TX Pic and a RX Pic, on the RX side I send the data received to the PC for debuggin purposes.
I only transmit 1 character, and receive it on the RX side and send it to the PC.


<hr>
Here is the code for the TX side:

<code>
'======== RS485TX.BAS =====================

Include "Modedefs.bas"

DEFINE OSC 4 ' Set the Xtal frequency

P0 VAR PORTB.6
P1 VAR PORTB.7

CCP1CON = 0
ADCON1 = 7

Main:

OUTPUT P0
HIGH P0
SEROUT P1,N2400,["R"]

GOTO MAIN

END
</code>

<hr>
Here is the code for the RX side:

<code>
'======== RS485RX.BAS =====================

Include "Modedefs.bas"

DEFINE OSC 4 ' Set the Xtal frequency

P0 VAR PORTB.6
P1 VAR PORTB.7
DEBUGPIN VAR PORTB.5
DATARECEIVED VAR BYTE

CCP1CON = 0
ADCON1 = 7

Main:

OUTPUT P0
LOW P0
SERIN P1,N2400,DATARECEIVED

SEROUT DEBUGPIN,N2400,["Received:", DATARECEIVED, 13, 10]

GOTO Main

END
</code>

<hr>

On the PC Side I get the following:

Received:R
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’
Received:%
Received:J
Received:•
Received:*
Received:T
Received:©
Received:R
Received:€
Received:I
Received:’

<hr>

Any ideas

Thank you
Koossa

skimask
- 18th January 2008, 14:14
Any ideas

Thank you
Koossa

Notice how the output repeats itself?

Try putting a slight pause in between each transmit at the transmitter end. You're transmitting characters without pauses. The receiver has to both receive and transmit characters, so it does that, and starts trying to receive another character after the transmitter has already sent half of it.
At 2400 baud, throw a 'PAUSE 9' in between each character at the transmitter.
2400 baud = .416ms/bit = 4.16ms/byte (start and stop bits included), receiver gets a character and transmits a character, same speed = 8.33ms. 9ms gives the receiver time to get done doing what it's gotta do before it's gotta do something else to get done.