CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Modbus with RS485 using MAX487 sending one char after all

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
opvini



Joined: 27 Apr 2012
Posts: 50
Location: Brazil

View user's profile Send private message

Modbus with RS485 using MAX487 sending one char after all
PostPosted: Thu Nov 08, 2012 8:06 am     Reply with quote

Hi...
I am making communication between PICs using Modbus (modbus.c). Its fine and works very well when I connect the PICs directly. But when I put the chip MAX487, I ever receive one character after all.

For example: I send "oi" I receive "oiï" but this last value is the same to the same transmitted data but this last value changes to different transmitted data.

I think that the MAX487 is sending one char to end of communication, but I'm not sure, then I come here to ask.


Thanks a LOT!
RF_Developer



Joined: 07 Feb 2011
Posts: 839

View user's profile Send private message

PostPosted: Thu Nov 08, 2012 8:12 am     Reply with quote

The TX enable for the MAX487 in the sending PIC is disabling while the final charater is being sent. This happens when the enable is turned off once the last character has been put into the UART buffer instead of waiting for the character to finish being sent.

Someone here, Ttelmah possibly, or Temtronic, posted somce code here a while ago, and recently referred to it in another 485 related thread. Do a search on "485" and you should find it... which, of course you should already have done to see if the answer you need is already available. You did that, didn't you?

RF Developer.
Ttelmah



Joined: 11 Mar 2010
Posts: 19480

View user's profile Send private message

PostPosted: Thu Nov 08, 2012 8:20 am     Reply with quote

Almost certainly your problem is lack of bias on the RS485 bus.
Modbus, requires that the RS485 'A' line is pulled high, and the B line pulled low when the bus is not driven. This can be done by large value resistors, or combined with termination. The latter improves the ability of the bus too handle high frequencies, but reduces the number of nodes that can be used on the bus. Termination is optional, but biasing is required, unless you use a RS485 transceiver that is guaranteed to see an open bus as 'idle'.
If you don't have biasing, then you can see spurious start/data bits on the bus (hence your extra character, and it's random nature).
On RF_Developer's comment, 'yes' if you are using interrupt driven transmission.
However that loses the last byte, rather than gaining one. Hence my suspicion that biasing is the problem.

Best Wishes
opvini



Joined: 27 Apr 2012
Posts: 50
Location: Brazil

View user's profile Send private message

PostPosted: Fri Nov 09, 2012 11:49 am     Reply with quote

Thanks a lot RF_Developer and Ttelmah!!

I actually searched the forum and have not found before, so I posted.
Well, I am using PROTEUS to simulate, and I KNOW IT HAS MANY BUGS, but it works fine with me to differents applications before I do on real board.

This is my scheme with a pull down resistor and a pull up resistor:



Any problems with the scheme?
temtronic



Joined: 01 Jul 2010
Posts: 9217
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Nov 09, 2012 11:59 am     Reply with quote

1. normally you only have one termination resistor for the bus, so check with some RS-485 'bible' for the correct value. Can't read your schematic for values and of course don't know about cable lengths, capacitance, noise, etc....real world stuff.

2. as you are aware Proteus is NOT reliable, so don't think that just because it 'works' in a PC that your design/software will work in the real world.
opvini



Joined: 27 Apr 2012
Posts: 50
Location: Brazil

View user's profile Send private message

PostPosted: Fri Nov 09, 2012 1:12 pm     Reply with quote

Sorry, about the image:


And I do not really trust the proteus, but it helps...
The question is: why without the MAX487 the comunication is OK and with MAX ever sending this last char.
temtronic



Joined: 01 Jul 2010
Posts: 9217
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Nov 09, 2012 2:46 pm     Reply with quote

Simple answer is Proteus is NOT emulating the correct simulation of the PIC/CCS C/MAX487 combination.....
That's one of hundreds of reasons why no one can trust Proteus.
It is well known that it can't even follow simple DRCs..so why would you trust it to 'simulate' anything like a PIC?
To get 'real world' results you MUST hardwire PICs and test in the real world, anything less than that is asking for sleepless nights.

hth
jay
FvM



Joined: 27 Aug 2008
Posts: 2337
Location: Germany

View user's profile Send private message

PostPosted: Fri Nov 09, 2012 4:14 pm     Reply with quote

Apart from Proteus problems, the shown schematic is basically fine. It's supposed to work with PICs software
implementing correct transmit enable control.

The CCS MODBUS driver is an example of a software, that would work correctly with this hardware.

Personally, I would omit the 120 ohm termination for low speed and short range RS485 connections to save
power. The "bias" resistors are essential however.
Ttelmah



Joined: 11 Mar 2010
Posts: 19480

View user's profile Send private message

PostPosted: Sat Nov 10, 2012 2:23 am     Reply with quote

There is one glaring thing missing from the circuit (two things actually). Pull up resistors on the lines connecting to RX on the PIC's. 4K7 to 10KR to the supply rail on each of these lines. Otherwise when the receive buffer is turned 'off' during a transmission, you can receive spurious characters at the PIC if this line floats low. Again 'required'.

Best Wishes
opvini



Joined: 27 Apr 2012
Posts: 50
Location: Brazil

View user's profile Send private message

PostPosted: Mon Nov 12, 2012 4:57 am     Reply with quote

Thanks a lot temtronic, FvM and Ttelmah!!!
I put the pull up resistors on the RX lines, thank you Ttelmah, and now I will test on real world, out the PROTEUS.

Thank everybody!
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group