martes, 27 de agosto de 2019

Proyecto4-Operaciones Lógicas-AND-OR-XOR-NAND-NOR

Descripción General.

El proyecto consiste en utilizar un Atmega32 para realizar 5 operaciones posibles entre las cuales están AND,OR,XOR,NAND,NOR Las entradas de la operación serán los puertos A y B , para seleccionar la operación que se va a realizar se usa 5 pines del puerto C, finalmente el resultado estará en el puerto D.
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.





Si no recibe el producto escríbame a edward.udep@gmail.com
-----------------------------------------------------------------------------------------------------------

lunes, 26 de agosto de 2019

Proyecto3-Leer puerto C y mandar el dato leído al puerto D

Descripción General.

El proyecto consiste en utilizar un Atmega32 para realizar fácilmente como leer el puerto C y mandar el dato al puerto D.
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.





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

Proyecto2-Colocar en alto el bit LSB del puerto C

Descripción General.

El proyecto consiste en utilizar un Atmega32 para realizar facilemnte como colocar en alto el bit menos significativo del puerto C.
Circuito
Características Técnicas.

  • Microcontrolador: Atmega 32.

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




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

viernes, 23 de agosto de 2019

Proyecto1-Escribir el valor 55 hex en el puerto C

Descripción general.
El proyecto consiste en utilizar un Atmega 32 para realizar la operación más básica como escribir un valor en un puerto, en este caso usaremos el puerto C para escribir el valor 55Hex.
Circuito

Características Técnicas.

  • Microcontrolador: Atmega 32.
  • 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  visio Profsional del diagrama de fujo del proyecto.
--------------------------------------------------------------------------------------------------------------------------

Suscribete a mi lista de correos para recibir más material próximamente.





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

lunes, 12 de agosto de 2019

Lenguaje C-Proteus-AVR.

En esta entrada vamos a hablar de manera resumida sobre un documento muy interesante de la web "cursomicros.com" para los que quieren empezar a programar AVR usando lengujae C y a la par con el mejor software de simulación para muchos como el proteus. 
Empieza con lo básico que debes de saber para programar en lenguaje C, las características del lenguaje y saberes previos a este lenguaje como : directivas, funciones, sentencias, estructuras, declaración de variables, especificación de tipos de datos, sentencias selectivas, iterativas,con bloques simples,operadores, arrays y punteros.

Podría decir que este documento es la base para los que quieren empezar en el mundo de los microcontroladores usando Lenguaje C, por que a parte de ello se pueden simular los programas en  Proteus y usar su herramienta debugging para ver paso a paso nuestro código de los distintos proyectos
.
Imágenes sacadas del libro.
Tiene muchos diagramas de circuitos que engloba dispositivos básicos como :
LCD, teclado matricial, motores dc, motores paso paso entre otro para realizar proyectos y usar los periféricos de  estos microcontroladores como timers, temporizadores, puertos de entrada y salida, PWM, UART entre otros.

Para programar los microcontroladores AVR usa en entorno STUDIO5, que es bastante similar al entorno actual como el AtmelStudio7, y facilmente portable.

PARTE1

PARTE2

Tienes alguna duda de este tema, o ¿de qué otros temas quieres que hablemos?, puedes escribirnos directamente a nuestro grupo de Telegram

Ubicando código en la memoria FLASH-ROM


Después que nuestro código a sido grabado dentro de la memoria de programa tales como atmega32 o cualquier micro de atmel, el OPCODE y OPERANDO son guardados en la memoria de programa iniciando desde la dirección 0x0000. Por ejemplo veamos como se guarda este bloque de código en la memoria de programa:

código-almacenamiento de la última dirección de memoria SRAM.
Creé un proyecto y le puse nombre "litle endian metodo-ejemplo"Una vez escrito el código, Construimos los archivos(Build)  y en la carpeta DEBUG se construyen archivos .map, .lss,entre otros como el de la imagen:
Archivos generados en carpeta debug.
Ahora nos enfocaremos en el archivo .lss. El archivo ,lss es muy útil para nosotros los programadores. Aquí se muestra el código binario y código fuente, además muestra que instrucciones son usadas en el código fuente, y la cantidad de memoria del programa usada, este archivo al igual que el .map pueden ser accedidos por un editor de texto tal como notepad y verlos en el monitor, el programador usa este archivo para asegurarse el correcto desempeño  del sistema.

