|
|
View previous topic :: View next topic |
Author |
Message |
anemo
Joined: 24 Apr 2016 Posts: 9
|
RS485 interrupt |
Posted: Sun Apr 24, 2016 12:37 pm |
|
|
Hello!
I'm trying to RS485 communication between two PIC16F887 with a simple code. RS485 is necessary, because i'd like to use at least 10 slaves and long distances.
In first phase, i'm trying the code in virtual (yes... in isis), but something is wrong, because the hardware interrupt works once. The second, third etc. messages don't make rda interrupts in slave, so the incomming_rs485() function runs once in the beginning.
I'm using MAX487 ICs, resistors etc.
What is missing from the code? Thanks for help!
(Sorry for my English)
MASTER:
Code: |
// MASTER
#include <16f887.h>
#fuses HS,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(crystal=20000000)
#define RS485_ID 0x00
#define RS485_RX_ENABLE PIN_C2
#define RS485_ENABLE_PIN PIN_C2
#define RS485_USE_EXT_INT FALSE
#include <rs485.c>
int data[5] = {"hello"};
void main()
{
rs485_init();
while(true)
{
if (rs485_send_message(0x01, 5, data))
{
output_toggle(PIN_A0);
}
delay_ms(500);
}
} |
SLAVE:
Code: |
// SLAVE
#include <16f887.h>
#fuses HS,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(crystal=20000000)
#define RS485_ID 0x01
#define RS485_RX_ENABLE PIN_C2
#define RS485_ENABLE_PIN PIN_C2
#define RS485_USE_EXT_INT FALSE
#include <rs485.c>
unsigned int data[16];
void main()
{
rs485_init();
delay_ms(100);
while(true)
{
if (rs485_get_message(data, false))
{
output_toggle(PIN_A0);
}
}
} |
|
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9243 Location: Greensville,Ontario
|
|
Posted: Sun Apr 24, 2016 12:44 pm |
|
|
please..
Read PIC101 sticky.
We cannot help you with ISIS/proteus 'code' as it is busted, broken, full of faulty DRCs.....
Use real hardware and use the CCS examples (they both work !!).
Jay |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19539
|
|
Posted: Mon Apr 25, 2016 2:05 am |
|
|
There is also the glaring problem with this declaration:
int data[5] = {"hello"};
The array is too small to hold what is being put into it.
A five character string _requires_ six characters of storage.... |
|
|
anemo
Joined: 24 Apr 2016 Posts: 9
|
RS485 interrupt |
Posted: Mon Apr 25, 2016 7:32 am |
|
|
Hello!
Quote: | Use real hardware and use the CCS examples (they both work !!). |
As I said, in the first phase, i'd like to try it in virtual, but i'll build this circuit for you, after i bought devices (soon).
Quote: | Read this previous thread on how to make rs-485 work with CCS. |
I have already read it (before i posted) and my "circuit" is similar to that.
Quote: | The array is too small to hold what is being put into it. |
Thanks, i fixed it, but the code is still not working. The slave's led doesn't blink. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9243 Location: Greensville,Ontario
|
|
Posted: Mon Apr 25, 2016 3:47 pm |
|
|
You're basing 'it doesn't work' on a faulty 'simulation' program aka ISIS aka Proteus ! |
|
|
drolleman
Joined: 03 Feb 2011 Posts: 116
|
|
Posted: Mon Apr 25, 2016 6:57 pm |
|
|
Even for a first phase, simulators are not worth the time. You can chase bugs that real hardware will work with, and others that real hardware won't work with. Bottom line, experienced developers don't use simulators, it doesn't save time. |
|
|
anemo
Joined: 24 Apr 2016 Posts: 9
|
reply |
Posted: Sun May 01, 2016 7:00 pm |
|
|
Hello!
So, Today I built the real hardware:
https://drive.google.com/file/d/0B5gu1D-K_ShcTEpxTVByRWhlSDA/view?usp=sharing
And I have to apologize to you, because it works... I've already built some circuits with proteus, and they worked in real, unfortunately the simulator is wrong in this situation and I made a mistake because of it..
So.. sorry and thank you for showing the right way. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19539
|
|
Posted: Mon May 02, 2016 12:15 am |
|
|
You now know why there are so many posters here saying 'ignore what Proteus/Isis say'....
Generally, small very simple projects will work in Isis. However as things get more complex, the probabilities of it giving the right answer, 'shoot down'.
There are little errors in almost every Isis component in the PIC's.
I've got two demo projects, one shows a project that works perfectly in Isis, but can never work in the real world. The second shows a project that will not function in Isis, but works for real (you now have your own example of this....).
A few years ago (Okay, Isis was younger then), a company I worked for did a 'viability study', evaluating whether certain tools were worth paying the charges to keep up to date or not. The product that came _lowest_ on the list at the end of the study, was Isis. Basically they found that every microprocessor project where Isis was used, took longer to complete, than similar projects done without this tool....
Duh!.
We use Proteus as a PCB design tool, and still will use Isis for a few specific analog simulations, as being quicker than Spice to set up (it works well for these simulations), but when it comes to microprocessor sections, Isis is not used at all. |
|
|
|
|
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
|