Autor Tema: Debo usar Kbhit conr rs232???  (Leído 3596 veces)

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

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
Debo usar Kbhit conr rs232???
« en: 24 de Marzo de 2006, 13:15:00 »
Hola a todos.

Estoy tratando de implementar la comunicacion PC - PIC y viceversa en un soft que ya tengo armado.
Mi problema es este si trato de enviar datos de la pc desde visual basic funciona perfecto. Esto si lo pruebo con el soft exclusivamente para esto.
Si trato de agregarlo al que ya tengo se me complica porque se me frena cuanto uso el getc();

Entonces trate de usar el kbhit para saber si se habia mandado algun dato para luego usar el getc pero ahi es donde ya no recibe ningun dato.

O sea si uso esto

opcion = getc();
if(opcion == "1") {
    printf(lcd_putc, "Ok"Giño;
}

Funciona pero deja de hacer todo los chequeos y muestreo de datos porque supongo que se esta frenando en el getc

Para solucionar esto use el kbhit()

if(kbhit()) {
    opcion = getc();
    if(opcion == "1") {
        printf(lcd_putc, "Ok"Giño;
    }
}

Pero ahi es donde dejo de recibir datos. Como si el kbhit no funcionara.

Se usa de esta forma?

Muchas gracias.
Saludos.
Pablo

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Debo usar Kbhit conr rs232???
« Respuesta #1 en: 24 de Marzo de 2006, 17:55:00 »
Es extraño lo que te sucede, mira yo lo he implementado de esta forma (ejemplo):
Previamente y en el main he activado la interrupcio por RDA.


#int_RDA
void RDA_isr()
{
timeout=0;
while(!kbhit()&&(++timeout<5000))
delay_us(10);
if(kbhit())
{
   Aux_Rx_Data[0]=getc();
  if(  Aux_Rx_Data[0]==1)
   {
   printf("Dato OK"Giño;
  }
}
}

gfp Sonrisa

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Debo usar Kbhit conr rs232???
« Respuesta #2 en: 24 de Marzo de 2006, 20:26:00 »
Lo probe pero parece no entrar a la funcion
Lo que hago es en la INT_RTCC imprimir la variable opcion que tomo en la INT_RDA

#INT_RDA
RDA_isr() {
   timeout=0;
   while(!kbhit()&&(++timeout<5000))
   delay_us(10);
   if(kbhit())
   {
      opcion = getc();
   }
}

Tambien probe esto

#INT_RDA
RDA_isr() {
      opcion = getc();
}


Me podes decir si hay algo en como agrego la interrupcion RDA.

void main(void) {
   set_timer0(0);
   setup_counters( RTCC_INTERNAL, RTCC_DIV_2);
   enable_interrupts(INT_RTCC);


   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(RA0_RA1_RA3_ANALOG);
   set_adc_channel(0);

   enable_interrupts(INT_AD);
   read_adc(ADC_START_ONLY);
   enable_interrupts(INT_RDA);
   enable_interrupts(global);
   .
   .
   .....

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Debo usar Kbhit conr rs232???
« Respuesta #3 en: 25 de Marzo de 2006, 11:56:00 »
Por que no pegas todo el codigo del programa y asi lo analizamos con detenimiento.

gfp Sonrisa

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Debo usar Kbhit conr rs232???
« Respuesta #4 en: 25 de Marzo de 2006, 12:11:00 »
Mira el programa tiene 1500 lineas pero lo acabo de probar con uno solo con la interupcion RDA y tampoco funciona

Asi Funciona

#include <18F452.h>

#device ADC=10

#use delay(clock=4000000)
#use i2c(Master, SDA=PIN_C2, SCL=PIN_C3)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)//,invert)//RESTART_WDT)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT

#include <lcd_4x20.c>
#include <ds1307.h>
#include <stdlib.h>

unsigned int opcion;

void main()
{

   lcd_init();

   while(true) {
      opcion = getc();
      lcd_gotoxy(1,1);
      if(opcion == "1")
         printf(lcd_putc,"1111"Giño;
      else if(opcion == "2")
         printf(lcd_putc,"2222"Giño;
   }
}

Asi NO Funciona

#include <18F452.h>

#device ADC=10

#use delay(clock=4000000)
#use i2c(Master, SDA=PIN_C2, SCL=PIN_C3)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)//,invert)//RESTART_WDT)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT

#include <lcd_4x20.c>
#include <ds1307.h>
#include <stdlib.h>

unsigned int opcion;

#INT_RDA
rda_isr() {
   opcion = getc();
}

void main()
{

   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   lcd_init();

   while(true) {
      lcd_gotoxy(1,1);
      if(opcion == "1")
         printf(lcd_putc,"1111"Giño;
      else if(opcion == "2")
         printf(lcd_putc,"2222"Giño;
   }
}



Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Debo usar Kbhit conr rs232???
« Respuesta #5 en: 01 de Abril de 2006, 15:17:00 »
La interrupcion por RDA o por recepcion de un dato via rs232 se puede implementar en los microcontroladores con USART incorporada y POR LOS PINES CORRESPONDIENTES. Para el caso del PIC18F452 son el RC7 como RX y RC6 como TX, por tanto para estos pines unicamente funcinara la interrupcion por recepcion de un dato. Velo que lo estas haciendo por RC0 y RC1 y nunca te va a funcionar, las alternativas que tienes es por los pines RC7 y RC6, al menos es lo mas practico.

Disculpa mi demora en la respuesta.

gfp Sonrisa

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Debo usar Kbhit conr rs232???
« Respuesta #6 en: 02 de Abril de 2006, 18:19:00 »
Tal cual, en otro mensaje me lo comentaron, realmente lo desconocia.
Lo probe con los pines C6 y C7 y funciono perfecto.
Me habia trabado y no sabia que era lo que estaba pasando.

Muchas gracias por la respuesta.
Saludos.
Pablo


 

anything