Autor Tema: Problemas con el Pic 16f88 y el RS232  (Leído 2164 veces)

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

Desconectado robotec_electronics

  • PIC10
  • *
  • Mensajes: 2
Problemas con el Pic 16f88 y el RS232
« 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;       
        }
     }
}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #1 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado robotec_electronics

  • PIC10
  • *
  • Mensajes: 2
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #2 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;       
        }
     }
}

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #3 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
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #4 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


"Nada es imposible, no si puedes imaginarlo"

Desconectado sparta13

  • PIC10
  • *
  • Mensajes: 7
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #5 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);
        }
     }
}
           

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con el Pic 16f88 y el RS232
« Respuesta #6 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.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything