martes, 1 de marzo de 2011

“delay_ms(ms)” y “delay_us(us)” para cualquier frecuencia

En un post anterior mostré como generar una rutina de retardos en milisegundos, ésta rutina funcionaba muy bien pero el problema era volver a calcular valores para una frecuencia diferente.
Ahora mostrare otra rutina que junto con sus macros permiten tener retardos en milisegundos y microsegundos, pero a diferencia de la anterior ya no hay que calcular valores para generar los retardos, solamente se deberá cambiar la frecuencia a la cual se trabajara (F_CPU).

Esta rutinas pueden soportar valores de 0-65535. Descarga

Las rutinas y las macros son las siguientes:

macros

retardo

Su uso es muy sencillo, aquí se muestra:

main

Los resultados los puede ver en la parte izquierda del simulador.

cpu

Espero éste sencillo ejemplo les sea útil.

sábado, 19 de febrero de 2011

KEYPAD Y LCD

En el post anterior les mostré las rutinas para en manejo de un LCD y algunos ejemplos del manejo de dichas rutinas. Descargar

Ahora les mostrare la rutina de escaneo de un KEYPAD 4x4 y mostrar la tecla presionada en el LCD.
Editando esta línea “.EQU    PUERTO_KEY = PORTA” se puede cambiar el puerto que se usara para el KEYPAD. Al final de de éste archivo se encuentra la tabla con los valores ASCII de cada tecla. La rutina espera que la tecla sea soltada y retorna el valor en R16.

keypad

Además de las macros usadas en el post anterior usaremos ésta otra macro:

macros1

Ahora mostrare un ejemplo de su funcionamiento.

keypadeje

Esta rutina muestra los mensajes MENSAJE_1, MENSAJE_2, MENSAJE_3 y MENSAJE_4 y luego de esperar una tecla limpia el LCD, luego posiciona el puntero del LCD a la línea 1 y espera una tecla y la muestra. Luego de 20 teclas pasara a la siguiente línea.

key1

key2

La siguiente figura muestra como usar otro tipo de teclado.

key3

En el programa solamente deberán cambiar lo siguiente.

key4

Eso es todo por ahora, espero estos ejemplos los ayuden.


miércoles, 16 de febrero de 2011

MANEJO DE LCD ALFANUMERICO

Teniendo en cuenta la importancia que tiene mostrar determinada información cuando se hace diseños en base a uC´s  hoy les daré las rutinas necesarias para el manejo de un LCD y algunos ejemplos de su uso. Descargar
En la siguiente figura se muestran las macros que se usaran mas adelante.

macros

- SETZ setea un valor al puntero Z (ZH:ZL ó R31:R30).
- PUTC imprime un carácter.
- PUTV imprime el valor de un registro.
- CMD_LCD envía un comando al LCD.
- PRINTF_LCD imprime un string ( debe estar almacenado en la flash ). Éste string debe terminar en un 0.

Ahora pasare a mostrar la rutina de comunicación con el LCD.

En ésta primera parte de la rutina de muestra las definiciones de algunas variables y algunas constantes. Cuando se quiera usar un puerto diferente del predefinido ( PORTC ) solamente se debe cambiar esta línea “PUERTO_LCD = PORTC”, aquí se deberá poner el puerto que se usara para manejar el LCD.

lcd1

En la siguiente figura se muestra lo restante del archivo LCD.asm.

lcd2

En éste momento no tengo mucho tiempo para explicar estas rutinas, si tienen alguna pregunta por favor escríbanme.
Tanto las rutinas del archivo LCD.asm como el programa principal necesitan la rutinas de retardo, en éste caso pueden usar las rutinas dadas en post pasados ( si no la encuentran me escriben y les enviare el archivo RETARDOS.asm).
Pasaremos a mostrar unos ejemplos muy sencillos del uso de estas rutinas.

ej1

En la simulación veremos lo siguiente:

figej1

En el siguiente ejemplo se llena el LCD con parte del codigo ASCII.

ej2

El ejecución del ejemplo anterior nos mostrara los siguiente:

figej2

Por último mostrare un ejemplo en el cual se imprimirá un string definido en la flash.

ej3

Luego de la simulación veremos los siguiente:

figej3

Buenos amigos, espero les sea útil la información…

sábado, 8 de enero de 2011

AVRStudio 4 con USBasp

En realidad no tengo conocimiento de que se pueda usar el USBasp con el AVR Studio, pero si se puede usar su hardware y un firmware diferente( se emulara el STK500 ) para éste propósito.
La información para realizar esto se puede encontrar en los siguientes enlaces:

