jueves, 21 de enero de 2021

Microcontroladores AVR (Microchip) – Programando en ASM (PART001)

Hola nuevamente a Artes Electrónicas Pachani, acá iré explicando mis experiencias con el microcontrolador Atmega32A  en el entorno AVR Studio 4 y Proteus, el objetivo sera aprender a programar en lenguaje ensamblador.

Programación AVR Studio4  y Proteus - Manejo de bits .


Descripción general de la arquitectura ATmega32


 Porque he elegido el ATmega32 como representante para mostrar mi experiencia con los microcontroladores Atmel AVR ?…. Es simple porque es muy versatil y los códigos pueden adaptarse fácilmente a todos los demás microcontroladores de la línea AVR, para ello debemos de tener a la mano el DataSheet de dicho microcontrolador ello nos dará una referencia de las características de dicho microcontrolador.


Para empezar la anterior imagen es un diagrama de bloques de la arquitectura del  ATmega16. Notamos que el ATmega32 tiene conexiones externas para fuentes de alimentación (VCC, GND, AVCC y AREF), una base de tiempo externa (XTAL1 y XTAL2) pines de entrada para controlar sus relojes, reinicio del procesador (RESET activo bajo) y cuatro puertos de 8 bits (PA0-PA7, PC0-PC7, PB0-PB7 y PD0-PD7), que se utilizan para interactuar con el mundo exterior.



Estos puertos pueden usarse como puertos de entrada / salida digital (E / S) de propósito general o pueden usarse para funciones alternativas. Ademas estos puertos están interconectados con la CPU y los subsistemas internos del ATmega32 a través de un bus interno. El ATmega32 también contiene un subsistema de temporizador, un convertidor de analógico a digital (ADC), un subsistema de interrupción, componentes de memoria y un subsistema de comunicación.

 A medida que avancemos ire describiendo brevemente cada uno de estos subsistemas internos que se muestran en la imagen ademas del funcionamiento y la programación del subsistema seleccionado. Es posible que no pueda cubrir todas las características del microcontrolador debido al tiempo pero iremos trabajando en ello.

Manejo de bits dentro los microcontroladores AVR


A lo que nos compete, cuando se inicia la programación de microcontroladores de la familia AVR lo primero que debemos de conocer es como se manejan los bits y los nemonicos correspondientes es bueno saber que el lenguaje ensamblador es similar al entorno PIC, salvo algunas instrucciones pero como ya habrás leído en mis otros apartados de PIC, notaras que la lógica sigue siendo la misma pero con ciertas excepciones las cuales iremos aprendiendo.
 Para quienes quieran ahondar un poco sobre los orígenes de AVR les dejo el siguiente link al DataSheet a modo de referencia ya que mas de uno preguntara por las características mas básicas de este microcontrolador.

 Plantilla en AvrStudio4

 1.- Primero iniciamos una hoja de trabajo como aprendimos en Microcontroladores AVR (Microchip) – Con Herramientas Libres (PART000).
 


 Creamos un nuevo proyecto de tal modo que tenemos los siguiente:



 De aquí en adelante trabajaremos con la siguiente plantilla:


El encabezado indica toda la información correspondiente al programa que estamos desarrollando, es importante destacar que sera de gran utilidad para analizar posibles errores para nosotros como para otro programador.





 .INCLUDE "M32DEF.INC" Indica el tipo de microcontrolador con el que estamos trabajando esto es de gran utilidad pues indica los puertos como las características de nuestro microcontrolador en relacion al compilador que generara nuestro firmware para nuestro microcontrolador.

 .ORG 0 Como bien sabemos los microcontroladores como cualquier maquina necesita de un punto de partida para ello hacen uso de las direcciones para poder iniciar y cumplir con la tarea determinada, ojo que no debemos de olvidar que tanto nuestros programas (software) y el microcontrolador (Hardware) tiene delimitaciones en cuanto a cada dirección.

 programa_principal: Se podría decir que es como el subtitulo de un capitulo donde iremos explicando como se comportara nuestro programa y con ello delimitar programas principal como también subrutinas e interrupciones.

 rjmp programa_principal  Esta sera nuestra primera instrucción de salto para indicar que el programa con el que trabajamos es finito dentro de un bucle, como recordaran muchos los programas que vamos desarrollando deben de ser finitos por lo que aprovechamos los bucles para poder ver nuestro programa de manera visible en la placa de entrenamiento o bien protoboard.