Archiv list(.lss) generado
En la imagen anterior se muestra el archivo generado .lss, solo se muestra una sección del mismo esta plasmado de mucha información , pero nos enfocaremos en la parte donde esta nuestro código que hemos escrito:
Archivo list(.lss)-sección code
Como se observa en la imagen anterior, a la izquierda la conforma las direcciones que ocupa nuestro código, empieza en la dirección 0x0000, con su respectivo OPCODE y OPERANDO. Si deseas saber como se representa el OPCODE y OPERANDO de una instrucción, en este blog hay un ejemplo.  

El dato en la memoria Flash de los AVR es guardado de un forma llamada “Little-endian”. Esto significa que el byte alto del código es ubicado en la dirección alta de la ubicación de la memoria FLASH, y el Byte bajo del código es ubicado en la dirección baja de la ubicación de la memoria FLASH. Compare el primer Word del código (e008) con los dos primeros Byte de la memoria FLASH(08e0).

Método-Litle endian
 Ahora ya sabemos como se guarda en memoria FLASH-ROM cada línea de código, está formado por una palabra(2Bytes) y se irán guardando de la siguiente manera:

¿Puedo guardar datos en  memoria FLASH-ROM?

Pues sí, también podemos guardar datos, que usaremos ,estos datos en asembler se pueden guardar a través de "tablas", dándoles un origen de memoria. Para leer los datos en memoria en forma de "tablas" es muy importante desplazar un bit hacia la izquierda utilizando “<<” o que es lo mismo multiplicando *2 la dirección  de donde se dio origen a la tabla de datos ya que al momento de guardar un dato en una tabla este empieza en la dirección x2 de donde se dio origen a dicha tabla. Puedes ver un ejemplo de tablas en el siguiente video:

Conclusión

  •  Nuestro código se guarda en forma de OPCODE y OPERANDO.
  • Los OPCODES y OPERANDOS se guardan en memoria FLASH usando el método "Litle Endian".
  • En la memoria Flash no solo se guarda código, vectores de interrupción, programa bootloader, también se puede guardar datos  usando "tablas".
  • Las instrucciones LPM y SPM se usa frecuentemente en esta memoria FLASH.
  • Program Counter es que va a ir saltando de dirección en dirección de la FLASH-16 bits.

domingo, 11 de agosto de 2019

Dirección en word y Byte de memoria FLASH

Muchas veces al leer los datasheet de los micros y en especial la sección de memorias nos topamos con direcciones que confunden un poco al menos a primera vista ya que muchas veces leemos una dirección tipo word con un tipo Byte o viceversa, y más aún cuando con ambas direcciones se puede trabajar, pero hay que saber cuando se esta hablando de uno, cuando se habla del otro y en que situaciones, para ello esta creada esta entrada.

Para ello vamos a definir los limites de direcciones tanto usando direcciones tipo word y direcciones tipo Byte, vamos a empezar por analizar el tamaño que ocupa el Bootloader en el microcontrolador Atmega32.

Tabla-Configuración del tamaño de Bootloader
Vamos a realizar el ejemplo con Boot=0,0.Queremos saber cual es la dirección de inicio del Bootloader  dentro de la memoria FLASH.
Si vemos la tabla con direcciones tipo word
De la tabla nos dice que para boot(0,0) ocupará 2048 word. 
  • Igualamos variables de la operación resta a word. tamaño de memoria FLASH es de  0x3FFFw,+1, entonces es de 16384 Word totales.
  • Restamos :16384w -2048w= 1436w
  • Convertimos a hexadecimal= 0x3800w.
Si vemos la tabla con direcciones tipo Byte
La memoria FLASH en Byte es de 32KBytes .

  • Igualamos variables de la operación resta a Bytes: tamaño de Bootloader es de 2048word=4096Bytes, 4096Bytes=4KBytes.
  • Restamos :32KBytes-4KBytes= 28KBytes
  • Convertimos a decimal: 28KBytes=28672 Bytes.
  • Convertimos a hexadecimal= 28672Bytes=0x7000Hex.
Según lo anterior ya sabemos cual es el inicio del bootloader cuando ocupa su máximo tamaño posible(2048words), puede ser menor a este tamaño, para ver el inicio de tamaño de todas las maneras posibles están en el datasheet pero lo más importante es que ya sabemos cuando se refiere a tamaño de Bytes o de Words.
Tamaño de Memoria FLASH.
Ya sabemos  como ver las direcciones en Word y en Byte ello es importante a la hora de programar nuestro código, saber cuales son nuestros limites de memoria es como saber donde estamos parados, its is very import. XD.

sábado, 10 de agosto de 2019

OPCODE y OPERANDOS

