Está en la página 1de 12

INFORME DE PROGRAMACIÓN CON PRIORIDADES Y

SUBPRIORIDADES
UNIVERSIDAD POLITÉCNICA SALESIANA
MICROPROCESADORES Y SISTEMAS EMBEBIDOS, INGENIERÍA MECATRÓNICA
DARIO JAVIER CASAMIN CINILIN
dcasamin@est.ups.edu.ec

RESUMEN: En este informe se presentará I. INTRODUCCIÓN


la programación de un reloj con tres
La Prioridad de prioridad permite que una
pulsadores, donde utilizaremos prioridades
ISR sea precedida (interrumpida) por otra
y sub prioridades en la programación con las
interrupción de mayor prioridad. Cuando se
cuales constara de la siguiente manera con
completa la interrupción de mayor prioridad,
el pulsador 1 tendrá una prioridad 1 y una la interrupción de menor prioridad continúa
sub prioridad 1 la cual realizara un que el desde donde se detuvo.
LCD muestre un mensaje que es
“MECATRONICA ” y se desplace por la La sub prioridad, por otra parte, no tiene
pantalla, con el pulsador 2 tendrá prioridad 1 nada que ver con la prevención. Digamos
y sub prioridad 2 mostrara “NOMBRE Y que tiene dos interrupciones de la misma
prioridad que están pendientes. El
APELLIDO” y con el pulsador 3 tendrá una
manejador de interrupciones elegirá cuál de
prioridad 1 y una sub prioridad 3 ejecutara un
ellos atenderá primero, en función de su sub
contador que incrementa de 1 en 1. prioridad. Una vez que se complete el
PALABRAS CLAVE:
PRIORIDAD, primero, comenzará el segundo.
SUBPRIORIDAD, PROGRAMACIÓN. Puede parecer poco probable que dos
interrupciones puedan suceder al mismo
ABSTRACT: In this report, the
tiempo. Una situación común donde esto
programming of a clock with three buttons
podría suceder es si tiene una rutina de
will be presented, where we will use priorities
servicio de interrupción que lleva mucho
and subpriorities in the programming with
tiempo. Durante esta rutina, pueden haber
which it will consist of the following way with
tenido lugar otros desencadenantes de
button 1 it will have a priority 1 and a
interrupción. Si es así, la sub prioridad
subpriority 1 which will perform a LCD shows
determinará cuál se maneja a continuación.
a message that is "MECHATRONIC" and
scrolls through the screen, with button 2 it will Finalmente, tenga en cuenta que a medida
have priority 1 and subpriority 2 will show que la prioridad real aumenta, el valor de
"NAME AND LAST NAME" and with button 3 prioridad disminuye. Es
it will have a priority 1 and a subpriority 3 will decir, Priority=1 recibirá servicio antes
execute a counter that increases 1 in 1. que Priority=2.
KEY WORDS: PRIORITY, SUBPRIORITY,
SCHEDULING.
OBJETIVOS
OBJETIVO GENERAL:
• Poder realizar una programación
con prioridades y sub prioridades y
poderlo implementar con todos los
elementos para poder ejecutar lo
que programemos.

OBJETIVOS ESPECÍFICOS:
• Comprender el funcionamiento en FIG 1. CUBE MX STM32
programación de una prioridad y sub
prioridad.
• Ver la utilidad de una prioridad en KIEL MDK
programación para STM32f4xx. Keil MDK es el entorno de desarrollo de
software completo para una amplia gama de
dispositivos microcontroladores basados en
II. MARCO TEÓRICO Arm Cortex-M. MDK incluye el IDE μVision y
depurador , compilador Brazo C / C ++ , y
CUBE MX STM32
esenciales de middleware componentes. Es
• Configuración de generación de compatible con todos los proveedores de
código C para la multiplexación de silicio con más de 8.000 dispositivos y es
pin, la señal de reloj, los periféricos y fácil de aprender y usar.[2]
la configuración de middleware con
asistentes gráficos
• Generación de proyectos de entorno
completo de desarrollo integrado
(IDE) listos para cadenas de
herramientas entorno completo de
desarrollo integrado
• Cálculo del consumo de energía para
una secuencia de aplicación definida
por el usuario
• Importación directa de bibliotecas de FIG 2. SOFTWARE KEIL

