miércoles, 23 de octubre de 2024

Lección 1: ¿Por qué programar microcontroladores Atmel (AVR) en lenguaje C?

 Programando Embedded System Microcontroller con Metologia interactiva.

          

GILBERTO PASCUAL, 2024

gpascualt@gmail.com

 

Lenguaje C y el Microcontrolador AVR

 

Lección 1:

¿Por qué programar microcontroladores 

Atmel (AVR)en lenguaje C?

 

Passive Avr Programmer  

Figura1 



Figura2

 

 “Ahora usted puede aprender a Programar Microcontroladores de forma muy fácil”.


 

1. Introducción: 

 

En el mundo de los microcontroladores AVR, programar en lenguaje C se ha convertido en una opción más eficiente y accesible en comparación con otros lenguajes como Assembler. En esta lección, analizaremos por qué elegir el lenguaje C para programar microcontroladores AVR, comparándolo con Assembler, y cómo esto puede facilitar el desarrollo de proyectos más complejos.


2. Mi punto de vista sobre las ventajas de lenguaje C: 


Todos los que estamos metidos dentro del mundo de los microcontroladores sabemos bien que estos dispositivos están limitados por espacio de memoria muy pequeña, por ejemplo el microcontrolador Atmel, Atmega16 solo tiene 16K bytes de memoria flash, por lo cual para optimizarlos deberíamos hacer que estos dispositivos se programen como en sus primeras épocas, es decir usar el lenguaje Assembler, el lenguaje máquina,  creo que en esta época, año 2024, es difícil encontrar jóvenes que programen en Assembler, porque desconocen este lenguaje en el que uno se inmersen en los registros, flag y una combinación de instrucciones muy básicas de programación.


Bueno en la actualidad la mayoría utiliza Arduino que esta basado en lenguaje C, pero lo que desconoce es que este compilador al generar el archivo. hex (el que se copia dentro del microcontrolador), tiene un tamaño mucho mayor que el generado por un compilador que solo está escrito en lenguaje C o el código escrito en Assembler, limitando el espacio en el microcontrolador. Es decir, cuando escribe el código para el microcontrolador en lenguaje Assembler, el archivo. hex generado tiene un tamaño mucho menor que el código escrito en lenguaje C. Pero entonces porque deberíamos programar nuestros microcontroladores en lenguaje C, porque la programación en lenguaje C consume menor tiempo de programación y es más fácil de escribir a diferencia de Assembler.

 

Los siguientes puntos dan mayor razón por el cual es mejor escribir el código de programación para microcontroladores en lenguaje C que en Assembler u otro lenguaje de programación:


- Es fácil y consume menor tiempo escribir el código en lenguaje C en un compilador.

- El código del lenguaje C es más fácil de modificar y actualizar.

- Se puede usar librerías ya desarrolladas en nuestro código.

- El lenguaje C es portable, es decir podemos usar el mismo código para diferentes microcontroladores.

 

Frente a los puntos indicados, si trabajáramos en desarrollo de nuevos prototipos basándonos en alguna versión de Arduino, veríamos en un futuro limitaciones de diferentes características que esos prototipos ya vienen definidos, a diferencia de generar código para cualquier microcontrolador y poder migrar al microcontrolador que cumple con los nuevos requerimientos de nuestro prototipo, aparte de poder tener un desarrollo propio sin depender de la marca y sus políticas de derechos de autor.


Bueno existen diferentes compañías que desarrollan compiladores de lenguaje C para microcontroladores Atmel (AVR), nosotros usaremos el compilador AVR Studio, pero la finalidad de este curso es que usted pueda aprender los fundamentos de programación de lenguaje C para microcontroladores Atmel (AVR).


Figura3. Ejemplo de código en lenguaje C para microcontrolador AVR (Atmega16) en AVR Studio.


En este módulo 1, están los fundamentos y principios básicos del lenguaje C que se usaran para la programación de microcontroladores y de esta manera dar a conocer la ventaja que tiene el leguaje C sobre Assembler, los cuales se usaran en las siguientes lecciones, donde se explicara los tipos de datos, retardo de tiempo, programación de entradas y salidas (I/O), programación de operaciones lógicas entre otros puntos básicos para entender y hacer uso del lenguaje C para los microcontroladores y poder compilarlos en AVR Studio.


 3.    Ventajas de programar microcontroladores AVR en Leguaje C



Facilidad y Rapidez en la Escritura del Código

El lenguaje C a diferencia un lenguaje maquina hace uso de variables, operaciones lógicas y aritméticas, condicionales, funciones que lo hacen un lenguaje de alto nivel a diferencia de otro tipo de lenguaje, esto permite crear código funcional con pocas líneas de código.

