Você está na página 1de 32

ELECTRÓNICA Y AUTOMATIZACIÓN INDUSTRIAL

IV CICLO
PROGRAMACIÓN DE MICROCONTROLADORES

Laboratorio 7
“CONVERSIÓN AD”

Alumnos:
Chilón Cabanillas Antoni
Herrera Alvino Rodrigo
Ludeña Quispitito Marco
Veliz Cuyutupa Ahirton

Profesor:
Cesar Ciriaco Martínez

2018-I
CONTENIDO
INTRODUCCIÓN.................................................................................................................................. 2
OBJETIVOS .......................................................................................................................................... 3
MARCO TEÓRICO ............................................................................................................................... 4
Conversión A/D ................................................................................................................................. 4
Estructura interna ............................................................................................................................... 4
Principales registros usados ................................................................................................................ 4
Registro ADCON0 (1Fh)................................................................................................................ 4
Registro ADCON1 (9Fh)................................................................................................................ 5
Pasos en una conversión A/D.............................................................................................................. 5
MATERIALES UTILIZADOS ............................................................................................................... 6
PROCEDIMIENTO ............................................................................................................................... 7
RETO EN CLASE................................................................................................................................ 15
APLICACIÓN DE LO APRENDIDO................................................................................................... 19
OBSERVACIONES ............................................................................................................................. 28
CONCLUSIONES................................................................................................................................ 28
REFERENCIAS ................................................................................................................................... 29
CONTENIDO DE FIGURAS
Figura 1: Estructura interna del convertidor A/D del microcontrolador PIC 16F877A 1 ........................... 4
Figura 2: Tabla de configuración de entradas al módulo A/D 2 ............................................................... 5
Figura 3: Imágenes de los materiales usados(software y hardware) ......................................................... 6
Figura 4: Programa de conversión A/D de ocho bits ............................................................................... 7
Figura 5: Simulación del programa en PROTEUS .................................................................................. 7
Figura 6: Esquema del ejemplo y valores que se obtiene en la salida ...................................................... 8
Figura 7: Representación binaria del número 76 mediante leds ............................................................... 8
Figura 8: Representación binaria del número 143 mediante leds ............................................................. 9
Figura 9: Programa de conversión A/D de diez bits .............................................................................. 10
Figura 10: Simulación del programa en PROTEUS .............................................................................. 10
Figura 11: Representación binaria del número 593 mediante leds ......................................................... 11
Figura 12: Representación binaria del número 593 mediante leds ......................................................... 11
Figura 13: Representación binaria del número 614 mediante leds ......................................................... 12
Figura 14: Programa de un sensor de Temperatura usando conversión A/D .......................................... 14
Figura 15: Simulación del programa en PROTEUS .............................................................................. 14
Figura 16: Programa de un voltímetro de 0 a 5V .................................................................................. 16
Figura 17: Valor máximo de voltaje del voltímetro .............................................................................. 16
Figura 18: Valor mínimo de voltaje del voltímetro ............................................................................... 17
Figura 19: El voltímetro está midiendo 1.90V ...................................................................................... 17
Figura 20: Esquema de la aplicación de lo aprendido ........................................................................... 19
Figura 21:Capturas de pantalla programa que mide el nivel de un tanque .............................................. 21
Figura 22: Capturas de pantalla de la subrutina dec_bin_lcd_en_ASCII................................................ 23
Figura 23: Simulación de la aplicación de lo aprendido ........................................................................ 26
Figura 24: Ejemplo de medida de nivel del tanque .............................................................................. 26
Figura 25: Implementación física del programa .................................................................................... 27
Figura 26: Valor del nivel del tanque en decimal y binario ................................................................... 27
Figura 27: Valor del nivel del tanque en decimal y binario ................................................................... 28

1|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


INTRODUCCIÓN
Los microcontroladores PIC son circuitos integrados que poseen todas las
características de un computador completo y se pueden programar de distintas formas,
con el fin de que puedan ejecutar diferentes tareas, además a esto es importante resaltar
su bajo costo. El uso de este dispositivo en el presente informe se debe a su aplicación
en diferentes áreas industriales ya que proveen inteligencia a los equipos o sistemas para
un mejor desempeño de los mismos. Para que realicen los eventos que queramos es
necesario utilizar los puertos como entrada para que la data ingrese y se procese en el
PIC y puertos de salida para comunicarlos con otros dispositivos y en conjunto logren
un objetivo. Este laboratorio nos permite mejorar nuestras habilidades en la
programación del PIC16F877A en lenguaje ensamblador, a continuación, se mostrarán
ejemplos de conversión A/D mediante este microcontrolador.

