Autor Tema: RS485 Y 16F84...¿SENCILLO?  (Leído 6924 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado luisgorris

  • PIC10
  • *
  • Mensajes: 12
    • Mi Web www.luisgorris.es
RS485 Y 16F84...¿SENCILLO?
« en: 13 de Junio de 2010, 15:24:29 »
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!
La música es la voz del Alma y las notas sus palabras.

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #1 en: 13 de Junio de 2010, 17:12:21 »
Hola, creo que es un error de tipeo, la resistencia es de 120 ohms (dices 12)

No entiendo de C, pero creo que no indicas la "velocidad de transmision" baudios....

si ya tienes algo con 232, pruebalo, cambiando el adaptador de salida.... (el max232 por un SN75176)

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado luisgorris

  • PIC10
  • *
  • Mensajes: 12
    • Mi Web www.luisgorris.es
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #2 en: 13 de Junio de 2010, 17:54:42 »
gracias por tu respuesta.
es cierto. es un error de tipeo. son 120ohm.
por otro lado la velocidad si está indicada: 4mhz en ambos y los baudios 9600 (definidos en rs485.c).
lo siento pero prefiero el c. hace muchos años trabaje en ensamblador (y unos cuantos mas)...te ahorra mucho trabajo aunque el código final sea mas "largo" y consuma mas memoria.

creo que el problema está en el esclavo. conseguí que el maestro parpadease el led (emitiese correctamente, aunque habian muchas interferencias; se notaban por la velocidad del parpadeo).

gracias pero sigo esperando la solucion. tengo todo probadito para mi proyecto pero me falta esto... el dichoso bus 485.
« Última modificación: 13 de Junio de 2010, 17:58:18 por luisgorris »
La música es la voz del Alma y las notas sus palabras.

Desconectado luisgorris

  • PIC10
  • *
  • Mensajes: 12
    • Mi Web www.luisgorris.es
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #3 en: 13 de Agosto de 2010, 15:28:03 »
por fin conseguí que funcionase el 485.    :-/


gracias a tod@s!!!!
La música es la voz del Alma y las notas sus palabras.

Desconectado COARITES

  • PIC10
  • *
  • Mensajes: 13
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #4 en: 19 de Abril de 2013, 17:55:20 »
Nos podrias decir cual era tu error; yo igual estoy intentando lo mismo pero con 4 esclavos.

Desconectado luisgorris

  • PIC10
  • *
  • Mensajes: 12
    • Mi Web www.luisgorris.es
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #5 en: 20 de Abril de 2013, 04:41:38 »
intentaré comentar donde estaba el fallo.

a nivel software, hay que usar interrupciones, al menos para la recepcion de datos. Si usais un pic con USART usar esta cualidad y si no tiene, usar la interrupcion RB0 (pin de entrada de datos). Muchos problemas iniciales estaban en el software. No useis polling.

a nivel hardware, no he notado la necesidad de la dichosa resistencia de de 120ohm pero los cables usados han sido muy cortos. tal vez sea necesaria a largas distancias. Si son necesarias:
1 resistencia de 47k de B a VCC
1 resistencia de 47k de A a GND
1 resistencia de 47k de RO a VCC (superimportante)
1 resistencia de 47k de RE/DE (que estan unidos) a GND.

suerte!!!!
La música es la voz del Alma y las notas sus palabras.

Desconectado arielperez

  • PIC10
  • *
  • Mensajes: 10
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #6 en: 14 de Mayo de 2013, 19:28:03 »
Hola Luis,

El proyecto está hecho en CCS?.

Con PICC (Hitech) o C18 no tenés código probado?.

De todas formas, el código del primer mensaje es el definitivo?.

Disculpame todas las preguntas, pero tengo que armar algo parecido a lo que armaste y me ahorrarías lidiar con el protocolo enormemente.
Muchas gracias de antemano.

Saludos cordiales,
Ariel

Desconectado luisgorris

  • PIC10
  • *
  • Mensajes: 12
    • Mi Web www.luisgorris.es
Re: RS485 Y 16F84...¿SENCILLO?
« Respuesta #7 en: 15 de Mayo de 2013, 03:22:16 »
El codigo está en CCS. No usa sus librerias para RS485. no funcionan!.
ahora llevo algun tiempo trabajando con STM32. Para mi, los pics practicamente han pasado a la historia.

saludos!
La música es la voz del Alma y las notas sus palabras.

Desconectado dcsalg79

  • PIC10
  • *
  • Mensajes: 7
Re:RS485 Y 16F84...¿SENCILLO?
« Respuesta #8 en: 24 de Octubre de 2015, 21:11:30 »
Una Consulta!, la libreria RS485.c que viene en CCS es para no utilizar un integrado max485? osea con esa libreria conectas ambos pic asi como viene?