Autor Tema: ayuda con rs232 y pic 16f84a  (Leído 2650 veces)

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

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
ayuda con rs232 y pic 16f84a
« en: 07 de Abril de 2008, 23:45:55 »
Buenas gente!
Estoy tratando de hacer un pequeño proyecto para conectar un pic 16f84a con la PC via rs232. Por ahora no es mas q un "echo". Ya tengo algo armado y no tengo idea por qué no funciona.

Con respecto a la electrónica, conecté el pic a un max232 para adaptar las tensiones según esta guia:
http://www.iearobotics.com/proyectos/cuadernos/ct1/ct1.html
del lado del pic tengo conectado 8 LEDs al puertoB para ver el byte enviado o recibido y uso las patas RA0 y RA1 para Tx y Rx.

El código es el siguiente:
Código: [Seleccionar]
#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,bits=8,parity=N,xmit=PIN_A0,rcv=PIN_A1)
#byte port_b=6

void main (void)
{
   char carac;
 
   set_tris_b(0);
   port_b=0;

   while (true)
   {
      carac=getc();
      port_b=carac;
      delay_ms(500);
      putc(carac);
   }
}

Y para probarlo (y me parece q aca esta el error porq me llevo mal con windows jeje), lo conecto al puerto serie, abro un hyperterminal, configuro todo (velocidad, etc...) y escribo algunos caracteres en la caja de texto esperando que estos retornen, pero no pasa nada :S
Alguna idea de donde esta el error? Mil gracias de antemano!!!

PD: ya se q este tema es muy discutido por el foro, disculpen q insista, pero la verdad q no entiendo por qué no funciona, a primera vista parece estar todo en orden.

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

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: ayuda con rs232 y pic 16f84a
« Respuesta #1 en: 07 de Abril de 2008, 23:53:17 »
Hola

Se me ocurre que agregues lo siguiente...

Código: [Seleccionar]
#use fast_io (a)
#use fast_io (b)

...

set_tris_a(0b00000010);


Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Re: ayuda con rs232 y pic 16f84a
« Respuesta #2 en: 08 de Abril de 2008, 05:02:50 »
Me parece que ese delay_ms(500) no ayuda demasiado al programa.

Mi teoria es, que no te funciona porque con GETC recibes el dato, lo pasas a PORTB, y mientras hace el delay500, puede que reciba mas caracteres y se levante el flag de receive buffer overflow. Una vez sube ese flag, ya no se pasan datos al registro de recepcion rs232 hasta que A)se baje ese flag B)se resetee el pic.

Has probado quitando el delay?

Has probado con una expresion mas simple como  putc(getc()); ?

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: ayuda con rs232 y pic 16f84a
« Respuesta #3 en: 09 de Abril de 2008, 01:43:12 »
Ya probé con ambas soluciones que me dieron y ninguna dio resultados =( creo que el problema esta mas en el lado del hard que del soft...
encontré este ejemplo por el foro y la conexión pic-max232 la hace diferente a como yo la habia hecho http://www.todopic.com.ar/foros/index.php?topic=4620.0

nadie conoce algun ejemplo ya hecho para el pic 16f84a?
gracias nuevamente!

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

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: ayuda con rs232 y pic 16f84a
« Respuesta #4 en: 09 de Abril de 2008, 20:51:16 »
FUNCIONÓ!!!!!!!!
como lo sospechaba, el problema era de hardware. Parece que el esquemático q estaba usando para conectar el max232 no era el correcto. Además encontré otro programa en lugar de hyperterminal ("hercules" se llama) q funciona mucho mejor =)
Gracias a todos por la ayuda, y disculpen las molestias.

Dejo a continuación el esquemático y el código que usé por si alguien tiene el mismo problema:



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 saqué de la página http://www.scienceprog.com/simple-ttl-to-rs232-adapter/
« Última modificación: 09 de Abril de 2008, 23:36:04 por zspikes »

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


 

anything