Autor Tema: Envio pero no recibo datos por RS232  (Leído 2205 veces)

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

Desconectado Equus_10

  • PIC10
  • *
  • Mensajes: 3
Envio pero no recibo datos por RS232
« en: 16 de Octubre de 2011, 11:47:45 »
Hola a todos,

llevo muchos años leyéndoos pero creo que nunca he llegado a escribir algo en el foro. Bueno, creo que si pero con un nick parecido al que tengo del que perdí la clave en alguno de los cambios de foro que se han llevado a cabo a lo largo de los años. Si he podido llegar a hacer alguna "chapucilla" ha sido sobre todo a los códigos que RedPic ha compartido con todos.

Veréis, estoy haciendo una simulación en Proteus donde uso un puerto COM real del PC (a través de COMPIN) para adquirir datos de un instrumento. EL problema está en que puedo enviarle datos al instrumento pero no recibo ningún dato del mismo. Si puedo ver como se pone en rojo el pin RX del COMPIN como si estuviera recibiendo datos. El instrumento envía varios bytes (unos 154) cada 5 segundos más o menos.

He intentado recibirlos mediante interrupción pero parece que no se llega a ejecutar. He probado a que cuando entre en la interrupción RDA encienda un LED pero nunca ocure esto.

El código lo he hecho en CCS. Si le mando el carácter "S" ASCII al instrumento se pone en standby y si le mando el carácter  "R" arranca. Simplemente hago esto para ver si le llegan los comandos al instrumento. Una vez veo que si, espero recibir datos del mismo para procesarlos. Simplemente quiero ver si recibo "algo" pero parece que no. No se cual puede ser el problema. En el esquema de proteus hay un dac y alguna cosa más que forma parte del proyecto pero en esta parte está inoperativa.

Adjunto el código y la simulación de proteus.

Código: [Seleccionar]
#include <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOPUT,BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7)
#use standard_io(b)
#use standard_io(c)
#use i2c(master,sda=PIN_C4, scl=PIN_C3)




int const lenbuff=94;
int addcbuff(char c);
void echos (char c);
char rcvchar=0x00;
int xbuff=0x00;
char cbuff[lenbuff];


// INTERRUPCIONES /////////////////////////////////////////////////////////////
///////////////////////////////////////////////


#int_rda
void serial_isr()
{
rcvchar=0x00;
if (kbhit())
{
rcvchar=getc();
addcbuff(rcvchar);
putc (rcvchar);
}
}

int addcbuff (char c)
{
cbuff[xbuff++]=c;
if (xbuff>lenbuff)
xbuff=lenbuff;
}

void main() {

int valor;
INT flag=0;

 enable_interrupts(global);
  enable_interrupts(int_rda);

  printf("\r\n\Listen on RS232 (Int)\r\n");


  printf("R");
 

do{
Delay_ms(10000);
if (flag==0) printf("S");
 Delay_ms(20000);
if (flag==0) printf("R");;flag=1;


    }while(true);
}

¿Alguien puede echarme una mano con esto? Muchas gracias.
« Última modificación: 16 de Octubre de 2011, 18:57:04 por Equus_10 »

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Re: Envio pero no recibo datos por RS232
« Respuesta #1 en: 16 de Octubre de 2011, 12:01:23 »
hola compañero bienvenido al foro!!!
he estado mirando por encima el programa y veo lo siguiente:

Código: C
  1. do{
  2.  
  3.    Delay_ms(200);
  4. }
  5. while (true);

no se si llegaras a salir alguna vez de este bucle do-while, es mas si recibes algo en el tiempo en que estas en el delay no podrás procesarlo.
Un saludo y bienvenido de nuevo  ;-)


Desconectado Equus_10

  • PIC10
  • *
  • Mensajes: 3
Re: Envio pero no recibo datos por RS232
« Respuesta #2 en: 16 de Octubre de 2011, 12:11:23 »
Gracias por la respuesta samshiel_pic.

Veo que me he equivocado a la hora de subir el archivo, en ese no está el envío de los caracteres "S" o "R" al instrumento. Ya lo he corregido, está subido el que debe ser.

Pero tu comentario me ha puesto en alerta, hasta ahora creía que aunque estuviera en un delay, si entraba una interrupción se saldría del Delay, se procesaría la interrupción para posteriormente seguir con el Delay, ¿no es esto así?

Muchas gracias samshiel_pic.

Desconectado Equus_10

  • PIC10
  • *
  • Mensajes: 3
Re: Envio pero no recibo datos por RS232
« Respuesta #3 en: 21 de Octubre de 2011, 17:05:46 »
No estaba recibiendo nada porque estaba poniendo el Virtual Terminal para ver lo que recibía, pero era precisamente eso lo que me impedía recibir datos del dispositivo externo. Error de novatillo.

Solucionado.


 

anything