Está en la página 1de 4

Arquitectura de Microcontroladores:

Práctica 8. Primeros códigos en C


Oscar Manuel Mendoza Rosas* and Diego Paniagua Molina**
División de Ciencias e Ingenierı́as de la Universidad de Guanajuato–Campus León
(Fecha de preparación: 27 de octubre de 2022)
En estas 3 primeras practicas se realizo el encendido de un LED controlado por un push button;
utilizando el mismo circuito se realizo el encendido de un LED pero ahora implementando un retardo
de un segundo entre cada acto; y por último se configuro el TMR0 para hacer un contador cuyo
rango era de 0 a 9, presentando los valores en 1 display de 7 segmentos.

I. INTRODUCCIÓN

LED de 7 segementos
El display 7 Segmentos es un dispositivo opto-electrónico
que permite visualizar números del 0 al 9. Existen dos ti-
pos de display, de cátodo común y de ánodo común. Este
tipo de elemento de salida digital o display, se utilizabá
en los primeros dispositivos electrónicos de la década de
los 70’s y 80’s. Hoy en dı́a es muy utilizado en proyectos
educativos o en sistemas vintage. También debido a su
facilidad de uso, mantenimiento y costo, son utilizados
en relojes gigantes o incluso como marcadores en algunos
tipos de canchas deportivas.
Es importante mencionar que los display de 7 segmen-
tos, dado que están construidos con diodos LED, requie-
ren una corriente máxima. En otras palabras se requiere
colocar una resistencia para limitar la corriente. Dicha
resistencia depende de la corriente que se quiera suminis-
trar al LED ası́ como de la caı́da de voltaje. Figura 1. Distribucion de los LED´s en un Display de 7 seg-
El display de 7 segmentos tiene una estructura casi mentos convencional.
estándar en cuanto al nombre de los segmentos. Para
dicho elemento, se cuenta con 7 leds, uno para cada seg-
mento. Para cada segmento, se le asigna una letra desde significa que este tipo de display se ≪ controla≫ con ‘1’ s
la ≪a≫ hasta la ≪g≫. Esta asignacion la podemos ver en lógicos o con voltaje positivo.
detalle en la Figura 1
Existen dos tipos principales para los display 7 Cátodo común
segmentos. Esta diferencia depende principalmente del El display ánodo común es aquel cuyos ánodos están
arreglo como están conectados los leds que forman a conectados al mismo punto. Este tipo de display es
cada segmento. Sabemos que un led tiene dos terminales controlado por ceros, es decir que el microcontrolador
que se denominan: cátodo y ánodo. El ánodo es la o MCU, FPGA o microprocesador, le asigna a cada
parte positiva del LED, mientras que el cátodo es el pin segmento un cero lógico (también llamada tierra digital).
negativo. Entonces los tipos de display de 7 segmentos
se dividen en aquellos de cátodo común y los de ánodo De esta manera es como se controlan los LED´s den-
común. Entonces el display tendrá además de los 7 tro del display. Sin embargo es necesario un decodifica-
segmentos, 1 pin común. Este pin común se conecta al dor BCD el cuál puede ser una tabla o diccionario, una
catodo o al anodo dependiendo del tipo de display.[? ] matriz donde se asigne un numero binairo/decimal a su
representación en un display de 7 segmentos.
Ánodo común
El display cátodo común es aquel que tiene el pin común
II. MATERIALES
conectado a los negativos de los LED’s (cátodo). Esto
Para esta práctica se utilizaron los siguientes materia-
les:
* om.mendozarosas@ugto.mx
** d.paniaguamolina@ugto.mx Protoboard de 830 puntos
2

Cable rojo y negro (BOR enabled)


1 LED verde // #pragma config statements
should precede project file includes.
2 Push-buttons
// Use project enums instead
3 Resistencias de 330 Ohm´s of #define for ON and OFF.

2 Resistencias de 1k Ohm´s #include <xc.h>


1 PIC17F74 int main()
Fuente de voltaje de 5v {
// Voy a prender un LED conectado
2 Cables banana-caimán en RB0 controlado por un boton
colocado en RA2
2 Capacitores de 22 pF ADCON1=0X06;
TRISB=0x00;
1 Cristal oscilador de 20 mHz
TRISA=0X04;
Programador MasterProg
//TRISAbits.TRISA2

III. MÉTODOS TRISA2=1;

En esta práctica realizamos tres códigos en lenguaje C, while(1)


el primero fue básicamente encender un LED, el segundo {
un LED que enciende y apaga cada segundo, por último if(RA2==1)
para el tercero nos enfocamos en utilizar de forma correc- {
ta un convertidor BCD (Decimal Codificado en Binario) RB0=1;
a 7 segmentos, el cual es un código que presenta valo- // PORTBbits.RBO=1;
res decimales en formato binario, para ello forma grupos // PORTB=0X01;
de 4 bits para representar cada valor del 0 al 9 (siendo }
9=1001B el valor máximo). Para este convertidor BCD else
se realizó el proceso de codificación a través de una “ta- {
bla” que nos suministró el profesor la cual agregamos a RB0;
nuestro código, dándole los valores que tomara ya fueran }
para ánodo o cátodo comunes, en nuestro caso particular }
está configurado para ánodo común. }
2. LED Blink

