Desarrollo de primera aplicación
Introducción
¡Hola!
Me da gusto encontrarte de nuevo en este ambiente de aprendizaje, espero que te encuentres con mucho ánimo por seguir adelante ya que faltan nuevos e interesantes temas que te servirán en el futuro. Es por ello que te doy la bienvenida a la clase siete del curso.
Ya que terminaste las prácticas y has hecho los ejercicios de las mismas has logrado un conocimiento claro de la mayoría de los módulos con los que cuenta el microcontrolador. El trabajo hasta ahora ha sido mayormente de análisis. En esta clase el enfoque es que trabajes un proceso mental más retador que es el proceso de síntesis. En este proceso desarrollarás un primer código enfocado a realizar un código que realice una tarea específica.
Al ser este el primer código que desarrollarás de forma personal, debes entender claramente lo que se te está pidiendo. Después deberás desarrollar el diagrama de flujo que plasme el funcionamiento del programa y, por último deberás implementar mediante funciones en el lenguaje de programación XC8, el código correspondiente.
No habiendo nada más que agregar, ¡empecemos nuestras actividades de aprendizaje-enseñanza!
¡Comenzamos!
Desarrollo del tema
Para este proyecto utilizarás el microcontrolador y 16 LEDs conectados 8 a los pines del puerto A y a los 8 pines del puerto D. Ambos puertos deben configurarse como salidas digitales.
Deberás generar un código que realice el control de luces LED de la siguiente manera:
- Los LEDs estarán conectados a los puertos A y D del microcontrolador (16 LEDs).
- Al encenderse el microcontrolador, los LEDs estarán prendiendo y apagando de forma alterna cada medio segundo. Primero los LEDs nones. encenderán y los pares estarán apagados. Después se apagan los nones y se encienden los pares.
Si alineas todos los LEDs en una sola hilera debe verse la siguiente secuencia (los 1s representarán los LEDs encendidos y los 0s los LEDs apagados)
PUERTO A | PUERTO D |
01010101 | 0101010101 |
10101010 | 10101010 |
01010101 | 01010101 |
10101010 | 10101010 |
⁞ | ⁞ |
Si se presiona un push-button, que deberá estar conectado a un pin del puerto B (configurados sus pines como entradas digitales),cambiará a una secuencia en que se incrementan de dos en dos, esto es, se encienden primero los bits 0 1 4 5, después 1 2 5 6, continua 2 3 6 7, sigue 3 4 7 0 y se vuelve a repetir. Cada secuencia dura medio segundo.
PUERTO A | PUERTO D |
00110011 | 00110011 |
01100110 | 01100110 |
11001100 | 11001100 |
00110011 | 00110011 |
⁞ | ⁞ |
Si se vuelve a presionar el push-button, entonces cambiará a todos encendidos y todos apagados con medio segundo en cada caso.
PUERTO A | PUERTO D |
11111111 | 11111111 |
00000000 | 00000000 |
11111111 | 11111111 |
00000000 | 00000000 |
⁞ | ⁞ |
Al presionar nuevamente el push-button se apagarán todas las luces.
Finalmente, con otra presión del push-button, se comenzará con la primera rutina (prenden y apagan de forma alterna nones y pares)
El enfoque de este proyecto es que puedas plasmar en un código un conjunto de instrucciones específicas. Para ello, y de acuerdo a los códigos que ya has visto y modificado puedes tomar algunos de los siguientes tips:
- Generar una variable tipo global (fuera de todas las funciones, incluida main().
- Esa variable se va a incrementar en 1 cada que se genere una interrupción por disparo positivo de señal digital externa (puedes utilizar cualquiera de las interrupciones externas INT0, INT1 o INT2.
- Cuando la variable se incremente a 4 debe limpiarse. Por lo tanto solo tomaría, con cada interrupción, los valores 0, 1, 2 y 3.
- Implementar una estructura tipo case y en cada caso llamar a una función diferente. Cada función generará una vez cada una de las secuencias solicitadas. Regresará al programa principal y, si la variable global no ha cambiado de valor (no se ha generado una nueva interrupción) volverá a ejecutar la misma función.
Conclusión
Este ha sido tu primer gran reto. Al lograr generar el comportamiento solicitado del microcontrolador has realizado un salto muy grande en tu comprensión de los microcontroladores y su programación. Esto ha implicado un esfuerzo mental mayor a lo que se te había solicitado hasta antes de esta clase. Has reforzado conexiones y hecho nuevas conexiones entre muchísimas de tus neuronas. Disfruta de tu logro y revisa su comportamiento y las instrucciones implementadas.
¿Se pudo haber hecho alguna de las partes de forma más eficiente? ¿Quedó clara cada parte del código? ¿Podrías agregar otra función que genere una secuencia de encendido de los 16 LEDs diferente a las solicitadas?
Estas son algunas de las preguntas que nos ayudan a concluir este primer proceso de síntesis. Espero que te hagas algunas más y busques implementarlas.
¡Felicidades, estás avanzando muy bien! Espero que el tema te haya gustado y despierte tu interés para seguir investigando sobre ello. Recuerda elaborar y mandar la consigna de esta clase, te espero en la próxima sesión donde aprenderás un tema relevante para tu formación académica.
Hasta pronto.