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...)
La desactivacion del WDT de que sirve exactamente? Es que nunca me he parado a pensar como se usaba esa utilidad y ya que es la parte que desconozco de tu programa y que esta relacionada con el tiempo, pues lo veo una causa probable
Transcurrido un tiempo si no se resetea el wdt se resetea el pic, es para evitar que se cuelgue.
si quieres tener un un cero cuando pulsas y un uno cuando no si debes activar el pull-up, yo pondría una r en serie con el pulsador, para no hacer un corto por error, esto sería para no usar una r externa.
SI usas la interna del pic no es necesario poner la r fuera, ya que esta hace la función de la externa. de que valor es la R que has puesto, supongo que la impedancia de entrada del pic será muy alta, pero si de todas formas pones una r gorda (megas) tb lo podría tomar como un cero en la entrada del pic.
Si solo pones el pulsador a masa y no activas el pull-up intero ese pin está al aire, y puede tener cualquier valor 1 o 0.
Respecto al programa en c nunca he usado ese compilador, yo te recomiendo para los 16 asm,
else
output_low(led); //si no, apagar
esto no es necesario que lo pongas dentro del bucle, ponlo una vez fuera para inicializar el led, ya que una vez que entra en el primer for ya no sale, y si no entra esta apagado, es una instrucción menos cada vez que se ejecuta el bucle.
Hola a todos. Bueno, creo que al final resolvi el problema, me parece que en vez de compilar el programa con el include del pic que le correspondia le puse otro pic, se ve que al cargar el programa cargue otro que hice con otro pic...xDDD Puse el include correcto y sustitui los for(;;) por un while(1), y la verdad es que ya funciona perfectamente 😆
JM, respecto a las pull-ups internas del pic... ¿como las activo??, ahora mismo en la prueba del programa tenia puesta una resistencia de Vcc al pin del pulsador, pero si quiero usar las internas del pic, ¿que debo hacer?
Un saludo y gracias por contestar 😀