software integradas STM32 Cube


desde st.com
• Actualizador integrado para [1] [2] [3] [4]Todos los microcontroladores de
mantener STM32CubeMX al día.[1] la familia STM32F1, poseen un núcleo de 32
bits basados en los procesadores ARM
Cortex-M3, con una tecnología RISC más
eficiente, que permite la ejecución de
códigos a mayor velocidad que en otros
micros y con la potencia de un micro
industrial que se hace accesible y no limita la
realización de proyectos tan complejos como Pines de alimentación:
la imaginación del usuario permita.
Vss: Gnd
Es por ello que, hemos querido que los Vdd: +5 voltios
lectores aprendan y puedan desarrollar Vee: corresponde al pin de contraste, lo
proyectos con estos micros, mediante una regularemos con un potenciómetro de 10K
gran cantidad de códigos de ejemplo, conectado a Vdd.
explicados paso a paso y proyectados para
ser probados y ejecutados en cualquier
placa que posean estos Pines de control:
microcontroladores.[3]
RS: Corresponde al pin de selección de
registro de control de datos (0) o registro de
datos(1). Es decir el pin RS funciona
paralelamente a los pines del bus de datos.
Cuando RS es 0 el dato presente en el bus
pertenece a un registro de
control/instrucción. y cuando RS es 1 el
dato presente en el bus de datos pertenece
a un registro de datos o un carácter.
RW: Corresponde al pin de Escritura(0) o
de Lectura(1). Nos permite escribir un dato
en la pantalla o leer un dato desde la
pantalla.
E: Corresponde al pin Enable o de
FIG 3. STM32F411RE habilitación. Si E(0) esto quiere decir que el
LCD 16X2 LCD no esta activado para recibir datos,
pero si E(1) se encuentra activo y podemos
El LCD(Liquid Crystal Dysplay) o pantalla escribir o leer desde el LCD.
de cristal líquido es un dispositivo empleado
para la visualización de contenidos o
información de una forma gráfica, mediante Pines de Bus de datos:
caracteres, símbolos o pequeños dibujos El Bus de datos bidireccional comprende
dependiendo del modelo. Está gobernado desde los pines D0 a D7. Para realizar la
por un microcontrolador el cual dirige todo comunicación con el LCD podemos hacerlo
su funcionamiento. utilizando los 8 bits del bus de datos(D0 a
En este caso vamos a emplear un LCD de D7) o empleando los 4 bits mas
16x2, esto quiere decir que dispone de 2 significativos del bus de datos(D4 a D7). En
filas de 16 caracteres cada una. Los píxeles este caso vamos a explicar la comunicación
de cada símbolo o carácter, varían en
con el bus de 4 bits.
función de cada modelo.

FIG 4. LCD
siguiente posición del lcd, podemos
emplear funciones como \f para limpiar el
display, \n cambio a la segunda línea, \b
mueve una posición atrás.
lcd_getc(x,y): devuelve caracteres a la
posición x,y.
Otras funciones: lcd_send_nibble(BYTE
n), lcd_send_byte(BYTE address, BYTE
n). [4]

