Está en la página 1de 5

Universidad Militar Nueva Granada

Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez

PROGRAMA “GENERADOR DE FRECUENCIA - SEÑAL CUADRADA”


MICROPROCESADORES
Gonzalo Alberto Cotte Urrutia Cód. 1400838
Héctor Camilo Barrera Rivera Cód. 1400716
Juan David Cárdenas Acosta Cód. 1400723

ABSTRACT: There will be a frequency cumplir una determinada función. Se


generator, with the PIC 16F877A. The quiere implementar un generador de
circuit has a potentiometer for varying the frecuencias (señal cuadrada). Con un
output signal between 20 Hz and 3.5 KHz. potenciómetro que permita variar la señal
The frequency can also be varied with two de salida entre 20 Hz y 3.5 KHz, se
buttons (increase and decrease). visualice en una LCD la frecuencia actual
Frequency is displayed on an LCD output, de salida. La frecuencia también debe
the program will be held in leguaje C. poderse variar con dos pulsadores
(incremento y decremento).
RESUMEN: Se realizara un generador de
frecuencias, con el PIC 16F877A. El
circuito cuenta con un potenciómetro que
permite variar la señal de salida entre 20 2 OBJETIVO
Hz y 3.5 KHz. La frecuencia también se
puede variar con dos pulsadores
(incremento y decremento). Se visualiza la  Diseñar e implementar un
frecuencia de salida en una LCD, el generador de frecuencias (señal
programa se realizara en leguaje C. cuadrada).que este entre 20 Hz y
3.5 KHz, con el PIC 16F877A.

 Realizar un programa para


1 INTRODUCCIÓN transformar señales analógicas de
entrada a digitales utilizando el PIC
El PIC 16F877A es un dispositivo muy 16F877A.
versátil que desempeña muchas
funciones, como el conversor análogo  Utilizar el TMR0 como contador de
digital, lo que permite tomar variables eventos e interrupción, para
físicas como la temperatura, humedad, realizar el generador de onda
presión, etc. y las convierte a un sistema cuadrada
digital. También cuenta con el TMRO, el
cual se utiliza como contador de eventos,
lo que nos permite cada cierto tiempo
3 PROCEDIMIENTO

1
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez

valor del voltaje y lo pasamos a mv y lo


dividimos en 10 de esta forma se obtienen
Realizar un programa que tome la los grados que indica el sensor LM35.
temperatura y la compare con una
temperatura establecida si esta se 0.098v * 1000 = 98mv
sobrepasa se activa un ventilador. 98mv / 10 = 9.8 C

El circuito cuenta con un sensor de Para colocar una temperatura de


temperatura LM35 que nos indica la referencia se usa un potenciómetro, que
temperatura del ambiente, un nos permite variar el voltaje que ingresa al
potenciómetro que permite colocar un PIC, el cual se asemeja al sensor LM35
voltaje de referencia para compararlo con que varía su voltaje con respecto a la
el del sensor, si este es superado se temperatura. Se aplica el procedimiento
activa un ventilador hasta que la anterior para determinar el valor de la
temperatura este por debajo de la temperatura con respecto al voltaje del
temperatura de referencia. potenciómetro.

El LM35 es un sensor lineal que aumenta Se almacenan los datos en unas variables
10mV por cada grado centígrado. Se de la siguiente forma:
calcula el valor de resolución del PIC
teniendo en cuenta que el Vref = 5v, el set_adc_channel(0); //Escogemos el canal de la
número de bits = 8 conversion
value=read_adc(); //lee lo que hay en canal cero y lo
guarda en la variable
V ref
Resolucion= set_adc_channel(1); //Escogemos el canal de la
2n−1 conversion
value1=read_adc(); //lee lo que hay en canal cero y
Res = 19.6mv lo guarda en la variable

El PIC va tomar valores de 1 a 255, Luego de hacer el proceso anterior para


dependiendo del voltaje de entrada obtener el valor de la temperatura se
19.6mv = 1 hasta 5v = 255. muestra en la LCD el valor de la
temperatura del ambiente y la temperatura
Como el PIC toma un valor decimal este de referencia.
se multiplica por el valor de la resolución,
lo que nos permite saber el voltaje, por Luego se comparan las dos temperaturas,
ejemplo. si la temperatura ambiente sobrepasa la
temperatura de referencia se enciende un
5(decimal) * 0.0196 (resolución) = 0.098v led (ventilador), si es el caso contrario se
(voltaje). apaga el led (ventilador).

Como ya conocemos el voltaje de entrada Se sigue cumpliendo todo el proceso en


y sabemos que el sensor aumenta 10mV un ciclo infinito ya que se tiene un while
por cada grado centígrado, tomamos el (1), para reiniciar el programa se utiliza
Mclr.

