fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

¿Por que no me va e...
 
Avisos
Vaciar todo

¿Por que no me va este programa???

9 Respuestas
6 Usuarios
0 Reactions
4,136 Visitas
tinrik
Respuestas: 42
Topic starter
(@tinrik)
Eminent Member
Registrado: hace 18 años

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...)

Responder
8 respuestas
technik
Respuestas: 287
(@technik)
Reputable Member
Registrado: hace 18 años

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

Responder
_jm_
Respuestas: 961
 JM
(@_jm_)
Prominent Member
Registrado: hace 19 años

Transcurrido un tiempo si no se resetea el wdt se resetea el pic, es para evitar que se cuelgue.

Responder
_jm_
Respuestas: 961
 JM
(@_jm_)
Prominent Member
Registrado: hace 19 años

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.

Responder
tinrik
Respuestas: 42
Topic starter
(@tinrik)
Eminent Member
Registrado: hace 18 años

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 😀

Responder
Página 2 / 2
Compartir: