sábado, 5 de octubre de 2019

Control de Display AC usando memoria EEPROM de Atmega16 [Proyecto 3]



Programando Embedded System Microcontroller con Metologia interactiva.

                                                                                                  
GILBERTO PASCUAL, 2019



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 controlar un Display de Ánodo Común, guardando la lógica de los números del Display en la memoria EEPROM del Microcontrolador Atmega16.

En la Figura3 se muestra la lógica que se usara para mostrar los números de 0 a 9 en el Display de ánodo común, teniendo presente que para activar un segmento del Display usaremos un “0” lógico.

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 controlar un Display de Ánodo común, guardando la lógica de los números del Display en la memoria EEPROM del Microcontrolador, la lógica a usar esta detallado 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.     Config Portb = Output Configuramos todos los pines del puerto B del Microcontrolador como salida.

4.     Portb = &HFF Asignamos a todos los pines del puerto B con el calor de “1”, para iniciar con todos los segmentos del Display apagados.

5.     Declare Sub Leer_eemprom Mediante esta línea le indicamos al compilador que estamos declarando una función denominado “Leer_eeprom”, que posteriormente detallaremos que acciones realiza esta función.

6.     Dim Datos (10) As Byte Declaramos una variable de nombre “Datos” de tipo Array de 10 datos de tamaño Byte (8 Bits) para almacenar temporalmente los datos que se encuentran en la memoria EEPROM.

7.     Dim I As Byte Declaramos una variable  de nombre “I” de tamaño Byte, para utilizarlo como contador en la condicionales For.

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

9.     Call Leer_eeprom Con esta línea llamamos la función “Leer_eeprom” para que se ejecute.

10.                       For I=0 To 9 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 9.

11.                       Portb = Datos(i) Asignamos cada dato del Array guardado a los pines del puerto B.

12.                       Waitms 250  Después de haber hecho la asignación  a los pines del puerto B, indicamos que mantenga los valores por un tiempo de 250 ms.

13.                       $eeprom - $data  Dentro de estas palabras reservadas le indicamos al compilador que los datos escritos mediante las etiquetas se van a guardar en la memoria EEPROM del Microcontrolador y no en la memoria RAM.

14.                       Segmentos: Etiqueta donde se indica que datos se están guardando en la memoria EEPROM. Es decir le indicamos que todos estos datos mencionados después de $Data, serán parte de la etiqueta Segmentos, podemos crear muchos segmentos y guardarlos en la memoria EEPROM, para poder reconocer la información se hace uso de las etiquetas para luego llamarlos.

15.   Sub Leer_eeprom Aquí empezamos a escribir las acciones que realizara la función “Leer_eeprom” y cerramos la función con la palabra End Sub.

16.  For I=0 TO 9 Volvemos a llamar la secuencial For, para poder hacer la lectura de los datos en la EEPROM y pasarlo en una variable local.

17.  Readeeprom Datos(i),I Indicamos al programa que asignamos a cada valor del Array “Datos (i)” un valor consecutivo de la memoria EEPROM.


Simulación del proyecto:

En la Figura6, se puede apreciar el momento en el cual el Display muestra el número 2.


Figura6

En la Figura7, se puede apreciar el momento en el cual el Display muestra el número 5.


Figura7
En la Figura8, se puede apreciar el momento en el cual el Display muestra el número 9.


Figura8

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

Figura9

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

Figura10


  
“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

1 comentario:

  1. hola amigo me podrias ayudar ? , debo realizar un luxómetro en bascom avr el cual debe medir la intensidad de luz mediante un ldr y debe mostrar el valor medido mediante 2 4511 a 2 display bcd 7 segmentos , y no se como realizarlo . desde ya muchas gracias ;) saludos .

    ResponderEliminar