TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nexus148 en 26 de Noviembre de 2009, 14:10:39
-
Hola
Tengo un problema con un a entrada, que no consigo resolver.
El programa es este:
#include <16f818.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP
#use delay(clock=8000000)
#define LED_Verde PIN_B2
#define Detector PIN_B4
void configuracion(void)
{
set_tris_b(0b00010001);
}
void main(void)
{
configuracion();
do {
if(input(Detector))
output_low(LED_Verde);
else
output_high(LED_Verde);
}while(TRUE);
}
El programa simplemente enciende un led, cuando tiene la entrada sobre el rb4.
Si yo dejo el programa como está, activo la entrada y cuando la desactivo el led se queda parpadeando.
Si cambio la configuracion del puerto B por esta: set_tris_b(0b00010000), quitando como entrada el RB0, ya funciona bien.
Resumen:
set_tris_b(0b00010001); Led parpadea
set_tris_b(0b00010000); Funciona OK
Un saludo
-
Hola, ¿pusiste una resistencia pulldown en RB4? Eso aseguraría que cuando quitas los 5V de B4 se tengan 0V en B4.
Otra cosa...
if(input(Detector))
output_low(LED_Verde);
else
output_high(LED_Verde);
Si Detector tiene 5V entonces se apaga LedVerde. Si Detector tiene 0V entonces se prende LedVerde. ¿Conectaste el led invertido y a 5V en vez de tierra?
-
Hola he probado de 3 formas:
port_b_pullups(FALSE);
port_b_pullups(0b00010001);
port_b_pullups(0b00010000);
y sigue igual.
Por el tema del led, desde la salida tengo el anodo del led, desde el catodo tengo una R de 330 y luego a tierra (vss).
Un saludo
-
Acabo de encontrar la solucion, sin sabar el motivo.
He probado varias cosas y al final simplemente añadiendo la configuracion del puerto A, ya funciona.
void configuracion(void)
{
set_tris_a(0b00000001);
set_tris_b(0b00010001);
port_b_pullups(0b00010001);
}
Lo que está claro que desde ahora, hay que configurar todos los puertos, se usen o no.
Un saludo
-
Ermm... me refería a una pulldown externa jeje
Bueno, no está muy claro tu problema pero bueno, quedó resuelto. :huh: