Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/06/2015 #1


Pulsador on off con modulo RF
Muy buenos dias compañeros del foro,
acabo de comprarme esos modulos rf 4 canales
para ser exacto el XD-YK04



Lo que estoy tratando de hacer en el CCS es hacer un on off
con cada pulsador del modulo a travez del pic 16f877a,
pero no logro hacerlo andar :(
mi programa va asi

Código:
#include <16f877A.h>
#FUSES XT,NOWDT
#USE delay (clock=4M) 
#USE STANDARD_IO(a)
#USE STANDARD_IO(b)

VOID MAIN()
{

output_b(0b00000000);

WHILE(1)
{
IF(INPUT(PIN_A0)==0)
{
DELAY_MS(15);//1111111111111111111111111111111
IF(INPUT(PIN_A0)==1)
{
OUTPUT_TOGGLE(PIN_B0);
}
}
IF(INPUT(PIN_A1)==0)
{
DELAY_MS(15);//1111111111111111111111111111111
IF(INPUT(PIN_A1)==1)
{
OUTPUT_TOGGLE(PIN_B1);//
}
}
IF(INPUT(PIN_A2)==0)
{
DELAY_MS(15);//1111111111111111111111111111111
IF(INPUT(PIN_A2)==1)
{
OUTPUT_TOGGLE(PIN_B2);//
}
}
IF(INPUT(PIN_A3)==0)
{
DELAY_MS(15);//1111111111111111111111111111111
IF(INPUT(PIN_A3)==1)
{
OUTPUT_TOGGLE(PIN_B3);
}
}
}
}
la conexiones son directas del modulo receptor directo a las entradas del pic ...
01/06/2015 #2
Moderador general

Avatar de DOSMETROS

Comprobaste previamente si las salidas del módulo receptor responden ?
01/06/2015 #3


DOSMETROS dijo: Ver Mensaje
Comprobaste previamente si las salidas del módulo receptor responden ?
Si
DOSMETROS probe a su salida con leds y funciona correctamente todo sus canales
02/06/2015 #4


Yo veo muy raro como esta hecho esto. Para cada entrada solo tienes 15 ms para pulsar el botón tras la comparación de que este en bajo. Pienso que eso es prácticamente imposible "acertar". Me explico: pruebas si Ax está bajo entonces en 15 ms pruebas si esta alto y en ese caso cambias la salida correspondiente. Si no estaba bajo pasas a otro. De este modo tienes que pulsar en los 15 ms siguientes a la prueba de bajo. No lo veo, debes cambiar eso, supongo que te problema va por ahí.
02/06/2015 #5
Moderador

Avatar de D@rkbytes

Yo veo que el código para verificar los 4 canales sería muy sencillo según lo que muestra este vídeo.
Al parecer el módulo pone un 1 el canal correspondiente cuando se activa, (Es lo que noto por la posición del LED en el protoboard y lo que comenta el autor.) y se mantiene en 1 mientras siga presionada la tecla del canal.

Entonces, un código sencillo para realizar la verificación de los canales, podría quedar así:
Código PHP:
#include <16f877a.h>
#use     delay(crystal = 4MHz)
#use     fast_io(b)


void main (void)
{
   
set_tris_b(0xF0);          
   
output_b (0xF0);
   
   while (
true)
   {
      if(
input(pin_a0))          // Si RA0 = 1 entonces...
      
{
         
output_toggle(pin_b0);  // Cambiar de estado RB0
         
while(input(pin_a0))    // Mientras que RA0 sea 1...
         
{
            
delay_ms(50);        // Retardo de 50 ms. Para antirrebote.
         
}
      }
      
      if(
input(pin_a1))          // Igual que arriba pero con RA1 y RB1
      
{
         
output_toggle(pin_b1);
         while(
input(pin_a1))
         {
            
delay_ms(50);
         }
      }
      
      if(
input(pin_a2))          // Igual que arriba pero con RA2 y RB2
      
{
         
output_toggle(pin_b2);
         while(
input(pin_a2))
         {
            
delay_ms(50);
         }
      }
      
      if(
input(pin_a3))          // Igual que arriba pero con RA3 y RB3
      
{
         
output_toggle(pin_b3);
         while(
input(pin_a3))
         {
            
delay_ms(50);
         }
      }
   }

No sé si las salidas del módulo mantengan un estado definido cuando están inactivas.
De lo contrario se necesitará colocar resistencias Pull-Down en cada pin de entrada del PIC.

Y si el pin del canal activo es un 0, entonces sólo basta con cambiar...
if(input(pin_a0)) por if(!input(pin_a0))
En este caso se necesita colocar resistencias Pull-Up en cada pin de entrada o usar el puerto B como entradas, porque éste tiene resistencias Pull-Up internas.

Prueba el código, y si es así como trabaja ese módulo, este programa debe funcionar.

Suerte.
02/06/2015 #6

Avatar de Gudino Roberto duberlin

Hola, el detalle que veo en tu código de programa por ej. en donde aplicas un TOGGLE, que se encuentra bajo una condición de estado de PIN, pues mientras la condición se dé, dicha función TOGGLE, cambiará de estado al pin que hace referencia, quizás cientos de veces por seg. mientras esté ejecutándose. Lo que debes realizar es, una condición adicional a la sentencia if, para que cuando se ingrese por primera vez, no lo haga otra vez hasta que el pin haya vuelto hasta su estado inicial.
02/06/2015 #7
Moderador

Avatar de D@rkbytes

En el código que expuse eso queda resuelto al usar un bucle while comparativo que hace que la instrucción output_toggle() no se repita.
02/06/2015 #8

Avatar de Gudino Roberto duberlin

Es verdad que el código que expones resuelve ese detalle. Pero sólo sirve para prueba del módulo. Pues si el programa se diseña para algo específico, NO permite que se ejecute otra tarea.
02/06/2015 #9
Moderador

Avatar de D@rkbytes

Gudino Roberto duberlin dijo: Ver Mensaje
Pues si el programa se diseña para algo específico, NO permite que se ejecute otra tarea.
Cierto, pero eso sólo pasaría si se mantiene constantemente pulsada la tecla en el control remoto.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.