Está en la página 1de 12

PROYECTO FINAL ESTRUCTURAS COMPUTACIONALES

NOMBRE: MARIA ALEJANDRA GIRALDO DUQUE


PROFESORES: GUSTAVO ADOLFO OSORIO
BERNARDO ANDRÉS CARDONA
PROYECTO: SEMAFORO

OBJETIVO
En el presente trabajo se muestra la solución a un problema de la vida real, a manera de
fortalecer el manejo práctico y el análisis crítico del estudiante ante tareas de la vida
cotidiana implementadas con el manejo de microcontroladores, en este caso
específicamente en el entorno del STM32L476, además de permitir al estudiante anexar
una parte libre del desarrollo del proyecto como sello personal.
En este caso incluí una comunicación serial UART, con visualizador Hércules y que se
cumpla una tarea específica mostrando el estado en el que se encuentra.

1. PROBLEMA:

La universidad realiza la instalación de un semáforo vehicular y peatonal. Lo contactan a


usted para realizar la programación de dicho semáforo que debe contar con las siguientes
condiciones:
1. El semáforo vehicular funcione con la secuencia que se puede observar en la fig.1
2. El semáforo peatonal solo va a estar en verde cuando el semáforo vehicular este
únicamente en estado 1 y el semáforo peatonal va a estar en rojo cuando el semáforo
vehicular este en los estados 2, 3 y 4.
3. La universidad dando prioridad a los peatones decide que se instale un botón donde el
peatón una vez lo presione, el semáforo peatonal pasará a verde y el semáforo
vehicular pasara a rojo, el botón solo funcionará cuando
4. el semáforo vehicular este en verde. El sistema debe tener un tic de 1 segundo
Figura 1. Descripción del problema

VEHICULAR PEATONAL
Rojo PA5 Rojo PB6
Ámbar PA6 Verde PC7
Verde PA7 Botón PC13

2. IMPLEMENTACIÓN:
Máquina de estados:

Figura 2. Máquina de estados

 ESTADO 1: Semáforo vehicular en rojo, semáforo peatonal en verde.


 ESTADO 2: Semáforo vehicular en rojo y amarillo, semáforo peatonal en rojo.
 ESTADO 3: Semáforo vehicular en verde, semáforo peatonal en rojo.
 CONDICIONAL (BOTÓN): En este punto el botón actúa como una interrupción
externa al proceso normal del semáforo, en caso de que el botón sea oprimido
inmediatamente volverá al ESTADO 1, en caso de que no seguirá al siguiente
estado.
 ESTADO 4: Semáforo vehicular en amarillo, semáforo peatonal en rojo.
La máquina de estados representa el funcionamiento simple del semáforo que se va a
llevar a cabo, contando con que cada estado tiene su tiempo definido y que el semáforo
tendrá un funcionamiento normal, es decir, secuencia programada, a menos de que se
genere una interrupción externa (BOTÓN). En la siguiente sección se mostrará el
desarrollo del código, como parte esencial de este proyecto.
Código:

 Entorno de trabajo: Para la implementación se utilizó la tarjeta STM32L476 (de la


familia de los STM32) son microcontroladores de potencia ultrajaba basados en el
núcleo RISC de 32 bits, de alto rendimiento que funcionan a una frecuencia de
hasta 80 MHz. El núcleo Cortex-M4 presenta una precisión única de unidad de
punto flotante (FPU) que admite todas las instrucciones y tipos de datos de
procesamiento de precisión simple. También implementa un conjunto completo de
instrucciones DSP y una unidad de protección de memoria (MPU) que mejora la
seguridad de la aplicación.

 Interrupciones externas: Una interrupción es un evento asíncrono que provoca


detener la ejecución del código actual respecto a una prioridad (cuanto más
importante es la interrupción, mayor será su prioridad, lo que hará que una
interrupción de menor prioridad se suspenda). Lo que hará que se ejecute una
rutina durante una interrupción, que se denomina “Rutina de servicio de
interrupción” o “Interrupt Service Routine” por sus siglas en ingles ISR.

Para habilitar las interrupciones externas debemos habilitar el reloj APB2 desde
RCC, Seleccionar el boton (GPIO) para EXTIx usando EXTICRx3, posteriormente
elegir un disparador usando RTSR o FTSR, Enmascarar el seleccionado EXTIs desde
IMR, es muy importante establecer niveles de prioridad NVIC's IPR, y por último
habilitar la interrupción EXTIx NVIC usando ISER.

 Protocolo de comunicación UART (Universal Asynchronous Receiver-


Transmitter): UART es un protocolo que maneja comunicación serial. En la
comunicación serie, el proceso de envío de datos es más sencillo, pero la velocidad
de trasmisión no es tan rápida, ya que el proceso de envío de datos se realiza bit a
bit a diferencia de la comunicación paralela que envía varios bits al tiempo.
El controlador del UART es el componente clave del subsistema de
comunicaciones series de una computadora. El UART toma bytes de datos y
transmite los bits individuales de forma secuencial. En el destino, un segundo
UART re ensambla los bits en bytes completos. La transmisión serie de la
información digital (bits) a través de un cable único u otros medios es mucho más
efectiva en cuanto a costo que la transmisión en paralelo a través de múltiples
cables.