Video resumen de todo lo anterior.


En la Practica 

 Problema 01.- Realizar un programa que controle leds por el puerto B mostrando el hexadecimal 0x3A .

Solución: Como sabemos el valor hexadecimal 0x3A se puede representar en binario de la siguiente manera; 3 = 0011 y el valor A = 1010 , de tal modo que el numero completo seria el siguiente:

 0x3A = b 0011 1010

 Ahora modifiquemos el programa dentro de la plantilla de la siguiente manera:


Acá analicemos los nemonicos que participan en el programa, tenemos a LDI la instrucción que copia una dato de 8 bits al registro de propósito general R16. Es decir en los microcontroladores AVR trabajamos con registros a diferencia de los PIC’s que se trabaja con el acumulador.

Otro nemonico que observamos es la instrucción OUT que del ingles interpretando seria afuera, mostrar y otros pero que nosotros entenderemos que del CPU del AVR se mostrara por los perifericos o bien configurara los mismo de una manera que sean de entrada o salida gracias a la denominación DDRx que según el valor de los registros de propósito general para este caso ejemplo es R16 configurara para que sea entrada o salida , ello sera el siguiente convenio: “1” salida , “0” entrada . Como habrán notado es lo contrario al convenio de los microcontroladores PIC.
 

Ahora es momento de escribir en el programa_principal donde cargaremos al registro R17 ← 0x3A por medio de la instrucción LDI , luego mostramos al exterior por el periférico ( Puerto B) PORTB← R17 .


 Por ultimo tenemos el programa completo el cual lo ejecutaremos en nuestra placa de entrenamiento o bien protoboard. En nuestro caso lo realizaremos con la ayuda de las herramientas que hemos ido construyendo en mi caso iré programando con el programador 
OpenProg (Pronto publicare un apartado para su construcción y manejo).

Proteus la alternativa a AVRStudio

Proteus es una herramienta de simulacion de componentes electronicos por tanto en nuestro aprendisaje nos vendra de perlas, para ello vamos a realizar el siguiente apartado para realizar el anterior ejercicio en nuestro microcontrolador Atmega32A.

 Problema 01.- Realizar un programa que controle leds por el puerto B mostrando el hexadecimal 0x3A .

Solución: Del anterior desarrollo sabemos que el valor hexadecimal 0x3A se puede representar en binario de la siguiente manera; 3 = 0011 y el valor A = 1010 , de tal modo que el numero completo seria el siguiente:

 0x3A = b 0011 1010

 Empecemos por creando un proyecto y empezar desde cero.




Designamos una carpeta para guardar nuestro proyecto 


Ahora continuamos y tendremos lo siguiente


Ahora creamos una plantilla de esquema



Luego siguiente ahora nos va a preguntar si vamos a realizar una pcb, pero nosotros vamos a pasar.


Luego nos pregunta si vamos a hacer un programa y nosotros pasamos 


por ultimo tenemos lo siguiente:


Nuestra Hoja de trabajo es la siguiente:


Luego colocamos los componentes que necesitamos para poder trabajando en nuestro microcontrolador iniciamos la simulacion.


Ahora nos vamos a la parte de Editor de código fuente donde iremos a desarrollar nuestro programa para el anterior programa.


Ahora vamos a hacer una plantilla donde muestra como vamos a trabajar con AvrStudio4 para poder utilizar tanto uno como el otro y ver como cada programa se llevan de la mano para poder desrrollar nuestro programa:



Ahora vamos a programar con la ayuda de nuestra plantilla:



Resolviendo el programa que se nos pide para ello vamos a compilar nuestro programa :



Verficamos que nuestro programa se ha compilado de manera adecuada para nuestro
ejercicio:


Ahora es momento de verificar si nuestro programa esta funcionando en el simulador de circuitos de Proteus.


Con la imagen anterior verificamos que nuestro programa a compilado de manera adecuada y que la plantilla que hemos utilizado nos sera de gran utilidad al momento de desarrollar nuestros programas.