PULSADORES
Pulsadores o interruptores, hay toneladas de
ellos en su casa. Un interruptor es un
FIG 5. CONEXIONADO DE PINES dispositivo simple con dos posiciones, EN y
AP (ENcendido y APagado). Una clase de
interruptor que usted usa cada día es el
LA LIBRERÍA DEL LCD:
interruptor de la luz. Cuando conecta, dentro
del interruptor, dos cables son unidos, lo que
Para poder visualizar los caracteres
o símbolos en el LCD es necesario que en permite fluir a la corriente que enciende la luz
el programa de código fuente a emplear, o la tostadora se caliente. Cuando lo
incluyamos la librería de este. desconecta, los dos cables son desunidos y
En este caso empleamos la librería "lcd.c", corta el flujo de la corriente. Esto esta muy
la cual hemos modificado. Siempre que bien pero creo que esto no es lo que interesa
utilicemos una librería de este tipo aquí.
tendremos que analizarla para saber cuales En definitiva, se trata de un mecanismo
son los pines de control y los pines para el
simple (los hay muy sofisticados),
Bus de datos, en este caso podemos
observar que están definidos al comienzo constituido por un par de contactos
de la misma. eléctricos que se unen o separan por medios
mecánicos. En electricidad, los falsos
contactos que se producen el ser utilizados
#define LCD_ENABLE_PIN PIN_D0 normalmente, en algunos casos produce
#define LCD_RS_PIN PIN_D1 una chispa debido a la corriente que
#define LCD_RW_PIN PIN_D2 atraviesa los contactos, provocando que
#define LCD_DATA4 PIN_D4 quemen en parte y ennegreciendo los
#define LCD_DATA5 PIN_D5 contactos eléctricos, lo que a la larga acaba
#define LCD_DATA6 PIN_D6 deteriorando dichos contactos. La chispa se
#define LCD_DATA7 PIN_D7 produce siempre al separar los contactos
(desconectar), en ocasiones parece que
En el resto de la librería se puede encontrar
también salta al conectarlos, eso es debido
todas las estructuras necesarias así como
las funciones que nos permiten utilizar a los rebotes mecánicos que se producen al
nuestro LCD. cambiar de estado.
Podemos encontrar funciones como : Esto que en electricidad se considera
normal, en electrónica es un verdadero nido
lcd_init: inicializa el lcd. de problemas, debido a dichos falsos
lcd_gotoxy: establece la posicion de contactos. Por su propia naturaleza, al
escritura en el lcd.
cambiar de posición un interruptor, los
lcd_putc: nos muestra un dato en la
contactos chocan entre sí y esto significa
una serie de falsos contactos que se de 0x00 a 0x0F. Digamos que tenemos que
reproducen de un modo sin control, por lo usar USART recibe la interrupción y la
que se generan los temidos rebotes conversión ADC finaliza la interrupción.
(debounce en inglés), estos rebotes, se USART es más importante que ADC, por lo
producen incluso cuando unimos dos cables que USART tendrá un número menor que
desnudos, simulando un interruptor o ADC.
pulsador.[5]
NVIC_IRQChannelSubPriority
Con este parámetro configuras la
interrupción prioridad, número de 0x00 a
0x0F. Digamos que tienes 2
USARTs habilitado, pero USART1 es más
importante que USART2. Así que USART1
tendrá número más bajo que USART2.[6]
FIG 6. PULSADOR

III. DESARROLLO DEL


PRIORIDADES O ALGORITMO
SUBPRIORIDADES Primero emplearemos el software
El núcleo M3 o M4 admite hasta 240 STM32CubeMX para poder escoger la
interrupciones. tarjeta con la que trabajaremos y habilitar
los puertos para el LCD y los puertos para
Necesitarás prioridad para ser asignado a los pulsadores y configurar las prioridades y
las interrupciones. En lugar de definir 240 sub prioridades que empleara cada
niveles de prioridad, la arquitectura agrupa pulsador.
un grupo de ellos.
Entonces, una intuición será 12 grupos
principales (grupo A, B, C, ...) y cada grupo
tiene, por ejemplo, 10 fuentes de
interrupción. Entonces, si ya hay una
interrupción que se está revisando en el
grupo A, entonces, otra interrupción en el
mismo grupo A no se revisará hasta que la
primera interrupción se repare por completo.
Por el contrario, mientras se sirve la primera
interrupción, si se produce otra interrupción
de un grupo de mayor prioridad, entonces el FIG 7. HABILITACION DE PUERTOS EN EL STM32
servicio de interrupción actual se pausará.
La prioridad secundaria ayuda cuando se CONFIGURACIÓN DE PUERTOS
producen dos interrupciones desde el mismo ➢ PUERTOS LCD:
grupo al mismo tiempo. Luego, la prioridad
secundaria entrará en juego para elegir qué • PC10: GPIO_OUTPUT-RS
ISR ejecutar.
• PC12: GPIO_OUTPUT-E
NVIC_IRQChannelPreemptionPriority • PA1: GPIO_OUTPUT-D4
Con este parámetro se • PA4: GPIO_OUTPUT-D5
establece prioridad de interrupción, número • PB0: GPIO_OUTPUT-D6
• PC1: GPIO_OUTPUT-D7

