TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rroque en 27 de Diciembre de 2010, 19:32:26

Título: Ayuda!!! red con rs485
Publicado por: rroque en 27 de Diciembre de 2010, 19:32:26
Gente como estan!!!!
Alguien de casualidad tendra un programa que trabaje master (pc) y slave (pics)
Que los slaves adquieran datos analogicos y que estos lo mande a la pc cuando este le mande una dato como la direccion de cada micro.
Estoy como loco con esto hace un tiempo. y no se que hacer!!! he visto de todo pero nada similar a lo q quiero.
algo que este en CCS

Gracias
Ayúdenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Título: Re: Ayuda!!! red con rs485
Publicado por: MLO__ en 27 de Diciembre de 2010, 20:02:12
Hola.

Por favor, lee las reglas del foro. El tema que dices es muy tratado acá.

Saludos
Título: Re: Ayuda!!! red con rs485
Publicado por: darck_khronos en 27 de Diciembre de 2010, 20:57:16
Gente como estan!!!!
Alguien de casualidad tendra un programa que trabaje master (pc) y slave (pics)
Que los slaves adquieran datos analogicos y que estos lo mande a la pc cuando este le mande una dato como la direccion de cada micro.
Estoy como loco con esto hace un tiempo. y no se que hacer!!! he visto de todo pero nada similar a lo q quiero.
algo que este en CCS

Gracias
Ayúdenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

Has trabajado con Rs232 ??? si es asi la 485 sera muy facil
Título: Re: Ayuda!!! red con rs485
Publicado por: stk500 en 28 de Diciembre de 2010, 03:31:43
Pues como dice nuestros amigo Mlo, usa el buscador del foro por cualquier cosas de tu dudas, Redes RS484 lo hay de millones, para empezar Aqui (http://www.todopic.com.ar/foros/index.php?topic=19057.0) te pongo un tema de nuestros amigos RedPic.

Saludos
Título: Re: Ayuda!!! red con rs485
Publicado por: rroque en 28 de Diciembre de 2010, 11:53:33
Lo se lo lamento! revisare los ejemplos del foro, empezando un rele en la lejania.
Gracias
Título: Re: Ayuda!!! red con rs485
Publicado por: MAXTORJOE en 29 de Diciembre de 2010, 12:43:32
Saludos MLO, al igual que darck_khronos yo he buscado informacion para un proyecto similar y en honor a la verdad en este foro si se ha tratado mucho este tema de RS485, pero no he podido conseguir ninguno terminado o con alguna respuesta satisfactoria, solo preguntas sin respuestas contundetes he visto, si sabes de algun proyecto terminado y probado que este aca en el foro te pido encarecidamnte me indiques donde esta y te pido disculpas por la peticion pero ya busque y no encontre mil gracias de antemano
Título: Re: Ayuda!!! red con rs485
Publicado por: stk500 en 29 de Diciembre de 2010, 13:36:50
si expecifica y pone codigo de lo que tiene hecho seguro que te ayudan, no espere encontrar nada hecho por aqui y si lo lo hay esta limitados ;-)
Saludos
Título: Re: Ayuda!!! red con rs485
Publicado por: rroque en 29 de Diciembre de 2010, 15:38:51
Bueno estuve jugando un toque con el tema del rs485 y como que la logre transmitir datos por rs485 hacia la compu. Todo esto parti desde el ejemplo de redpic de un rele a la lejania.

Les muestro lo poco que hice. En si el programa adquiere datos analogicos y los envia al puerto serie. En la parte del main probe utilizar una sola entrada analoga para adquirir 8 lecturas diferentes con un 4051, pero x el momento lo deje como texto. pero si funciona.
Ahora el tema es de que como adquirir ese dato cuando el maestro le pregunte al esclavo. :S

#include <16F873A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#device adc=8
#use delay(clock=4000000)    // 4 Mhz PIC
#use rs232 (baud=9600, xmit=pin_b2, rcv=pin_b1)

#define TX_485_ENABLE PIN_B5

void USART_activa_tx(void);
void USART_activa_rx(void);

///////////////////////////////////////////////////////////
// Funciones
///////////////////////////////////////////////////////////
/** \brief Abre el canal RS485 para transmitir.
* \return void
*/
void USART_activa_tx(void)
{
  output_high(TX_485_ENABLE);
  delay_ms(5);
}