2
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez

5 PROGRAMA
4 DIAGRAMA DE FLUJO
El programa se realizó en lenguaje c.
Representación gráfica del programa.
“Sensor de Temperatura”. #include <16f877a.h>
#device adc=8
#use delay(clock=4000000)
#fuses xt,nowdt,put
#BYTE timer0=0x01 // la memoria de datos

int contador,valor,valor1;
float fre;
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

#include <lcd.c>

void main()
{
set_tris_b(0xff); //Puerto B Como Entrada
set_tris_c(0x00); //Puerto C Como Salida
setup_adc(ADC_CLOCK_DIV_8); // TAD=8Tocs
SETUP_ADC_PORTS(ALL_ANALOG); // entradas nalogas
setup_timer_0(RTCC_INTERNAL |
RTCC_DIV_256); //CONFIGURA TMR0 CON PREESCALA 256 Y
COMO TEMPORIZADOR
enable_interrupts(int_timer0); //HABILITA INTERRUPCION
POR DESBORDAMIENTO DEL TMR0
enable_interrupts(global); //HABILITA INTERRUPCIONES
GLOBALES
set_timer0(contador); //VALOR CARGADO EN EL TMR0
lcd_init(); //incicia la comunicacion con LCD

for(;;)
{
ini:
//GENERADOR DE FRECUENCIA CON POTENCIOMETRO

set_adc_channel(0); //Escogemos el canal


valor=read_adc(); //lee y lo guarda en la variable
contador=valor;

3
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez

lcd_gotoxy(2,1); }
printf(lcd_putc,"GEN. FRECUENCIA"); //PULSADOR --
if(contador>60) if(input(pin_b1)==0)
{ {
fre=(1/((256-contador)*(256)*(0.000001))); while(input(pin_b1)==0)
lcd_gotoxy(2,2); delay_ms(50);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre); if(contador>61)
} contador--;
if(valor<61) fre=(1/((256-contador)*(256)*(0.000001)));
contador=61; lcd_gotoxy(2,2);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre);
}
//GENRADOR DE FRECUENCIA PULSADOR ++ set_adc_channel(0); //Escogemos el canal de la
if(input(pin_b0)==0) conversion
{ valor1=read_adc(); // y lo guarda en la variable
while(input(pin_b0)==0) if(valor!=valor1)
delay_ms(50); //Retardo De 50ms goto ini;
if(contador<255) }
contador++; //Suma 1 A Contador }
fre=(1/((256-contador)*(256)*(0.000001))); }
lcd_gotoxy(2,2); #int_timer0 // inicio de la funcion de interrupción
printf(lcd_putc,"FRE(Hz)=%.1f ",fre); void int_tmr0() //funcion de interrupcion
} {
disable_interrupts(int_timer0);
//GENRADOR DE FRECUENCIA PULSADOR -- output_toggle(pin_c0);
if(input(pin_b1)==0) enable_interrupts(int_timer0);
{ set_timer0(contador);
while(input(pin_b1)==0) }
delay_ms(50);
if(contador>61) 6 DIAGRAMA CIRCUITAL
contador--;
fre=(1/((256-contador)*(256)*(0.000001)));
Para la correspondiente asignación de
lcd_gotoxy(2,2);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre);
periféricos se utiliza el siguiente diagrama
} que pertenece al PIC 16F877A.

//VARIACION DE FRECUENCIA CON PULSADORES


while(valor!=contador)
{
//PULSADOR ++
if(input(pin_b0)==0)
{
while(input(pin_b0)==0)
delay_ms(50); //Retardo De 50ms
if(contador<255)
contador++; //Suma 1 A Contador
fre=(1/((256-contador)*(256)*(0.000001)));
lcd_gotoxy(2,2);
printf(lcd_putc,"FRE(Hz)=%.1f ",fre);

4
Universidad Militar Nueva Granada
Ingeniería en Telecomunicaciones
Microprocesadores Arquitectura De Computador
Ing. Juan Carlos Martínez

Se asignan RA0-RA1 como entrada ADC,


el sensor LM35 tiene tres pines, los pines
de los extremos son para alimentación
Vdd y Vss, el del centro es la salida va al
pin RA0. El potenciómetro cuenta con 3
pines dos para alimentación Vdd y Vss, el
del centro va conectado a RA1.

PUERTO D asignado para la LCD,


configuración RD0-RD1-RD2 y para la
transmisión de datos RD4-RD5-RD6-RD7.

MCLR va conectado al pin 1 del micro, el


cristal de cuarzo va conectado entre el pin
13 y 14 del micro, para la alimentación se
toma el pin 11 a Vdd y el pin 12 va a Vss.

7 CONCLUSIONES

También podría gustarte