Uso de interrupciones y puerto serial

Dependencies:   mbed

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.

https://os.mbed.com/media/uploads/cristhian1987/img_20200220_231530.jpg

Luego de la activaciónde la interrupción, se enciende el LED y una alarma sonoro.

https://os.mbed.com/media/uploads/cristhian1987/img_20200220_230943.jpg

2.- Software HERCULES UTILITIES

https://os.mbed.com/media/uploads/cristhian1987/img_20200220_231003_1.jpg

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
}

Files at this revision

API Documentation at this revision

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
diff -r 000000000000 -r 9a7dcd5303c5 main.cpp
--- /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
+}
+
diff -r 000000000000 -r 9a7dcd5303c5 mbed.bld
--- /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