.:Ica Bots:.
Julio 28, 2014, 11:35:43 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión

hola
Noticias: Desarrollo e investigación
 
   Inicio   Ayuda Buscar Calendario Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Comunicacion RS232 con PIC18F4550  (Leído 12450 veces)
ccencho
Administrator
Construye Nanobots
*
Desconectado Desconectado

Mensajes: 449


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« : Enero 30, 2011, 01:49:58 »

Hola a todos  icon_lol , abro este tema pues una amiga nos consulto sobre como poder leer la informacion de  equipos de instrumentacion que tienen "protocolo de comunicacion rs232" , es asi que mediante este pequeño ejemplo se presenta la simulacion del equipo con un Pic 16f628a y el receptor es un Pic 18f4550( esto por necesidad de luego enviar la informacion por USB a una PC )

Bien aca el circuito de la simulacion, con su respectivo codigo y programa en proteus.

Aca el circuito de la simulacion:


ACA EL CODIGO:

TRANSMISOR - PIC16F628A

Código:
#include <16f628a.h>                    // declaro pic a usar
#fuses xt,nowdt,nomclr,nolvp,put  // declaro fuses
#use delay(clock=4M)                    // declaro cristal usar
#use rs232(uart1,baud=2400,xmit=PIN_B2,bits=8,parity=N)       // configuro el modulo USART asincrono como TX 
#use fast_io(b)                     
#use fast_io(a)
char data_envio=250;


void main()                             // inicio
{
   set_tris_b(0);                       // asigno puertob como salida
   set_tris_a(255);                     // asigno puertoa como entrada
   
while(true){                            // bucle while

   if( input(pin_a0)==0)                // supervisa que pulsador fue presionado
   { putc('1');                         // envia el caracter 1 por el usart
   while(input(pin_a0)==0);}            // buclea hasta cuando se deja de precionar
                                        // el pulsador
   if(input(pin_a1)==0)
   {putc('2');
   while(!input(pin_a1));}
   
   if(input(pin_a2)==0)
   {putc('3');
   while(!input(pin_a2));}
     
   if(input(pin_a3)==0)
   {putc(data_envio);
   while(input(pin_a3)==0);} 
     }
}                                       // fin




RECPETOR - PIC18F4550

Código:
#include <18f4550.h>
#fuses xt,nomclr,noprotect,nolvp
#use delay(clock=4M)
#use rs232(uart1,baud=2400,rcv=PIN_C7,bits=8,parity=N)
#use standard_io(d)
#define LCD_DATA_PORT getenv("SFR:PORTD")
#define LCD_ENABLE_PIN  PIN_D2
#define LCD_RS_PIN      PIN_D0
#define LCD_RW_PIN      PIN_D1
#include <lcd.c>
char data;

#INT_RDA
void rda_int()
{   
 data=getchar();         
}

void main()
{   
      set_tris_d(0);   
      output_d(0);
      enable_interrupts(INT_RDA);
      enable_interrupts(GLOBAL);
      lcd_init();

while(true){

      lcd_gotoxy(1,1);
      printf(lcd_putc,"carac:%9c",data);
      lcd_gotoxy(1,2);
      printf(lcd_putc,"entero:%9u",data);
}
}


EXPLICACION:

El Pic 16f628a simula al equipo que necesitamos leer su data atravez del protocolo de comunicacion rs232, por lo cual le puse 4 pulsados , los cuales simulan el ingreso de datos al pic16f628a, es ovio que en la vida real el equipo envia de forma automatica la data leida.
Bueno en esta parte la informacion es enviado por el modulo USART del PIC atravez de su pin Transmisor (TX).


El pic 18f4550 cumple la funcion de recepciona la informacion  y la muestra en el LCD, aca se muestra en dos formatos, en la primera linea se ve como un dato en  caracter y en la segunda linea se ve como un dato entero.

Bueno como dije en un inicio segun el proyecto la idea es una vez que se tiene la informacion en el PIC 18f4550 esta se tiene que enviar a una PC y ser visualizada en un programa en Visual basic u otro.

Por otro lado , segun lo que me decias, el equipo de medicion que mencionas, se comunica con la PC a travez de un software, entonces segun  esto, los niveles logicos del puerto serial del equipo deberian estar entre -12 a +12 voltios, pues el puerto serial de la computadora maneja estos niveles logicos,a salvo que este usando un conversor adicinal al equipo.

Bueno si lo que digo es cierto( que los niveles logicos del puerto serial del equipo son de +12 y -12) entonces necesitaras una interfase  si  quieres comunicar con nuestro PIC18f4550 , por la cual aca te paso el circuito de como seria esto.



Bueno como veran por ahora tenemos esta parte, asique ARISBE creo que primero tendrias que ver si logras leer data de tus equipos y verlos en el LCD, si es asi...creo que ya podemos seguir con la segunda parte.. icon_lol icon_lol

Bueno espero comentarios...

Notas: adjunto los archivos en proteus

« Última modificación: Enero 30, 2011, 02:48:07 por ccencho » En línea

