Autor Tema: Interfaz RS-232  (Leído 5129 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Interfaz RS-232
« en: 06 de Julio de 2008, 01:52:36 »
hola a todos, como les va? estoy haciendo un proyectico pero estoy estancado en un punto de comunicacion entre 4 pic

lo que quiero es ver si alguien tendra algo de informacion sobre el RS-232 que lo voy a usar para comunicar los pic pero no se como usar esa interfaz
lo pienso hacer en CCS que es lo que conosco y primero hacerlo entre dos pic para probar y luego ir aumentando la cantidad de pic hasta llegar a los 4




Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Interfaz RS-232
« Respuesta #1 en: 06 de Julio de 2008, 05:53:53 »
Hola  dawaherjesus.

Has tenido en cuenta la opción de utilizar RS485?

Creo que es lo que mejor se adapta para lo que quieres hacer. Pégale un vistazo y valora la posibilidad.

Cuando te decidad postea. Es un tema muy tocado en el foro, no te va a costar mucho hacerlo.


Un saludo desde Alicante.

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #2 en: 06 de Julio de 2008, 12:28:36 »
en si el que pienso usar es el RS-485 que se adacta mas al proyecto pero como no se nada del tema quiero empesar por el RS-232

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Interfaz RS-232
« Respuesta #3 en: 06 de Julio de 2008, 16:14:23 »
Buenas dawaherjesus. Cual es tu problema especificamente? Aca te dejo algo de informacion sobre rs232 para q leas un poco:
http://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.html
(en tu caso la electronica no va a ser problema ya que no hay q adaptar niveles de tension)

Con respecto al software, es muy simple, ya que el CCS incluye librerias que implementan RS232. En el foro hay muchos ejemplos.
Aca te dejo uno q hice yo hace un tiempo:
Código: [Seleccionar]
#include <16F84A.h>
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4000000)
#define Tx PIN_A0 // PIN de Transmisión
#define Rx PIN_A1 // PIN de Recepción

#use fast_io (a)
#use fast_io (b)
#use rs232(baud=9600, xmit=Tx, rcv=Rx)

void main(void)
{
   set_tris_b(0x00);
   set_tris_a(0b00000010);
 
   printf("pic a la espera\n");
   while(true)
   {
      putc(getc());              // eco de lo que recibo
   }
}

Lo que si, tendrias q implementar conceptos de redes, ya que tendrias q establecer una topologia, un protocolo de capa de enlace, etc... Para esto podrias utilizar un ucontrolador de maestro, y que todos los demas se conecten a el; o hacer algo parecido a ethernet, donde todos se comunican con todos.

Cualquier duda, pregunte.

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
Re: Interfaz RS-232
« Respuesta #4 en: 07 de Julio de 2008, 02:23:03 »
Hola..

Basicamente la especificación RS232, solo permite comunicación entre dos dispositivos, para esto seria mejor utilizar RS485, si los dispositivos estan retirados una gran distancia, para ello debes conseguir un driver para cada micro, como lo es el max485... en otro caso si estan cercanos, una buena opcion es usar i2c.

Saludos

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Interfaz RS-232
« Respuesta #5 en: 08 de Julio de 2008, 13:20:31 »
no me habia dado cuenta, es cierto lo q dicen aca arriba. No vas a poder hacer una red de pics con rs232... asiq anda pensando en otra cosa. La idea de i2c esta piola... yo apuntaria por ese lado
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #6 en: 08 de Julio de 2008, 14:13:26 »
bueno yo pense en hacerlo con i2c pero me sirve por que voy a usar mucha distancia, ya idee en si como lo voy a hacer, voy a usar RS-485 para comunicar los pic
y voy a usar un pic maestro y 2 o 3 esclavos, lo que quiero es que cuando yo pise un pulsador que esta conectado al pic maestro, el mande la orden a uno de los esclavos 1  y active un rele y asi con cada esclavo

la electronica como tal no me preocupa pero el programa si por que no se como hacerlo

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #7 en: 08 de Julio de 2008, 14:16:04 »
se me olvido decir, la distancia entre el pic maestro y los esclavos es de una distancia maxima de 100 metros y una minima de 20 metros

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #8 en: 09 de Julio de 2008, 15:08:41 »
como les va e estado buscando en la web y en el foro y encontre este ejemplito en CCS C par trabajar con el RS-485 a ver si alguien me lo puede
explicar que no lo entiendo muy bien

Código: [Seleccionar]
#include <16F628A.h>
#device *=16
#fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, PUT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, stream=PC)

#define  RS485_RX_BUFFER_SIZE 64
#define  RS485_USE_EXT_INT    TRUE

int8 OUR_RS485_ID = 0;
#define RS485_ID OUR_RS485_ID

#include <rs485.c>
#include <stdlib.h>

int8 in_char = 0;
int8 next_in = 0;
int8 next_out = 0;
int8 msg[64];

#INT_RDA
void serial_isr()
{
   in_char = fgetc(PC);
}

#INT_TIMER1
void timer1_isr()
{
   int8 i;

   if(rs485_get_message(msg, FALSE))
   {
      printf("\n\r%d: ", msg[0]);

      for(i=0; i < msg[1]; ++i)
         putc(msg[i+2]);

      printf("\n\r");
   }
}

void RS485send(char* s, int8 id)
{
   int8 size;

   for(size=0; s[size]!='\0'; ++size);

   rs485_wait_for_bus(FALSE);

   while(!rs485_send_message(id, size, s))
      delay_ms(OUR_RS485_ID);
}

char PCgetc()
{
   in_char = 0;

   while(!in_char);

   return in_char;
}

int8 PCgetInt()
{
   int8 i, s[3];

   for(i=0; (s[i]=PCgetc()) != '\r' && i<3; ++i);

   return atoi(s);
}

