Autor Tema: Consulta I/O PIC16F628A  (Leído 2642 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Corleone

  • PIC10
  • *
  • Mensajes: 4
Consulta I/O PIC16F628A
« en: 18 de Octubre de 2010, 09:42:56 »
Estimados,
   Luego de leer por un tiempo el foro me interese por empezar a hacer algunas pruebas. Lo que he intentado (Sin mucho éxito la verdad) es hacer algo simple para entender los rudimentos y utilizar ese conocimiento como plataforma de aprendizaje.
   En si tome distintos códigos de los varios ejemplos que hay posteados y los he alterado para probar sus consecuencias.
   El problema que me he encontrado es que no logro hacer que el PIC reciba un 1 desde el pulsador.
Ya que carezco totalmente de conocimientos de electrónica, no se si me esta faltando algún componente (resistencia por ejemplo) para lograr lo que quiero.
Descripción del circuito.
Asumo que no hace falta pero, considerando que lo que abunda no daña, describo lo que he montado en la Protoboard.
•   Pic: PIC16F628A
•   Leds: dos, conectados a RB7 y RB6 compartiendo una línea común de vss con una resistencia de 200 ohms (aquí aclaro que no entiendo que función cumplen las resistencias, pero me han dicho que ponga una, así que cual chimpancé entrenado, lo he hecho)
•   Pulsador: Conectado a Vdd y RB5
•   Alimentación: 4.5 v (tres pilas AAA)

Programa:
Objetivo: Simplemente en su estado inicial enciende el led conectado a RB7 y RB6 queda apagado. Al detectar la pulsación del botón conectado a RB5 debe invertir el estado de los leds.

#include <16F628A.h>
#fuses INTRC_IO,WDT,NOPROTECT,NOMCLR,BROWNOUT
#use delay (clock=4000000)
#use fast_IO(B)

void main(void)
{
   set_tris_b(0x20); //Habilito RB5 como entrada
   disable_interrupts(GLOBAL);
   output_high(PIN_B7);
   output_low(PIN_B6);
   for(;;)
   {
      if(input(PIN_B5))
      {
output_high(PIN_B6);
         output_low(PIN_B7);
      }
   }
}

Independientemente de lo mejorable del código,  no logro hacer que el botón afecte a los leds y es aquí donde necesito ayuda.
¿Alguien podra decirme que estoy haciendo mal?
Desde ya muchísimas gracias.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Consulta I/O PIC16F628A
« Respuesta #1 en: 18 de Octubre de 2010, 10:09:23 »
Hola Corleone, bienvenido al foro.  Fijate que por aquí hay un caso muy parecido al tuyo.  Fijate en alguna de las formas en que se puede hacer el programa y la acondicionas para lo que necesitas.  De momento te diría que le pongas una resistencia por cada LED mejor de 330 ohmios y a la entrada del pulsador en RB5 le pongas una resistencia pullup de unos 10K ohmios.  Aunque estás trabajando con baterías, tampoco sobraría un capacitor de desacoplo en la entrada de alimentación del PIC. 
Saludos!

Desconectado Corleone

  • PIC10
  • *
  • Mensajes: 4
Re: Consulta I/O PIC16F628A
« Respuesta #2 en: 18 de Octubre de 2010, 10:39:41 »
Muchas Gracias bmb por la pronta respuesta. Ya me pongo a estudiar el caso que citas.

Salu2

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Consulta I/O PIC16F628A
« Respuesta #3 en: 18 de Octubre de 2010, 10:52:47 »
Salvo que hayas programado el pic que va a utilizar el oscilador interno, te falta el oscilador con sus respectivos condensadores de desacoplo. La conexion la puedes ver en datasheet del micro.
Otra cosa importante es que el pin MCRL debes de conectarlo bien a +Vdd de forma directa o bien atraves de una resistencia 10K puede valer.

Otra cosa es que en la configuracion de los fuses debes de dejar, para empezar a trabajar con los pics, el watchdog deshabilitado.

la funcion de las resistencias es limiotar la corriente que circulara por los leds. El maximo que puede dar el pic es de aprox. 20mA por pin y maximo del pic 200mA.

fermin

P.d.: Perdón no ví que el WDT lo tienes deshabilitado y que el oscilador está interno. pero sigue faltandote la resistencia al pin MCLR. Quizas deberias de añadir algun condensador a la entrada para evitar los rebotes del interruptor y/o añadir algun pequeño retardo por software para evitar ese rebote de los contactos al abrir o cerrar el interruptor. Ademas la entrada si la tienes unida a Vdd pienso que deberias tambien unirla a masa para fijar un nivel cuando este el interruptor esté abierto.
« Última modificación: 18 de Octubre de 2010, 17:28:30 por Fer_TACA, Razón: Añadir P.D »
Todos los días se aprende algo nuevo.