0% encontró este documento útil (0 votos)
190 vistas6 páginas

Informe N1 - SCD

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
190 vistas6 páginas

Informe N1 - SCD

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Informe N°1: Programación en BASCOM-

AVR Laboratorio de Sistemas de Control


Digital
Ildefonso Estela Ademir Jovitto 18190012
Facultad de Ingeniería Electrónica y Eléctrica, Universidad Nacional Mayor de San
Marcos Lima, Perú
[email protected]

Abstract— En este primer informe, corresponde a la primera y


- Programar un Microcontrolador ATMega328P para el encendido y
segunda sesión realizada en el laboratorio del curso de Sistemas
apagado de un Led por 0.5 segundos mediante interrupciones por
de Control Digital, se evidencia los primeros acercamientos hacia
comparación.
la Programación de Microcontroladores AVR en el software
BASCOM. Se trabajó con el Microcontrolador ATMega 328P
- Programar un Microcontrolador ATMega328P para realizar el
dentro de una placa Arduino UNO. Se realizaron dos códigos de
conteo de 0 a 7 en binario, mediante interrupciones por comparación
programación, el primero fue para encender y apagar un led
cada 2 segundos.
mediante interrupciones cada 0.5 segundos. El segundo programa
fue para realizar un contador de 0 a 7 en binario, mediante
interrupciones por comparación cada 2 segundos.
III. MARCO TEÓRICO

a) Placa Arduino
I. INTRODUCCIÓN
Esta es una tarjeta electrónica que nos brinda un entorno físico
En los ciclos previos a los cursos de Sistemas de Control Digital, se
completo para el desarrollo de diversos proyectos basados en sistemas
llevó Sistemas de Control I y II; donde se cubrieron diversos temas
embebidos. Existen diversos modelos, pero el que se utilizó para el
relacionados con el modelamiento de sistemas físicos, estabilidad,
desarrollo de las experiencias, y futuros trabajos, es el Arduino UNO.
controlabilidad, diseño de controladores, etc. Todos estos temas se
desarrollaron en el tiempo continuo, donde la Transformada de
Arduino UNO es una placa basada en el microcontrolador
Laplace fue una herramienta muy poderosa. Sin embargo, para su
ATmega328P. Tiene 14 pines de entrada/salida digital (de los cuales
implementación en microcontroladores, es necesario trabajar en
6 pueden ser usando con PWM), 6 entradas analógicas, un cristal de
tiempo discreto; por lo que la Transformada Z pasa a ser la
16MHz, conexión USB, conector jack de alimentación, terminales
herramienta principal.
para conexión ICSP y un botón de reseteo. Tiene toda la electrónica
necesaria para que el microcontrolador opere.
Es por ello que es imprescindible tener dominio en la programación
de microcontroladores. El microcontrolador que se usó en estas
primeras sesiones, y el que se usará a lo largo del curso, es el
ATMega328p. Este microcontrolador lo encontramos en la tarjeta
Arduino UNO. A su vez, la programación será realizada en el
Software BASCOM-AVR, el cuál es una poderosa herramienta
informática para la programación de este tipo de microcontroladores.

Dado que para muchos, y me incluyo, esta es la primera vez que se


usó BASCOM; estas primeras experiencias fueron orientadas a la
programación en este entorno. Donde se desarrollaron dos
experiencias, basados en un template brindado por nuestro docente.
En la primera experiencia se realizó un programa capaz de encender y
apagar un led mediante interrupciones cada 0.5 segundos. Y en el
segundo programa se realizó un contador de 0 a 7 en binario,
mediante interrupciones por comparación cada 2 segundos. Estás
primeras dos experiencias establecen las bases para los futuros
laboratorios

Figura 1. Partes principales de una placa Arduino UNO


