SECUENCIA DE LEDS CON MICROCONTROLADOR PIC16F7887
¿Qué es un microcontrolador?
Es un “chip” o un circuito integrado programable, en el cual permite ejecutar un conjunto de instrucciones predefinidas.
Elementos básicos de un microcontrolador.
CPU(Unidad de procesamiento Central): Se encarga de ejecutar cada instrucción y controlar que dicha ejecución sea la adecuada.
Memorias: Son aquellas que guardan las instrucciones y los diferentes datos.
tipos de memoria.
Persistentes: Son aquellas, donde el contenido se almacena de forma permanente cuando no hay alimentación.
Volátiles: Son aquellas, donde el contenido se pierde al dejar de recibir alimentación.
Las pastillas de entrada y salida: Se encarga de comunicar el microcontrolador con el exterior.
El PIC16F887: Es un microcontrolador de Microchip. Su consumo de potencia es muy bajo. Tiene cinco puertos llamados A,B,C,D y E; pueden ser utilizados como entrada digital, salida digital, salida de PWM, entrada para conversión análoga a digital, transmisión o recepción datos.
Características del PIC16F7887
- Número de pines: 40 pines.
- Voltaje de alimentación:0v a 5.5v.
- Tres temporizadores/contadores independientes.
- Frecuencia de operación 0-20MHZ.
- Tiene 256 bytes de memoria EEPROM.
- Tiene memoria ROM de 8k.
- Tiene 368 bytes de memoria RAM.
FUNCIONES UTILIZADAS PARA LA PROGRAMACIÓN DEL PIC.
PORTA, PORTB, PORTC, PORTD y PORTE: Los puertos del microcontrolador, son la manera como se comunica con el mundo exterior.
SET_TRIS_A(valor), SET_TRIS_B(valor), SET_TRIS_C(valor), SET_TRIS_D(valor), SET_TRIS_E(valor): Son registros de configuración, que indican si los pines del puerto son de entrada o salida.
Hay que tener en cuenta que en los PIC de MICROCHIP, las entradas se configuran con unos y las salidas con ceros.
BIT_TEST(valor, bit): Prueba el estado del bit del valor. Devuelve uno.
BIT_SET(valor,bit): Pone en uno el bit especificado del valor.
#INCLUDE <16F887.h>: Es la librería del microcontrolador que se va a utilizar, en este caso se utiliza el pic16F887.
#USE DELAY(CLOCK=4000000): Configuración de la frecuencia del reloj del sistema a 4MHZ.
#FUSES XT, NOPROTECT,NOWDT: Son fusibles de configuración que se pueden habilitar o deshabilitar, de acuerdo a lo que se necesite en el programa.
#FUSES XT: Oscilador a cristal estándar.
#FUSES NOPROTECT:Protección contra lectura de la FLASH desactivada.
#FUSES NOWDT: Watch Dog Timer desactivado.
EJERCICIO INTRODUCTORIO: SECUENCIA DE LEDS CON DOS PULSADORES.
PROGRAMA EN PIC C COMPILER.
//Secuencia leds con pulsadores #INCLUDE <16F887.h> #USE DELAY (CLOCK=4000000) #FUSES XT,NOPROTECT,NOWDT //Definición de registros #BYTE PORTA=5 #BYTE PORTB=6 //Definición de entradas #DEFINE SW1 PORTA,0 #DEFINE SW2 PORTA,1 main(){ //Definición de salidas y etradas digitales SET_TRIS_B(0B00000000); //Salidas digitales SET_TRIS_A(255); //Entradas digitales SET_TRIS_C(255); //También puedo poner 0B11111111 Como entrada digital PORTA=0X00; PORTB=0X00; WHILE(1){ IF((BIT_TEST(SW1)==0) && (BIT_TEST(SW2)==0)) { BIT_SET(PORTB,0); DELAY_MS(100); BIT_SET(PORTB,1); DELAY_MS(100); BIT_SET(PORTB,2); DELAY_MS(100); BIT_SET(PORTB,3); DELAY_MS(100); BIT_SET(PORTB,4); DELAY_MS(100); BIT_SET(PORTB,5); DELAY_MS(100); BIT_SET(PORTB,6); DELAY_MS(100); BIT_SET(PORTB,7); DELAY_MS(100); } IF((BIT_TEST(SW1)==0) && (BIT_TEST(SW2)==1)) { PORTB=0B00011000; DELAY_MS(100); PORTB=0B00100100; DELAY_MS(100); PORTB=0B01000010; DELAY_MS(100); PORTB=0B10000001; DELAY_MS(100); } IF((BIT_TEST(SW1)==1 ) && (BIT_TEST(SW2)==0)) { PORTB=0B01010101; DELAY_MS(100); PORTB=0B10101010; DELAY_MS(100); IF(BIT_TEST(SW1)==1) { PORTB=0X00; } } IF((BIT_TEST(SW1)==1) && (BIT_TEST(SW2)==1)) { PORTB=0B11000011; DELAY_MS(100); PORTB=0B00111100; DELAY_MS(100); } PORTB=0X00; } }
Explicación del circuito:
Con el pic16f887 se controla el encendido y apagado de la secuencia de los leds. Con los cuatro estados lógicos para cada pulsador se genera una secuencia diferente.
Pulsador Uno | Pulsador Dos | Secuencia |
Cero | Cero | Prenden cada led en dirección izquierda. Cuando todos los leds están prendidos, se apagan. |
Cero | Uno | Pares e impares |
Uno | Cero | Se prenden cada led del nibble alto hacia la izquierda y se prenden cada led del nibble bajo hacia la derecha. |
Uno | Uno | Se prenden de a dos leds del nibble alto hacia la izquierda y se prenden de a dos leds del nibble bajo hacia la derecha. |
Materiales:
- Dos resistencias de 10 KΩ
- Nueve resistencias de 220Ω
- Ocho leds rojos.
- Un pic16F887.
- Dos pulsadores.
VÍDEO DE LA SIMULACIÓN DEL CIRCUITO.
VÍDEO DE LA PRUEBA DEL CIRCUITO
CONTENIDOS MÁS RELEVANTES.