lunes, 14 de diciembre de 2020

Simular una Interrupción en Atmel Studio 7

Procedimiento para simular una interrupción en Atmel Studio 7:

Primero se debe de colocar un break point(círculo rojo) dentro de donde se va a simular una interrupción, en este caso se simula la interrupción "Timer/Counter2 Compare Match":


Compilamos el código(tecla F7) y no debe haber errores en el código:


Realizar debug paso a paso, en el código principal para ello puedes usar la tecla F11 o dar click en el símbolo (flecha abajo):

Mientras ejecutamos paso a paso podemos ver el cambio en las variables y/o registros, tal como se muestra el la siguiente imagen:


Ahora para simular una interrupción se presiona la tecla F5 o el símbolo de play:

Y ahora ya estamos en la interrupción, lo hemos logrado, ahora iremos a RJMP "OutComp2Int"

viernes, 16 de octubre de 2020

EJERCICIO- SRAM-MAQUINA DE ESTADOS-MEALY

 Se requiere realizar una rutina de configuración de direcciones SRAM, de forma que podamos manipular las primeras cuatro direcciones de la memoria SRAM(por ejemplo 0x060, 0x061, 0x062, 0x063), se entiende por manipular a la acción de incrementar y decrementar cada valor de dirección a través de pulsadores además de elegir que dirección manipulo y finalmente guardar el valor de las cuatro direcciones al salir de la configuración.

Diagrama de estados-MEALY.

El circuito de control de valores de las direcciones SRAM es la siguiente:

Circuito estados y transiciones.
Tomar en cuenta la siguiente:
  • Si se presiona el pulsador A incrementaré el valor de dato.
  • Si se presiona el pulsador B decrecerá el valor de dato.
  • Si se presiona el pulsador C avanzaré de estado.
  • Si se presiona el pulsador D regresaré al estado anterior.
  • Si se presiona el pulsador E ingresaré al modo configuración.
  • Si se presiona el pulsador F saldré del modo de configuración.
  • Los estados son representados por leds.
  • Las transiciones son representados por pulsadores.
  • Los estados representan cada dirección de memoria SRAM.
Código se encuentra en el siguiente enlace.

domingo, 30 de agosto de 2020

ATMEL ICE-Placa de interfaz

Esta placa se debe usar siempre y cuando tengamos el grabador ATMEL ICE.
Este es el kit completo de la tarjeta ATMEL ICE, el costo es de 120 dolares aproximadamente , les recomiendo "MOUSER electronic".

Esta placa de interfaz nace de la necesidad de poder tener mayor facilidad a la hora de programar/ depurar chips AVR de cualquier gama. Y cuando menciono "mayor facilidad" me refiero a las siguientes ventajas:
  • Es portable para cualquier familia del microcontrolador AVR.
  • Es más práctico y seguro usar cable de pines de distancia de 2.54mm que de 1.27mm.
  • Facilidad de uso. 
Es bueno mencionar que cuento con el kit completo del ATMEL ICE, sin embargo la tarjeta con que viene no convence y no me parece muy práctico.
Tarjeta que vine con el ATMEL ICE
Realice una placa que es a mi parecer más práctico, les envio unas fotos:
                                                                                               Tarjeta realizada en KICAD V5.20-parte delantera.

                                                                                                   Tarjeta realizada en KICAD V5.20-parte trasera.
les dejo el siguiente link de donde nació la idea de este diseño, donde encontrarán el link de descarga del esquemático  y board de la tarjeta en Eagle. Ahora si desean este diseño(el de la imagen) en KICAD también les dejo en link

Conexión ATMEL ICE-ATMEGA32-JTAG

El Atmega32 se puede conectar tanto por SPI-ISP O JTAG, La diferencia de uno y otro son las opciones que te permite grabar y/o depurar. Por ejemplo mientras JTAG te permite grabar y depurar, ISP solo te permite grabar, es por ello que elegimos usar JTAG. Las conexiones del Atmel Ice es como cualquier programador/depurador, solo conectar los pines correspondientes, en la imagen siguiente por ejemplo se aprecia la conexión con el Atmega32.
                                                                                          Tarjeta realizada en KICAD V5.20-parte trasera.

Posibles conexiones usando el cable de 10 pines 

Conexión ATMEL ICE-ATMEGA32-ICSP

Como se ha visto, con el cable de 10 pines se puede hacer  varias conexiones, y si hablamos de ICSP también lo podemos realizar con el cable de 6 pines. En la imagen siguiente se muestra el orden.
Orden de los pines de la conexión ATMEL ICE-ICSP 
Estaré utilizando este programador-ATMEL ICE, sea con el conector JTAG o como del ICSP.

Conexión ICSP, conector de 10 pines

