Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Figura 1: Estructura interna del convertidor A/D del microcontrolador PIC 16F877A 1
Principales registros usados
Registro ADCON0 (1Fh).
U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
31%
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
U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
30%
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
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
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%
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
U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
40%
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
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
U1
RV2 13 33
OSC1/CLKIN RB0/INT RB0
14 34
OSC2/CLKOUT RB1 RB1
35
RB2 RB2
2 36
58%
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
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%
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
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%
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
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
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
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
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.
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.
Librerías utilizadas en el
código del programa.
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.
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.
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
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
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
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
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
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