domingo, 12 de septiembre de 2010

Depurar codigo en Proteus

Bueno amigos, esta es una parte muy importante del diseño con uC's ( sin importar el fabricante) y una de mis favoritas, esto ya que mediante el uso de Proteus el ahorro de tiempo  es muy alto, Particularmente me ayuda a corregir algunos  errores que pueda cometer en la programación...

//********************************************************************************************************
//********************************************************************************************************
1.- Lo primero que se debe hacer es implementar el circuito con el uC que se quiera usar para la depuración.


2.- Se debe ir a la pestaña Source y dar click en Add/Remove Source files.. 


3.- Se mostrará la siguiente ventana la cual nos permitirá adherir el archivo .asm, para ello daremos click en New. 


4.- La siguiente ventana nos permitirá dirigirnos a la carpeta donde se encuentra el archivo con el código a depurar, en nuestro caso es el archivo LED.asm.


5.- Nuevamente se nos mostrará la ventana del paso 3 pero esta vez el archivo LED.asm ya se encuentra cargado. Daremos click en OK.

Ahora podemos ver el archivo LED.asm en la pestaña Source.



6.- Damos click en Build All, esto compilará nuestro archivo (ya que proteus tiene dentro de sus herramientas el compilador de avr).

Luego se nos mostrará una ventana con el resumen de la compilacion.

7.- Ahora presionamos Clrl+F12 para iniciar el proceso de depuración. Veremos lo siguiente, aquí se puede apreciar una ventana la cual contiene el código a depurar.


En la pestaña Debug encontramos otras opciones que más adelante nos permitirán obtener mas información en el proceso de depuración.

8.- Por último usando la tecla F11 podemos seguir paso a paso la ejecución del código.





miércoles, 8 de septiembre de 2010

Mi Primer Proyecto -ATMEGA8 Y AVR STUDIO 4

Bueno amigos, creo yo que esto es la más básico que se puede enseñar.. así que sin más que  decir veremos cómo prender un led usando un botón con un atmega8.
Antes de ir con el código, mostraré cómo crear un proyecto con el avr studio.
Para ello ya deben tener  instalado el AVR STUDIO, si aún no lo descargan, lo pueden hacer desde este enlace AVR STUDIO 4.18  o desde este otro  AVR STUDIO 4.17
·······> http://www.atmel.com/dyn/resources/prod_documents/AvrStudio4Setup.exe

Antes de pasar al código, les mostraré cómo crear un proyecto:

La primera ventana con las que encontrarán después de abrir el avr studio será la siguiente y en la cual seleccionaremos New Project.



Luego en la siguiente ventana se nos pedirá darle un nombre a nuestro proyecto, así como dónde se desea guardar dicho proyecto; también se nos pregunta si deseamos crear una carpeta específica para nuestro proyecto, la cual llevará el nombre del mismo. Luego daremos click en Next.


En esta ventana se nos pide seleccionar la plataforma de depuración y el dispositivo con el cual trabajaremos. En nuestro caso seleccionaremos la plataforma AVR Simulator y el dispositivo ATmega8. Luego daremos click en Finish.


Por fin nos encontramos en nuestro entorno de trabajo. 


Ahora si podemos iniciar con la programación....


El programa que se muestra como primer ejemplo es el siguiente:



Este programa deberá ser ensamblado usando cualquiera de los siguientes botones : el segundo de estos no permite ensamblar y hacer la simulación de programa.


Explicación de código:

 .include "m8def.inc" --> Contiene todas la definiciones de registros y otros datos del m8=ATmega8, si se trabajará con un ATmega1284p se colocaría  .include "m1284pdef.inc"

.cseg --> O segmento de código, Indica que lo que sigue es el programa que ira en la flash. También existe .eseg o segmento de eeprom (para datos que irán en la eeprom) y .dseg o segmento de datos(para datos que irán en la ram).

.org 0x0000 RJMP INICIO -->Es la primera dirección o la dirección de inicio del programa ( esto siempre debe estar presente para poderle indicar a uC dónde debe ir al iniciar el programa). En nuestro caso haremos un salto incondicional (RJMP INICIO) a la etiqueta INICIO:

SBI DDRB,PB1 --> O Setear Bit en registro I/O permite configurar el pin PB1 como salida. Cada puerto de I/O cuenta con 3 registros: DDRx permite configurar entradas ("1") y salidas ("0"); PORTx permite poner la salida a "1" ó "0" cuando el pin es salida y también permite habilitar("1") la resistencia pull up de dicho pin o deshabilitarla("0") cuando el pin es entrada; PINx permite leer el estado del pin.

//**************************************************************************************
SBIC  PINB,PB0 --> Salta si Bit en registro I/O es Clear 
CBI   PORTB,PB1-->Clear Bit en registro I/O
SBIS  PINB,PB0 -->Salta si Bit en registro I/O está Seteado 
SBI   PORTB,PB1 --> Setear Bit en registro I/O
RJMP BUCLE_INFINITO --> Salto incondicional a la etiqueta BUCLE_INFINITO:
.............................................................
Con esto termino mi primer pequeño ejemplo, espero sea de ayuda... Jonathan r s f 


lunes, 6 de septiembre de 2010

Hablando de Atmega's

Espero esto ayude a los colegas Electrónicos que tienen deseos de aprender a programar microcontroladores de la marca Atmel, especialmente los famosos ATMEGA8 , ATMEGA16, ATMEGA32, ATMEGA64, ATMEGA128, ATMEGA164P, ATMEGA324P. Cito dichos microcontroladores ya que tengo la fortuna de haberlos programado.
Me animé a escribir sobre dichos uC's ya que la información que encontré cuando inicie con el ATMEGA8 fue muy pobre, los libros que son muy pocos no me ayudaron en nada, así que solo emprendí la tarea de aprender a usar las más de 130, y muy buenas, instrucciones con las que cuentan estos uC's...