martes, 18 de agosto de 2020

Proyecto 5-Hola mundo en ASM

 Descripción General.

El proyecto consiste en utilizar un Atmega32 para realizar el típico parpadeo de un led, el llamado "Hola mundo", es este ejemplo el led estará conectado al pin B.0.
Circuito

Características Técnicas.

  • Microcontrolador: Atmega 32.

  • Lenguaje de Programación: Asembler.
  • Oscilador: 1Mhz.
  • Simulador: Desarrollado en Proteus Design Suite V8.0 SPO.
  • Compilador: Desarrollado en Atmel Studio 7 pero portable para MPLAB-ASM.
  • Autor: Electrónica y Control-EYC.

Contenido de la descarga.

  • 1 Archivo del programa en Proteus Design Suite V8.0 SPO.

  • 1 Archivo del programa en bloc de notas.
  • 1 Archivo del programa en Visio Profesional del diagrama de flujo del proyecto. 
  • -----------------------------------------------------------------------------------------------------------

    Suscríbete a mi lista de correos para recibir más material próximamente.

 
-----------------------------------------------------------------------------------------------------------

miércoles, 12 de agosto de 2020

Elector-Electronics leading the way./AVR drives USB.

Este documento es una revista electrónica "elecktor electronics " .

fue publicada en el año 2007, corresponde al volumen 33 y es la revista número 363 , los temas que se tratan son:

1  Controlador de dispositivo USB universal. 

 2 ZigBee Transceiver(Xbee in practice) 

3 Teléfono movil LCD para PC.   

 4 Limpiador del sarro del agua dura(mini proyecto).

5 medidor de continuidad de cable de ethernet. 

6 Entrada/salida CMOS 5 a 3.3 V.  

Eso es todo amigos!!!.


viernes, 22 de mayo de 2020

Libro-SOME ASSEMBLY REQUIRED-Assembly Language Programming with the AVR Microcontroller.

En esta entrada vamos a hablar de manera resumida sobre un documento muy interesante "SOME ASSEMBLY REQUIRED-Assembly Language Programming with the AVR Microcontroller." para los que quieren empezar a programar AVR de manera profunda  ya que la programación es el asembler, no obstante también hace referencia al lenguaje de alto nivel como el lenguaje C.

Este documento es un libro especial, fue escrita por, Timothy S. Margush, PhD (Bowling Green State University), fue profesor asociado de ciencias de la computación en la Universidad de Akron. Tenía más de 30 años de experiencia docente en matemáticas y ciencias de la computación, incluidos muchos cursos de programación en lenguaje ensamblador utilizando una variedad de plataformas de hardware. El Dr. Margush falleció poco después de enviar Some Asssembly Required: Assembly Language Programming with the AVR Microcontroller con la satisfacción de haber servido a otros interesados en aprender lenguaje ensamblador.
Assembly Language Programming with the AVR Microcontroller.

El libro esta comprendido en 14 capítulos, como:

  1. Introducción a la computación.
  2. La familia de los microcontroladores  AVR.
  3. Arquitectura y programación en lenguaje asembler.
  4. Representación de datos enteros.
  5. Procesamiento en la CPU, memorias y sistema de Reset.
  6. La pila STACK y la llamada de funciones.
  7. AVR serial-Síncrono y Asíncrono.
  8. Operaciones Lógicas.
  9. Estructuras de control.
  10. Interrupciones-AVR en ASM .
  11. Operaciones Aritméticas.
  12.  Matrices.
  13. Números Reales.
  14. Programación en lenguaje C.
 


miércoles, 22 de enero de 2020

TABLAS

¿Cómo se guardan los datos de las "tablas" en memoria de programa?

Para saber como se guardan los datos en las "tablas" se van a realizar unos ejemplos básicos:

Ejemplo1 :Almacenamiento de tabla .org 0x0000 

------------------------------------------------------------------------------------------------------------------------------------------------------
Figura1:ORG 0x0000

Como se observa en la figura 1 la "tabla" en la dirección 0x0000(Word) coincide con la dirección 0x00 en Byte.

Ejemplo2 :Almacenamiento de tabla .org 0x0001 

------------------------------------------------------------------------------------------------------------------------------------------------------


Figura2:.ORG 0x0001

En la figura 2 los valores de  la "tabla" se van guardando desde la dirección 0x02 en Byte y desde la dirección 0x0001(como lo ordena .ORG 0x0001). 

Ejemplo3 :Almacenamiento de tabla .org 0x0002 

------------------------------------------------------------------------------------------------------------------------------------------------------
Figura3:.ORG 0x0002

En la figura 3 los valores de  la "tabla" se van guardando desde la dirección 0x04 en Byte y desde la dirección 0x0002(como lo ordena .ORG 0x0002). 

