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
------------------------------------------------------------------------------------------------------------------------------------------------------

domingo, 29 de diciembre de 2019

Embedded C Programming and the Atmel AVR

En esta entrada vamos a hablar de manera resumida sobre un documento muy interesante de la web "Embedded C Programming and the Atmel AVR" para los que quieren empezar a programar AVR usando lenguaje C .

Con este libro podrás ingresar al mundo de las aplicaciones de los sistemas embebidos en lenguaje C.
Este libro es uno de los pocos libros disponibles donde se muestran los diseños y aplicaciones con la familia AVR .
Esta segunda edición es perfecta para principiantes que deseen entrar a este mundo de microcontroladores y que deseen aprender haciendo. 
Primeramente  se habla de procesador tipo RISC e inmediatamente se toca el lenguaje C para sistemas embebidos . Aquí el estudiante experimentará con variables y constantes , operadores y expresiones, estados de control, punteros y matrices, tipos de memorias, directivas del procesador, métodos en tiempo real y mucho más. 
Este liro usa el IDE CodeVision AVR y C Compiler  como plataforma para programar los microcontroladores AVR pero fácilmente los ejemplos se pueden realizar en Atmel Studio 7.
Los autores de esta maravilla son Richard H.Barnett., Sarah Cox and Larry O´Cull
Embedded C Programming and the Atmel AVR

lunes, 11 de noviembre de 2019

ICSP-CONEXIÓN

Esta entrada está pensada para que puedas colocar tu conector ICSP de tu grabador USBASP incorporado en tu desarrollo o proyecto.

Como sabemos al momento de grabar nuestro microcontrolador con el código .HEX lo que se hace normalmente es sacar nuestro microcontrolador de nuestra aplicación  y colocarlo en el zocalo zif 40 que viene en el programador USBASP, y una vez programado volverlo a colocar en nuestro proyecto. Cuando haces muchas pruebas de código lo anterior puede ser tedioso.

Lo mejor es colocar un conector ICSP a tu circuito principal y aquí veremos como es la conexión para hacer el diagrama en nuestro archivo CAD del circuito principal.

Grabador USBASP
En nuestro circuito principal pondremos un conector Macho ICSP  para que pueda hacer contacto con el cable hembra.El orden de conexión del ICSP del USBASP es el mismo que se colocará en nuestra placa principal, de todas maneras, lo especificaremos con una gráfica hecha a mano.  
Cable de Grabador.
 Lo que debemos hacer es hacer las siguientes conexiones, esta prueba es la grabación de un ATMEGA32 pero el procedimiento es el mismo para cualquier micro de 8 bits, con su hoja de datos a la mano:
Diagrama de conexión realizada.
Una vez realizado pruebas en protobard se hace las conexiones en software de diseño. Usaremos Eagle para realizar las conexiones.
En nuestro programa Eagle el componente ICSP o encuentras como ML10,dentro de la librería "con-harting-ml".
Conexión del ICSP en  Eagle
Muchos diagramas conectar el pin 8 y 10, pero no es necesario porque estos pines ya están puenteados en la parte del grabador.  
Una vez realizado las conexiones, haremos un parpadeo de led para probar la correctas conexiones.
Código de prueba-Parpadeo-led.
Para realizar el grabado al microcontrolador usé el SINAPROG 2.1. 
Grabador -software-Sinaprog 2.1
No olviden conectar el cristal externo, tuve mucho tiempo perdido por no conectar el cristal.
Bueno eso es todo!!!!......

sábado, 28 de septiembre de 2019

Libro-The AVR microcontroIIer and embedded system


En esta entrada vamos a hablar de manera resumida sobre un documento muy interesante "The AVR microcontroIIer and embedded  system " 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.

Empieza con lo básico que debes de saber para programar microcontroladores en general con una introducción al mundo de la informática, operaciones computacionales, operaciones binarias , lenguaje digital en general,memorias y arquitecturas.

Este documento es una colaboración de tres personales Hindus como  Muhammad Ali Mazidi, Sarmad Naimi y Sepehr Naimi, caracterizados por brindar bibliográficas relevantes y sobre todo su explicación de los textos es muy entendible y fácil de digerir.  

Podría decir que este documento es la base para los que quieren empezar en el mundo de los microcontroladores usando Lenguaje Asembler y C,  y sobre todo para los que el mundo de los microcontroladores especialmente los AVR son parte de su formación universitaria o que realizan proyectos de investigación y/o proyectos industriales.

Como todo profesional o académico el idioma no debe ser barrera para explorar textos relevantes o importantes como este ya que está escrito en inglés.


The AVR microcontroIIer and embedded  system

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

  1. Introducción a la computación.
  2. Historia y características del AVR.
  3. Arquitectura y programación en lenguaje asembler.
  4. saltos, llamadas y lazos de retardo.
  5. Programación de AVR, puertos I/O.
  6. Instrucciones de aritmética, lógica y programas.
  7. Programación en ASM avanzado.
  8. Programación en C.
  9. Conexiones , archivo hex y carga de código a memoria flash.
  10. Timer- AVR en ASM y en lenguaje C.
  11. Interrupciones-AVR en ASM  y lenguaje C.
  12. SPI-AVR en ASM y en lenguaje C.
  13. LCD Y teclado matricial.
  14. ADC,DAC.
  15. Interfaz de AVR con Relay, optocoplador y motor de paso.
  16. Generación de señales .
  17. Control de velocidad de motor  DC usando PWM.
  18. Protocolo SPI, manejo de display MAX7221.
  19. Protocolo I2C, manejo de RTC DS1307.