TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: robotec_electronics en 19 de Febrero de 2014, 14:12:09

Título: Problemas con el Pic 16f88 y el RS232
Publicado por: robotec_electronics en 19 de Febrero de 2014, 14:12:09
Hola, tengo un problema con el siguiente programa que he creado, en el cual quiero encender y apagar un led mediante un bluetooth, pero a la hora de hacer las conexiones en una picschool no hace nada, he comprobado la aplicaccion que he creado y funciona correctamente por ello creo que es algun fallo del programa si alguien pudiera ayudarme estaria muy agradecido, aqui os dejo el programa que he hecho:

#include <16f88.h>                   
#fuses XT,NOWDT   
#use delay(clock=4000000)             
#use RS232(baud=9600, xmit=PIN_B5, rcv=PIN_B2)
main()
{
   char estado;
   set_tris_a(0);               
   output_a(0);                   
   output_bit(PIN_A0, 1);       
   delay_ms(100);                 
   output_bit(PIN_A0, 0);       
   while(1)
    {
     output_bit(PIN_A1, 1);       
     estado=getc();   
     switch(estado){                     
         case 0: 
               output_bit(PIN_A0, 0); break;       
         case 1: 
               output_bit(PIN_A0, 1); break;       
        }
     }
}
Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: rivale en 19 de Febrero de 2014, 14:57:58
el problema es que estas leyendo el bufer constantemente

Código: C
  1. ...
  2.  output_bit(PIN_A1, 1);        
  3.      estado=getc();  
  4.      switch(estado){                      
  5.          case 0:  
  6.                output_bit(PIN_A0, 0); break;        
  7.          case 1:  
  8.                output_bit(PIN_A0, 1); break;        
  9.         }

deberias de leer el puerto serie solo cuando tengas datos, puedes usar la funcion kbhit o usar la interrupcion #int_rda
otro detalle es que estas comparando contra 0 y 1, verifica si desde tu emisor envias el 0 como entero o como ascii
Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: robotec_electronics en 20 de Febrero de 2014, 04:31:57
Le he puesto la función kbhit para que lea cuando tenga datos, y e verificado los datos que envio, pero sigue sin funcionar, es como si no entrara en el case por algun problema que no llego a ver cual puede ser, adjunto de nuevo el programa para que lo veais. Gracias.

#include <16f88.h>                   
#fuses XT,NOWDT,NOPROTECT 
#use delay(clock=4000000)             
#use RS232(baud=9600, xmit=PIN_B5, rcv=PIN_B2)

main()
{
   char estado;
   set_tris_a(0);               
   output_a(0);                   
   output_bit(PIN_A0, 1);       
   delay_ms(100);                 
   output_bit(PIN_A0, 0);       
   while(1)
    {
     output_bit(PIN_A1, 1);   
   if (kbhit())     
     estado=getc();   
     switch(estado){                     
         case '0': 
               output_bit(PIN_A0, 0); break;       
         case '1': 
               output_bit(PIN_A0, 1); break;       
        }
     }
}
Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: AngelGris en 20 de Febrero de 2014, 08:43:46
  Ten en cuenta que si envías el 0 en modo ascii tu case está equivocado ya que el caracter 0 es el código decimal 48
Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: rivale en 20 de Febrero de 2014, 11:10:47
  Ten en cuenta que si envías el 0 en modo ascii tu case está equivocado ya que el caracter 0 es el código decimal 48

exacto!, tienes que ver si estas enviando un 0 o un '0', si esta entrando al case, pero no esta cumpliendo con ninguna condición

agregale el estado de "default" a tu switch para que confirmes que si entra, podrias hacer un echo para ver que estas recibiendo


Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: sparta13 en 21 de Febrero de 2014, 21:54:53
esta bien entiendo lo que están realizando, yo soy nuevo utilizando micro controladores, estoy realizando una comunicación serial con el PIC18f4550 me parece que es muy similar al 16, lo que deseo hacer es comunicar cadenas, como es esto que a la hora de escribir por el teclado una cadena no se "ledon" el PIC mande a alto un pin y a bajo si se escribe "ledoff" esta es una idea no se si puedan apoyarme:
#include <18f4550.h>
#include <string.h>                                                           
#FUSES INTHS,MCLR,PUT,NOBROWNOUT, CPUDIV1, PLL1                                 
                                                                               
#use delay(INTERNAL=4MHZ)                                                       
#use rs232 (BAUD=9600 , XMIT=PIN_c6 , RCV=PIN_c7, bits=8, parity=N, STOP=1)
#use standard_io(a)

void main ()
{
 int resultado;
 char string [10];
 char string2 [10];

for (;;)
{
 strcpy (string,"ledon");
 resultado=strcmp(string,string2);
 
 if (resultado==1)
 {
 output_high(PIN_A0);
 }
 if (resultado==0)
 {
 output_low(PIN_A0);
        }
     }
}
           
Título: Re: Problemas con el Pic 16f88 y el RS232
Publicado por: AngelGris en 21 de Febrero de 2014, 23:07:40
esta bien entiendo lo que están realizando, yo soy nuevo utilizando micro controladores, estoy realizando una comunicación serial con el PIC18f4550 me parece que es muy similar al 16, lo que deseo hacer es comunicar cadenas, como es esto que a la hora de escribir por el teclado una cadena no se "ledon" el PIC mande a alto un pin y a bajo si se escribe "ledoff" esta es una idea no se si puedan apoyarme:
#include <18f4550.h>
#include <string.h>                                                           
#FUSES INTHS,MCLR,PUT,NOBROWNOUT, CPUDIV1, PLL1                                 
                                                                               
#use delay(INTERNAL=4MHZ)                                                       
#use rs232 (BAUD=9600 , XMIT=PIN_c6 , RCV=PIN_c7, bits=8, parity=N, STOP=1)
#use standard_io(a)

void main ()
{
 int resultado;
 char string [10];
 char string2 [10];

for (;;)
{
 strcpy (string,"ledon");
 resultado=strcmp(string,string2);
 
 if (resultado==1)
 {
 output_high(PIN_A0);
 }
 if (resultado==0)
 {
 output_low(PIN_A0);
        }
     }
}
           


  Mas allá que tu problema tenga que ver con la comunicación serial, te recomiendo abrir un nuevo tema. De ésa manera tanto éste como tu tema quedarán más ordenados.