Ejemplo4 :Almacenamiento de tabla .org 0x0003 

------------------------------------------------------------------------------------------------------------------------------------------------------
Figura4: .ORG 0x0003

En la figura 4 los valores de  la "tabla" se van guardando desde la dirección 0x06 en Byte y desde la dirección 0x0003(como lo ordena .ORG 0x0003). 

 Conclusiones 

  • La construcción de "tablas" se establecen dentro de memoria FLASH o memoria de programa.
  • Se observa que cuando el origen de la tabla " Adress(.org 0x000a)" este es WORD(16 bits) los datos se van a guardar en "Adress(.org 0x0[2a])" este es en Byte.
  • Por lo anterior se puede decir que cuando doy un origen a(dirección en word), los valores se van a guardar en a*2(dirección en byte) 
  • Al momento de llamar la dirección de la "tabla" en byte éste será el doble de la dirección de  origen(en word) de la "tabla".
  • Para llamar la dirección de la tabla(en byte) desplazada 1 posición hay dos maneras; la primera es [tabla*2] y la segunda  es [tabla<<1].

martes, 21 de enero de 2020

Uso de la instrucción "LD" y "ST"

LD(Load Indirect from SRAM(data Space) To Register using Index Y,X

  • Se carga Rd con el contenido que apunta el registro apuntador Y.
  • Carga indirecta del espacio de datos hacia Rd.

Instrucción LD
Como pueden ver  esta instrucción es muy similar a la instrucción LDS, pero ahora vemos que usa el registro Y(16 bits), éste registro Y, la cual  se usa como apuntador de dirección.

Descripción y puntos importantes.

  •  Para usar esta instrucción se debe cargar previamente el apuntador Y, ya que según  la dirección que este apuntado "Y" va a mover el dato que esta en esta dirección y la colocará en Rd .
  • En algunos casos en vez de "Y" encontraremos "Y+" o "-Y" , eso quiere decir que cuando se ejecute la instrucción va a aumentar o disminuir este registro apuntador"Y" de 16 bits.
  • Esta instrucción no la cuenta todos los microcontroladores ATMEL
  • Para algunos microcontroladores ATMEL que solo tienen 256Bytes de memoria solo es suficiente usar 8 bits(los menos significativos).
  • Para microcontroladores ATMEL con mayor memoria de datos ya se usan los 16 bits.
  • Recordemos que  la pila se ubica en la SRAM interno y su inicio es la última dirección de memoria, para el caso del Atmega32 la última dirección(RAMEND) es 0x85F.
  • Se pueden usar los punteros X,Y, los dos  de 16 bits.
  • Debemos tener en cuenta que el puntero X esta formado por los registros R26,R27, el puntero Y está formado por los registros R28,R29 y finalmente el puntero Z esta formado por los registros R30,R31, como se muestra en la siguiente imagen:
Punteros

Ejemplo

------------------------------------------------------------------------------------------------------------------------------------------------------
Agregar el contenido de la ubicación de la dirección de 0X1F(Correspondiente a R31) hacia el registro R16.
Código
Este es un método indirecto de cargar valores dentro la memoria de datos según la dirección que deseemos  de SRAM hacia la misma SRAM. 
Debug
------------------------------------------------------------------------------------------------------------------------------------------------------
ST(Store Indirect From Register to Data Space using index X,Y

  • Se carga el valor de la dirección apuntada por  Y con el contenido de Rr, 0<=r<=31
  • Carga indirecta de Rr  hacia la dirección de SRAM apuntada por Y.
Instrucción ST
  • Como pueden ver  esta instrucción es muy similar a la instrucción STS, pero ahora vemos que usa el registro Y(16 bits), éste registro Y, la cual  se usa como apuntador de dirección.
  • Como se observa este es el proceso inverso de la instrucción LD.
  • En algunos casos en vez de "Y" o "X" encontraremos "Y+" ,"-Y","X+","-X" , eso quiere decir que cuando se ejecute la instrucción va a aumentar o disminuir este registro apuntador"Y" o "X" de 16 bits.

Ejemplo

------------------------------------------------------------------------------------------------------------------------------------------------------
Agregar el contenido de la ubicación del registro R16 hacia la dirección de X.
------------------------------------------------------------------------------------------------------------------------------------------------------

Código

Este es un método indirecto de cargar valores dentro la memoria de datos según la dirección que deseemos  de SRAM hacia la misma SRAM. 
Debug
------------------------------------------------------------------------------------------------------------------------------------------------------

Uso del firmware original de la grabadora USBasp AVR en MX-USBASP (clon chino)

Te vendieron un USBisp pensado que es un USBasp?? Hace 2 meses compré un "USBasp" fui a probarlo y no funcionó....pensé me estafar...