OpenProg (Un programador potente para PIC-AVR)

Es momento de probar en la placa de desarrollo, lo que desarrollamos en AvrStudio4 de modo que podemos ver fisicamente nuestro programa, para ello vamos a realizar el uso de un programador llamado OpenProg el cual es una herramienta de uso libre y que me ha dado buenos resultados al momento de grabar los microcontroladores tanto en Windows como el Linux. 
Para ello ya tenemos que tener el programa instalado de modo que si vas a usar esto en Linux tendrás que ingresar en terminal y ejecutar el programa, para mas información les haré una descripción del programa en otro articulo con mas detalle sobre como usar el programador:


 Iniciamos desde terminal ahora es momento de hacer la lectura de nuestro microcontrolador: 



Observemos que el programador ha realizado la lectura correspondiente dando los datos de nuestro microcontrolador ahora lo que sigue es programar nuestro ejer001.hex de nuestra carpeta de trabajo.



Ahora lo que queda es programar nuestro microcontrolador quedando de la siguiente manera:





Ahora probamos en la placa de entrenamiento para verificar nuestro programa.



Notemos el manejo de bits por parte del microcontrolador con lo cual cumplimos nuestro objetivo de manejar el puerto B con el valor hexadecimal 0x3A, vemos como los primeros cuatro bits de izquierda a derecha se muestra el valor 3 hexadecimal y los últimos 4 bits muestra el valor hexadecimal A.

 A modo de resumen el video de todo el procedimiento: (pronto)


Continua al siguiente tutorial aca:

 Algunas observaciones

Tenemos que tener en mente lo siguientes: 

  1.- En esta entrega hemos trabajado básicamente a como configurar paso a paso dentro del IDE AvrStudio 4 y luego su programacion con nuestro programador OpenProg a medida que vayamos practicando veremos que hacer programas en AVR es tan sencillo como programar un Arduino ya que ensamblador es mas sencillo pero es moroso nada y luego con mayor experiencia con esta herramienta simple y compacta iremos realizando programas mas elaborados.

 2.- Como un objetivo adicional es demostrar que con herramientas libres tanto en Linux y Windos podemos trabajar con programdores placa de entrenamiento que sirve para ambos lados ya que cada una de las herramientas en este blog se encuentran en ambos sistemas.

Al final

 Todo el material que aquí se encuentra es de mi autoría, ademas de una recopilación de información de Internet de recursos que se pueden descargar como libros en pdf los cuales son usados como referencia para los ejercicios y los ejemplos los cuales se encuentran a disposición en Internet. Cualquier consulta la puedes realizar en la parte de comentarios.

Bibliografia

1.- AVR Microcontroller and Embedded Systems using assembly ; Publicado el año 2011;[Fecha de consulta 1 de enero de 2021], pagina de donde puedes descargar (https://docs.google.com/file/d/0B5_mAdKvdKTlQlBPS2pwbE9ONFE/edit).


Software utilizados:

1.- AvrStudio4 descargado de la pagina oficial de Microchip. Ahi puedes descargar (https://www.microchip.com/mplab/avr-support/avr-and-sam-downloads-archive)

2.- Proteus v 8.2 , simulado en linuxMint 19,4 por medio del programa WinePero en versiones soporta todas las versiones Guindows.

3.- Editor de texto libre, se puede descargar de Internet, es un editor GNU Linux.

4.- OpenProg, programador de microcontroladores PIC-AVR. Ahi puedes econtrar el instaldor disponible tanto para Linux y Windos (https://sourceforge.net/projects/openprogrammer/)


Hardware utilizados:

1.- Placa de Programación basado en los esquemas de OpenProg.

2.- Placa entrenadora desarrollado en base al microcontrolador Pic 18F4550.

3.- Placas modulo de leds , botoneras e interruptores.


No hay comentarios.:

Publicar un comentario

Hola, con tu comentario puedes aportar para mejorar la calidad de mi trabajo

Microcontroladores PIC – Curso de Programación en MikroC (Parte 6 )

Microcontroladores PIC – Curso de Programación en MikroC Bienvenido nuevamente a los tutoriales de Artes Electrónicas Pachani , con...