2|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


OBJETIVOS
• Utilizar las instrucciones para programar al microcontroladorPIC16F877A
• Utilizar software de desarrollo proporcionada por el fabricante
• Implementación hardware

3|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


MARCO TEÓRICO
Conversión A/D
El microcontrolador PIC16F877A tiene ocho canales de conversión (Cinco pines E/S de
PORTA y los tres de PORTE.)
Estructura interna

Figura 1: Estructura interna del convertidor A/D del microcontrolador PIC 16F877A 1
Principales registros usados
Registro ADCON0 (1Fh).

• Bit 7:6 (ADCS1:ADCS0): Selección del reloj para la conversión A/D


00 = fosc / 2 10 = fosc/ 32
01 = fosc / 8 11 = fRC
• Bit 5:3 (CHS2:CHS0): Selección del canal de conversión
000 = Canal 0 100 = Canal 4
001 = Canal 1 101 = Canal 5
010 = Canal 2 110 = Canal 6
011 = Canal 3 111 = Canal 7
• Bit 2 (GO/DONE): Estado de la conversión
Si ADON=1:
1 = Conversión en progreso
0 = Conversión finalizada

• Bit 0 (ADON): Bit de encendido del convertidor A/D

4|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


1 = Módulo A/D encendido
0 = Módulo A/D apagado
Registro ADCON1 (9Fh).

• Bit 7 (ADFM): Selección de formato del resultado


1 = Ajuste a la derecha
0 = Ajuste a la izquierda
• Bit 3:0 (PCFG3:PCFG0): Configuración de las entradas al módulo A/D

Figura 2: Tabla de configuración de entradas al módulo A/D 2