Todas las instrucciones en ensamblador tienen una parte obligatoria, y esto se llama el mnemótecnico, que corresponde al OPCODE en código máquina; por ejemplo el mnemótecnico de nop es nop, pero algunas instrucciones tienen además OPERANDOS. Por ejemplo "LDI(Load inmediate)" tiene dos, el primer es un registro, separado de una coma a continuación viene el siguiente, que es un dato. En este caso los OPERANDOS son obligatorios, tal como se muestra a continuación:  "LDI R16,0XFF".

Ejemplo-LDI R16,HIGH(RAMEND)

Como se mencionó vamos a usar la instrucción LDI como ejemplo para ver como se representa la instrucción LDI R16,HIGH(RAMEND) en OPCODE y OPERANDOS.

La instrucción LDI Rd,K es su forma general se define de la siguiente manera:
Estructura de la instrucción LDI.

Definimos los valores de Rd,K, para eso debemos recordar que  la última dirección de memoria RAM es 085F,como se aprecia en la imagen:

Memoria SRAM

La dirección  085F está formado por 2Bytes, el Bytes alto es 08 y el Byte bajo  es 5F. Entonces HIGH(RAMEND)=08, nuestra instrucción sería:
LDI R16,08

Donde:
Equivalencias del valor de los Registros
 En la  Dirección de memoria FLASH será lugar para almacenar OPCODE y OPERANDO, donde E es el OPCODE y 08 es el OPERANDO.
OPCODE y OPERANDOS DE LDI 
Es así que nuestra instrucción LDI,HIGH(RAMEND) estará representada por la palabra E008 de 2 Bytes ó 16 bits.
OPCODE y OPERANDOS DE LDI R16,HIGH(RAMEND)
la lista de todas las representaciones de las instrucciones en OPCODE y OPERANDOS de todas las instrucciones se encuentran aquí, pero ya sabemos como una instrucción llega a su representación de OPCODE y OPERANDOS, lo hemos demostrado en esta entrada.

Memoria de Programa(FLASH)


Como sabemos el microcontrolador AVR tiene 3 tipos de memorias, memoria de programa, memoria SRAM y memoria EEPROM, aquí nos enfocaremos a la memoria de programa o FLASH-ROM.

Teoría encontramos en todos lados, basta con escribir en Google sobre memorias FLASH AVR , pero aquí te dejo las mejores reflexiones de esta memoria:
  • Es una memoria que soporta hasta 10,000 ciclos de escritura/ borrado.
  • Se puede dividir en dos secciones, una de aplicación y una sección de arranque, en la sección de arranque es donde se puede ubicar un cargador para auto programación.
  • Los vectores de interrupción son parte de la memoria de programa e inician en la dirección 0 si es que están habilitadas.
  • El tamaño de la memoria Flash varia dependiendo del micro para el atmega32 es de 32KBytes(16kX2Bytes) ó 16KWord, aquí esta incluido la sección de arranque.
Memoria FLASH -ROM

Program Counter

Debido a que la capacidad de memoria flash del atmega32 es de 32KBytes ó 16KWord las direcciones de memoria flash de 16 bits tendrán el rango de (0x0000-0x3FFF) Word =(0-16383dec) word=(0 a 11111111111111[14 bits] en binario) la "Program Counter" que almacena la dirección de la ubicación  de ejecución actual de la memoria flash de 14 bits es suficiente.

Litle endian

Es un método que consiste en la forma de almacenar datos a nuestra memoria FLASH, el dato en la memoria Flash del AVR es guardado de la manera que es llamada "litle endian", esto significa que el byte alto del código es ubicado la dirección alta de la memoria Flash y el byte bajo del código esta ubicado en la dirección baja de la memoria flash.

método Litle Endian
Los Byte0,2,4,6 son los Bytes altos de datos, y los Bytes1,3,5,7 son los Bytes bajos de datos.
Existe otro método de guardar datos a memoria FLASH y es el método de Big Endian.

Sección de aplicación

Esta sección empieza en la dirección 0x000 encontramos nuestro código de programa y vectores de interrupción si estuvieran activados.
Aquí se encuentran los códigos de programa, puede haber mas de un código, y se hará uno otro dependiendo de la programación que se haya dado en el bootloader.

Sección de arranque(Bootloader)

Esta sección es de uso opcional y de forma obligatoria dependiendo para que esta pensado el uso del microcontrolador.