char* PCgetMsg()
{
   int8 i;

   for(i=0; (msg[i] = PCgetc()) != '\r' && i<64; ++i);

   msg[i] = '\0';

   return &(msg[0]);
}

void main()
{
   int8 i, send_addr = 0;
   char command;

   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);

   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   rs485_init();

   while(OUR_RS485_ID == 0 || OUR_RS485_ID >= 255)
   {
      printf("Please choose a network ID (1-255): ");
      OUR_RS485_ID = PCgetInt();
   }

   printf("\n\rYour ID is: %d\n\r\n\rIf you require assistance, press h.\n\r", OUR_RS485_ID);

   while(command != 'Q')
   {
         enable_interrupts(INT_TIMER1);

         command = toupper(PCgetc());

         disable_interrupts(INT_TIMER1);

         switch(command)
         {
            case 'S':
               if(send_addr == 0 || send_addr > 255)
               {
                  printf("\n\r\n\rEnter send address (1-255): ");
                  send_addr = PCgetInt();
               }

               printf("\n\r%d:>", send_addr);
               RS485send(PCgetMsg(), send_addr);
               printf("\n\r");
               break;

            case 'C':
               send_addr = 0;

               while(send_addr == 0 || send_addr > 255)
               {
                  printf("\n\r\n\rEnter send address (1-255): ");
                  send_addr = PCgetInt();
                  printf("\n\r");
               }
               break;

            case 'I':
               OUR_RS485_ID = 0;

               while(OUR_RS485_ID == 0 || OUR_RS485_ID >= 255)
               {
                  printf("\n\rPlease choose a network ID (1-255): ");
                  OUR_RS485_ID = PCgetInt();
               }
               printf("\n\rYour ID is: %d\n\r\n\r", OUR_RS485_ID);
               break;

            case 'H':
               printf("\n\rCommands: (S)end message, (C)hange Send Address, ");
               printf("Change (I)D, (H)elp, (Q)uit.\n\r");
               break;

            default:
               if(command != 'Q')
                  printf("\n\rInvalid command!\n\r");
         }
   }
}

muchas gracias de ante mano espero me puedan ayudar

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #9 en: 29 de Marzo de 2009, 00:20:56 »
como les va e retomado el proyecto, ya e aclarado muchas cosas y tengo casi todo listo pero tengo una ultima duda como hago para la programación del pic master me refiero a esto:

*como pongo en la programación que el pic va a ser master
* como hago para que cuando pise el pulsador comience la transmisión de datos

la parte de los resectores o slaves ya la tengo lista

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Interfaz RS-232
« Respuesta #10 en: 29 de Marzo de 2009, 20:03:06 »
Oye lo que entiendo es esto que quieres establecer comunicacion con una red de pic que estan a 100m pero no dices a que distancia estan entre si esa red de pic porque el enlace lo pudieras hacer via rf y luego si los pic estan cerca entre si haces un codigo que envie la informacion al pic que quieras y asi tendrias todo listo.

Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #11 en: 29 de Marzo de 2009, 21:23:20 »
no puede ser con rf; por q el proyecto es para manejar fuegos artificiales y el rf es muy inseguro. la distancia entre un pic y otro no va hacer mayor a 100mts; si quieres dame tu correo y te explico mejor.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Interfaz RS-232
« Respuesta #12 en: 30 de Marzo de 2009, 06:00:21 »
Hola buenos dias no tendria problema en pasarte mi msn para estar en contacto mas directo pero igual recuerda que esto es una comunidad y a los demas tambien le gustaria saber  bien tu explicacion para asi poder ayudarte asi que en lo posible manejemos el tema aca y con seguridad entre todos aportamos.

Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Interfaz RS-232
« Respuesta #13 en: 30 de Marzo de 2009, 15:22:32 »
Podria ser algo asi:

Código: C#
  1. if(input(pin_a1))//Suponiendo que el pulsador esta en RA1
  2. {
  3.  delay_ms(50);//antirrebotes
  4.  if(input(pin_a1))
  5.  {
  6.   printf(.....);//Aqui colocas el comando que tu has definido para que los SLAVES lo entiendan
  7.  }
  8. }

Saludos
El papel lo aguanta todo

Desconectado dawaherjesus

  • PIC12
  • **
  • Mensajes: 59
Re: Interfaz RS-232
« Respuesta #14 en: 31 de Marzo de 2009, 15:55:10 »
Como les va me alegra mucho que me estén ayudando y tienes razón ASTROCAR te dije eso es porque de verdad quiero aprender a manejar el rs 485 y quiero hacer mi proyecto que lo tengo en mente desde hace mucho.

Les explico lo que quiero hacer: se trata de prender fuegos artificiales a distancia, por rf no lo puedo hacer ya que me parece inseguro (e visto algunos accidentes con rf nada normales ya que los radios que usa la policía o algún aficionado los activa porque no se) por eso decidí hacerlo en RS 485 usando un MAX 485

La consola consiste en un panel de pulsadores que seria el master y otros paneles de relés y otras cosas que serian los slaves
El funcionamiento es fácil cuando se toca uno de los pulsadores el rele asignado a ese pulsador se activa y prende un fósforo eléctrico, ese seria la función principal.

Hay algunas consolas más avanzadas que tienen temporizadores, conexión usb etc. pero aun no quiero meterme con eso hasta no manejar bien el 485.

Ya la parte del slave la tengo lista teóricamente claro nada mas me falta la parte del master que no se bien como hacer la programación
Aquí les dejo algunas fotos de algunas consolas profesionales para que tengan una idea de más o menos que es lo que quiero

ASI ES LA QUE ME GUSTARIA HACER



ESTE ES EL MASTER PERO CON RF


ESTE ES EL SLAVE CON RF