Facilidad de Modificación y Actualización

El leguaje C tiene una sintaxis que permite poder realizar modificaciones y actualizaciones del código de manera más eficiente y simple.

Uso de Librerías Desarrolladas

Por ejemplo la librería io.h permite tener ya definido por nombre los registros de entrada y salida dependiendo del microcontrolador a usar, eso significa que esta librería le indica al compilador que pines debe usar de acuerdo al microcontrolador seleccionado, sin tener que estar definiendo desde cero los registros, pines y puertos del microcontrolador, otro ejemplo es la libreria delay.h, que ya cuenta con funciones que nos generan retardos de tiempo o temporizado, sin tener que nosotros programar desde cero los delay de tiempo, como se hacía en Assembler.

Portabilidad del Código en Diferentes Microcontroladores

Con se indico en diferentes momentos, podemos usar el mismo código para diferentes microcontroladores, siempre en cuanto tengamos las mismas funciones en hardware y compatibilidad, es por ello que con la experiencia de programación se empieza a crear diferentes hojas de configuración, funciones y código de ejecución que permita migrar el código de manera fácil a cualquier microcontrolador.

  4.    Resumen de la lección 1:

"Esta lección explora las razones detrás de la elección del lenguaje C para programar microcontroladores Atmel AVR, en lugar de Assembler. Explicamos cómo el lenguaje C simplifica el proceso de desarrollo y por qué es la opción preferida en proyectos modernos". 


 5.    Descargar el paper de la lección 1: "¿Por qué programar microcontroladores Atmel (AVR) en Lenguaje C?"


Puedes descargar el paper de la Lección 1 sobre la programación en lenguaje C de microcontroladores AVR directamente desde Google Drive aquí.

 


 6.    Preguntas frecuentes:

 

 ¿Por qué es más eficiente programar microcontroladores AVR en C que en Assembler?

El lenguaje C ofrece un equilibrio entre simplicidad y eficiencia, permitiendo escribir código más rápidamente y con menos errores que en Assembler.

 

¿Qué compilador es mejor para programar microcontroladores AVR?

AVR Studio es una de las mejores opciones por su integración con microcontroladores AVR, pero también puedes usar otros compiladores como GCC para AVR.

 


 7.  Enlaces: 

 

 

“Comparte este conocimiento”

“Si te ha sido útil este artículo, compártelo en tus redes sociales y ayuda a otros a mejorar sus habilidades de programación de microcontroladores.

¡Tus comentarios también son bienvenidos!

 

¡Gracias!

Atte. Gilberto Pascual




viernes, 25 de junio de 2021

