hola amig@s.
os escribo desesperado al no poder continuar con mi proyecto, ya que las pruebas iniciales con rs485 y 16f84 no funcionan un
carajo!
a ver... quiero conectar 2 pics (de momento solo pido 2) mediante rs485.
hardware:
1 pic 16f877a (maestro)
1 pic 16f84a (esclavo)
2 rs485 (uno por pic, evidentemente). alimentados a 5v.
conexiones del maestro:
PIN_B0 -> RO (RS485_RX_PIN)
PIN_B3 -> DI (RS485_TX_PIN)
PIN_B4 -> DE y RE (unidos) (RS485_ENABLE_PIN)
PIN_B5 -> RE (RS485_RX_ENABLE) (tambien probé sin unir los pines DE y RE)
conexiones del esclavo:
PIN_B0 -> RO (RS485_RX_PIN)
PIN_B2 -> DI (RS485_TX_PIN)
PIN_B4 -> DE y RE (unidos) (RS485_ENABLE_PIN)
PIN_B5 -> RE (RS485_RX_ENABLE) (tambien probé sin unir los pines DE y RE)
soft del maestro: se supone que debe apagar el led cuando haya enviado el dato.
#include "16f877a.h"
#device *=8
#use delay (clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#include "stdio.h"
#define led0 PIN_B7
#define led1 PIN_B6
#define RS485_ID 0x0
#define RS485_USE_EXT_INT TRUE
#define RS485_RX_PIN PIN_B0 // Data receive pin
#define RS485_TX_PIN PIN_B3 // Data transmit pin
#define RS485_ENABLE_PIN PIN_B4 // Controls DE pin. RX low, TX high.
#define RS485_RX_ENABLE PIN_B5
#define RS485_RX_BUFFER_SIZE 10
#include "rs485.c"
void main(void)
{
int8 d[]={'h'};
rs485_init();
while (TRUE)
{
output_high(led1);
//rs485_wait_for_bus(FALSE); //si lo pongo no continua!!!!
if (rs485_send_message(0x01, 1, d)==TRUE)
output_low(led1);
delay_ms(50);
}
}
soft del esclavo:
#include "16f84a.h"
#device *=8
#use delay (clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
#define led0 PIN_B7
#define led1 PIN_B6
#define RS485_ID 0x01
#define RS485_USE_EXT_INT TRUE
#define RS485_RX_PIN PIN_B0 // Data receive pin
#define RS485_TX_PIN PIN_B2 // Data transmit pin
#define RS485_ENABLE_PIN PIN_B4 // Controls DE pin. RX low, TX high.
#define RS485_RX_ENABLE PIN_B5
#define RS485_RX_BUFFER_SIZE 10
#include "rs485.c"
void main(void)
{
int8 d[10];
rs485_init();
output_high(led1);
while (TRUE)
{
if (rs485_get_message(d,TRUE)==TRUE)
output_high(led0);
else
output_low(led0);
delay_ms(10);
}
}
como veis, es mas sencillo lo que quiero hacer que el mecanismo de una cebolla y sin embargo.....NO FUNCIONA!
he probado con resistores de 12ohm en paralelo con las salidas A y B de ambos rs485, le ho probado todo!!!! incluso use un par del cat5e por si los cables de union eran demasiado cortos y tampoco!!!
alguien puede ayudarme!!!!!
gracias!