IV. CÓDIGO FUENTE // PIC16F74 Configuration Bit Settings


// ’C’ source line config statements
// PIC16F74 Configuration Bit Settings // CONFIG
// ’C’ source line config statements #pragma config FOSC = HS
// Oscillator Selection bits
// CONFIG (HS oscillator)
#pragma config FOSC = HS #pragma config WDTE = OFF
// Oscillator Selection bits // Watchdog Timer Enable bit
(HS oscillator) (WDT disabled)
#pragma config WDTE = OFF #pragma config PWRTE = ON
// Watchdog Timer Enable bit // Power-up Timer Enable bit
(WDT disabled) (PWRT enabled)
#pragma config PWRTE = ON #pragma config CP = OFF
// Power-up Timer Enable bit // FLASH Program Memory Code
(PWRT enabled) Protection bit (Code protection off)
#pragma config CP = OFF #pragma config BOREN = ON
// FLASH Program Memory Code // Brown-out Reset Enable bit
Protection bit (Code protection off) (BOR enabled)
#pragma config BOREN = ON
// Brown-out Reset Enable bit
3

// #pragma config statements int main()


should precede project file includes. {
// Use project enums instead of //Codigo que cuenta de uno en uno a
#define for ON and OFF. travez de RA4 y muestra la cuenta en
un display de 7 segmentos
#include <xc.h>
#define _XTRAL_FREQ 20000000 //Primero configuro el TMR0

int main() OPTION_REG=0X38;


{
//Voy a encender y apagar un LED //Configuramos RA4 como entrada
por un segundo, LED conectado en RD2
//Configuro RD2 como salida TRISA4=1;

TRISD2=0; //Configuro puerto B como salida


//TRISD=0X04; para conectar el display

//Hago el ciclo infinito de prender y apagar //Tabla creada para catodo común

while(1) int Tabla[10]={0b11000000, 0b11111001,


{ 0b10100100, 0b10110000, 0b10011001,
RD2=1; 0b10010010, 0b10000010, 0b10111000,
_delay(1000); 0b10000000, 0b10011000};
RD2=0;
_delay(1000); TRISB=0;
}
} //Limpio la cuenta del TMR0

3. Convertidor BCD TMR0=0;

// PIC16F74 Configuration Bit Settings while(1)


// ’C’ source line config statements {
//Mando la cienta del TMR0 al puerto B
// CONFIG //Pero solo hasta que llegue a 9
#pragma config FOSC = HS
// Oscillator Selection bits PORTB=Tabla[TMR0];
(HS oscillator)
#pragma config WDTE = OFF if(TMR0==10)
// Watchdog Timer Enable bit TMR0=0;
(WDT disabled) }
#pragma config PWRTE = ON }
// Power-up Timer Enable bit
(PWRT enabled)
#pragma config CP = OFF
// FLASH Program Memory Code V. ESQUEMA
Protection bit (Code protection off)
#pragma config BOREN = ON
// Brown-out Reset Enable bit Tener en cuenta que solo se realizó el montaje del codi-
(BOR enabled) go 3, convertidor BCD, para el montaje necesitamos los
componentes ya mencionados anteriormente en la sec-
// #pragma config statements ción de materiales, básicamente tenemos todas las partes
should precede project file includes. necesarias para que nuestro microcontrolador funcione
// Use project enums instead of de forma correcta, un botón de “reset”, un oscilador de
#define for ON and OFF. 20MHz, alimentación de +5V, el botón que se encargara
de cambiar el número en el display, el display de 7 seg-
#include <xc.h> mentos y un capacitor de 10F en paralelo al botón del
#define _XTRAL_FREQ 20000000 LED para mejorar su funcionamiento, de forma más de-
tallada se muestra a continuacion el esquema del circuito
utilizado.
4

Figura 3. Circuito montado en placa protoboard.

VI. MONTAJE

Cargamos el código en el microcontrolador mediante


un programador Master-Prog, el montaje fı́sico se realizó
en una placa protoboard convencional como se muestra
a continuación.
VII. FUNCIONAMIENTO
Figura 2. Esquema de circuito. (NOTA: Utilizamos el pro-
grama Proteus 8 para realizar el esquema, pero se utilizó el Adjuntamos el vı́nculo de un video que muestra el co-
microcontrolador PIC16F874 debido a que el PIC16F74 no se rrecto funcionamiento del circuito mostrado:
encuentra disponible, recordar que este esquema es más que
Funcionamiento del proyecto
nada ilustrativo pues los pines de entrada y salida cambiarán
de posición en el PIC16F74 que fue utilizado en esta prácti-
ca.)
VIII. CONCLUSIONES

Las prácticas fueron muy útiles para comprender la


implementación del lenguaje C para la programación de
PIC´s, su nivel de sencillez nos permitieron observar y
entender la lógica del nuevo lenguaje.
Por lo que las prácticas fueron un éxito y se realizaron
sin mayor complicación.

También podría gustarte