Investigacion y desarrollo
geme
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #1 : Enero 30, 2011, 02:44:05 »


 chau icon_lol gracias nestor  ya lo estoy checando tratare que salgo lo mas antes posible y hay te dire como me esta hiendo,  yupi
En línea
geme
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #2 : Enero 30, 2011, 03:09:52 »

si Cchenco de hecho ya tengo el diseño en proteus de un circuito parecido al que tu hiciste con el max232, ahora hare las pruebas correspondientes y vere que pasa.

Pense en un principio usar el integrado MAX232 para ajustar los nivles de voltaje ya que el pic18f4550 trabaja o soporta 5volts es decir trabaja con la logica TTL y el puerto serie usa niveles logicos de -12 y +12
entoces lo que hace el max232 es permitir la comunicacion entre el instrumento y el PIC  en este caso verdad Cchenco
En línea
geme
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #3 : Enero 31, 2011, 07:01:44 »

HOLA AMIGO HOY ESTUVE SIMULANDO EL PRIMER CIRCUITO DONDE USAS EL PIC16 Y EL PIC18, PERO ME MARCA DOS ERRORES Y SON LOS SIGUIENTES:
[PIC16 CORE]PC=0X0037 TRISB instruction is deprecated for pic16628
[PIC16 CORE]PC=0X0039 TRISa instruction is deprecated for pic16628
PERO AL DAR CLIC SOBRE LOS PULSADORES EN LA TERMINAL VIRTUAL ME APARECE 1, 2, 3 O UN PUNTO SE SUPONE QUE
ESO ME LO DEVERIA MOSTRAR EN LA LCD PERO NO NUESTRA NADA NOSE
SI ES POR LOS DOS ERRORES QUE ME MARCA BUENO esto es con respecto al primer circuito

SEGUNDO CIRCUITO

al simularlo no se como darle una entrada no me marca nada


 
En línea
ccencho
Administrator
Construye Nanobots
*
Desconectado Desconectado

Mensajes: 449


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #4 : Febrero 01, 2011, 01:46:24 »

Citar
HOLA AMIGO HOY ESTUVE SIMULANDO EL PRIMER CIRCUITO DONDE USAS EL PIC16 Y EL PIC18, PERO ME MARCA DOS ERRORES Y SON LOS SIGUIENTES:
[PIC16 CORE]PC=0X0037 TRISB instruction is deprecated for pic16628
[PIC16 CORE]PC=0X0039 TRISa instruction is deprecated for pic16628
PERO AL DAR CLIC SOBRE LOS PULSADORES EN LA TERMINAL VIRTUAL ME APARECE 1, 2, 3 O UN PUNTO SE SUPONE QUE
ESO ME LO DEVERIA MOSTRAR EN LA LCD PERO NO NUESTRA NADA NOSE
SI ES POR LOS DOS ERRORES QUE ME MARCA BUENO esto es con respecto al primer circuito

SEGUNDO CIRCUITO

al simularlo no se como darle una entrada no me marca nada

Bueno respecto a esos 2 errores que dices, no afectan en naa la simulacion del proteus, ya que yo mismo los he hecho funcionar. Ensi no son errores sino advertencias si te fijas bien..., ahora esto lo puedes sacar si deseas, aca subo 3 imagenes:

Funcionando:


Para deshabilitar esas advertencias sigue estas 2 imagenes:



Bueno, ahora revisa bien si has cargado bien los programas para cada pic.

Por el segundo circuito bueno....es una conexion...no es una simulacion,, pero si quieres simular puedes hacerlo tambien...creandote un puerto virtual e ingresar datos en el puerto serial, asi estos los podras ver por el proteus.

En línea

Investigacion y desarrollo
geme
Conoce de robots por la TV
*
Desconectado Desconectado

Mensajes: 5


Ver Perfil
« Respuesta #5 : Febrero 04, 2011, 07:11:45 »

Hola buenas tardes amigo nestor por fin ya pude hacer la simulacion el problema era por la version del pic c compiler, ya que la palabra uart1 me la marcaba como error despues de corregir esto ya hice la simulaicon.
Pero al montarlo fisicamente tengo problemas no me aparece nada en la LCD(JHD 162A), y bueno otra pregunta A DONDE VA CONECTADO EL PIC 33 (L1 ES LA ETIQUETA QUE LE PUSISTE).

Y TENGO QUE PONER UN OSCILADOR EXTERNO A LA HORA DE PROBAR EN PROTOBOARD O NO ES NECESARIO POR QUE SE SI LO DEBE LLEVAR?

ESPERO TUS COMENTARIOS GRACIAS
En línea
ccencho
Administrator
Construye Nanobots
*
Desconectado Desconectado

Mensajes: 449


Laberinto

axgt8@hotmail.com
Ver Perfil WWW Email
« Respuesta #6 : Febrero 04, 2011, 11:34:23 »

L1 no va conectado a ningun lado,  lo que pasa que ese circuito era de otro mas grande y lo modifique para el ejemplo, por la cual se me olvido borrar eso jaaaa.

Sobre los cristales si es necesario ponerlos para el pic 16f628a y el 18f4550, esos van en las respectivas patitas de cada uno.
En línea

Investigacion y desarrollo
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.15 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!