/** \brief Abre el canal RS485 para recibir.
* \return void
*/
void USART_activa_rx(void)
{
  delay_ms(5);
  output_low(TX_485_ENABLE);
  delay_ms(1);
}

///////////////////////////////////////////////////////////
// M A I N
///////////////////////////////////////////////////////////
void main ()
{
   int8 i;
   float dato[8];   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(ALL_ANALOG);
   set_adc_channel(0);
   delay_us(20);
   set_tris_b(0b00000010);
   
   while(1)
   {
      for(i=0;i<1;i++) // 8
      {
         switch(i)
         {
         case 0:
         output_c(0x00);   
         break;
         /*case 1:
         output_c(0x01);     
            break;
         case 2:
         output_c(0x02);     
            break;
         case 3:
         output_c(0x03);
            break;
         case 4:
         output_c(0x04);
            break;
         case 5:
         output_c(0x05);
            break;
         case 6:
         output_c(0x06);     
            break;
         case 7:
         output_c(0x07);     
            break; 
*/
         }
             dato =100.0*(float)read_adc()/255;
      }
   USART_activa_tx();
   printf("\n%f\n\r\n",dato[0]); //dato[1]
   USART_activa_rx();
   delay_ms(200);
   }
}
Título: Re: Ayuda!!! red con rs485
Publicado por: MLO__ en 29 de Diciembre de 2010, 17:23:49
Hola.

Para recibir, es mejor usar la interrupción de recepción serial. La idea es enviar un identificador de trama y recibes el dato como un string.

Saludos
Título: Re: Ayuda!!! red con rs485
Publicado por: rroque en 29 de Diciembre de 2010, 19:19:09
interrupciones-??? uhm voy a probar a ver que sale Gracias MLO.
Título: Re: Ayuda!!! red con rs485
Publicado por: tuxon en 30 de Enero de 2012, 15:43:58
Bueno estuve jugando un toque con el tema del rs485 y como que la logre transmitir datos por rs485 hacia la compu. Todo esto parti desde el ejemplo de redpic de un rele a la lejania.

Les muestro lo poco que hice. En si el programa adquiere datos analogicos y los envia al puerto serie. En la parte del main probe utilizar una sola entrada analoga para adquirir 8 lecturas diferentes con un 4051, pero x el momento lo deje como texto. pero si funciona.
Ahora el tema es de que como adquirir ese dato cuando el maestro le pregunte al esclavo. :S

#include <16F873A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#device adc=8
#use delay(clock=4000000)    // 4 Mhz PIC
#use rs232 (baud=9600, xmit=pin_b2, rcv=pin_b1)

#define TX_485_ENABLE PIN_B5

void USART_activa_tx(void);
void USART_activa_rx(void);

///////////////////////////////////////////////////////////
// Funciones
///////////////////////////////////////////////////////////
/** \brief Abre el canal RS485 para transmitir.
* \return void
*/
void USART_activa_tx(void)
{
  output_high(TX_485_ENABLE);
  delay_ms(5);
}

/** \brief Abre el canal RS485 para recibir.
* \return void
*/
void USART_activa_rx(void)
{
  delay_ms(5);
  output_low(TX_485_ENABLE);
  delay_ms(1);
}

///////////////////////////////////////////////////////////
// M A I N
///////////////////////////////////////////////////////////
void main ()
{
   int8 i;
   float dato[8];   
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(ALL_ANALOG);
   set_adc_channel(0);
   delay_us(20);
   set_tris_b(0b00000010);
   
   while(1)
   {
      for(i=0;i<1;i++) // 8
      {
         switch(i)
         {
         case 0:
         output_c(0x00);   
         break;
         /*case 1:
         output_c(0x01);     
            break;
         case 2:
         output_c(0x02);     
            break;
         case 3:
         output_c(0x03);
            break;
         case 4:
         output_c(0x04);
            break;
         case 5:
         output_c(0x05);
            break;
         case 6:
         output_c(0x06);     
            break;
         case 7:
         output_c(0x07);     
            break; 
*/
         }
             dato =100.0*(float)read_adc()/255;
      }
   USART_activa_tx();
   printf("\n%f\n\r\n",dato[0]); //dato[1]
   USART_activa_rx();
   delay_ms(200);
   }
}
y de pura casualidad sabras como se hace para que el esclavo obedesca por que ahi solo muetras al pi maestro no''
??