II. OBJETIVOS PRINCIPALES
De la figura 1, podemos destacar que contamos con un Cristal de
Cuarzo de 16MHz, esto será sumamente importante, ya que tendrá
- Familiarizarse con el entorno de programación y las herramientas
que ser tomado en cuenta al momento de desarrollar los programas en
que nos brinda el Software BASCOM-AVR.
BASCOM, dado que se nos pedirá definir a qué frecuencia de reloj se
está trabajando. A su vez, también será importante para realizar los
- Conocer la arquitectura básica de un Microcontrolador
cálculos necesarios para fijar el tiempo deseado de las interrupciones
ATMega328p, sus características técnicas principales y sus puertos.
de 0.5 segundos y 2 segundos.
Será muy importante entender los tipos de datos elementales y su
sintaxis:

Figura 2. Relación entre los Pines del Arduino y los Puertos del ATMega328p Figura 5. Tipos de datos y su sintaxis

A su vez, será importante conocer los condicionales


b) Microcontrolador ATMega328p IF-THEN-ELSE-END IF, dado que estas operaciones nos permitirán
evaluar la verdad o falsedad de una expresión lógica.
Este será el microcontrolador que se programará en BASCOM. Es
basado en RISC AVR® de 8 bits picoPower® de Microchip de alto
rendimiento combina memoria flash ISP de 32 KB con capacidades
de lectura mientras escribe, EEPROM 1024B, SRAM de 2 KB, 23
líneas de E/S de uso general, 32 registros de trabajo de uso general ,
tres temporizadores/contadores flexibles con modos de comparación,
interrupciones internas y externas, USART serial programable, una
interfaz serial de dos hilos orientada a bytes, puerto serial SPI, un
convertidor A/D de 6 canales y 10 bits (8 canales en TQFP y paquetes
QFN/MLF), temporizador de vigilancia programable con oscilador
interno y cinco modos de ahorro de energía seleccionables por
software. El Microcontrolador funciona entre 1,8 y 5,5 voltios.

Figura 6. IF - THEN - ELSE - END IF

Dado que para realizar un bucle, se necesita trabajar con un iterador


que aumente en cada loop; es importante conocer la función INCR.
La cual proviene del término en inglés Increase, esta nos permitirá
incrementar el valor de una variable dada en una unidad

Figura 3. Descripción de pines y puertos del


ATMega328p

c) Programación en BASCOM-AVR
Figura 7. Función INCR
Se utilizará la versión demo 2.0.7.9, la cual cuenta con todas las
herramientas necesarias.
IV. DESARROLLO DE LA EXPERIENCIA

a) PRIMERA PARTE

Como ya se mencionó, en esta primera parte se programará un


Microcontrolador ATMega328P para el encendido y apagado de un
Led por 0.5 segundos mediante interrupciones por comparación.

Figura 4. Software BASCOM AVR


Para ello se desarrolla el siguiente código en Bascom: Después se procede a configurar los registros de comparación, en
hexadecimal, para que al llegar al segundo 0.5 se de la interrupción:

Cálculos:
16000000/256 = 62600

62500 ↔ 1 seg
↓ ↓ ÷2
31250 ↔ 0.5 seg
Conversión:
Dec ↔ Hex
↓ ↓
31250 ↔ 7A12

Finalmente se programa la acción a realizar una vez que se ha dado la


interrupción:

Analizando con mayor detalle, en la primera parte debemos definir el


tipo de Microcontrolador que vamos a programar y la frecuencia del
cristal:
Vemos que al darse la interrupción, se vuelve a fijar los registros del
contador a 0, y también se invierte el estado del PortB.5 haciendo
Microcontrolador: ATMega328p Cristal: 16MhZ uso de la función Toggle.
Después se dan configuraciones básicas para la interrupción y se Compilación
define las variable V1 de tipo Byte:

Lo que sigue, es configurar el Timer, establecer el Prescale a 256 y


definir el Puerto B como salida:
Figura 8. Compilación del Código

Programación del Chip


Se procede a establecer los Registros Contadores de pulsos de reloj a Será necesario, primero que nada, la configuración del programador:
0, es importante tomar en cuenta el datasheet:

Extraído del datasheet del ATMega328p

Se configura el On Interrupt, función que se encargará de ejecutar la


subrutina cuando la interrupción especificada ocurra:

Figura 9. Configuraciones previas


Figura 10. F4 - Se programa el Chip

Ejecución

Diagrama de Flujo:

