Uso de interrupciones y puerto serial
Deber Sistemas Microprocesados
PROBLEMA
En este ejercicio básico se repasa el tema de puertos de entrada y salida de la tarjeta ARM; agregando funcionalidades tales como La comunicación serial y las interrupciones.
- Comunicación serial:* Muchos equipos aún trabajan con esta forma de comunicación, en el ejercicio se usa la plataforma Hercules utilities para observar la comunicación efectiva entre la tarjeta y el puerto serial de la PC.
- Interrupciones: * La secuencia de un programa puede verse detenido para realizar otras tareas, siempre y cuando una señal externa previamente indicada tenga validez. Es decir, detener el programa principal para ejecutar órdenes específicas para luego continuar con la tareas del programa principal.
<<ENTRADAS>>
- PD_12 Sensor de Interrupción (Entrada digital que activa la interrupción)
- PA_2 Señal para comunicación serial (Transmisión)
- PA_3 Señal para comunicación serial (Recepción)
<<SALIDAS>>
- PD_13 Pin digital de salida, variable alarma_interrup
- PD_14 Pin digital de salida, variable led. Simula el proceso principal; activación de un LED por cortos tiempo de ON / OFF. cada (2 segundos)
SOLUCIONES:
Estos temas mencionados pueden ser soluciones para diferentes proyectos entre los cuales tenemos:
- Contador de vehículos en un parqueadero. Con ayuda de photosensor para la marcación de los vehículos
- Contador de productos en una banda transportadora.
- Activación de una alarma de seguridad; haciendo válido una señal principal para cualquier evento; es decir no importa que pase en el desarrollo del programa de vigilancia. cuando el sensor se activa la interrupción hace su trabajo.
- En ventanillas de atención al cliente puede activarse una señal cuando el puesto esté disponible para atención.
DESARROLLO:
1.- Circuito electrónico:
Consiste en activar una señal sonora junto con un LED, indicando que la interrupción es correcta.
La foto indica el programa sin ser activada la interrupción.
Luego de la activaciónde la interrupción, se enciende el LED y una alarma sonoro.
2.- Software HERCULES UTILITIES
3.- Desarrollo de líneas de códigos; con sus respectivos comentarios para cada línea
include the mbed library with this snippet
#include "mbed.h" InterruptIn sensor(PD_12); // Entrada digital que activa la interrupción Serial pc(PA_2,PA_3,115200); // Variable (pc) para comunicación serial PA_2 y PA_3 a una velocidad de 115200 DigitalOut alarma_interrup(PD_13); // Pin digital de salida, variable alarma_interrup direccionado al pin PD_13 DigitalOut led(PD_14); // Pin digital de salida, variable LED al pin PD_14 simulando un ejecución de programa int Contador = 0; // variable entera llamada Contador void activa(void); // Llamado de función "activa" int main() { sensor.rise(&activa); // Relaciona la señal de interrupción y la función creada while(1) { // Desarrollo del programa base. led = 1; wait(0.2); led = 0; wait(0.2); } } void activa() // Ejecución de la función "activa" /* Activa un señal de alarma, y envía un conteo por medio del puerto serial; esto puede ser mostrado por el programa Hercules Utilities. */ { alarma_interrup = 1; wait(0.2); alarma_interrup = 0; Contador = Contador++; // Contador aumentando el valor en 1 pc.printf("El programa se ha interrumpido %d veces\n\r",Contador); // Cadena de caracteres enviadas por el puerto serial }
Revision 0:9a7dcd5303c5, committed 2020-02-21
- Comitter:
- cristhian1987
- Date:
- Fri Feb 21 04:19:26 2020 +0000
- Commit message:
- META_UPS_Deber_Proyecto
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 21 04:19:26 2020 +0000 @@ -0,0 +1,35 @@ +#include "mbed.h" +InterruptIn sensor(PD_12); // Entrada digital que activa la interrupción +Serial pc(PA_2,PA_3,115200); // Variable (pc) para comunicación serial PA_2 y PA_3 a una velocidad de 115200 +DigitalOut alarma_interrup(PD_13); // Pin digital de salida, variable alarma_interrup direccionado al pin PD_13 +DigitalOut led(PD_14); // Pin digital de salida, variable LED al pin PD_14 simulando un ejecución de programa + +int Contador = 0; // variable entera llamada Contador +void activa(void); // Llamado de función "activa" + +int main() +{ + sensor.rise(&activa); // Relaciona la señal de interrupción y la función creada + + while(1) { // Desarrollo del programa base. + led = 1; + wait(0.2); + led = 0; + wait(0.2); + } +} + +void activa() // Ejecución de la función "activa" +/* +Activa un señal de alarma, y envía un conteo por medio del +puerto serial; esto puede ser mostrado por el programa Hercules Utilities. + +*/ +{ + alarma_interrup = 1; + wait(0.2); + alarma_interrup = 0; + Contador = Contador++; // Contador aumentando el valor en 1 + pc.printf("El programa se ha interrumpido %d veces\n\r",Contador); // Cadena de caracteres enviadas por el puerto serial +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Feb 21 04:19:26 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file