Pasos en una conversión A/D
1. Configurar el módulo A/D.
• Definir entradas analógicas y tensión de referencia. (ADCON1)
• Seleccionar el canal de la conversión. (ADCON0)
• Seleccionar el reloj de la conversión. (ADCON0)
• Encender el módulo A/D. (ADCON0)
2. Configurar la interrupción por conversión A/D.
3. Esperar a que transcurra el tiempo de adquisición.
4. Comenzar la conversión.
• Poner a “1” el bit GO/DONE. (ADCON0
5. Esperar a que se complete la conversión A/D
6. Leer el resultado de la conversión
• Disponible en los registros ADRESH: ADRESL.
7. Llevar a cabo la siguiente conversión.
_____________________________________
[1], [2] Universidad de Oviedo. Conversión A/D. Información recuperada de:
https://www.unioviedo.es/ate/alberto/TEMA7-Modulo%20_AD_v2.pdf

5|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


MATERIALES UTILIZADOS

Leds Resistencias Condensadores(22pF)

Cristal (20MHz) Pickit 3 PIC16F877A

PROTOBOARD Pantalla LCD Pulsador

Software PROTEUS Software MPLAB PC

Potenciometro Teclado 4x4 Cables

Figura 3: Imágenes de los materiales usados(software y hardware)

6|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


PROCEDIMIENTO
1. Análisis y comentarios del código de conversión ADC de 8 bits.

Figura 4: Programa de conversión A/D de ocho bits

2. Simulación en PROTEUS del programa de la figura 2

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
31%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
+1.55 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1
MCLR/Vpp/THV RC5/SDO
24 D1 D2 D4 D3 D5 D6 D7 D8
25 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Figura 5: Simulación del programa en PROTEUS

7|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


Se puede observar en la simulación que el programa convierte una señal de voltaje
(señal analógica) a una señal digital (en sistema binario).
Como es un convertidor A/D de ocho bits, el programa solo podrá representar en binario
un valor menor o igual a 255
𝑁ú𝑚𝑒𝑟𝑜 𝑚á𝑥𝑖𝑚𝑜 𝑎 𝑟𝑒𝑝𝑟𝑒𝑠𝑒𝑛𝑡𝑎𝑟 = 2𝑛 − 1
𝑁 𝑚á𝑥. = 28 − 1 = 255
Para poder encontrar las equivalencias entre el voltaje se realiza la operación de
extrapolación, a continuación, se muestra un ejemplo.
5𝑉 − −−→ 255
1.5𝑉 − −−→ 𝑋
𝑋 = 76.5 <> 7610
Se aproxima al valor más cercano, es decir en la salida obtendremos el número 76 en
binario. El número 76 en binario se representa de la siguiente manera:
7610 = 010011002

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
30%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
+1.50 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1
MCLR/Vpp/THV RC5/SDO
24 D1 D2 D4 D3 D5 D6 D7 D8
25 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Figura 6: Esquema del ejemplo y valores que se obtiene en la salida


RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

D1 D2 D4 D3 D5 D6 D7 D8
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN

0 1 0 0 1 1 0 0

Figura 7: Representación binaria del número 76 mediante leds

8|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES


3. Responder las siguientes preguntas
• ¿Qué sucede en el ADC?
Se da la conversión de una señal analógica en señal digital, esta señal es
Representada en base al sistema binario.

• ¿En qué consiste el primer programa?


Consiste en convertir una señal analógica, que en este caso viene a ser el voltaje
en una señal discreta es decir que solo tome dos estados: encendido o apagado,
estado lógico 1 o 0.

• ¿Cuál es la fórmula que nos indica la resolución del ADC de 8bits?


(255 ∗ 𝑉 )
𝑋10 =
5

• ¿Cuánto es la conversión binaria para un voltaje de 2,8V?

5𝑉 − −−→ 255
2.8𝑉 − −−→ 𝑋
𝑋 = 142.8 <> 14310 <> 100011112

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
56%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0
+2.80 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
RC7/RX/DT
26 D1 D2 D4 D3 D5 D6 D7 D8
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
RD7/PSP7
30 1 0 0 0 1 1 1 1
PIC16F877A

Figura 8: Representación binaria del número 143 mediante leds

• ¿Por qué utilizamos el puerto B?


Se puede utilizar cualquier puerto, ya que no existiría ninguna inconveniente al
conectar solo leds, pero si se piensa conectar un teclado es muy importante
conectarle al PORTB porque este cuenta con resistencias pull up y nos permite
comprobar los botones de presión en el teclado ya que detectan cada apretón de
botón infaliblemente

• Explicar brevemente la función de la librería adc.asm

Se encarga de realizar y seguir la conversión mientras esta se desarrolla.

• ¿En qué canal del PIC está ingresando el voltaje?


9|PROGRAMACI ÓN DE MIC ROC ONT ROLADORES
Se está ingresando por el canal 0

4. Análisis y comentarios del código de conversión ADC de 10 bits.

Figura 9: Programa de conversión A/D de diez bits

5. Simulación en PROTEUS del programa de la figura anterior

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
40%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
RC1

RC0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI RC0
8 16
RE0/AN5/RD RC1/T1OSI/CCP2 RC1
+2.00 9
RE1/AN6/WR RC2/CCP1
17 D10 D9 D1 D2 D4 D3 D5 D6 D7 D8
Volts 10 18 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Figura 10: Simulación del programa en PROTEUS

10 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Se puede observar en la simulación que el programa convierte una señal de voltaje
(señal analógica) a una señal digital (en sistema binario).
Como es un convertidor A/D de diez bits, el programa solo podrá representar en binario
un valor menor o igual a 1023
𝑁ú𝑚𝑒𝑟𝑜 𝑚á𝑥𝑖𝑚𝑜 𝑎 𝑟𝑒𝑝𝑟𝑒𝑠𝑒𝑛𝑡𝑎𝑟 = 2𝑛 − 1
𝑁 𝑚á𝑥. = 210 − 1 = 1023
Para poder encontrar las equivalencias entre el voltaje se realiza la operación de
extrapolación, a continuación, se muestra un ejemplo.
5𝑉 − −−→ 1023
2.9𝑉 − −−→ 𝑋
𝑋 = 593.34 <> 59310
Se aproxima al valor más cercano, es decir en la salida obtendremos el número 76 en
binario. El número 76 en binario se representa de la siguiente manera:
59310 = 10010100012
RC1

RC0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0
D10 D9 D1 D2 D4 D3 D5 D6 D7 D8
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN

1 0 0 1 0 1 0 0 0 1

Figura 11: Representación binaria del número 593 mediante leds

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
58%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
RC1

RC0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0

15
RC0/T1OSO/T1CKI RC0
8 16
RE0/AN5/RD RC1/T1OSI/CCP2 RC1
+2.90 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1
MCLR/Vpp/THV RC5/SDO
24 D10 D9 D1 D2 D4 D3 D5 D6 D7 D8
25 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Figura 12: Representación binaria del número 593 mediante leds

11 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
6. Responder las siguientes preguntas
• ¿En qué consiste el segundo programa?
Consiste en convertir una señal analógica de diez bits, que en este caso viene a
ser el voltaje en una señal discreta.
• ¿Hasta cuánto puede ser el valor cargado de W antes de llamar a Inicio_ADC?
Solo se puede cargar hasta el valor 7, esto se debe a que solo existen siete
bancos de conversión en el PIC16F877A, los pines son: Cinco pines E/S de
PORTA y los tres de PORTE
• ¿Por qué se usan dos puertos de salida para este programa?
Se usan dos puertos debido a que cada puerto solo tiene 8 bits y para este caso
necesitamos diez bits.
• ¿Cuáles es la ecuación para la resolución en el segundo programa?
(1023 ∗ 𝑉 )
𝑋10 =
5

• ¿En qué canal del PIC se está ingresando las variaciones de voltaje dc?
Inicialmente ingresaba las variaciones de voltaje por el canal 5, pero se opto por
cambiarlo y ahora las variaciones de voltaje ingresan por el canal 0.

U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
60%

RA0/AN0 RB3/PGM RB3


3 37
RA1/AN1 RB4 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 RB5
5 39
RA3/AN3/VREF+ RB6/PGC RB6
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD RB7
7
RA5/AN4/SS/C2OUT
RC1

RC0

RB7

RB6

RB5

RB4

RB3

RB2

RB1

RB0
15
RC0/T1OSO/T1CKI RC0
8 16
RE0/AN5/RD RC1/T1OSI/CCP2 RC1
+3.00 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1
MCLR/Vpp/THV RC5/SDO
24 D10 D9 D1 D2 D4 D3 D5 D6 D7 D8
25 LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
LED-GREEN
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Figura 13: Representación binaria del número 614 mediante leds

5𝑉 − −−→ 1023
3𝑉 − −−→ 𝑋
𝑋 = 613.8 <> 61410
• El número 614 se representará en binario
61410 = 10011001102

12 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
7. Análisis y comentarios del código de conversión ADC de 10 bits.

13 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Figura 14: Programa de un sensor de Temperatura usando conversión A/D
8. Simulación en PROTEUS del programa de la figura anterior

U1 LCD1
13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
RV1 OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
60%

RA4 RA2/AN2/VREF-/CVREF RB5


5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
VDD
VSS

VEE

7
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

RA4 RA5/AN4/SS/C2OUT
E

1k 15
RC0/T1OSO/T1CKI
+3.00 8 16
RE0/AN5/RD RC1/T1OSI/CCP2
1
2
3

4
5
6

7
8
9
10
11
12
13
14

Volts 9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
RD3
RD2
RD1

RD4
RD5
RD6
RD7

MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 15: Simulación del programa en PROTEUS

14 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
RETO EN CLASE
Diseñar en clase un voltímetro, en el cual la entrada analógica será en el canal 4(AN4),
con 2 decimales, este se muestre en una pantalla LCD 16x2.
1. Programa en MPLAB (CAPTURAS DE PANTALLA)

Explicación y cálculos
necesarios para desarrollar
el programa.

15 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Figura 16: Programa de un voltímetro de 0 a 5V
2. Simulación del reto en clase en software PROTEUS

U1 LCD1
RV2 13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
100%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD
VDD
VSS

VEE

7
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

RA5/AN4/SS/C2OUT
E

15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
1
2
3

4
5
6

7
8
9
10
11
12
13
14

+5.00 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
RD3
RD2
RD1

RD4
RD5
RD6
RD7

MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 17: Valor máximo de voltaje del voltímetro

16 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
U1 LCD1
RV2 13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
0%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD

VDD
VSS

VEE
7

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RA5/AN4/SS/C2OUT

E
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2

1
2
3

4
5
6

7
8
9
10
11
12
13
14
0.00 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24

RD3
RD2
RD1

RD4
RD5
RD6
RD7
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 18: Valor mínimo de voltaje del voltímetro


3. Ejemplo

U1 LCD1
RV2 13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
38%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD
VDD
VSS

VEE

7
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RA5/AN4/SS/C2OUT
E

15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
1
2
3

4
5
6

7
8
9
10
11
12
13
14

+1.90 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
RD3
RD2
RD1

RD4
RD5
RD6
RD7

MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 19: El voltímetro está midiendo 1.90V

En la figura se observa que al ingresar un voltaje de 1.5 voltios en la pantalla también


podemos observar este valor, esto nos quiere decir que tiene una elevada precisión.

17 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
4. Código del programa
;-----------------------------------------------------------------------------
;Diseñar en clase un voltímetro, en el cual la entrada analógica será en
;el canal 4(AN4), con 2 decimales, este se muestre en una pantalla LCD 16x2.
;-----------------------------------------------------------------------------
list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
__config 0x3f32
cblock 0x20
VOLTMETER
UNI
DEC
CEN
endc
org 0000h
call Inicio_lcd
cursor off ;El cursor por defecto esta en off
repetir
;---------------------PROGRAMA PRINCIPAL----------------------------------
movlw .0 ;Se define el canal para el ingreso de voltaje
call Inicio_ADC ;Llamado a la subrtina Inicio_ADC
call ADC8Bits ;Llamado a la subrtina ADC8Bits
movf RegADC1,0 ;Copiamos el dato 1 de RegADC1 en W
movwf VOLTMETER ;Copiamos el dato de W al registro VOLTMETER
delay_ms .1
;--------------------------VOLTMETER----------------------------------------
mensaje .1
enter
movf VOLTMETER,0
movwf NumMult1
;------HALLANDO LOS VALORES A MULTIPLICAR----------------------------
; 0----->0V
; VOLTMETER----->X
; 255----->5
;=>X=VOLTMETER*5/255 =>X=VOLTMETER*0.0196
; X=VOLTMETER*196
; | |
; NumMult1 * NumMult2
; Si X es máx, el maximo valor será 49980
;=>4(aquí ponemos la coma flotante)9980=>4,9980
;NumB2|NumB1|NumA3|NumA2|NumA1
; 4 | 9 | 9 | 8 |0
;---------------------------------------------------------------------------
movlw .196
movwf NumMult2

18 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
call Mult8x8Bits
movlw .48 ;|Se suma 48 para convertir a ASCII
addwf NumA3 ;|ya que 48 en ASCII es cero
addwf NumB1
addwf NumB2
putv NumB2
ponerc '.'
putv NumB1
putv NumA3
ponerc 'V'
delay_ms .250
borralcd

goto repetir
return
;----------------------------------------------------------------------
include<electronicpic16f877.asm>
include<adc.asm>
include<lcd.asm>
include<mensaje.asm>
include<Mult8x8.asm>
include<conversion.asm>
end

APLICACIÓN DE LO APRENDIDO
Diseñar e implementar un programa que mida el nivel de altura de un tanque, en el LCD
16x2 se debe mostrar los valores en binario, decimal y en centímetros o metros.

Figura 20: Esquema de la aplicación de lo aprendido

19 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
1. Programa en MPLAB (CAPTURAS DE PANTALLA)

Definimos la constante
LEVEL_SENSOR

Principales cálculos,
para encontrar el
número a multiplicar
con el registro
LEVEL_SENSOR y
ver dónde se pondrá
la coma flotante.

20 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Enviamos a la pantalla el valor del nivel
que tiene el tanque en metros, el valor
se observará en decimal.

Copiamos el contenido de NumB1 en W y hacemos un


llamado a la subrutina dec_bin_lcd_en_ASCII , la cual
se encuentra en la librería Electronicpic16f877, en esta
subrutina se realiza las operaciones necesarias para
convertir un valor decimal en binario y además permite
que se pueda visualizar en la pantalla lcd.

Enviamos a la pantalla lcd a b3, b2, b1


y b0, quienes representan los bits del
número decimal en binario.

Librerías utilizadas en el
código del programa.

Figura 21:Capturas de pantalla programa que mide el nivel de un tanque

Para tener un mayor entendimiento del programa se explicará en que consiste la


subrutina dec_bin_lcd_en_ASCII, esto se podrá observar en la imagen número 20.

NumB1 fue guardado en W, una vez guardado en W, se


copia a DEC_BIN, registro que fue definido en la sección
de constantes de la librería Electronicpic16f877

21 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Como ejemplo utilizaremos la primera
comparación, ya que las demás siguen la
misma secuencia:
Si el número que se encuentra en el registro
DEC_BIN es mayor o igual que 128,
entonces consideraremos que el bit 7(b7) es
1, pero si no cumple se considerará que b7 es
cero, para comparar nuevamente en caso que
si cumpla la primera condición, este número
se resta con 128 y el resultado se vuelve a
comparar con 64, pero si no cumple con la
primera condición, el mismo número se
compara con 64 y así sucesivamente.

En caso de que todos los bits sean cero, es necesario


sumarles 48 con el fin de convertirlos a ASCII, para
que se puedan observar en la pantalla LCD.

22 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Si se cumple la condición de mayor o igual se
coloca un uno en determinado “bit” (bx) y se le
resta el número con el cual esta siendo comparado,
este resultado vuelve a ser comparado con el
siguiente valor.

Se le suma 48 a cada registro que representan un


bit, con el fin de pasarlos de binario a código ASCII
y se pueda observar en la pantalla LCD.

Figura 22: Capturas de pantalla de la subrutina dec_bin_lcd_en_ASCII

23 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
2. Código del programa
;------------------------------------------
;-------APLICACIÓN DE LO APRENDIDO---------
;------------------------------------------
list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
__config 0x3f32
cblock 0x20
LEVEL_SENSOR
bina
endc
org 0000h

call Inicio_lcd
cursor off ;El cursor por defecto esta en off
repetir
;----------------PROGRAMA PRINCIPAL------------
movlw .0 ;Se define el canal para el ingreso
;de la señal enviada por el sensor.
call Inicio_ADC ;Llamado a la subrtina Inicio_ADC
call ADC8Bits ;Llamado a la subrtina ADC8Bits
movf RegADC1,0 ;Copiamos el dato 1 de RegADC1 en W
movwf LEVEL_SENSOR ;Copiamos el dato de W al registro
LEVEL_SENSOR
delay_ms .1
;----------------------LEVEL-------------------
mensaje .1 ; NIVEL DEL TANQUE
enter

movf LEVEL_SENSOR,0
movwf NumMult1
;------HALLANDO LOS VALORES A MULTIPLICAR------
; 255----->5V----->10 METROS
; LEVEL------------>X
; 0 ----->0V----->0
;=>X= LEVEL_SENSOR*10/255 =>X=LEVEL*0.0392
;No se puede poner 392, ya que es superior a 255
;por lo tanto se pondrá 39
;X=LEVEL_SENSOR * 39
; | |
; NumMult1 * NumMult2
; Si LEVEL es máx, el maximo valor será 9945
;=>9(aquí ponemos la coma flotante)945=>9,945
;NumB2|NumB1|NumA3|NumA2|NumA1
; | 9 | 9 | 4 |5
;-----------------------------------------------
24 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
movlw .39
movwf NumMult2
call Mult8x8Bits
movlw .48 ;|Se suma 48 para convertir a ASCII
addwf NumB1
addwf NumA3

ponerc ' '


putv NumB1
ponerc '.'
putv NumA3
ponerc 'm'

MOVF NumB1,0
call dec_bin_lcd_en_ASCII
ponerc ' '
ponerc ' '
ponerc ' '
ponerc 'B'
ponerc '"'

putv b3
putv b2
putv b1
putv b0

ponerc '"'
delay_ms .250
borralcd
goto repetir

return
;------------LIBRERIAS USADAS-------------
include<electronicpic16f877.asm>
include<adc.asm>
include<lcd.asm>
include<mensaje.asm>
include<Mult8x8.asm>
include<conversion.asm>
end

25 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
3. Simulación del reto en clase en software PROTEUS

U1 LCD1
RV2 13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
0%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD

VDD
VSS

VEE
7

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RA5/AN4/SS/C2OUT

E
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2

1
2
3

4
5
6

7
8
9
10
11
12
13
14
0.00 9 17
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24

RD3
RD2
RD1

RD4
RD5
RD6
RD7
MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 23: Simulación de la aplicación de lo aprendido

U1 LCD1
RV2 13 33 LM016L
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
59%

RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
1k 6 40
RA4/T0CKI/C1OUT RB7/PGD
VDD
VSS

VEE

7
RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
RA5/AN4/SS/C2OUT
E

15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
1
2
3

4
5
6

7
8
9
10
11
12
13
+2.95 9 17 14
RE1/AN6/WR RC2/CCP1
Volts 10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
RD3
RD2
RD1

RD4
RD5
RD6
RD7

MCLR/Vpp/THV RC5/SDO
25
RC6/TX/CK
26
RC7/RX/DT
19
RD0/PSP0
20
RD1/PSP1 RD1
21
RD2/PSP2 RD2
22
RD3/PSP3 RD3
27
RD4/PSP4 RD4
28
RD5/PSP5 RD5
29
RD6/PSP6 RD6
30
RD7/PSP7 RD7
PIC16F877A

Figura 24: Ejemplo de medida de nivel del tanque


En la figura número 22 se puede observar que el nivel del tanque expresado
numéricamente se puede observar tanto en valor decimal como en valor binario .

26 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
4. Implementación de la aplicación de lo aprendido

Figura 25: Implementación física del programa

Figura 26: Valor del nivel del tanque en decimal y binario


Se observa que el valor numérico del nivel del tanque se puede ver en decimal y en
binario a la vez.

27 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
Figura 27: Valor del nivel del tanque en decimal y binario

OBSERVACIONES
• La pantalla lcd solo puede leer símbolos y números en código ASCII.
• Para reducir el tamaño del programa de la aplicación, se creó una subrutina, en
la librería Electronicpic16f877, que transforma un número decimal en binario y
además permite que se pueda visualizar en la pantalla LCD.
• En el caso que las letras no se puedan observar en la pantalla lcd, un factor
puede ser alguna mala conexión o el ajuste de brillo de la pantalla, si el
problema es el ajuste de brillo, es necesario hacer un pequeño circuito ajustador
de brillo con un potenciómetro.

CONCLUSIONES
• El uso de las librerías facilita el trabajo de creación de un código, ya que nos
permiten realizar distintas operaciones que en lenguaje ensamblador no se
pueden realizar como la multiplicación y división.
• El uso de librerías nos permite reducir el tamaño de un programa.
• Para poder realizar una programación correcta es necesario analizar todos los
casos posibles, para que el código sea construido correctamente.

28 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
REFERENCIAS

• Blog el Conspirador. Programación en assembler con el PIC16F877A.


Recuperado de:
https://www.elconspirador.com/2015/12/24/parte-1-introduccion-a-la-
programacion-en-assembler-con-el-pic16f877a/

• Hispavila (blog). Microcontroladores PIC. Recuperado de:


https://www.hispavila.com/category/micros/pic/

• Mikroelektronika (blog). Microcontrolador PIC16F877A. Recuperado de:


https://www.mikroe.com/ebooks/microcontroladores-pic-programacion-en-c-
con-ejemplos/caracteristicas-basicas-del-pic16f887

29 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
RÚBRICA PARA EVALUAR LABORATORIO DE MICROCONTROLADORES 2018-1 - SESION 7
DOCENTE: Ing. CESAR CIRIACO MARTÍNEZ
REALIZAN LA APLICACION DE LO EL GRUPO EL GRUPO EL GRUPO EL GRUPO
DIMENSIÓN APRENDIDO (SEGÚN EL NO CUMPLE NO CUMPLE NO CUMPLE NO CUMPLE
ENUNCIADO) - CON UNO CON DOS CON TRES CON MAS DE
CON BUEN SUSTENTO TEORIA - DE LOS DE LOS DE LOS TRES DE LOS
PRÁCT. ITEMS ITEMS ITEMS ITEMS
-FUNCIONA SU ASIGNADOS ASIGNADOS ASIGNADOS ASIGNADOS.
PROGRAMA -REALIZA EL O UNO DE O LOS DOS O SOLO O NO HIZO
DISEÑO A TIEMPO. - LOS DISEÑOS HIZO UN EL PROGRA
REALIZA DIAGRAMA DE FLUJO DISEÑOS LO ESTÁN A DISEÑO. LO MA.
PARA SU EXPLICACIÓN. HACE A MEDIAS. LO REALIZA EN
SIMULACIÓN -OBTIENE LOS RESULTADOS QUE MEDIAS. LO REALIZA EN PROTOBOA
DEL SE LE PIDIÓ. REALIZA EN PROTOBOA RD
PROYECTO -LO REALIZA EN TARJETA DE PROTOBOA RD
PROPÓSITO GENERAL RD
ASIGNADO

8 6 4 2 1-0
EL GRUPO REALIZA LAS EL GRUPO EL GRUPO EL GRUPO EL GRUPO
INDICACIONES DEL NO REALIZA NO REALIZA NO REALIZA NO REALIZA
DOCENTE UNO DE LAS DOS DE LAS TRES DE MAS DE TRES
-SE ELIGE UN LIDER INDICACION INDICACION LAS DE LAS
(COORDINADOR), ES DEL ES DEL INDICACION INDICACIONE
-SE ASIGNAN TRABAJOS EN DOCENTE. DOCENTE. ES DEL S DEL
EQUIPO. DOCENTE. DOCENTE.
-HACEN PREGUNTAS AL
DOCENTE,
TRABAJO EN -REALIZAN EL TRABAJO EN EL
EQUIPO TIEMPO
INDICADO. -NO
USA EL CELULAR. -
LLEGA TEMPRANO A CLASE
-REALIZA EL TRABAJO ASIGNADO
EN CLASE. -
NO JUEGA EN CLASE.

4 3 2 1 0
EL ESTUDIANTE RESPONDE A LAS EL EL EL EL
6 PREGUNTAS QUE SE REALIZA EN ESTUDIANT ESTUDIANT ESTUDIANT ESTUDIANTE
LA PLATAFORMA QUIZIZZ. E E E NO
RESPONDE RESPONDE RESPONDE RESPONDE
5 DE LAS 6 4A3 2A1 NINGUNA DE
PREGUNTA DE LAS 6 DE LAS 6 LAS 6
S QUE SE PREGUNTA PREGUNTA PREGUNTAS
PREGUNTAS REALIZA EN S QUE SE S QUE SE QUE SE
LA REALIZA EN REALIZA EN REALIZA EN
DEL TEST PLATAFOR LA LA LA
MA QUIZIZZ. PLATAFOR PLATAFOR PLATAFORM
MA QUIZIZZ. MA QUIZIZZ. A QUIZIZZ.

4 3 2 1 0
EL GRUPO REALIZA SU INFORME EL GRUPO EL GRUPO EL GRUPO EL GRUPO
EN EL TIEMPO NO REALIZA NO REALIZA NO REALIZA NO REALIZA
DETERMINADO. - UNO DE LAS DOS DE LAS TRES DE MAS DE TRES
UTILIZA EL FORMATO APA 6. - INDICACION INDICACION LAS DE LAS
REALIZA INTRODUCCIÓN, INDICE, ES DEL ES DEL INDICACION INDICACIONE
TABLAS Y FIGURAS Y ITEM. ITEM. ES DEL S DEL ITEM O
OBJETIVOS - ITEM. ES COPIA DE
REALIZA MARCO TEÓRICO, OTRO
EXPERIENCIA DE LAB, INFORME.
INFORME DE OBSERVACIONES Y
LABORATORI CONCLUSIONES.
-SUSTENTA SU APLICACIÓN EN EL
O INFORME.
-NO ES COPIA DE OTRO INFORME.
- CUMPLE CON EL RETO EN CLASE.

4 3 2 1 0

30 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S
OBSERVACIO
NES

31 | P R O G R A M A C I Ó N D E M I C R O C O N T R O L A D O R E S

Você também pode gostar