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.
buenas ¿Cómo hago que se apaguen cada led en dirección izquierda. Cuando todos los leds están apagados, se prendan?