miércoles, 20 de mayo de 2020

Generando una onda senoidal con Atmega16 [Proyecto 4]

 

Programando Embedded System Microcontroller con Metologia interactiva.

                                                                                            

GILBERTO PASCUAL, 2020

gpascualt@gmail.com

 

Passive Avr

             Programmer                




Figura1

 

Figura2

  

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

  

Introducción:

El siguiente proyecto nos enseña a generar una onda sinodal de una frecuencia específica tabulada en una tabla de Excel. Los datos son almacenados en el Microcontrolador replicados por el mismo en valor hexadecimal, que mediante un conversor de A/D y un amplificador podemos reconstruir la señal sinodal, todo esto con el Microcontrolador Atmega16.

En la Figura3 se muestra los valores tabulados para una onda seno de frecuencia 3.2Khz, estos valores estandarizados son convertidos en valores Hexadecimales (byte), para ser cargados en el Microcontrolador Atmega16.

Figura3

  

Esquema electrónico:

El siguiente esquema electrónico muestra la implementación de este proyecto en un ambiente de test o simulación, mediante el cual podemos ver el funcionamiento del software e interacción con el hardware:

Figura4

Nota: El esquema presentado no es necesariamente el que se implemente en un ambiente real.

 

Programa de Control [Firmware]:

En la Figura5, se puede apreciar el código escrito en leguaje Basic para generar una onda sinodal mediante un Microcontrolador, los valores en byte de la onda seno para una frecuencia de 3.2Khz está dado en la Figura3.

Figura5

 

Análisis del código del Programa:

1.     $regfile = "m16def.dat" Declaramos el Microcontrolador que usaremos, con esto el compilador conocerá los componentes internos que podemos utilizar.

2.     $crystal = 8000000 Declaramos la frecuencia con la cual trabajara nuestro Microcontrolador, puede usarse un cristal interno o externo.

3.     $hwstack = 30 Es el tamaño de espacio de hardware físico que se define para usarlo en funciones, llamadas, saltos en memoria. Es una buena práctica hacer este tipo de definiciones.

4.     $swstack = 10 Mediante esta declaración se le indica al software que debe usar para compilar un espacio en memoria de 10, esto solo es para el software no es escrito en el Microcontrolador.

5.     $framesize = 40 Es una variable que se usa para indicarle al compilador que usaremos un tamaño de frame de 40, esto solo es para el software no es escrito en el Microcontrolador.

6.     Dim I As Byte Declaramos una variable de nombre “I” de tipo Byte para usarlo como contador.

7.     Dim Seno As Byte Declaramos una variable de nombre “Seno” de tipo Byte para usarlo como almacén temporal a los valores que se van leer de la memoria del Microcontrolador.

8.     Config Portb = Output Configuramos todos los pines del puerto B del Microcontrolador como salida.

9.     Portb = &H00 Asignamos a todos los pines del puerto B con el valor de “0”, es decir iniciamos con el valor de “0” en todos los pines del puerto B. (En este programa usaremos todo el puerto B como si fuera un Byte).

10.                        Do Creamos una sentencia secuencial, mediante “Do”, hacemos repetitivo todo el código que se encuentra dentro de lazo “Do” y “Loop”.

11.                       For I=0 To 40 Mediante esta línea iniciamos la sentencia For, donde indicamos al compilador que realice todo el contenido que se encuentra entre For y Next desde I=0 hasta 40.

12.                       Seno = Lookup(i,Dta) Mediante el comando Lookup, tomados los datos almacenados en la memoria del Microcontrolador, específicamente en la etiqueta Dta. En resumen seria como una forma de leer una matriz indicándole la ubicación de la lectura.

13.                       Portb = Seno Después asignamos el valor de la variable Seno al puerto B.

14.                       Dta: Dentro de estas palabras reservadas le indicamos al compilador que los datos escritos mediante la etiqueta Dta,  se van a guardar en la memoria del Microcontrolador como valores ya definidos.


Simulación del proyecto:

En la Figura6, se puede apreciar la señal de salida, medido antes de entrar al filtro y luego de la salida del filtro.

Figura6 

En la Figura7, podemos observar más claramente que el conversor A/D con resistencias, está cumpliendo su trabajo, pues la salida del Microcontrolador es un valor digital, que posteriormente deber ser convertido a una señal análoga.

Figura7

En la Figura8, se muestra la simulación realizada para observar el comportamiento de los registros y memoria del Microcontrolador.

Figura8 

En la Figura9, se da a conocer cuando se puso a compilar el código del programa, no se encontró ningún error.

Figura9

 

 

DESCARGAR EL ARTICULO EN .PDF

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

 

¡Gracias!

Atte. Gilberto Pascual


No hay comentarios:

Publicar un comentario