Figura 11. Código corriendo en el ATMega328p del Arduino UNO

Dado que se tomó como salida el PortB.5 que corresponde al Pin 13


del Arduino, este posee un Led propio de la tarjeta (led amarillo).
Este led nos permite corroborar la correcta ejecución de nuestro
programa.

b) SEGUNDA PARTE

Como ya se mencionó en esta segunda parte se programará un


Microcontrolador ATMega328P para realizar el conteo de 0 a 7 en
binario, mediante interrupciones por comparación cada 2 segundos.

Para ello se desarrolla el siguiente código en Bascom:


El análisis del código es similar al realizado en la primera parte, salvo
algunas consideraciones.

Lo primero a considerar, es que agregaremos una variable de tipo


Byte llamada “ i ”, la cual va a llevar la cuenta de 0 a 7. Se expresa
en Binario:
Lo segundo a considerar, es el valor de la Pre-escala, que será fijado a Finalmente se carga el código:
1024 para lograr alcanzar los 2 segundos deseados:

Lo tercero a considerar, es el valor en Hexadecimal que se le asignará


a los Registros de Comparación de modo que se de la interrupción a
los 2 segundos:

Figura 12. Código corriendo en el ATMega328p del Arduino UNO

V.ANÁLISIS DE RESULTADOS

a) PRIMERA PARTE

Analizando los resultados obtenidos al ejecutar el código en el


Cálculos: Arduino UNO, tal como se muestra en la figura 11, podemos
establecer que se logró cumplir con el objetivo. El cuál consistía en
16000000/1024 = 15625 encender y apagar un led cada 0.5 segundos, usando interrupción por
comparación
15625 ↔ 1 seg
↓ ↓ ×2 Obteniendo:
31250 ↔ 2 seg

Conversión: PORTB.5 0 1 0 1
Dec ↔ Hex
↓ ↓ Tiempo 0-0.5 seg 0.5-1.0 seg 1.0-1.5 seg 1.5-2.0 seg
31250 ↔ 7A12
b) SEGUNDA PARTE
Finalmente se programa la acción a realizar una vez que se ha dado la
interrupción: Analizando los resultados obtenidos al ejecutar el código en el
Arduino UNO, tal como se muestra en la figura 12, podemos
establecer que se logró cumplir con el objetivo. El cuál consistía en
realizar un contador de 0 a 7 en binario, usando interrupción por
comparación cada 2 segundos.

El proceso se resume en el siguiente diagrama de estados:

El algoritmo no es muy complejo, se empezará siempre con un i=0 y


un PORTB=0; cada vez que se de una iteración i incrementará en una
Figura 13. Código corriendo en el ATMega328p del Arduino UNO
unidad, y cuando este supere el valor de i=7, entonces volverá a
fijarse en i=0 y se repetirá el proceso.
VI. CONCLUSIONES

Se concluye que BASCOM-AVR es una herramienta poderosa capaz


de brindarnos un buen entorno para la programación de
microcontroladores. Este nos brinda una sintaxis fácil de usar, cuyo
lenguaje se basa en el Basic; tenemos una opción llamada Help que
fue de gran ayuda para el desarrollo de las experiencias, nos brinda
información rápida sobre todo tipo de funciones, e incluso incorpora
ejemplos demostrativos.

Conforme al desarrollo de las dos experiencias, no hubo


complicaciones; todo resultó de acuerdo a lo esperado, obteniendo
resultados óptimos. Cabe destacar, que es sumamente importante
tener en cuenta el manejo de los registros para realizar la interrupción
por comparación en el tiempo deseado, lo que implica tener buena
base aritmética al pasar de una numeración decimal a hexadecimal

REFERENCIAS

[1] Espinosa Felipe, El Microcontrolador ATMega328P de


Microchip. Universidad Tecnológica de la Mixteca, 2021.

[2] Ramiro Valencia, Aplicaciones Electrónicas con Microcontroladores -


Lenguaje Basic (BASCOM AVR). 2008

[3] https://www.microchip.com/en-us/product/ATmega328P

[4] https://arduino.cl/arduino-uno/

También podría gustarte