Está en la página 1de 3

Arquitectura de Microcontroladores:

Práctica 1. C: AD converter con 3 displays


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 ésta práctica se utilizo el convertidor analógico-digital del PIC16F74 para convertir un voltaje
de referencia y mostrarlo mediante 3 displays de 7 segmentos. El voltaje estará regulado por un
potenciómetro.

I. INTRODUCCIÓN II. MATERIALES

Una señal análoga es una señal continua que posee va- Protoboard de 830 puntos
lores que van variando con el tiempo. A diferencia de una
Cable rojo y negro
señal digital, que tiene valores discretos en cada punto de
muestreo, una señal análoga presenta fluctuaciones cons- 9 LED´s
tantemente.
2 Push-buttons
3 Resistencias de 330 Ohm´s
2 Resistencias de 1k Ohm´s
1 PIC17F74
Fuente de voltaje de 5v
2 Cables banana-caimán
Figura 1. Señales analógicas y digital.
2 Capacitores de 22 pF
1 Cristal oscilador de 20 mHz
Con el microcontrolador, lo que se hace, es aproxi-
mar una señal análoga por medio de pequeños cuadros Programador MasterProg
rectángulos digitales.
Entre más resolución tenga nuestro microcontrolador,
mas pequeños pueden ser los rectángulos que se forman III. MÉTODOS
y más aproximado puede quedar nuestra señal análoga.
En otras palabras aumentamos el muestreo de la señal En esta práctica nos enfocamos en utilizar de for-
para aproximarnos de mejor forma a la forma de onda ma correcta el convertidor ADC del microcontrolador
original. (PIC16F74) empleando sus entradas analógicas del puer-
Para poder detectar las señales análogas con un mi- to A, el microcontrolador recibe una señal la cual se
crocontrolador PIC debemos emplear el conversor A/D podrı́a variar mediante un potenciómetro, el microproce-
(ADC PIC) el cual toma la señal análoga y la transforma sador procesa la señal en tiempo real cambiando el valor a
en un valor o número digital (binario). uno numérico entre 0 y 255 y lo muestra en un display de
Sin embargo el conversor A/D de un microcontrolador 7 segmentos triple (unidades, decenas y centenas). Esto
PIC posee dos niveles de referencia VREF+ y VREF- fue realizado en lenguaje C.
que indican entre que valores estará comprendida la señal
análoga de entrada.
Es importante destacar que el voltaje mı́nimo dife- IV. CÓDIGO FUENTE
rencial es de 2V, es decir la diferencia entre VREF+ y
VREF- no puede ser mayor a 2V. [H]

// PIC16F74 Configuration Bit Settings

// ’C’ source line config statements


* om.mendozarosas@ugto.mx
** d.paniaguamolina@ugto.mx // CONFIG
2

#pragma config FOSC = HS


// Oscillator Selection bits
(HS oscillator)
#pragma config WDTE = OFF
// Watchdog Timer Enable bit
(WDT disabled)
#pragma config PWRTE = ON
// Power-up Timer Enable bit
(PWRT enabled)
#pragma config CP = OFF
// FLASH Program Memory Code
Protection bit (Code protection off)
#pragma config BOREN = ON
// Brown-out Reset Enable bit
(BOR enabled)

// #pragma config statements Figura 2. Esquema de circuito. (NOTA: Utilizamos el pro-


should precede project file includes. grama Proteus 8 para realizar el esquema, pero se utilizó el
// Use project enums instead microcontrolador PIC16F874 debido a que el PIC16F74 no se
of #define for ON and OFF. encuentra disponible, recordar que este esquema es más que
nada ilustrativo pues los pines de entrada y salida cambiarán
#include <xc.h> de posición en el PIC16F74 que fue utilizado en esta prácti-
ca.)
int main(){
int TABLA [10]={0b11000000, 0b11111001,
0b10100100, 0b10110000, 0b10011001, PORTC = TABLA[decenas];
0b10010010, 0b10000010, 0b10111000, PORTB = 0;
0b10000000, 0b10011000}; PORTBbits.RB2 = 1;
PORTC = TABLA[unidades];
//codigo que muestra en 3 displays PORTB = 0;
las mediciones de un potenciometro }
//configuramos el convertidor x = ADRES;
ADCON1 = 0xff; centenas = x /100;
ADCON0 = 0x81; decenas = (x - (centenas*100))/10;
unidades = (x - (centenas*100 + decenas*10));
//controlamos displays de unidades,
decenas y centenas }
TRISA = 0xff;
TRISB = 0; }
TRISC = 0;
PORTBbits.RB0 = 0;
PORTBbits.RB1 = 0; V. ESQUEMA
PORTBbits.RB2 = 0;
[H] Para el montaje necesitamos los componentes ya
int x = 0; mencionados anteriormente en la sección de materiales,
int centenas = 0; básicamente tenemos todas las partes necesarias para que
int decenas = 0; nuestro microcontrolador funcione de forma correcta, un
int unidades = 0; botón de “reset”, un oscilador de 20MHz, alimentación de
+5V, el display doble de 7 segmentos y un potenciómetro
while(1){ de 10kΩ encargado de hacer variar la señal de entrada,
ADCON0bits.GO = 1; de forma más detallada se muestra a continuación el es-
quema del circuito utilizado.
while(ADCON0bits.GO_DONE == 1){

PORTBbits.RB0 = 1; VI. MONTAJE


PORTC = TABLA[centenas];
PORTB = 0;
PORTBbits.RB1 = 1; Cargamos el código en el microcontrolador mediante
un programador Master-Prog, el montaje fı́sico se realizó
3

VII. FUNCIONAMIENTO

Adjuntamos el vı́nculo de un video que mues-


tra el correcto funcionamiento del circuito mostrado:
Funcionamiento del proyecto

VIII. CONCLUSIONES

Pudimos observar la facilidad con la que realizan


Figura 3. Circuito montado en placa protoboard y alimentado prácticas con un nivel de comlejidad mayor en el len-
con fuente de voltaje. guaje C, ya que se realizó en un tiempo menor y con
menor lineas de código (a nuestro parecer). El hecho de
que estén definidos ciclos como el while, y el if hacen que
la programación del PIC sea mas sencilla, asi como poder
usar variables para guardar datos en lugar de localidades
de memoria en si.
en una placa protoboard convencional como se muestra La práctica fue muy enriquecedora y se terminó con
a continuación. éxito.

También podría gustarte