Me encuentro realizando un proyecto para controlar el encendido y apagado de las luces de mi camioneta, todo empezó cuando se descompuso la llave del encendido de luces (una palanquita que esta por el volante), entonces se me ocurrió emular la misma función de esa palanca con un pulsador y empecé a diseñar circuitos que me ayudaran con esa tarea, primero probé con un contador con Flip Flops JK que lo único que hacía era una secuencia de dos bits (0,1,3,1,0) en donde el estado cero era igual a los cuartos y las luces apagadas, con el uno solo los cuarto prendían y con el tres los cuartos permanecían prendidos y además se encendían los faros, y de regreso hasta quedar apagados los faros y los cuartos, cada cambio de estado era hecho mediante un pulso proveniente de un circuito debounce, el problema de este sistema era que solo en caminos en donde no hubiera baches funcionaba correctamente, pero al pasar a terracería las vibraciones provocadas por los baches ocasionaban un cambio de estado en el contador provocando que los faros se apagaran.
Ahora estoy tratando de controlar las luces con un pic ya que considero que será menos sensible a las vibraciones por el hecho de que el control radica en un solo IC, no sé si estoy en lo cierto??. Para programar el pic utilizo lenguaje C y como compilador el PCWHD, cabe mencionar que este es el primer proyecto que realizo con un pic y el compilador pcw. Bueno el punto es que ya logre tener avances en la programación y logre hacer CASI la misma secuencia de (0,1,3,1,0) cada vez que el pic recibe un pulso en el bit 0 del puerto a y digo CASI porque no he logrado que se regrese al estado cero, el programa ya lo repace y no encuentro el error, cuando lo simulo en proteus solo funciona si el PB se queda presionado, pero si trato solo de mandar pulso logro que la secuencia sea 0,1,3,1 y el siguiente estado toma un valor al azar y no es cero. no se si me puedan ayudar con esto??, tal vez la solución está en implementar un debounce en el programa?? O que me siguieren.
Adjunto el diagrama y el programa.
Saludos.
Ahora estoy tratando de controlar las luces con un pic ya que considero que será menos sensible a las vibraciones por el hecho de que el control radica en un solo IC, no sé si estoy en lo cierto??. Para programar el pic utilizo lenguaje C y como compilador el PCWHD, cabe mencionar que este es el primer proyecto que realizo con un pic y el compilador pcw. Bueno el punto es que ya logre tener avances en la programación y logre hacer CASI la misma secuencia de (0,1,3,1,0) cada vez que el pic recibe un pulso en el bit 0 del puerto a y digo CASI porque no he logrado que se regrese al estado cero, el programa ya lo repace y no encuentro el error, cuando lo simulo en proteus solo funciona si el PB se queda presionado, pero si trato solo de mandar pulso logro que la secuencia sea 0,1,3,1 y el siguiente estado toma un valor al azar y no es cero. no se si me puedan ayudar con esto??, tal vez la solución está en implementar un debounce en el programa?? O que me siguieren.
Adjunto el diagrama y el programa.
Saludos.
Código:
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOPROTECT
#byte port_a=0x05
#byte port_b=0x06
int contador;
void main()
{
set_tris_a(0x01);
set_tris_b(0xfc);
port_b=0;
contador=1;
while (true)
Inicio:
revisar:
{
if (port_a==1)
{
delay_ms(1000);
port_b=contador;
contador=contador+2;
revisar_1:
if (port_a==1)
{
delay_ms(1000);
port_b=contador;
contador=contador-2;
revisar_2:
if (port_a==1)
{
delay_ms(1000);
port_b=contador;
revisar_3:
if (port_a==1)
{
delay_ms(1000);
port_b=0;
contador=1;
delay_ms (100);
goto Inicio;
}
else if (port_a==0)
goto revisar_3;
}
else if (port_a==0)
goto revisar_2;
}
else if (port_a==0)
goto revisar_1;
}
else if (port_a==0)
goto revisar;
}
}