Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola a todos. Vereis, os escribo porque estoy intentando hacer que un led parpadee. He revisado cien mil veces el programa, no se donde puede estar el error, a ver si vosotros lo encontrais:
#include <16LF84A> //pic a utilizar
#fuses XT,NOWDT //instrucciones
#use delay (clock=4000000) //Frecuencia del reloj=4Mhz
#define pulsador PIN_B0
#define led PIN_B7 //definiciones de funciones
void main() //funcion principal
{
set_tris_b(0x7F); // puerto B como 01111111
for(;;) // bucle infinito
{
if (input(!pulsador)) // si pulso el pulsador
{
for(;;)
{
output_high(led); //parapadea led
delay_ms(500);
output_low(led);
delay_ms(500);
}
}
else
output_low(led); //si no, apagar
}
}
He probado de todo, y aun asi no consigo que se encienda el led :S Como pulsador, lo unico que he puesto es una resistencia de Vcc hasta RB0, y de ahi he sacado un cable para conectar a GND...
Un saludo y gracias de antemano.
(Los parentesis salen todos en la misma fila cuando envio el mensaje, no se porqué, pero en realidad deberian estar bien ordenados...)
Cambia
if (input(!pulsador))
por
if (!input(pulsador))
A ver qué tal 😉
Un saludo
gONzAO
Hola
¿El problema lo tienes en la detección de la pulsación o en encender el led?
Prueba el mismo programa pero sin la sentencia de chequear la entrada.
Si no te funciona el led chequea:
1.- El cristal de cuarzo o resonador está oscilando
2.- Has conectado el MCLR a Vcc con una resistencia
3.- Que el fallo no esté en la electrónica
Saludos
Muy buenas Tinrik, supongo que con lo que te ha dicho gONzAO te habrá funcionado, pero es posible que aun asi te parezca que no funcione o que funciona por "Imposición de manos" es decir, que cuando acercas la mano al circuito empieza a funcionar o hace cosas raras... Parece que usas CCS, así que te recomiendo que uses esta linea en el encabezado:
#fuses NOLVP
Pasé meses con problemas por esa tonmtería...
Bueno, ante todo gracias por responder. Al poner !input, como decia Gonzao, he conseguido que reaccione al apretar el pulsador. Sin embargo, cuando lo pulso el led se queda encendido, en vez de parpadear, por que puede ser? Probare un while(1) en vez de un for(;;) ya os contare...
Otra cosilla... Vereis el pulsador lo he conectado poniendo una resistencia de que si no se pulsa, entra Vcc a RB0, y si pulso, pues se conecta a masa.
Pero me he dado cuenta de que si solo pongo el pulsador directo a masa el led se enciende, es como si ya hubiera pulsado. Tenia entendido que en el puerto B el pic tenia unas resistencias pull-up, debo activarlas para conseguir ese resultado??
Ah Mif, he probado a meter el fuse de NOLVP y me da error de compilacion
" UNKOWN KEYWORDS IN #FUSES "NOLVP" ", este fuse es prescindible?
Un saludo y gracias de nuevo 🙂