¿Cuándo utilizar Bootloader?

  • Cuando el producto esta terminado, digamos ya puesta en planta o en aquel proceso donde esta monitoreando algún proceso o controlando alguna variable industrial.
  • Se usa de manera profesional en desarrollos terminados.
  • Cuando se quiere tener un respaldo de información o backup.
  • Se quiere tener mas de  un código principal según la funcionalidad que le demos.
  • El bootloader esta pensado cuando el microcontrolador ya este en manos de un cliente.
  • Si vas a utilizar un microcontrolador de Atmel para una ponerlo en una placa Arduino necesitas cargar su configuración para que el micro acepte los comandos de la plataforma Arduino.

¿Cuándo no utilizar Bootloader?


  • Si solo vamos a programar de forma de aprendizaje sea en C o ASM no es necesario cargar algún programa.
  • Si se va a trabajar de la mano con un programador de esa manera nos ahorramos memoria flash. 

Tamaño de memoria Bootloader

Como podemos ver el las dos tablas según como este configurado los bits BOOTSZ1 y BOOTSZ0  va a variar el tamaño que ocupará dentro de la memoria FLASH. 
Tabla 1-Configuración del tamaño de Boot
En la Tabla 2 se muestra el limite de memoria que ocupará la memoria de arranque que será cuando BOOTSZ1=0 y BOOTSZ0=0.
Tabla 2-Limite de Lectura mientras se escribe

La configuración del bootloader por el momento no lo haremos de manera profunda, si quieres saber mas detalles sobre el bootloader puedes seguir este enlace.

Entonces podemos deducir que el  tamaño de la memoria de arranque que ocupará en la memoria FLASH es variable dependiendo de dos cosas:

  • Del microcontrolador que estemos usando.
  • La configuración del mismo.

Si deseas saber mas de bootloader aquí un video bien explicado de  TutoElectro, velocidad x5 XD.

Límite de direcciones en memoria FLASH-ROM

Teniendo en cuenta lo anterior se va a delimitar los lugares de cada sección, esto es muy importante conocer cuando se va a programar, ya que podría darnos algún tipo de conflictos a la hora de guardar datos, de la misma manera que es bueno saber donde estamos parados es bueno saber donde estamos escribiendo nuestro código.

Limites de direcciones es memoria FLASH

viernes, 9 de agosto de 2019

Construye tu programador USABasp.

Aquí explicaré de manera breve como puedes construir tu propio programador y los enlaces que necesitas:

Como esta el título veremos el grabador USBasp ya que el hadware de este circuito a sido liberado  por el sr. Thomas Fischl  ya por el año 2005 aproximadamente y gracias a él tenemos el circuito hasta el archivo en eagle, solo para imprimir y hacer nuestro propio programador, o si lo prefieres mandar los archivos gerber a una empresa china para que te lo impriman , por cierto a muy bajo costo, y si es tu primer pedido no te cobran el envio, así que aprovecha esta ocasión para tener varios programadores listos para trabajar.

Eagle-Esquemático
Eagle-PCB
Si lo quieres comprar y quieres ir a solo programar puedes comprarlo también, que por cierto están baratos.

Si deseas hacer tu circuito con un microcontrolador Atmega8-TQFP32 para que tu placa sea mas pequeño, aquí te dejo el enlace aquí otro.si deseas realizar el circuito en otro software de diseño, aquí el esquema en pdf.

En la parte final les anexo los archivos en Eagle para que los descarguen.
Una vez que ya tengas el hardware(la placa impresa) ahora necesitas instalar los driver para ello les dejo un video muy bueno del youtuber "jfetronic: Electrónica y Más" si quieres seguir el proceso paso a paso de manera escrita aquí un buen tutorial de 3 partes.
y esto es todo a programar XD.
Programador USBasp

Puedes agradecerle al autor del diseño: link

sábado, 3 de agosto de 2019

Libro-Los microcontroladores AVR de ATMEL

Libro en español.
En este libro encontrarás aplicaciones y ejemplos con el ATMega8 y ATMega16 en lenguaje ensamblador y lenguaje C. El autor es el M.C  Felipe Santiago Espinosa, de la Universidad Tecnológica de la Mixteca. Pueden agradecerle por  magnifica obra a los correos fsantiag@mixteco.utm.mx, felipe_santiago_e@hotmail.com.

El libro incluye 9 capítulos:

  1. Introducción de los Microcontroladores
  2. Organización de los Microcontroladores AVR de ATMEL
  3. Programación de los Microcontroladores
  4. Interrupciones Externas, Temporizadores y PWM
  5. Recursos para el Manejo de Información Analógica
  6. Interfaces para una Comunicación Serial
  7. Recursos Especiales
  8. Interfaz y Manejo de Dispositivos Externos
  9. Desarrollo de Sistemas

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