Autor Tema: problema conexión RS-232 entre pc y PIC16F877A  (Leído 7225 veces)

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

Desconectado o bruxo

  • PIC10
  • *
  • Mensajes: 4
problema conexión RS-232 entre pc y PIC16F877A
« en: 03 de Noviembre de 2009, 13:41:21 »

Hola a todos

Llevo algún tiempo escribiendo un programa en C para el PIC16F877A que debe comunicarse con el pc, y simulando el circuito en el proteus funciona de maravilla. No obstante, al programar el pic me encuentro con que no funciona.

Tras varias pruebas he visto que el problema está en la conexión serie entre el pc y el PIC.

He comprobado el HW y funciona bien, puesto que conectando entre sí los cables que deberían unir MAX233 y PIC puedo ver en el hyperterminal los caracteres que envío.

También escojo la misma tasa en baudios tanto en el hyperterminal como en el programa. También he probado con tasas menores.

También he probado programas sencillos para enviar y/o recibir caracteres, y ninguno funciona correctamente. Por ejemplo:

#include <16F877A.h>
#fuses NOWDT,HS, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=6000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)

void main()
{
  while(1)  {
  putc( getc()+1);  }}

Debería (de hecho en el proteus así lo hace) devolver el caracter siguiente (si escribo A obtengo B, si B, C, etc). Sin embargo en el hypeterminal leo a veces a, a veces b , a veces ax...

¿Podríais darme alguna idea sobre qué puede estar pasando?

Muchísimas gracias, un saludo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #1 en: 03 de Noviembre de 2009, 13:50:17 »
Hola.

Sube el esquema para revisarlo.

Que longitud tiene el cable del RS232?

Cuando se usa el getc(); por polling, siempre es recomendable usar la funcion kbhit().

Saludos
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #2 en: 03 de Noviembre de 2009, 15:34:54 »
Hola, nunca he usado el MAX233 pero viendo su hoja de características te pregunto ¿lleva fuente de +/-10V externa? ¿O genera el voltaje negativo con capacitores internos a partir de los 5V de entrada?

http://img509.imageshack.us/img509/429/maxo.png

Desconectado o bruxo

  • PIC10
  • *
  • Mensajes: 4
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #3 en: 03 de Noviembre de 2009, 17:58:33 »
Hola  a los 2:

Os adjunto el esquema del circuito con el max233, como se ve no necesita alimentación de +-10 voltios, basta con +5voltios. El cable serie mide 1,5 metros. De todos modos, el HW funciona pues conectado en loop me permite ver los mismos caracteres que envío.

A ver si a alguno se os ocurre qué puede estar fallando. Muchas gracias, un saludo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #4 en: 03 de Noviembre de 2009, 19:44:53 »
Hmmm...

- Verifica que el pin 12 del max mida -10V
- Verifica que el pin 14 del max mida +10V
- Verifica que GND de la PC sea común al GND del MAX y del PIC
- Agrega estas líneas de código después del main

Código: [Seleccionar]
#use rs232 (UART1,BAUD=9600,xmit=pin_c6,rcv=pin_c7)

...

set_tris_c(0xFF); //c6 y c7 deben ser ambos entradas

Por ahora eso se me ocurre.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #5 en: 03 de Noviembre de 2009, 23:03:38 »
El pin_c6 no debe ser habilitado como salida?
El papel lo aguanta todo

Desconectado o bruxo

  • PIC10
  • *
  • Mensajes: 4
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #6 en: 04 de Noviembre de 2009, 08:06:04 »

He usado kbhit() y añadido:

set_tris_c(0b10000000);  //Todo salidas excepto RX de RS-232)

RC6 tiene que ser salida, si no no funciona ni la simulación.

Pero sigue pasando exactamente lo mismo. ¿No se supone que el proteus es bastante fiel a la realidad :(?

Gracias, un saludo


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #7 en: 04 de Noviembre de 2009, 09:43:38 »
¿No se supone que el proteus es bastante fiel a la realidad :(?
Jamás  :?



kbhit debe usarse así:
Código: C
  1. while(1)  {
  2.   if(kbhit()==1){
  3.   putc( getc()+1);  }}
  4.   }

Creo que con eso la parte del código es correcta, lo que me llamo la atención fue el cristal de 6MHz, desconocido por estos lados  :mrgreen:

Después revisa lo comentado por Mig respecto a las tensiones, etc.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado o bruxo

  • PIC10
  • *
  • Mensajes: 4
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #8 en: 04 de Noviembre de 2009, 11:05:42 »

He cambiado el cristal por uno de 4 MHz y todo funciona a la perfección. ¿No se supone que con uno de 6 y modo HS debería funcionar? De todos modos, vivan los 4 MHz.. ¡menos mal!

Muchísimas gracias a todos por la ayuda

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #9 en: 04 de Noviembre de 2009, 12:50:33 »
El pin_c6 no debe ser habilitado como salida?

Hola MLO, eso es lo que el sentido común indica pero la hoja de especificaciones pide otra cosa...

http://img177.imageshack.us/img177/9494/rs232.png


Y bueno si no funcionó en simulación... pues no hay que fiarse de Proteus.  :?

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #10 en: 04 de Noviembre de 2009, 13:27:09 »
Cosa tan rara  :shock: es que proteus tiene sus cosas.

A mi tambien me causo curiosidad el cristal, pero los he encontrado de varios valores (ejemplo) asi que pense que si existian jejeje.

De todas formas es raro que no se ajuste a 6MHz, habria que revisar el datasheet para ver que error maneja a esa frecuencia.

Saludos
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #11 en: 04 de Noviembre de 2009, 17:33:40 »
Puede que CCS le arroje un warning sobre la velocidad no exacta del rs232.  :?:

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #12 en: 04 de Noviembre de 2009, 18:17:14 »
No debería, a 6MHz seleccionando Baud Rate a alta velocidad y SPBRG=38 tenemos un error de 0.16%


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado miguelcasas

  • PIC10
  • *
  • Mensajes: 6
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #13 en: 06 de Noviembre de 2009, 22:07:56 »
saludos, para mi es muy frustante ver que a todosles funciona la comunicacion del PIC al PC y se visualice en el hyperterminal, por eso recurro a ustedes, lo que quiero realizar es que el mensaje "HOLA, HOLA", se vea en el hyperterminal de mi pc repitiendose, y que un led conectado en E0 se encienda y se apague, esto con miras a realizar otras cosas, de momento solo necesito poder observar lo que envio al hyperterminal, entonces expongo a ustedes el codigo y el diagrama que estoy usando, para el codigo utilize apuntes y partes atras expuestas por ustedes.
   
Código: [Seleccionar]
#include <16F877A.H>
#fuses NOWDT,HS, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)

void main(void) {
   set_tris_c(0b10000000);
   do{
   printf("HOLA, HOLA, HOLA, HOLA");
   delay_ms(1000);
   output_low(PIN_E0);   
   delay_ms(1000);
   output_high(PIN_E0);
   }while(1);

}
este codigo esta simulado en el proteus con ayuda de la herrramienta COMPIM, de  ahy salto al hyperterminal y todo funciona muy bien, pero lo implemento con el siguiente circuito y nada que funciona


Desconectado miguelcasas

  • PIC10
  • *
  • Mensajes: 6
Re: problema conexión RS-232 entre pc y PIC16F877A
« Respuesta #14 en: 06 de Noviembre de 2009, 22:40:53 »


 

anything