Está en la página 1de 12

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

ÁREA DE SISTEMAS DIGITALES

ASIGNATURA: MICROCONTROLADORES NRC: 3220

Práctica 3.1

Tema: Programación básica en C

Docente:

Equipo #: 6 Integrantes: 1. Roger Jácome


2 Christian Ruales

Base Aspectos de evaluación Calificación


0.25 Fundamento teórico
0.25 Diagrama de bloques
0.50 Tabla de asignación de variables
3.5 Informe 1.00 Diagrama de flujo
1.00 Programa
0.25 Conclusiones
0.25 Diagrama electrónico
1.00 Presentación del circuito, condiciones
4.5 Funcionamiento
3.50 Indicador tensión LCD
2.0 Defensa

10 Total

Sangolquí – 28 de agosto de 2019

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA


UNIDAD Nº3

Informe de práctica No. 3.1

1. Tema: Programación básica en C

2. Fecha de entrega: 29 de Enero del 2019

3. Objetivos:

- Programar microcontroladores en lenguaje C.


- Analizar la lógica de programación en lenguaje C y diferenciar los
distintos aspectos del lenguaje ensamblador.
- Entender la inicialización de un LCD utilizando los puertos del
microcontrolador PIC 16F877A con lenguaje C .

4. Materiales ( Considerar para dos estaciones)

- Microcontrolador PIC 16F877A.


- LCD 16x2
- Fuente de alimentación.
- Protoboard
- Multímetro
- Cristal 4Mhz
- Capacitores, resistencias, dipswitch, leds. Cables.
- Computador
- Grabador de PICs

5. Procedimiento

En base al Pic 16F877A, diseñar un voltímetro digital, en donde la variación de


tensión que ingresa por el canal 0 del ADC, pueda ser visualizada en un LCD hasta
con dos décimas de resolución.

NOTA:
Se presenta los siguientes requerimientos para la implementación:
- La programación será en lenguaje C.

6. Contenido

6.1. Fundamento Teórico


• Display de Cristal Líquido (LCD)

El módulo LCD , tiene la capacidad de mostrar cualquier carácter alfa numérico


estos dispositivos vienen ya con toda la lógica de control.

Ilustración 1 LCD 16x2 , pines

Tabla 1 Descripcion de señales empleadas por el modulo LCD y numero de pines


a la que corresponden
Pin Símbolo Descripción
1 Vss Pin de tierra de alimentación
2 Vdd Pin de alimentación de 5 V
3 Vo Pin de contraste. Normalmente se conecta a un
potenciómetro a través del cual se aplica una tensión
variable entre 0 y 5 V que permite regular el contraste del
cristal líquido
4 Rs Selección del registro de control/registro de datos
Rs=0 Selección del registro de control
RS=1 Selección del registro de datos
5 Rw Señal de lectura/escritura
R/W=0 El módulo LCD es escrito
R/W=1 El módulo LCD es leído
6 E Señal de activación del módulo LCD:
E=0 Modulo desconectado, no funcionan el resto de
señales
E=1 Modulo conectado
7- D0-D7 Bus de datos bi-direccional. A través de estas líneas se
14 realiza la transferencia de información entre el modulo LCD
y el sistema informático que lo gestiona

• PIC16F877A

Ilustración 2 Descripción de pines PIC 16F877A

CARACTERÍSTICAS 16F877

Frecuencia máxima DX-20MHz


Memoria de programa flash palabra de 14
bits
8KB
Posiciones RAM de datos 368
Posiciones EEPROM de datos 256
Puertos E/S A,B,C,D,E
Número de pines 40
Interrupciones 14
Timers 3
Módulos CCP 2
Comunicaciones Serie MSSP, USART
Comunicaciones paralelo PSP
Líneas de entrada de CAD de 10 bits 8
Juego de instrucciones 35 Instrucciones
Longitud de la instrucción 14 bits
Arquitectura Harvard
CPU Risc
Canales Pwm 2
Pila Harware -
Ejecución En 1 Ciclo Máquina -

• Conversor Análogo Digital

Ilustración 4 Descripción de del conversor Analogico Digital

Permite medir señales analógicas en forma digital, para ello el PIC cuenta
con pines por donde le llegará la señal analógica, estos pines deben
configurarse como entradas analógicas, el conversor analógico digital PIC
cuenta con un circuito que carga un condensador interno al PIC con la
tensión analógica que le está llegando a la entrada analógica, luego la
tensión almacenada en el condensador lo convierte en un número binario
de 10 bits que representará la tensión almacenada en el condensador,
este número binario se guarda en sus registros ADRESH y ADRESL de 8
bits cada uno pero estos actúan como un solo registro de 16 bits, en el
registro ADRESH se guardan los bits mas significativos y en el registro
ADRESL se guardan los bits menos significativos, el número que
representa la tensión almacenada en el condensador y guardado en forma
binaria dentro de estos registros será de 10 bits para el PIC16F877A, la
cantidad de bits de este número depende del conversor analógico digital
PIC del microcontrolador PIC utilizado.
6.2. Diagrama de Bloques

Entradas Analogica

1
RA0

Bus de datos bi-


direccional LCD

4
RC4 – RC7

Microcontrolador
PIC 16F877A

Lectura/ Escritura
Activacion LCD

1
E

1
RS

1
RW
6.3. Asignación de variables

• int16 valor_adc : Declaro variable entera que guarda resultado del adc
• float voltaje : Declaro variable float para lectura de voltaje.

