Lab09 ProgramacionSimulacionAplicativo2 PIC18F4550

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

PROGRAMACIÓN DE

MICROCONTROLADORES
Laboratorio N° 9 y 10
Programación y Simulación del Aplicativo II

Integrantes:

Antonio Sinche, Bryan Elvis

Estrella Sulca, Ricardo Robert

Laguna Marroquin, Jorge Alberto

Tinco Huatuco, Diego Alexander

Velasquez Laime, Anderson

Sección: 5 C16 A

Fecha de realización: 17/10/2022

Fecha de entrega: 4/11/2022

TECSUP - 2022 II
ÍNDICE

Introducción 1
Objetivos 1
Equipos y Materiales 1
Fundamento Teórico 1
Procedimiento 4
Reto en clase 10
Reto en clase 2 14
Observaciones 21
Conclusiones 21
Rúbrica 23
Introducción
Los simuladores, en la electrónica, permiten realizar infinidad de pruebas en los cálculos
electrónicos, lógica de programación, etc. Esto permite validar el diseño electrónico y la
programación del microcontrolador. En caso hubiera algún error este se corrige modificando el
diseño o realizando otra lógica en la programación cuántas veces se quiera. Una vez logrado el
diseño y la programación correcta recién se realiza la implementación.
Objetivos
1. Utilizar las instrucciones para programar al microcontrolador PIC18F4550.
2. Utilizar software de desarrollo proporcionado por el fabricante.
3. Utilizar software de simulación digital.
Equipos y Materiales
● Computadora
● Software de desarrollo
● Proyector multimedia
● Texto del curso
● Manual del fabricante
Fundamento Teórico
Terminal Virtual:
El terminal virtual es un modelo que simula al teletipo TTY de comunicaciones serie
convencional. Este funciona bajo la norma RS 232, la cual fue establecida para poder
comunicar un ordenador con un módem.
Sus principales características son:
● Cuenta con un completo soporte bi-direccional. Esto indica que los datos que se
reciben son visualizados como caracteres ASCII, así como los datos se transmiten
en serie ASCII.
● La transmisión de datos serie se realiza mediante la utilización de dos cables: TXD
para transmitir datos y RXD para recibir datos.
● Cuenta con velocidades de transmisión de entre 300 a 57,6 kbaudios.
● Cuenta con paridad par, impar y nula.
● Su protocolo de sincronización hardware se realiza mediante dos hilos: RTS siendo
“listo para enviar” y CTS es “limpio para enviar”.
● Cuenta con un protocolo de sincronización software XON/XOFF adicional al
protocolo de sincronización hardware.

1
Figura 1. Terminal virtual en el software Proteus
Interrupciones:
Cuando se activa una interrupción, se le indica al PIC que detenga la tarea que se
encuentra realizando con el objetivo de que realice otra función con urgencia y después
continúe ejecutando su rutina habitual.
Podríamos definir a las interrupciones como unas desviaciones de flujo de control del
programa que son originadas de forma asincrónica y que puede ocurrir por diversos
sucesos que son independientes del programador, esto quiere decir que estas pueden
ocurrir en cualquier momento.
Tipos de interrupciones:
Se indicarán algunas de las diferentes causas que pueden producir una interrupción en el
PIC, siendo que el primer paso en la rutina de interrupción deberá ser el identificar la
causa de dicha interrupción:
● Interrupción externa PIC RB0/INT
● Interrupción por desborde del timer 0 (TMR0)
● Interrupción por desborde del timer 1 (TMR1)
● Interrupción por comparación exitosa exitosa en TMR2
● Interrupción del EEPROM
● Interrupción del comparador

Figura 2. Interrupciones PIC

2
LabView:
Plataforma y entorno de desarrollo que nos permite diseñar sistemas mediante un
lenguaje de programación visual pensado principalmente para sistemas hardware y
software de pruebas.
Creado por la empresa National Instruments en el año de 1976, nombra a sus programas
como instrumentos virtuales o mejor conocidos como VIs. Al ser una herramienta gráfica
de programación sus programas no se escriben como se acostumbra en otros lenguajes
de programación, es más adecuado decir que se dibujan, permitiendo una mejor
comprensión.

Figura 3. Software Labview.


Comunicación Serial:
Consiste en el envío de un bit de información de manera secuencial, lo realiza un bit a la
vez y a un ritmo acordado entre el receptor y emisor. A día de hoy, la comunicación serial
continua con los estándares definidos en 1969 por el RS-232 (siglas que significan
Recommended Standard 232). Este estándar establece ciertos niveles de voltaje,
velocidad de transmisión de los datos, etc.
La comunicación serial solo llega a utilizar tres líneas, siendo que una de estas se
encarga de recibir los datos RX, otra de transmitir los datos TX y por último la línea común
GND.

Figura 4. Comunicación Serial.

3
Procedimiento
Ejercicio 1
Analizar, comentar, simular e implementar en el siguiente código.

Figura 5. Código de Ejercicio 1- Parte 1.

4
Figura 6. Código de Ejercicio 1- Parte 2.

Figura 7. Código de Ejercicio 1- Parte 3.

Simulación:

Video: https://youtu.be/tnSG8jUUX3U

5
Circuito implementado en Proteus:

Figura 8. Simulación en Proteus - ejercicio 1.

Figura 9. Ventana de Virtual Terminal - Proteus.


Aquí hace falta un poco de exactitud, de parte de la Subrutina BIN16_BCD, ya que se
multiplicó numero altos (8 bits * 8 bits) teóricamente debería darnos 65025; por ello
comprobamos con números bajos.
Se multiplicó los números 2, 10; eso sí teóricamente debería darnos 20; pues se
comprobó la multiplicación en Proteus.

6
Figura 10. Simulación en Proteus - ejercicio 1.

Figura 11. Código de Ejercicio 1 - Parte 1

7
Explicación:
Se separó el programa en 4 partes para simplificar su explicación.
En la Parte 1 se muestra la configuración de bits del PIC. Asimismo, se agrega la librería
P18F4550.INC la cual sirve para usar nombres en vez de la dirección de los registros que
tiene el PIC, también una macro llamada “MACRO_PIC18F4550.inc” la cual contiene
algunas macros para los retardos. Posteriormente se indica que la rutina MAIN se iniciará
a partir de la dirección 0x0020 de la memoria de instrucciones. De seguido Iniciaremos
llamando a la subrutina CONFIG_UART, esto nos indica la configuración para establecer
una comunicación; en ello se configura los registros TXSTA, RCSTA, BAUDCON.

Figura 12. Parte 1, Línea de código 1 - 24.


En la línea de código 25 se inicia realizando una multiplicación entre el registro w (con un
valor de 255) y otro literal de valor 255. Posteriormente, se llama a las subrutinas
BIN16_BCD y BCD_ASCII. Y se crea una etiqueta ¨ENVIAR_DATA¨ la cual sirve para
enviar la data de las decenas de millar.

8
Figura 13. Parte 2, Línea de código 25 - 34.

Figura 14. Parte 3, Línea de código 35 - 70.

9
Por último, en la parte 4 se muestra la configuración UART, además se incluyen las
librerías de retardos y conversión.

Figura 15. Parte 4, Línea de código 70 - 89.


Reto en clase
Diseñar un programa que muestre el valor de voltaje de entrada, este será mostrado en
un panel LCD 16x2 y en un monitor serial.
Desarrollo:
El programa consiste en 5 partes principales sin contar con la configuración. En la primera
parte se realiza la creación de una variable DATO_ADC, seguido de esto se da la
indicación de ir a la rutina MAIN que se encuentra en la dirección 0x0020.

Figura 16. Parte 1 del reto en clase - creación de variable DATO_ADC


La segunda parte es la rutina MAIN, en esta se configuran los puertos D como salidas y
los puertos A como entrada. También se llaman a las subrutinas LCD_CONFIG y
CURSOR_OFF de la librería agregada LIB_LCD donde se configura al LCD 16x2 y se
deshabilita el cursor respectivamente. Así mismo se llaman a las subrutinas Config_UART
y Config_ADC encargadas de configurar la salida para el monitor serial y la configuración
de la adquisición de datos de entrada.

10
Figura 17. Función MAIN
La tercera parte es la subrutina leer_adc que se encarga de obtener los datos de la
entrada, realizar la conversión a voltios y mostrarla por el monitor serial y el lcd 16x2. El
envío de datos al LCD se realiza mediante el uso de la subrutina ENVIA_LCD_DATO
encontrada en la librería LIB_LCD, mientras que para el envío de datos al monitor serial
es realizado mediante la subrutina ENVIAR_TX.

Figura 18. Función LEER_ADC

Figura 19. Envío de datos al LCD

11
La siguiente parte es la subrutina ENVIAR_TX que se encarga de enviar los datos a el
monitor serial.

Figura 20. Función ENVIAR_TX y TX1


La última parte consiste en la subrutina Config_UART encargada de la configuración del
PIC y sus pines para poder realizar el envío de datos al monitor serial. También, en esta
parte se encuentra la subrutina Config_ADC que se encarga de configurar el PIC para
poder leer los datos de entrada analógica hacía el PIC.

Figura 21. Función Config_UART y Config_ADC

12
Simulación de programa

Figura 22. Simulación en Proteus - Reto en clase - parte 1

Figura 23. Simulación en Proteus - Reto en clase - parte 2


Prueba de simulación:https://youtu.be/wdt9jJjx5zo

13
Reto en clase 2
Diseñar un programa que muestre el valor de un sensor de Temperatura de entrada, este
será mostrado en un panel LCD 16x2 y en un monitor serial.
Desarrollo:
El programa consiste en 5 partes principales sin contar con la configuración. En la primera
parte se realiza la creación de una variable DATO_ADC, seguido de esto se da la
indicación de ir a la rutina MAIN que se encuentra en la dirección 0x0020.

Figura 24. Parte 1 del reto en clase - creación de variable DATO_ADC.


La segunda parte es la rutina MAIN, en esta se configuran los puertos D como salidas y
los puertos A como entrada. También se llaman a las subrutinas LCD_CONFIG y
CURSOR_OFF de la librería agregada LIB_LCD donde se configura al LCD 16x2 y se
deshabilita el cursor respectivamente. Así mismo se llaman a las subrutinas Config_UART
y Config_ADC encargadas de configurar la salida para el monitor serial y la configuración
de la adquisición de datos de entrada.

14
Figura 25. Parte 2 del reto en clase 2- Función LEER_ADC.
La tercera parte es la subrutina leer_adc que se encarga de obtener los datos de la
entrada, realizará la conversión a (°C);debido al literal .39 ubicado en la línea 40; ya que
se hizo una regla de 3 ;para obtener valores de 0-100°C. segudiamente se mostrará por el
monitor serial y el LCD 16x2. El envío de datos al LCD se realiza mediante el uso de la
subrutina ENVIA_LCD_DATO encontrada en la librería LIB_LCD, mientras que para el
envío de datos al monitor serial es realizado mediante la subrutina ENVIAR_TX.

15
Figura 26. Parte 3 del reto en clase 2 - Datos de sensor Temperatura.
La siguiente parte es la subrutina ENVIAR_TX que se encarga de enviar los datos a el
monitor serial.

Figura 27. Parte 4 del reto en clase 2- Subrutina ENVIAR_TX,ENVIAR_TX1.


Ya en esta parte consiste en la subrutina Config_UART encargada de la configuración del
PIC y sus pines para poder realizar el envío de datos al monitor serial. También, en esta
parte se encuentra la subrutina Config_ADC que se encarga de configurar el PIC para
poder leer los datos de entrada analógica hacía el PIC.

16
Figura 28. Parte 5 del reto en clase 2- Subrutina Config_UART,Config_ADC.
Y por ultimo la inclsuion de las librerías “retardos.inc” , “Conversion.inc” y “LIB_LCD.INC”

Figura 29. Parte 6 del reto en clase 2- Inclusión de librerias.

17
Simulación de programa

Figura 30. Simulación en Proteus - Reto en clase 2 - parte 1.

Figura 31. Simulación en Proteus - Reto en clase 2 - parte 2.


Simulación:
https://youtu.be/I7YbMRdovGo

18
RETO
1. Diseñar un programa en el cual muestre el valor de un sensor de temperatura y uno de
humedad por la entrada analógica CH0 y CH1.El rango del sensor de temperatura es: 10 a 150
°C, la humedad de 0 a 100%, los valores deben mostrarse en la pantalla LCD 16x2 y en el
puerto serial

En la primera parte se realiza la creación de una variable DATO_ADC, DATO_ADC_2


seguido de esto se da la indicación de ir a la rutina MAIN que se encuentra en la dirección
0x0020.Despues hace llamado a la Config_UART,Config_ADC; la subrutina leer_adc que
se encarga de obtener los datos.

Figura 32. Parte 1 del reto- DATO_ADC,DATO_ADC_2.


Primero se inició con una regla de tres para la variable de temperatura (150/255) se
multiplicará; la cual nos dara valores de 0-150°C.Despues el llamado de la subrtuna
BIN16_BCD,BCD_ASCII para despues mandar los valores
DMILLAR,UMILLAR,CENTENA, acompañado de un llamado ENVIAR_TX. Para después
iniciar la conversión.

19
Figura 33. Parte 2 del reto- Variable TEMPERATURA.

20
Se llamará Config_ADC_2 como canal 1, la subrutina leer_adc_2 que se encarga de
obtener los datos del sensor de humedad.

