Autor Tema: Problema en la recepcion de datos RS232  (Leído 3701 veces)

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

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Problema en la recepcion de datos RS232
« en: 08 de Octubre de 2014, 14:06:43 »
Hola:

Llevo un rato con este código y no consigo ver donde está el error. No consigo que entre la interrupción para la recepción serie. Se queda todo el rato en el main. El código es para programar comandos AT con el bluetooth HC05 o HC06. Una vez que se le envía un comando AT, el Bluetooth responde OK o un String con la información del comando AT. En este caso le programo el nombre del dispositivo. Debería recibir OK pero no entra la interrupción.

Código: [Seleccionar]
#include <16f88.h>
#device adc=10
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOWRT,NODEBUG,NOMCLR
#use delay(internal=8M)
#use rs232(baud=38400,xmit=PIN_B5,rcv=PIN_B2)

#include "flex_lcd420.c"

#byte TRISA = 0x85
#byte TRISB = 0x86

#byte OPTION_REG = 0x81
#bit RBPU = OPTION_REG.7

char BLUE_BUFFER[20];
int aux=0;
#int_RDA //vector de interrupción al recibir por la UART
void RDA_isr(){
BLUE_BUFFER[0]=getc();
BLUE_BUFFER[1]=getc();
BLUE_BUFFER[2]=getc();
BLUE_BUFFER[3]=getc();
aux=1;
}
void main(){
RBPU = 0; // Pull-up enabled
setup_adc_ports(SAN2|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
enable_interrupts(INT_RDA); //habilita interrupción por recepción
enable_interrupts(global);
set_adc_channel(2);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"AT commands...");
delay_ms(2000);
printf("AT+NAME=HC05");
putc('\r'); //Transmite CR
putc('\n'); //Transmite avance de linea
delay_ms(500);
while(1){
   if(aux){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\fBT Answer:");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"BT: %2c",BLUE_BUFFER);
   delay_ms(100);
   }else{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"\fWaiting BT...");
   delay_ms(100);
   }
}
}
« Última modificación: 09 de Octubre de 2014, 05:36:10 por aitorsp »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problema en la recepcion de datos RS232
« Respuesta #1 en: 08 de Octubre de 2014, 19:58:26 »
  Veo que trabajas constantemente con el LCD, ya sea que aux sea 0 o 1. ¿No será que las funciones de LCD, deshabilitan la interrupción?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Problema en la recepcion de datos RS232
« Respuesta #2 en: 08 de Octubre de 2014, 20:22:43 »
si no entra la interrupción de recepción de datos seriales, podría ser que en realidad no esté recibiendo nada. quita el modulo Bluetooth y prueba la comunicación serial del pic con hyperterminal.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema en la recepcion de datos RS232
« Respuesta #3 en: 08 de Octubre de 2014, 20:49:12 »
tienes conectado el TX del bluetooth con el RX del micro
                            RX del bluetooth con el TX del micro  ?

 :mrgreen:
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #4 en: 09 de Octubre de 2014, 05:30:27 »
  Veo que trabajas constantemente con el LCD, ya sea que aux sea 0 o 1. ¿No será que las funciones de LCD, deshabilitan la interrupción?

Sí pero también he probado a habilitar las interrupciones después de llamar a las funciones LCD y no funciona.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #5 en: 09 de Octubre de 2014, 05:31:42 »
si no entra la interrupción de recepción de datos seriales, podría ser que en realidad no esté recibiendo nada. quita el modulo Bluetooth y prueba la comunicación serial del pic con hyperterminal.

imposible. Cuando envias un comando AT, el bluetooth responde OK o una serie de caracteres de información. En cualquier caso debería entrar la interrupción

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #6 en: 09 de Octubre de 2014, 05:32:43 »
tienes conectado el TX del bluetooth con el RX del micro
                            RX del bluetooth con el TX del micro  ?

 :mrgreen:

Sí, eso está correcto.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema en la recepcion de datos RS232
« Respuesta #7 en: 09 de Octubre de 2014, 11:33:15 »
realiza algo sencillo, prende un led dentro de la interrupcion
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #8 en: 09 de Octubre de 2014, 12:11:43 »
realiza algo sencillo, prende un led dentro de la interrupcion

El LED es la variable aux. Si entra la interrupción se ejecuta el bloque del main. Pero nunca entra la interrupción.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Problema en la recepcion de datos RS232
« Respuesta #9 en: 09 de Octubre de 2014, 13:00:41 »
si no entra la interrupción de recepción de datos seriales, podría ser que en realidad no esté recibiendo nada. quita el modulo Bluetooth y prueba la comunicación serial del pic con hyperterminal.

imposible. Cuando envias un comando AT, el bluetooth responde OK o una serie de caracteres de información. En cualquier caso debería entrar la interrupción

no entiendo, ¿cómo sabes que la variable BUFFER[n] recibe el OK del bluetooth, si no entra a la interrupción?



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Problema en la recepcion de datos RS232
« Respuesta #10 en: 09 de Octubre de 2014, 13:41:57 »
realiza algo sencillo, prende un led dentro de la interrupcion
El LED es la variable aux. Si entra la interrupción se ejecuta el bloque del main. Pero nunca entra la interrupción.
Realiza la prueba con un led real, no con una variable.  De esa forma confirmas que el micro entra a la interrupción al menos una vez, posterior a eso te daras cuenta si el problema radica en el hard o en soft

PD. ahora que observo mas el codigo, incluye los caracteres de \n\r en el printf y miras que tal va.  Sino estoy mal ese putc no esta enviando 0D 0A
« Última modificación: 09 de Octubre de 2014, 13:47:09 por jhozate »
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema en la recepcion de datos RS232
« Respuesta #11 en: 10 de Octubre de 2014, 07:29:28 »
Declaras TRISA y TRISB, pero no veo que inicialices si son de entrada o salida los pines

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #12 en: 10 de Octubre de 2014, 07:46:08 »
Declaras TRISA y TRISB, pero no veo que inicialices si son de entrada o salida los pines



Eso no importa. Lo puse para usarlo en otros códigos donde explícitamente configuro los tris de ese modo. En este caso, el compilador se encarga de configurar los TRIS automáticamente.
He probado a cambiar el código sin usar las interrupciones y mas o menos me funciona. Ahora mismo sigo sin saber por que no funciona usando interrupciones. Podria ser por el uso de la librería LCD pero no lo tengo muy claro. Lo que si he detectado es que estos bluetooth (los HC05 y HC06) dan problemas con los retardos al enviar los comandos AT

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema en la recepcion de datos RS232
« Respuesta #13 en: 10 de Octubre de 2014, 07:59:42 »
Y siempre recibes 4 bytes o múltiplos de 4? Digo, porque si no fuese el caso, los getc() te bloquearían el código y daría el aspecto de que algunos datos no llegan. También te recomiendo agregar el modificador ERRORS a la declaración del #use RS232.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: Problema en la recepcion de datos RS232
« Respuesta #14 en: 10 de Octubre de 2014, 08:24:19 »
Y siempre recibes 4 bytes o múltiplos de 4? Digo, porque si no fuese el caso, los getc() te bloquearían el código y daría el aspecto de que algunos datos no llegan. También te recomiendo agregar el modificador ERRORS a la declaración del #use RS232.


No, recibes caracteres que varian en longitud dependiendo de la información que tengan. Por ejemplo, AT\r\n recibe OK pero hay otros comandos que reciben caracteres de información y creo que devuelve al final el carácter fin de línea.