• #fuses XT,NOWDT:

Se inicia con la configuración del (Oscilador o resonador cerámico ) , XT se


trata de un oscilador estándar que permite una frecuencia de reloj
comprendida entre 100 KHz y 4 MHz

FOSC1 → 0 FOSC0 → 1

• NOWDT : El propósito del watchdog timer (WDT) es producir un reset del


microcontrolador PIC cada cierto período de tiempo con lo cual se reinicia la
ejecución del programa, con la finalidad de evitar que el dispositivo entre en
un lazo infinito (se “cuelgue”) o se quede en una espera muy prolongada
por un determinado evento que no ocurre. WDT→ 0

1 WDT Habilitado
0 WDT
Deshabilitado

• #use delay(clock=4M) : Establece el reloj interno de 4MHz

• #include <lcd1.c> : Incluyo librería para inicialización y manejo LCD con


una configuración de 4 bits.

• #include <16F877A.h>: Incluyo librería de pic a usar

• #device ADC=10 : ADC de 10 canales 0-1023


6.4. Relación de transformación:

Mediante una regla de tres se logra hacer que el valor máximo fijado, es decir 20
voltios sea el máximo de la resolución del conversor (1023).

20 𝑉 1023 20 ∗ 𝑣𝑎𝑙𝑜𝑟_𝑎𝑑𝑐
→ 𝑉𝑖𝑛 =
𝑉𝑖𝑛 𝑣𝑎𝑙𝑜𝑟_𝑎𝑑𝑐 1023

Divisor de voltaje:

Para poder limitar que la entrada del PIC sea máximo 5 voltios se usa un divisor
de tensión.

𝑅2
𝑉𝑜𝑢𝑡 = 𝑉𝑖𝑛
𝑅2 + 𝑅1
10𝑘
5= ∗ 20
𝑅1 + 10𝑘
𝑅1 = 30𝑘 [𝛺]
6.5. Diagrama de flujo
6.6. Programa

#include <16F877A.h> /*incluyo librería de pic a usar*/

#device ADC=10 /*ADC de 10 canales 0-1023*/

#fuses XT,NOWDT

#use delay(clock=4M) /*delay para oscilador 4MHz*/

#define LCD_DB4 PIN_D4 /*Defino pin 4 puerto D para LCD*/


#define LCD_DB5 PIN_D5 /*Defino pin 5 puerto D para LCD*/
#define LCD_DB6 PIN_D6 /*Defino pin 6 puerto D para LCD*/
#define LCD_DB7 PIN_D7 /*Defino pin 7 puerto D para LCD*/
#define LCD_RS PIN_D2 /*Defino pin 2 puerto D para LCD*/
#define LCD_E PIN_D3 /*Defino pin 3 puerto D para LCD*/

#include <lcd1.c> /*Incluyo librería para inicialización y manejo LCD*/

int16 valor_adc; /*Declaro variable entera que guarda resultado del adc*/

float voltaje; /*Declaro variable float para lectura de voltaje*/

void main(){ /*main princiapal del programa*/

SETUP_ADC(ADC_CLOCK_INTERNAL); /*inicializo adc del pic*/


SETUP_ADC_PORTS(ALL_ANALOG); /*inicializo puertos de entrada analógica
para adc*/
lcd_init(); /*iniciliazo lcd*/
lcd_putc("\fMICROCONTROLA- \n"); /*Imprimo presentación*/
lcd_putc("DORES"); /*Imprimo presentación*/
delay_ms(1000); /*Genero delay para visualizar*/
lcd_putc("\f*JACOME,RUALES*"); /*Imprimo presentación*/
delay_ms(1000); /*Genero delay para poder visualizar*/
lcd_putc("\fVOLTIMETRO DC"); /*Imprimo encabezado*/

while(TRUE){ /*Loop que imprimirá el resultado*/


SET_ADC_CHANNEL(0); /*Seteo el canal 0 del adc*/
delay_us(20); /*Genero un delay para la lectura del adc*/
valor_adc=READ_ADC(); /*cargo el valor de salida del adc a la variable*/
voltaje=20.0*valor_adc/1023.0; /*Resultado final es generado mediante relación de
transformación*/
lcd_gotoxy(1,2); /*Salto a fila 2 columna 1 del lcd*/
printf(lcd_putc,"VOLTAJE:%f V", voltaje); /*imprimo el resultado de la lectura final*/
}

}
6.7. Diagrama electrónico
7. Conclusiones

• Al utilizar lenguaje C se facilita el uso de el LCD ya que incluyendo la


librería #include <lcd1.c> es mucho mas fácil la inicialización de las
variables, además se utiliza una configuración de 4 bits por lo cual
tenemos mas puertos libres.

• Para la medición del voltaje se utilizó un divisor de voltaje , ya que el


microcontrolador solo puede leer voltajes de 0 a 5 V.

• Para el correcto funcionamiento del conversor análogo digital, es


importante generar un delay de al menos 20 micro segundos
después de haberlo activado y haber seleccionado el canal a usar ya
que en este lapso ocurre el tiempo de adquisición del dato.

8. Bibliografía

Fernando E. PRIMERA 2007 Español Marcombo


Microcontroladores: Valdés Pérez,
fundamentos y aplicaciones Ramón Pallás
con PIC Areny
Programación de Ibrahim PRIMERA 2006 Español Marcombo
microcontroladores PIC Dogan

También podría gustarte