Bueno, lo primero que hay que hacer es descargar el firmaware de  AVR-Doper.2008-11-27.tar.gz  ó  AVR-Doper.
Luego grabaremos un ATmega8 con el archivo "usbasp-mega8-12mhz.hex" que se encuentra en la carpeta que se ha descargado. Después de haber colocado el ATmega8 grabado con el nuevo firmware en el hardware del USBasp lo conectamos a la computadora y nos pedida los driver's.


Los driver's se encuentran en la misma carpeta que se ha descargado.


Si se nos asigno un COM por encima de 4 debemos cambiarlo, deberá ser COM1,COM2, COM3 o COM4. Después de esto abrimos el AVR Studio y seleccionaremos el programador STK500 y el COM que ha sido asignado.



Luego de hacer click en "Connect" aparecerá un mensaje como el mostrado en la siguiente figura, el cual deberá ser ignorado (Cancel). 


Lo primero que hay que cambiar es el modo de programación a ISP. Luego veremos que nuestro programador es reconocido.


Deberemos seleccionar el archivo .hex que se grabara.

 Luego de esto configuramos los parámetros de programación. En mi seteare los Fuses y los Lock bit's.



Luego de ello setearemos la Auto programación.


Al terminar con estos pasos podemos minimizar esta ventana y usar botones mostrados para realizar la programación. 

Si quieres poner los FUSES y LOCK_BITS dentro del código (cuando se programa en C) y programar directamente sin configuraciones debes usar el archivo ELF.

Cuando se requiera grabar el uC solamente hay que dar click en Program.
El el cuadro de la parte inferior deberán de ver algo como esto:


Getting isp parameter.. SD=0x02 .. OK
Validating ELF input file.. OK!
Reading FLASH input..OK!
No EEPROM contents in ELF file.
Reading FUSE input..OK!
Reading LOCKBIT input..OK!
No SIGNATURE contents in ELF file.
Entering programming mode.. OK!
Erasing device.. OK!
Programming FLASH ..      OK!
Reading FLASH ..      OK!
FLASH contents is equal to file.. OK
Writing fuses address 0 to 2.. 0xFF, 0xD9, 0xFF .. OK!
Reading fuses address 0 to 2.. 0xFF, 0xD9, 0xFF .. OK!

Fuse bits verification.. OK
Writing lockbits .. 0xC0 .. OK!
Reading lockbits .. 0xC0 .. OK!

Lock bits verification.. OK
Leaving programming mode.. OK!

Eso es todo por ahora, espero esto les sea útil.






miércoles, 22 de diciembre de 2010

Programador USBasp

Ya todos conocen la importancia de tener un buen programador o quemador de uC's; en el mercado existe una gran diversidad de los mismos y a diferentes precios, pero para que pagar por uno de ellos cuando podemos hacerlo nosotros mismos.
En la pagina http://adf.ly/1X64cL encontraremos todo lo necesario para la construcción del famoso USBasp. Yo personalmente lo uso todos los días y hasta ahora no me ha fallado.
El esquema del circuito es muy sencillo, la cantidad de componentes es mínima y puede funcionar inclusive con win7-64bits.
En el siguiente enlace se puede encontrar la información necesaria ( esquema, layout, firmware, etc..) para su implementación.
USBasp.

El software para programación que recomiendo es Sinaprog, el cual puede ser descargado de el siguiente enlace SinaProg-1.4.5.10.
*** NEW  SinaProg 2

Ésta entrada no serviría de nada sin un pequeño aporte de mi parte.
Agregándole una cantidad mínima de componentes podemos llegar a esto:


El cual permitirá programar placas que ya tengan el famoso conector ISP de atmel y también otros uC's usando el ZIF-SOCKET (mega8,16,32,164P,324P...).
El layout de éste lo pueden encontrar aquí LAYOUT, ésta hecho en proteus.


PROGRAMANDO ATMEGA128

  

 
 
PROGRAMANDO ATMEGA324P


Para poder usar éste programador en Windows 7-64 bits tienen que usar el siguiente driver USBasp-Win7-x64. USBasp-Win7-x64.7z
El proceso de instalación se muestra en las siguientes imagenes.




Espero esta entrada sea de utilidad para ustedes, hasta la próxima.









Parte 2 (17/03/16):
En la siguiente imagen se muestra el nuevo programador USBasp.
Al final de este post dejare los archivos para la implementación.

image

El esquema del programador se muestra en la siguiente figura.
El firmware fue modificado para generar una frecuencia de reloj por el pin PB1/OC1A (de 2KHz a 6MHz). Esta frecuencia, aplicada al pin XTAL1 del uC a programar, permitirá usar cualquier cambianación de fuses.

ZIF


SinaProg 2.1
Esquemas USBasp zif – proteus
USBasp firmware modificado


Vendo Programador AVRISP XPII, compatible con AVRISP mkII. Funciona al 100% con Atmel Studio 7. 
PRECIO: S/. 120.00