Pic16f819 inputs B4 y B5 muy sensibles

Hola, espero me puedan ayudar.
Resulta que no puedo hacer que un simple botón encienda un led.
Estoy usando el pic16f819, tengo configurado el pin b4 y b5 como inputs y b2 y b3 como salidas,,"b4 enciende b3" y "b5 enciende b2"
No sé si me falta algo en el código o alguna conexión, estoy usando el ccs compiler, en proteus la simulación sale muy bien, pero al armarlo a veces encienden uno seguido del otro y a veces al revés por ejemplo b4 enciende b2 y b5 enciende b3 y aveces encienden 3 o 4 veces continuas.

El código es el siguiente:

Código:
///////////////////////////////////////////////////////////////////////////////////////////////////
#include <16F819.h>
#fuses XT,NOWDT,NOLVP,NOPROTECT,PUT,NOLVP,BROWNOUT
#use delay (clock=4000000)


void main()
{
set_tris_b(0b00110000);
output_b(0b00000000);

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   // TODO: USER CODE!!
while(true)
{
   if (input(pin_b4))
   {
   output_high(pin_b3);
   delay_ms(1000);
   output_low(pin_b3);
   delay_ms(1000);
   } 

   
   if (input(pin_b5))
   {
   output_high(pin_b2);
   delay_ms(1000);
   output_low(pin_b2);
   delay_ms(1000);
   }
   
}

}
/////////////////////////////////////////////////////////////////////////////////////////////////

Estoy usando un 7805, un cristal 4mhz, 2 leds con sus resistencias, un alambre para simular el botón alimentando 5v al input ya sea b4 o al b5 "sólo un pulso"

De antemano, muchas gracias.
 
Última edición por un moderador:
hola, tengo una duda con un simple programita para encender y apagar un led. uso el programa el PCWHD y uso el pic16f819. segun tengo configurado el reloj interno, compila bien en el programa y al momento de usar el pic en el protoboardno se enciende nada. abajo esta el programa, espero resolver este problema en las vacaciones jejejjee. toda opnion es de gran ayuda gracias :D

PD: soy estudiante de universidad en electronica y alimento mi protoboard con un cargador de 5v y de 0.7A
 

Adjuntos

  • proyecto.txt
    587 bytes · Visitas: 28
Hola. Tengo una duda con un simple programita para encender y apagar un LED.
Uso el programa el PCWHD y uso el pic16f819.
Según tengo configurado el reloj interno, compila bien en el programa y al momento de usar el pic en el protoboardno se enciende nada.
Prueba con este simple programa.
Código:
#include <16f819.h>
#fuses   NOBROWNOUT
#use     delay(internal = 4MHz)

void main(void)
{ 
   setup_oscillator(OSC_4MHz); // Configurar el oscilador interno a 4MHz.
   
   output_high(pin_b0);
   delay_ms(500);
   
   while (true)
   {
      output_toggle(pin_b0);          
         delay_ms(500);
      }           
   }
Tienes mal la configuración del oscilador interno en tu programa y no es necesario configurar tantas cosas.

Mira el valor de los registros con algún debugger (Depurador) para encontrar errores de configuración.

Registros involucrados en este programa:
OSCCON ---> Configura Oscilador Interno
TRISB ---> Configura entradas y salidas del puerto B
PORTB ---> Puerto I/O con diferentes módulos.

Suerte.
 
Prueba con este simple programa.
Código:
#include <16f819.h>
#fuses   NOBROWNOUT
#use     delay(internal = 4MHz)

void main(void)
{ 
   setup_oscillator(OSC_4MHz); // Configurar el oscilador interno a 4MHz.
   
   output_high(pin_b0);
   delay_ms(500);
   
   while (true)
   {
      output_toggle(pin_b0);          
         delay_ms(500);
      }           
   }
Tienes mal la configuración del oscilador interno en tu programa y no es necesario configurar tantas cosas.

Mira el valor de los registros con algún debugger (Depurador) para encontrar errores de configuración.

Registros involucrados en este programa:
OSCCON ---> Configura Oscilador Interno
TRISB ---> Configura entradas y salidas del puerto B
PORTB ---> Puerto I/O con diferentes módulos.

Suerte.

muchas gracias, si funciona, solo que al conectarlo al protoboard, lo hace pero solo cuando acerco la mano, (estatica eso creo), y en ocasiones se apaga el led o se queda prendido, tendria que utilizar protecciones asi como en el led (resistencia)?
 
Muchas gracias, si funciona, solo que al conectarlo al protoboard, lo hace pero solo cuando acerco la mano, (estática eso creo), y en ocasiones se apaga el led o se queda prendido.
¿Tendría que utilizar protecciones así como en el led (resistencia)?
Se me ocurre que no has colocado el pin de Master Clear hacia VDD. (Pin 4 = RA5)
Lo puedes colocar directamente hacia VDD o con una resistencia de 4.7k o 10k.
También puedes agregar el fuse NOMCLR y evitar que ese pin funcione como reset.

Verifica eso y nos comentas.
 
Se me ocurre que no has colocado el pin de Master Clear hacia VDD. (Pin 4 = RA5)
Lo puedes colocar directamente hacia VDD o con una resistencia de 4.7k o 10k.
También puedes agregar el fuse NOMCLR y evitar que ese pin funcione como reset.

Verifica eso y nos comentas.

tienes razon, funciona bien con la resitencia de 10K, de hecho las tiene en todo el puerto A, sgun investigue es para proteccion, asi el pic lo detectara como un 1 logico y no un dato indeterminado... gracias por la info :aplauso:
 
Atrás
Arriba