Figura 34. Parte 3 del reto- Subrutina leer_adc_2.


Después se iniciará con una regla de tres para la variable de humedad (100/255) se
multiplicará; la cual nos dará valores de 0-100%. Después el llamado de la subrutina
BIN16_BCD,BCD_ASCII para después mandar los valores
DMILLAR,UMILLAR,CENTENA, acompañado de un llamado ENVIAR_TX_2. Para
después iniciar la conversión.

Figura 35. Parte 4 del reto- Variable HUMEDAD.

21
La siguiente parte es la subrutina ENVIAR_TX,ENVIAR_TX_2 que se encarga de enviar
los datos de temperatura y humedad al monitor serial.

Figura 36. Parte 5 del reto- ENVIAR_TX.


Ya en esta parte consiste en la subrutina Config_UART encargada de la configuración del
PIC y sus pines para poder realizar el envío de datos al monitor serial. También, en esta
parte se encuentra la subrutina Config_ADC,Config_ADC_2; para los canales 0,1
;respectivamente, esto se encarga de configurar el PIC para poder leer los datos de
entradas analógicas hacía el PIC.

Figura 37. Parte 1 del reto- Config_ADC,2,Config_UART.

22
Simulación de programa

Figura 38. Simulación del reto- 150°C,100%.

Figura 39. Simulación del reto- 0°C,0%


Simulación:

23
https://youtu.be/xEFVP3SzoQQ
Se pide diseñar y realizar la lógica de programación del caso de estudio propuesto en clase:
Enunciado:
Aplicación Implementación 2

1 Control de distancia con sensor ultrasonido, con adquisición de


datos en Labview, indicar el límite con un buzzer a una frecuencia de
10 KHz.
2 Sistema de alarma con Labview, controlando las puertas, ventas y
sistema de luces. Se activa la alarma con un teclado matricial y se
muestra este en una pantalla LCD.

Observaciones
- Se recomienda realizar una lectura de la información proporcionada, para que de
esta manera sea más fácil programar y sea menos probable estancarse al
quedarse sin ideas de cómo continuar.
- Se recomienda realizar la programación de poco en poco; es decir, primero realizar
una programación básica y a partir de esa base, ir añadiendo las funcionalidades
que se piden.
- Es recomendable hacer un diagrama de flujo de la programación a realizar, pues
de esta manera es más sencillo aplicar los siguientes pasos a programar.

Conclusiones
- Se utilizó el set instrucciones para programar al microcontrolador PIC18F4550 y de
esta manera se logró hacer los programas para los ejercicios y retos propuestos en
clase.
- Se utilizó el software de desarrollo proporcionado por el fabricante Microchip, en
este caso, el software es MPLAB. De esta manera, luego de haber realizado los
ejercicios de laboratorio se concluye que el programa MPLAB ofrece la posibilidad
de programar diferentes microcontroladores de su catálogo, así como el poder
simularlos dentro del mismo software.
- Se utilizó el software de simulación Proteus para realizar las conexiones de los
circuitos realizados en el laboratorio, gracias a ello se concluye que es importante
tener un software de simulación pues es más rápido hacer las conexiones y

24
también es más seguro pues no se corre el riesgo de quemar los dispositivos por
una mala conexión.
- Se concluye que para las conversiones como variable, el número máximo que
podemos obtener son valores hasta 255.. ; por ser de 8 bits; ya que si tenemos un
número por ejemplo 785 que va ser multiplicado; sólo se aceptará el valor de 78 ;
no es posible poner 785 ya que nos dará una programación errónea; es por ello
que en las conversiones nos da algunos valores no tan precisos o exactos.

Bibliografía
Hubor. (s.f.). Terminal virtual de teletipo RS232 y TTY. Recuperado de
https://www.hubor-proteus.com/proteus-pcb/prospice/59-terminal-virtual-de-teletipo.html

Controlautomaticoeducacion. (s.f.). Interrupciones PIC. Recuperado de


https://controlautomaticoeducacion.com/microcontroladores-pic/interrupciones/
Intesc. (s.f.). Uso de interrupciones PIC C Compiler. Recuperado de
https://intesc.mx/uso-de-interrupciones-pic-c-compiler/

Controlautomaticoeducacion. (s.f.). Comunicación Serial con PIC. Recuperado de


https://controlautomaticoeducacion.com/microcontroladores-pic/16-comunicacion-serial-co
n-pic/
Wikipedia. (s.f.). LabVIEW. Recuperado de https://es.wikipedia.org/wiki/LabVIEW

25
Rúbrica

26

También podría gustarte