Autor Tema: #INT_RDA  (Leído 4508 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
#INT_RDA
« en: 27 de Marzo de 2006, 10:01:00 »
Hola a todos:

En otro tema plantie como usar el kbhit para que el programa no se frene a menos de que se haya recibido un caracter y me comentaron que hay una interupcion llamada INT_RDA que se activa cada vez que se recibe un dato.
El problema es que parece no funcionar o no la estoy activando bien.
Busque en muchos lugares por internet y no es mas que lo que el ejemplo que ahora pongo. Saben por que puede no estar funcionando????

#include <18F452.h>
#device ADC=10
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT

#include <lcd_4x20.c>

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";
        else if(opcion == "2")
            printf(lcd_putc,"2222";
    }
}

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: #INT_RDA
« Respuesta #1 en: 27 de Marzo de 2006, 10:29:00 »
Mira esto que funciona muy bien Sonrisa Gigante

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4691672


Un saludo desde Alicante.

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #2 en: 27 de Marzo de 2006, 11:55:00 »
En cuanto llego llego a casa lo pruebo. Con que programa se puede probar? con el hypertermilal se pueden ingresar datos?

Ahora el soft asi como lo puse en el otro mensaje no deberia funcionar?

Muchas gracias.
Saludos.
Pablo

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #3 en: 27 de Marzo de 2006, 20:04:00 »
Hola:

El programa lo grabe y en el Hyperterminal muestra los datos pero no tengo forma de ingresar algo para ver si lo lee.
Que programa usan para monitoriar rs232?

REDPIC si estas ahi por favor tirame una soga que ya no se que hacer y vos ya hiciste varios ejemplos.

Saludos.
Pablo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: #INT_RDA
« Respuesta #4 en: 27 de Marzo de 2006, 20:10:00 »
Hola Pablo

Para pruebas físicas puedes usar el hyperterminal de windows. Para pruebas virtuales usa proteus y el virtual terminal.


Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #5 en: 27 de Marzo de 2006, 20:14:00 »
Use el hyperterminal y envia datos pero mi problema es la recepcion con la interupcion RDA si ella recibe bien, pero me es necesaria usarla.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: #INT_RDA
« Respuesta #6 en: 27 de Marzo de 2006, 20:31:00 »
Talvez te sirva este programa...

http://www.4shared.com/file/1093824/a9720e2f/serial_watcher.html

Si no, esperemos a RedPic para que te ayude.

Sonrisa Gigante

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #7 en: 27 de Marzo de 2006, 21:10:00 »
Hola lo probe y me muestra solo

.[Enter] Procesa comando
.[Escape] Borra todo el buffer
.[Delete] Borra último carácter del buffer
.[w] Comando Escribe
.[] Comando Lee

si envio un string w12 por ejemplo no hace nada, no dice leyendo o escribiendo como creo que deberia decir.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: #INT_RDA
« Respuesta #8 en: 28 de Marzo de 2006, 01:42:00 »
Pabo:

Dame datos. ¿Has copiado el programa completo? o ¿lo has adaptado para el 18F452?

Si es así, ponme exactamente el código fuente que has usado, para ver si hay algo distinto.

Mi código lo he probado con el 16F876A y el 16F628A con cristales de 4, 6, 10 y 20 Mhz sin problemas.

Vamos a intentar descartar problemas de Soft antes de ver si es de Hard.



Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #9 en: 28 de Marzo de 2006, 05:14:00 »
El programa lo copie tal cual como estaba.

Yo descarto que sea de hard porque probe este ejemplo y funciona:

#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_4x20.c>
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";
  }
}

Pero de esta otra no funciona:

#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_4x20.c>
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";
  }
}

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
RE: #INT_RDA
« Respuesta #10 en: 28 de Marzo de 2006, 05:42:00 »
Prueba esta combinación y dime qué obtienes :


Codigo:

#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT

#include <lcd_4x20.c>

char opcion;

#INT_RDA
rda_isr() {
  opcion=0x00;
  if(kbhit()){
    opcion=getc();
  }
}

void main() {
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   lcd_init();
   while(true) {
      if(opcion!=0x00){
         lcd_gotoxy(1,1);
         switch(opcion){
            case "1": printf(lcd_putc,"1111";
                      break;
            case "2": printf(lcd_putc,"2222";
                      break;
            default:  printf(lcd_putc,"xxxx";
         }
      }
   }
}

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #11 en: 28 de Marzo de 2006, 16:40:00 »
Hola RedPIC Gracias por la ayuda.

Acabo de probarlo y tampoco. Es algo raro porque el hard parece funcionar. Si pongo este codigo en el pic desde visual puedo enviar datos. Pero con la interrupcion no.

Ah. Probe desde el pic mandar un printf y un putc y desde visual Basic capturarlo y eso funciona

#include <18F452.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)
#fuses XT, NOPROTECT, PUT, NOWDT, BROWNOUT, NOLVP, NOCPD, NOWRT

#include <lcd_4x20.c>

char opcion;

void main() {
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   lcd_init();
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Prueba"Giño;
   while(true) {
         opcion = getc();
         lcd_gotoxy(1,1);
         switch(opcion){
            case "1": printf(lcd_putc,"1111"Giño;
                      break;
            case "2": printf(lcd_putc,"2222"Giño;
                      break;
            default:  printf(lcd_putc,"xxxx"Giño;
         }
   }
}

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #12 en: 31 de Marzo de 2006, 22:45:00 »
Ayuda!!!!! Ya no se me ocurre nada probe todo y sigo con el mismo problema.
Ahora probe esta para ver si lo puedo hacer sin la interrupcion RDA y sin que se frene el programa. Pero el kbhit parece no funcionar. Sin este el programa funciona perfecto por eso descarto el hard.

void main() {
   lcd_init();
   lcd_gotoxy(1,2);
   while(true) {
      if(kbhit()) {
          opcion = getc();
      }
      if(opcion != 0x00) {
         lcd_gotoxy(1,1);
         switch(opcion){
            case "1": printf(lcd_putc,"1111"Giño;
                      break;
            case "2": printf(lcd_putc,"2222"Giño;
                      break;
         }
      }
   }
}

Mario_2004

  • Visitante
RE: #INT_RDA
« Respuesta #13 en: 01 de Abril de 2006, 14:07:00 »
Hola Pablo, creo que todo tu problema está en esta línea:
Codigo:
#use rs232(baud=9600,xmit=PIN_C0,rcv=PIN_C1)


prueba a ponerlo de esta forma:
Codigo:
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)


La interrupción RDA, solo funciona con el hard del micro.

saludos

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: #INT_RDA
« Respuesta #14 en: 01 de Abril de 2006, 19:32:00 »
Biennnnn.

Era eso, mil gracias Mario y todos lo que me ayudaron.
Funciona Perfecto.

Saludos.