Control LED RGB en Microcontrolador Atmega16 [Proyecto #02]

       

Programando Embedded System Microcontroller con Metologia interactiva.

                                                                                                  

GILBERTO PASCUAL, 2021

gpascualt@gmail.com

 

Lenguaje C y el Microcontrolador AVR

 

Control de Led RGB con el Microcontrolador Atmega16 [Proyecto #02]

 

Passive Avr Programmer    

 

Figura1

 

Figura2

“Ahora usted puede aprender a Programar Microcontroladores de forma muy fácil”.


1.    Descripción del Proyecto #02: 

Dentro de este pequeño proyecto, podremos controlar un Led RGB  conectado al puerto D (Pin0, Pin1 y Pin2) del Microcontrolador Atmega16, usando lenguaje C para la programación de control. 

Dentro de este proyecto se aprenderá a configurar y habilitar solo los pines a usar como salida del Microcontrolador Atmega16, a diferencia del proyecto anterior donde se habilitaba todo el puerto D como salida. 

Adicionalmente se aprenderá a usar sintaxis de lenguaje C, uso de hojas de configuraciones, añadir librerías y realizar una programación avanzada y esquematizada para facilitar la programación, modificación y entender la programación avanzada de proyectos más complejos en lenguaje C, también se usara funciones de retardo de tiempo o delay y poder enviar un “0” o “1” lógico de manera independiente a cada pin del Microcontrolador Atmega16. 

Finalmente se realizara la simulación e implementación del circuito electrónico, para validar el funcionamiento de nuestro programa de control elaborado en Lenguaje C para programar el control del Led RGB mediante el microcontrolador Atmega16.

 

2.    Diagrama de Flujo del Proyecto #02: 

En la Figura4, se muestra el diagrama de flujo que seguirá nuestro programa de control en lenguaje C para el control del Led RGB en el Microcontrolador Atmega16, dentro del diagrama de flujo se intentó ser lo más descriptivo posible para entender el funcionamiento de programa desarrollado. 

Dentro del diagrama de flujo de la Figura N°4, adicionalmente se puede apreciar el uso de hojas “.h” que han sido creados en nuestro aplicativo de programación, los cuales son llamados dentro de nuestro programa principal (“main”). Aunque el programa es fácil de crear sin el uso de las hojas adicionales, para la programación más compleja y esquematizada, es necesario el uso de este tipo de programación.

 Adicionalmente en la Figura3, se muestra un diagrama interno del Led RGB, para poder entender el control y funcionamiento de este dispositivo.

 

Figura 3. Diagrama electrónico interno del Led RGB.

 


 Figura 4. Diagrama de flujo del control para 02 Leds RGB en el Microcontrolador Atmega16.

 

 3.    Circuito Electrónico del Proyecto #02: 

En la Figura5, se muestra el diagrama electrónico del nuestro proyecto de control de 02 Leds RGB mediante el Microcontrolador Atmega16, para este circuito se ha simulado un Led RGB de cátodo Común. El diseño de este circuito se ha realizado para ser implementado en un ambiente de pruebas, teniendo presente que el Microcontrolador alimentara a todos los pines de los 02 Leds RGB, pudiendo generar consumo excesivo de corriente por parte del Microcontrolador Atmega16. 

Para el diseño a escala o para un ambiente de producción, se debe hacer uso de otros elementos electrónicos que alimenten los pines del Led RGB, y que el Microcontrolador Atmega16 solo sea el dispositivo de control y no de alimentación de los pines del Led RGB.

 

Figura 5. Circuito Electrónico del control de Led RGB cátodo común con el Microcontrolador Atmega16.

  

4.    Código en Lenguaje C del Proyecto #02: 

A continuación, en la Figura6, se muestra el código escrito en Lenguaje C para controlar 02 Leds RGB conectados en el Puerto D y Puerto C del Microcontrolador Atmega16.

 

Figura 6. Programa principal en lenguaje C, para control de 02 Leds RGB con el Microcontrolador Atmega16. (main.c)

 Dentro de este proyecto hicimos uso de otras hojas “.h”, externas que han sido creados para declarar y definir variables que se usaran dentro de nuestro programa principal. 

La hoja “rgb.h”, dentro de esta hoja declaramos todas las hojas adicionales y librerías que se usaran dentro de nuestro programa principal.

 

Figura 7. Hoja rgb.h donde se declaran todas la librerías a usar en programa principal.

La hoja “config.h”; dentro de esta hoja nosotros declararemos todas configuraciones, variables y opciones que puede tener nuestro programa principal, en nuestro caso solo hemos configurado el tiempo, que estarán prendidos y apagados los colores de los Leds RGB y habilitado para usar la hoja de configuración del Atmega16

 

Figura 8. Hoja config.h donde se declaran variables y opciones de configuración.

La hoja “cpu_map.h”; dentro de esta hoja cargamos todas las hojas de configuración de todos los microcontroladores que podríamos usar, esa hoja de configuración para cada microcontrolador, nosotros los creamos y personalizamos para cada microcontrolador a usar.

 

Figura 9. Hoja cpu_map.h donde cargaremos todos los microcontroladores y su hoja de configuración.  

La hoja “cpu_map_atmega16.h”; en esta hoja hemos declarado el renombrado de los pines a usar del microcontrolador, así como algunas variables predefinidas que se usaran dentro de nuestro programa principal, mediante este método, el programar se realiza de manera fácil e intuitiva, así como fuera programar en lenguaje C.

 

Figura 10. Hoja cpu_map_atmega16.h donde definimos los pines, y nombramos los pines y creamos variables.

Aunque la programación de estas hojas adicionales es un poco complicada al inicio, después de realizarlo cualquier cambio, funciona a desarrollar o revisar algún error dentro de nuestro programa es más fácil que revisar solo un archivo que contenga cientos de líneas de código, que sería muy complicado encontrar algún error, adicionalmente es más fácil migrar un proyecto a otro microcontrolador, puesto que el nombre de los registros internos del microcontrolador cambia del Microcontrolador a usar y nos es una buena práctica declarar todo en el programa principal.

  

5.    Video de la simulación e implementación del Proyecto #02:

 El siguiente video muestra la simulación del código de control de Led RGB escrito en Lenguaje C y simulado en ISIS de Proteus. Adicionalmente el video muestra la implementación del circuito electrónico y el código grabado en un microcontrolador Atmega16 para el control de Led RGB desarrollado en nuestro proyecto.

   


 6.    Descargar el código, circuito electrónico y paper del Proyecto #02:

El código fuente, circuito electrónico y paper del proyecto de control de Led RGB mediante el Microcontrolador Atmega16, los puede descargar desde el siguiente Link de Google Drive. 

 

https://drive.google.com/drive/folders/1rQZ4zpbzZPj6hGm8SXQHjD8dwu5P8-0g?usp=sharing

 

 

“Si te gusto el artículo, compártelo, recuerda que hay otros que desean aprender y tú puedes ayudarlos también comentando  y  compartiéndolo en tus redes”.

 

¡Gracias!

Atte. Gilberto Pascual

jueves, 17 de junio de 2021

Parpadeo de LEDs en Microcontrolador Atmega16 [Proyecto #01]

 

Programando Embedded System Microcontroller con Metologia interactiva.

                                                                                                

GILBERTO PASCUAL, 2021

gpascualt@gmail.com

 

Lenguaje C y el Microcontrolador AVR

 

Parpadeo de Leds en el Microcontrolador Atmega16 [Proyecto #01]

 

Passive Avr Programmer

  

 

Figura1

 

Figura2

 “Ahora usted puede aprender a Programar Microcontroladores de forma muy fácil”.


1.    Descripción del Proyecto #01: 

Dentro de este pequeño proyecto, podremos controlar 08 Leds conectados al puerto D del Microcontrolador Atmega16, usando lenguaje C para la programación de control. Dentro de este proyecto se aprenderá a configurar los pines de salida del Microcontrolador Atmega16,  aprender a usar sintaxis de lenguaje C, uso de funciones de bucle como son la función while y for, también se usara funciones de retardo de tiempo o delay. 

Finalmente se realizara la simulación e implementación del circuito electrónico, para validar el funcionamiento de nuestro programa de control elaborado en Lenguaje C para programar el control de los Leds mediante el microcontrolador Atmega16.

 

2.    Diagrama de Flujo del Proyecto #01: 

En la Figura4, se muestra el diagrama de flujo que seguirá nuestro programa de control en lenguaje C para el parpadeo de Leds en el Microcontrolador Atmega16, dentro del diagrama de flujo se intentó ser lo más descriptivo posible para entender el funcionamiento de programa desarrollado. 

Dentro del diagrama de flujo de la Figura N°4, adicionalmente se puede apreciar el uso de una variable “i”, que será el encargado de incrementar y decrecer de tal forma que siempre será un múltiplo de 2, es decir seguirá el siguiente patrón en cada interacción para cada “for” dentro del programa principal (“main”):

 

Figura 3. Tabla de valores de i dentro de las funciones for.

 

 Figura 4. Diagrama de flujo del parpadeo de Leds en el Microcontrolador Atmega16.

 

3.    Circuito Electrónico del Proyecto #01: 

En la Figura5, se muestra el diagrama electrónico del nuestro proyecto de control de Leds mediante el Microcontrolador Atmega16, el diseño de este circuito se ha realizado para ser implementado en un ambiente de pruebas, teniendo presente que el Microcontrolador alimentara a todos los Leds, pudiendo generar consumo excesivo de corriente por parte del Microcontrolador Atmega16. 

Para el diseño a escala o para un ambiente de producción, se debe hacer uso de otros elementos electrónicos que alimenten los Leds, y que el Microcontrolador Atmega16 solo sea el dispositivo de control y no de alimentación de los Leds. 

 

Figura 5. Circuito Electrónico del parpadeo de Leds en el Microcontrolador Atmega16. 

 

4.    Código en Lenguaje C del Proyecto #1: 

A continuación, en la Figura6, se muestra el código escrito en Lenguaje C para controlar los Leds conectados en el Puerto D del Microcontrolador Atmega16.

 

Figura 6. Programa (firmware) en lenguaje C, para control del Leds con el Microcontrolador Atmega16. 

 

5.    Video de la simulación e implementación del Proyecto #01:

 El siguiente video muestra la simulación del código de control de Leds escrito en Lenguaje C y simulado en ISIS de Proteus. Adicionalmente el video muestra la implementación del circuito electrónico y el código grabado en un microcontrolador Atmega16 para el control de Leds desarrollado en nuestro proyecto. 

 


  6.    Descargar el código, circuito electrónico y paper del Proyecto #1: 

El código fuente, circuito electrónico y paper del proyecto de parpadeo de Leds mediante el Microcontrolador Atmega16, los puede descargar desde el siguiente Link de Google Drive. 


https://drive.google.com/drive/folders/18VYAKotyMIS_pIEF-JkveqMON1WdFk62?usp=sharing

  


“Si te gusto el artículo, compártelo, recuerda que hay otros que desean aprender y tú puedes ayudarlos también comentando  y  compartiéndolo en tus redes”.

 

¡Gracias!

Atte. Gilberto Pascual