➢ PUERTOS PULSADORES:

• PB1: GPIO_EXTI1-PULL-UP
• PB2: GPIO_EXTI2-PULL-UP
• PB3: GPIO_EXTI10-PULL-UP
Vamos al NVIC para configurar las
prioridades y sub prioridades para nuestro
programa
FIG 10. SOFTWARE KEIL

CÓDIGO EN KEIL:
LLAMAR A LAS LIBRERIAS:
/* Includes --------------------------------------------
----------------------*/
FIG 8. CONFIGURACIÓN PRIORIDADES #include "main.h"
También nos ubicamos en GPIO para #include "stdio.h"
configurar los puertos de los pulsadores en
PULL-UP y en modo RISING para las INICIALIZACIÓN DE LAS VARIABLES:
prioridades y sub prioridades. int p=00;
int q=00;
int r=00;
int s=00;
int t=00;
int u=00;
FIG 9. CONFIGURACIÓN DE PUERTOS PARA
PULSADORES int v=00;
Damos en generar código para luego poder int contador=0;
programar en el software KEIL y también
char T1[2];
debemos adicionar unas librerías para
poder ejecutar el LCD lo que programemos char T2[2];
char T3[2];
CONFIGURACION DE PUERTOS PARA
LCD:
/* USER CODE BEGIN 2 */
LCD1602_Begin4BIT(GPIOC,GPIO_PIN_1
0,GPIOC,GPIO_PIN_12,GPIOA,GPIO_PIN
if(t<=9){
_1,GPIOA,GPIO_PIN_4,GPIOB,GPIO_PIN
_0,GPIOC,GPIO_PIN_1); LCD1602_setCursor(1,6);
PROGRAMACIÓN DEL RELOJ: LCD1602_PrintInt(t);
/* USER CODE BEGIN 3 */ }
if(t>9 && t<=24){
LCD1602_setCursor(1,5); LCD1602_setCursor(1,5);
LCD1602_print(" : : "); LCD1602_PrintInt(t);
}
LCD1602_noCursor(); if(t<10){
LCD1602_noBlink(); LCD1602_setCursor(1,5);
LCD1602_PrintInt(u);
LCD1602_setCursor(2,4); }
LCD1602_print("04/01/2021");

p=p+1;
if(p>=60){ if(r<=9){
r=r+1; LCD1602_setCursor(1,9);
p=0; LCD1602_PrintInt(r);
} }
if(r>=60){ if(r>9 && r<60){
t=t+1; LCD1602_setCursor(1,8);
r=0; LCD1602_PrintInt(r);
} }
if(t>=24){ if(r<10){
p=00; LCD1602_setCursor(1,8);
r=00; LCD1602_PrintInt(s);
t=00; }
}
if(p<=9){ /* USER CODE BEGIN 4 */
LCD1602_setCursor(1,12); void HAL_GPIO_EXTI_Callback(uint16_t
GPIO_PIN){
LCD1602_PrintInt(p);
if (GPIO_PIN == GPIO_PIN_1){
}
for(int a=1;a<=17;a++)
if(p>9 && p<60){
{
LCD1602_setCursor(1,11);
LCD1602_clear();
LCD1602_PrintInt(p);
LCD1602_setCursor(2,a);
}
if(p<10){
LCD1602_setCursor(1,11);
LCD1602_print("mecatronica");
LCD1602_PrintInt(q);
HAL_Delay(600);
}
LCD1602_clear();
HAL_Delay(1000);
}
}
}
if(GPIO_PIN == GPIO_PIN_2){
/* USER CODE END 3 */
LCD1602_clear();
}
LCD1602_setCursor(2,1);
PARA VER LAS INTERRUPCIONES:
LCD1602_print("DARIO
/* EXTI interrupt init*/
CASAMIN");
HAL_NVIC_SetPriority(EXTI1_IRQn, 1, 1);
HAL_Delay(5000);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
LCD1602_clear();
}
HAL_NVIC_SetPriority(EXTI2_IRQn, 1, 2);
if(GPIO_PIN == GPIO_PIN_10){
HAL_NVIC_EnableIRQ(EXTI2_IRQn);
LCD1602_clear();
LCD1602_setCursor(2,1);
HAL_NVIC_SetPriority(EXTI15_10_IRQn,
contador=contador+1;
1, 3);
LCD1602_PrintInt(contador);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); HAL_Delay(3000);
PROGRAMACIÓN DE PULSADORES LCD1602_clear();
CON INTERRUPCIONES:
}
}
/* USER CODE END 4 */