Se utiliza un UART para convertir la información transmitida entre su forma


secuencial y paralela en cada terminal de enlace. Cada UART contiene un registro
de desplazamiento que es el método fundamental de conversión entre las forma
secuencial y paralela.

El UART normalmente no genera directamente o recibe las señales externas entre


los diferentes módulos del equipo. Usualmente se usan dispositivos de interfaz
separados para convertir las señales de nivel lógico del UART hacia y desde los
niveles de señalización externos.

Algunos esquemas de señalización no usan cables eléctricos; ejemplo de esto son


la fibra óptica, infrarrojo (inalámbrico) y Bluetooth (inalámbrico). Algunos
esquemas de señalización emplean una modulación de señal portadora (con o sin
cables); por ejemplo, la modulación de señales de audio con módems de línea
telefónica, la modulación en radio frecuencia (RF) en radios de datos y la DC-LIN
para la comunicación de línea eléctrica.

 Implementación y desarrollo del código: Para la implementación de la solución,


usaremos GPIO, Timer, Interrupciones externas, y el protocolo de
comunicaciones USART.
1. Incluir librerías: Como primer paso se incluirán las librerías con las que hemos
trabajado durante el semestre.

2. Definimos las funciones a usar en el programa (GPIO_init(): Inicializa las


entradas y salidas que se desean de los puertos y los pines. Ext_init(): Inicializa
la interrupción externa y USART2_UART_init(): Inicializar le protocolo de
comunicaciones USART) e iniciamos las variables como el contador, tiempo y
estados del semáforo.

3. Se programa la transmisión de semáforos para el protocolo de comunicación


serie UART, y poder mostrar los estados en el visualizador Hércules.
4. En este segmento del programa habilité la HUART e inicialicé la HAL que es
una capa de abstracción de hardware que es un elemento del sistema
operativo que funciona como una interfaz entre el software y el hardware del
sistema, proveyendo una plataforma de hardware consistente sobre la cual
corren las aplicaciones.

5. Defino la base de tiempo, colocando un pre escalador al timer para ajustar la


frecuencia y asignarle el contador al ARR, además defino la prioridad de la
interrupción que en este caso será nivel 2 y seguidamente la habilito; y
configuro los puertos A, B y C para la implementación del semáforo, (Led rojo
semáforo vehicular salida GPIOA pin 5; led amarillo semáforo vehicular salida
GPIOB pin 5; led verde semáforo vehicular; salida GPIOC pin 7; led rojo
semáforo peatonal salida GPIOA pin 7, led verde semáforo peatonal salida
GPIOA pin 6)
6. Configuración la interrupción externa (Habilitando el reloj de la interrupción,
configurando el EXTICR en la posición 4).

7. Esta sección del código se encarga de hacer la transmisión de los datos por la
uart2, el dato RV_VP, con el tamaño del dato y con una velocidad que en este
caso la puse 10, muy importante añadir esto para cada que se necesite
mostrar en pantalla el dato, y colocando Abort transmit para que el dato no
se transmita de manera infinita, sino solo una vez.
8. Se realiza la configuración de relojes y de pines y los parámetros que
configuran la UART como la velocidad de transmisión, las banderas, etc. (se
define por defecto en la HAL).
9. El Timer aumenta en 1 al contador cada segundo. Está es la base de tiempo,
lo ideal es usar una misma base de tiempo para todas las máquinas de estado
a implementar. (Se reinicia el timer y limpia las banderas)
10. Ahora, en este punto se va a implementar la lógica que la máquina de
estados que vamos a llevar a cabo para que el sistema funcione de manera
correcta, considerando las condiciones iniciales del problema y también los
tiempos acordados, por tanto, debe haber cuatro estados, que son los que se
muestran a continuación.
11. Aquí se implementa el desarrollo lógico de la interrupción (Botón peatonal) y
se indica a que estado debe ir cuando se realice una interrupción, es decir,
volver al estado inicial del semáforo.

 Referencias.
 STM32l476rg datasheet.
https://www.st.com/resource/en/datasheet/stm32l476rg.pdf
 Interrupciones externas.
http://www.sc.ehu.es/sbweb/webcentro/automatica/web_avr/archivos/Manual_AT90S85
15/Arquitectura/interrup_externas&tiempo_respu.htm
 STM32L476RG
https://www.st.com/en/microcontrollers-microprocessors/stm32l476rg.html
 Comunicación serial USART
https://hetpro-store.com/TUTORIALES/comunicacion-serial/
 STM32 Cortex®-M4 MCUs and MPUs programming manual
https://drive.google.com/drive/u/0/folders/1R92w1P75IPFFnMioZUJyab1L7e9AL3Hz

También podría gustarte