IMPLEMENTACIÓN DE LA
PROGRAMACIÓN

FIG 12. CONECCIONADO DE LOS PULSADORES AL


MICROCONTROLADOR

FIG 11. CONEXIONADO DEL LCD AL


MICROCONTROLADOR
FIG 13. FUNCIONAMIENTO DEL PROGRAMA

FIG 14. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB


PRIORIDAD 1
FIG 15. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB
PRIORIDAD 2

FIG 18. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB


PRIORIDAD 3 CONTADOR

FIG 16. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB


PRIORIDAD 3 CONTADOR

FIG 19. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB


PRIORIDAD 3 CONTADOR

FIG 17. FUNCIONAMIENTO DE LA PRIORIDAD 1 Y SUB


PRIORIDAD 3 CONTADOR
IV. DIAGRAMA DE FLUJO

INICIO

RELOJ

PULS1 NO

SI
MECATRONICA

NO
PULS2

SI
DARIO
CASAMIN

PULS3 NO

SI
CONT+1

RELOJ NO

FIN
g/pulsadores-sin-rebotes. [Último acceso:
03 01 2021].

CONCLUSIONES: [4 D. CASAMIN, «PRIORIDADES Y SUB


] PRIORIDADES,» [En línea]. Available:
• La programación con prioridades nos https://electronica.guru/questions/69311/s
demuestra que podemos pausar el
tm32f4-como-se-utilizan-las-prioridades-de-
programa principal.
prioridad-y-las. [Último acceso: 03 01 2021].
• Nosotros con los pulsadores
demostramos la programación de las [5 D. CASAMIN, «STME CUBE MX,» [En línea].
prioridades como se ejecutan el orden ] Available:
asignado a cada prioridad.
http://www.emcu.it/STM32Cube/STM32Cu
• Las prioridades en el programa vemos
be.html. [Último acceso: 03 01 2021].
como se ejecuta en el orden de prioridad
programada. [6 D. CASAMIN, «KEIL,» [En línea]. Available:
• Para mejor apreciación del ] https://www2.keil.com/mdk5. [Último
funcionamiento del programa esta un acceso: 03 01 2021].
link del video del funcionamiento.

LINK DEL VIDEO:


https://www.youtube.com/watch?v=coE9f
2lbEpA

V. BIBLIOGRAFÍA

[1 D. CASAMIN, «STM32F4XX,» [En línea].


] Available:
https://www.digikey.com/es/product-
highlight/s/stmicroelectronics/stm32-f4.
[Último acceso: 03 01 2021].

[2 D. CASAMIN, «LCD 16X4,» [En línea].


] Available:
http://todoelectrodo.blogspot.com/2013/0
2/lcd-16x2.html. [Último acceso: 03 01
2021].

[3 D. CASAMIN, «PULSADORES,» [En línea].


] Available:
https://www.diarioelectronicohoy.com/blo

También podría gustarte