Você está na página 1de 9

pr

ue
ba

ENTORNOS DE

PROGRAMACION

de

Son los sistemas que permiten editar, compilar, depurar e incluso programar el microcontrolador, todo desde una misma plataforma. Para ver en detalle como se realizan cada uno de
los pasos en los respectivos entornos, se utilizar
a el clasico ejemplo de apagar y encender un
LED por un pin del microcontrolador (este ejemplo se ha convertido para aplicaciones con
microcontrolador en el equivalente hola mundo de las aplicaciones de escritorio). El circuito esquematico, y el diagrama de flujo de esta aplicacion es el que aparece en la figura 20,
habitualmente se usa una resistencia de 220 Ohmios. Es importante tener presente que sin la
conexion a Vcc del pin de Reset, el microcontrolador no ejecuta ning
un programa, y la conexion
del cristal externo debe hacerse siempre y cuando se elija este circuito como el circuito de reloj
del microcontrolador a la hora de programar los fusibles (tal como se explico en el apartado de
fusibles).
INICIO

10k

Ve

rs

Vcc

Configurar pin
como salida

Reset
RB0

Encender LED

Osc1
RETARDO

Osc2

Apagar LED

RETARDO

Figura 20: Circuito esquem


atico y diagrama de flujo del programa que enciende y apaga LED

Para quienes esten acostumbrados a escribir aplicaciones para escritorio, encontraran algunas
similitudes y diferencias a la hora de escribir el programa. Las principales diferencias son: no
hay archivos de cabecera para entrada/salida (los famosos stdio.h y conio.h), pues la entrada
y salida es mucho m
as simple y se realiza leyendo y/o escribiendo en puertos (y si hubiese un
sistema de entrada y salida m
as complejo, dependera del circuito de la aplicacion). Tambien
es importante resaltar que el programa no se ejecuta inmerso en un sistema operativo, razon

por la cual el programa que se transfiera a la memoria no puede simplemente terminar, por eso
todos los programas de microcontrolador deber
an quedarse en un ciclo infinito en vez de salir
de la funcion main.

SourceBoost (para microncotroladores PICs)

ue
ba

El SourceBoost es un entono de programaci


on de bajo costo desarrollado por Pavel Baranov, David Hobday y que puede ser descargado de la pagina www.sourceboost.com, este
entorno consiste en un editor y depurador, ademas se pueden invocar diferentes compiladores (C2C, C2C++ BoostC, BoostC++). La version que se descarga por internet es
una version demostrativa que tiene la limitante de que el codigo fuente no puede superar las
2048 instrucciones, espacio que es m
as que suficiente para los ejemplos que veremos en este libro.

de

pr

El entorno SourceBoost usa por defecto el compilador BoostC. Este compilador utiliza la
sintaxis definida en el ANSI-C, pero adicion
andole algunas caractersticas que hacen mas
simple la escritura de programas para microcontroladores, la mas destacable es la posibilidad
de usar el operador punto (.) en las variables para acceder a un bit individualmente, de tal
suerte que se puede poner 1 o 0 en un bit sin alterar los demas bits en el caso de escritura;
o nos permite conocer si solo un bit esta en 1 o 0 en el caso de lectura. En un compilador
ANSI-C debe utilizarse enmascaramiento para cualquiera de estas operaciones, mas adelante
mostraremos ejemplos de c
omo se usa este operador. En este compilador se tiene la convencion
de que todos los registros se etiquetan con nombres en min
uscula sostenida y todos los bits se
etiquetan con nombres en may
uscula sostenida.

rs

Por cada aplicacion debe construirse un proyecto nuevo, escogiendo la respectiva opci
on del
men
u. Inmediatamente aparecer
a un cuadro de
dialogo como el que aparece en la figura 21. Si
a
un no se ha escrito el c
odigo, lo mejor es elegir la segunda opcion, pues con esta el entorno
nos crea un archivo de c
odigo .c nuevo (con el
mismo nombre del proyecto) con el cuerpo de
la funcion main y algunas otras lneas tal como
aparece en la figura 22

Figura 21: Creacion de un nuevo proyecto


en el entorno SourceBoost

Ve

Ademas del archivo de c


odigo fuente, en la parte izquierda de la figura 22 se puede observar el
arbol de archivos que hacen parte del proyecto. Ah se encuentra el archivo ej1.c (ej1 fue el

nombre dado a este proyecto, as que ej1.c es el nombre del archivo que se esta editando), y
adicionalmente aparecen una serie de archivos en la carpeta Release (tambien puede aparecer
la carpeta Debug, dependiendo de la opci
on elegida en la pesta
na superior, esto permite tener
compiladas diferentes versiones, dependiendo si es una version definitiva, o una version para
depurar), estos archivos son los que se crear
an una vez se compile la aplicacion, el archivo con
extension .asm es una versi
on en ensamblador del programa en lenguaje C, el archivo .lst es
similar al .asm pero detallando las posiciones de memoria donde quedan los codigos de maquina.
El archivo .hex contiene los c
odigos de m
aquina del programa; este archivo es el que se programa
(o quema en la memoria ROM del microcontrolador). Aunque no aparece en el arbol tambien
se crea el archivo .cof, que es algo as como una version binaria del archivo .hex, y que ademas

Y el archivo .map contiene una descripci


on detallada de la memoria usada por el programa
(tanto RAM como ROM). Conforme al manejo de proyectos en cualquier entorno, el c
odigo
fuente podra estar distribuido en varios archivos, y/o libreras, pero por lo pronto haremos
proyectos con un solo archivo de c
odigo fuente.
La ventana inferior de la pantalla se utiliza para mostrar los mensajes que tanto el compilador
como el enlazador mostraran en la ventana de
comandos, para indicar el resultado de la compilacion y el enlace de las aplicaciones.

ue
ba

contiene informacion u
til para los programas de depuracion (indicando los archivos, n
umero de
lneas correspondiente a los c
odigos de m
aquina, nombre de variables, etc).

Figura 22: Archivo .c que crea el entorno


cuando se construye un proyecto nuevo

pr

Inmediatamente despues, es conveniente escoger la referencia del microcontrolador para el cual


se esta dise
nando la aplicaci
on. Tal como se muestra en la figura 23(b).

de

Tambien es recomendable escoger la frecuencia del oscilador, y en este entorno se debe ser muy
cuidadoso pues la opci
on que se escoge en el men
u (con la opcion ClockRate), es solo para
la simulacion, siendo necesario agregar una lnea de codigo para indicarle dicha frecuencia al
compilador. Para nuestro caso escogemos 4 MHz con la siguiente lnea de preprocesador: (una
lnea de preprocesador en un programa en lenguaje C no es exactamente codigo, sino que son
opciones que le indica al compilador como realizar ciertas acciones).

Ve

rs

#pragma CLOCK F REC 4000000

(a)

(b)

Figura 23: Escogencia de la referencia del microcontrolador

Esta lnea debe ubicarse al principio del archivo, pues con ella el compilador determina los
codigos de maquina para todo aquello que dependa la frecuencia del oscilador (como los
retardos). Es importante resaltar que para estas y otras opciones de configuracion, cada uno
de los entornos utiliza diferentes mecanismos, as que si se esta utilizando uno diferente al
SourceBoost debera consultar en las ayudas los pasos equivalentes.
Nota: Si se esta utilizando un cristal de 4 MHz se puede omitir la lnea de preprocesamiento
pues 4 MHz es el valor por defecto que se utiliza en este entorno.

Todos los pasos comentados hasta aqu ser


an necesarios en cualquier aplicacion, y a partir de
aqu se escribiran las instrucciones propias de cada programa.
Volviendo a la aplicaci
on escogeremos el pin RB0 para conectarlo al LED. Y siguiendo el
diagrama de flujo lo primero que debe hacerse es programar el pin RB0 como salida y luego un
ciclo infinito que contiene cuatro sentencias, la primera enciende el LED, en la segunda se hace
un retardo de un segundo y luego apagamos el LED en la tercera y por u
ltimo, hacemos otro
retardo de un segundo. El listado completo es el siguiente:

ue
ba

#i n cl u d e<system . h>
// a r c h i v o de c a b e c e r a que d e f i n e r e g y f u n c i o n e s
#pragma CLOCK FREC 4000000 // l i n e a p r e p r o . I n d i c i a f r e c . o p e r a c i o n
void main ( )
{
t r i s b =0xFE ;

// i n i c i o f u n c i
o n main

// c o n f i g u r a pi n r b 0 como s a l i d a

// i n i c i o c i c l o i n f i n i t o
// pone un 1 en e l pi n r b 0 ( e n c i e n d e LED)
// r e t a r d o 1 segundo
// pone un 0 en pi n r b 0 ( apaga e l LED)
// r e t a r d o de 1 segundo
// f i n c i c l o i n f i n i t o

pr

do{
p o r tb =1;
delay s (1 );
p o r tb =0;
delay s (1 );
} while ( 1 ) ;
}

Despues de editar el archivo se procede a compilar y enlazar el programa.

de

Para compilar se utiliza la respectiva opci


on en el men
u Build o si se quiere utilizando el boton
para tal proposito como se muestra en la figura 24

rs

Figura 24: Formas de invocar el compilador en el entorno SourceBoost

Ve

Si todo va bien en la ventana de mensajes del compilador/enlazador debera aparecer el


siguiente texto:
C: \ Program F i l e s \ S o u r ceB o o s t \ b o o s t c p i c 1 6 . e x e
t PIC16F877A i d x 1 o b j R e l e a s e d RELEASE e j 1 . c
BoostC O p ti m i zi n g C Compiler V e r s i o n 7 . 0 0 ( f o r PIC16 a r c h i t e c t u r e )
h ttp : //www . s o u r c e b o o s t . com
C o p y r i g h t (C) 2004 2010 P a v el Baranov
C o p y r i g h t (C) 2004 2010 David Hobday
S i n g l e u s e r L i t e L i c e n s e ( U n r e g i s t e r e d ) f o r 0 node ( s )
L i m i t a t i o n s : PIC12 , PIC16 max code s i z e : 2 0 4 8 words , max RAM banks : 2 ,
Non co m m er ci a l u s e o n l y

ej1 . c
success
Done

ue
ba

Si hay errores, por cada uno de ellos aparecer


a el n
umero la lnea donde ocurrio el error y una
descripcion del mismo. Aprender a identificar y corregir los errores es todo un arte y solo se
aprende con la practica. Si se tiene experiencia con aplicaciones de escritorio, se debe tener
en cuenta que adem
as del famoso olvido del punto y coma, en este entorno es muy com
un
que ocurran errores con los nombres de los registros, o los nombres de los bits asociados,
frecuentemente debido a que los escribimos con el tipo de letra contrario (may
uscula cuando
debe ser en min
uscula o viceversa), o porque omitimos el paso de escoger el microcontrolador
para el cual se esta dise
nando la aplicaci
on. La regla general para los nombres en este entorno
es la siguiente: los registros se etiquetan con solo letras en min
usculas y los nombres de bits
asociados con solo letras may
usculas.

de

pr

El u
ltimo paso para generar el archivo ejecutable en el microcontrolador sera enlazar los
archivos (enlazar los archivos consiste en tomar los codigos de maquina correspondiente a
nuestro codigo fuente y unirlo con el c
odigo m
aquina de las libreras y generar un solo archivo
.hex con los codigos de m
aquina de la aplicaci
on completa). Este proceso se invoca usando
el icono con la letra L, o la respectiva opci
on del men
u Build. Aqu tambien pueden ocurrir
errores, pero a diferencia de la fase de compilacion, solo se menciona el error, pues ya no es
posible identificar la lnea del c
odigo que gener
o el error. En este punto ademas se informa
sobre la cantidad de memoria RAM y ROM consumida en la aplicacion. (Nota: con la opcion
Build se puede compilar y enlazar el archivo, pero es mejor hacerlo por separado para que sea
mas facil identificar y corregir los errores).

Ve

rs

Despues de haber superado la fase de escritura y codificacion de la aplicacion debe realizarse


la fase de depuraci
on que consiste en identificar y corregir errores logicos en el programa,
y a pesar de que esta aplicaci
on es tan simple, muchas veces consiste en la fase que mas
tiempo hay que dedicarle. Aqu tambien hay diferencias con las aplicaciones de escritorio,
pues hay que tener en cuenta que adem
as del software que estamos desarrollando, se debe
simular el hardware sobre el cual se ejecutar
a dicho software (en la mayora de las aplicaciones
con el PC se asume el mismo hardware, o por lo menos podemos contar con que el sistema
operativo y el kernel son los encargados del manejo directo del hardware). Los entornos donde
se programan aplicaciones de microcontrolador escasamente permiten simular el hardware
interno de los microcontroladores, de tal forma que nos toca simular en la cabeza el
comportamiento del hardware externo a partir de los valores de los pines del microcontrolador,
y solo algunas aplicaciones especializadas como el Proteus de la empresa Labcenter permiten
simular simultaneamente el hardware y el software, (en realidad Proteus, es un paquete que
ademas de simular el hardware y el software de la aplicacion, permite el dise
no del PCB del
circuito; se puede descargar una versi
on demostrativa de la pagina www.labcenter.com).
En el SourceBoost se puede simular el programa utilizando el icono mariquita (la palabra
en ingles para depurar es Debug, que literalmente traduce quitar insectos, y su origen se
remonta a las primeras grandes computadores que ocupaban piezas enteras con tubos de vaco,
y cuando un programa no funcionaba correctamente, se le echaba la culpa a las cucarachas que
ocasionaban cortos en los circuitos; a pesar del avance en la microelectronica, esta situacion
ha cambiado poco, sobre todo en este tipo de aplicaciones, muchas veces nos vemos tentados a
culpar al hardware de los errores de nuestro software). Estando en modo depuracion se puede
correr paso a paso, observar el valor de los registros, los puertos y generar datos de entrada

para determinar si el comportamiento del programa es el apropiado ante diferentes situaciones.


El u
ltimo paso, es descargar la aplicaci
on en la memoria del microcontrolador.

Panorama de la Herramienta AVR Studio

R1
10k

U1
C1
0.1uF

R2
330

40
39
38
37
36
35
34
33
1
2
3
4
5
6
7
8

RESET
XTAL1
XTAL2
PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK

de

D1

12
13

LED

PC0/SCL
PC1/SDA
PC2/TCK
PC3/TMS
PC4/TDO
PC5/TDI
PC6/TOSC1
PC7/TOSC2

22
23
24
25
26
27
28
29

pr

ue
ba

La herramienta AVR Studio suministrada por la empresa Atmel en su pagina web


(www.atmel.com) permite editar programas para sus aplicaciones usando microcontroladores
de esta marca, compilarlos, depurarlos, y mediante un programador compatible, descargar los
programas a la memoria FLASH del dispositivo.

PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2

AREF
AVCC

14
15
16
17
18
19
20
21

32
30

ATMEGA16

Figura 25: Diagrama esquematico para el ejemplo

AVR Studio es un ambiente integrado de desarrollo para escribir y depurar aplicaciones


AVR. Suministra una herramienta de administracion de proyectos, editor de archivos fuente y
simulador de chip.

rs

AVR Studio es un front end donde permite escribir codigo ya sea en lenguaje ensamblador
o en lenguaje C. Por defecto trae todas las libreras necesarias para ejecutar un proyecto en
lenguaje ensamblador.

Ve

Sin embargo, si se necesita escribir un proyecto en lenguaje C, se debe adicionar la herramienta


WinAVR la cual es un back end y contiene todas las funciones de la AVRlibc necesarias para
correr cualquier aplicaci
on.
Para dar un vistazo a la herramienta, se propone un ejemplo sencillo para el manejo de un
LED conectado al pin PB0 del puerto B del microcontrolador ATmega16. Su frecuencia de
reloj sera manejada por el oscilador interno a 8 MHz. Su objetivo es encenderlo y apagarlo
cada segundo.
El primer paso para desarrollar esta aplicaci
on, es tener claro el diagrama esquematico y su
objetivo. El diagrama esquem
atico se muestra en la figura 26
A continuacion se debe configurar el pin donde esta conectado el LED como salida mediante
la escritura del bit PB0 del registro DDRB. Una vez es configurado este pin como salida, la

INICIO

Como se puede ver en el diagrama esquem


atico,
para encender el LED, el microcontrolador
debe poner un estado l
ogico alto sobre el pin
1 (PB0), mientras que un estado l
ogico alto
hara que se apague. Por lo tanto la funci
on del
microcontrolador ser
a sencilla, alternar altos y
bajo sobre este pin a una rata de 1 segundo.
En la figura 26 se muestra el diagrama de flujo
para la solucion de este problema.

Encender LED

RETARDO

ue
ba

La primera parte de este programa corresponde


al bloque INICIO donde el compilador ejecuta
una serie de instrucciones de inicializaci
on y
queda listo para que el programador inicie su
programa.

Configurar PB0
como salida

Apagar LED

RETARDO

pr

Figura 26: Diagrama de flujo para encender


un LED

siguiente etapa corresponde a un ciclo infinito donde el microcontrolador nunca retornara de


su trabajo a menos que se suspenda la fuente de alimentacion y permanecera encendiendo y
apagando el LED cada segundo.

de

Para el retardo de 1 segundo, la librera AV Rlibc trae compilado un archivo llamado


< util/delay.h > donde contiene dos funciones para el manejo de retardos en milisegundos y
microsegundos, las cuales se llaman delay ms(valorm s) y delay us(valor us) respectivamente.
A continuacion se muestra el c
odigo en lenguaje C.

#i n cl u d e <a v r / i o . h>
#i n cl u d e < u t i l / d e l a y . h>

rs

i n t main ( void )
{
PORTB = 0 ; // Se g a r a n t i z a c e r o en e l p u e r t o a n t e s de s e r
// c o n f i g u r a d o como s a l i d a
DDRB = 1<<PB0 ; // Se c o n f i g u r a e l pi n PB0 como s a l i d a

Ve

while (1)
{
PORTB |= (1<<PB0 ) ;
// Coloca un ( 1 ) l
o g i c o en e l pi n PB0}
delay ms (1000);
// Genera un r e t a r d o de 1 segundo }
PORTB &= (1<<PB0 ) ; // Coloca un ( 0 ) l
o g i c o en e l pi n PB0
delay ms (1000);
// Genera un r e t a r d o de 1 segundo }
}
return 0 ;
}

Las primeras dos lneas del c


odigo corresponden a las libreras que son utilizadas durante el
programa. La librera < avr/io.h > es la que contiene la definicion de todos los registros de
entrada y salida as como constantes que son manejadas por el microcontrolador seleccionado;
sin ella, la definicion de los registro DDRB y PORTB seran desconocidas para el compilador
y por lo tanto reportara el error en compilaci
on. La librera < util/delay.h > ya menciono y
es la encargada de llamar las funciones de los retardos.

Posterior a esto se define la secci


on de c
odigo donde estara vinculado nuestro programa. Y
por u
ltimo se resalta el ciclo infinito denotado while(1) donde el microcontrolador de manera
indefinida repetira la secuencia mencionada.
Hay que resaltar, si nuestro programa involucra operaciones con la frecuencia de la CPU como
lo hace el archivo de retardos, se debe configurar el valor de la frecuencia. Este proceso se
realiza cuando hayamos escrito nuestro c
odigo en la herramienta de desarrollo.

pr

La figura 27 muestra la ventana donde el usuario crea un nuevo proyecto. En esta fase se parametriza el proyecto. Si se trata de escribir un
archivo fuente en ensamblador se selecciona la
opcion Atmel AVR assembler, o si se trata de
escribir un archivo fuente en lenguaje C se selecciona la opcion AVR GCC . A continuaci
on
se escribe un nombre para el proyecto, se escoge
la ruta y se selecciona el dispositivo o microcontrolador a utilizar.

ue
ba

Una vez nuestro programa ha sido escrito en un editor de texto cualquiera o ha sido planteado,
se procede a crear el proyecto usando la herramienta de desarrollo AVR Studio y compilar y
depurar nuestro programa.

de

Figura 27: Ventana de creacion de nuevo


Proyecto en el AVR Studio

Figura 29: Interfaz principal AVR Studio

rs

Figura 28: Ventana para escoger dispositivo a


utilizar

Ve

En la figura 28 se muestra la interfaz principal


de la herramienta AVR Studio. Una vez nuestro
programa este editado es necesario compilarlo
a traves del men
u Build o mediante F7. Si el
codigo no presenta ning
un error en compilaci
on
reporta el mensaje en la parte de debajo de la
ventana principal.
Para configurar el valor de la frecuencia del
oscilador, se debe hacer a traves del men
u Projects Configuration Options como se muestra
en la figura 29.

Figura 30: Configuracion de la frecuencia


de la CPU

Adicional en esta ventana tambien se puede observar todos los registros de entrada y salida
que posee el microcontrolador.

Durante la depuraci
on de nuestro programa, en
la ventana ubicada en la parte inferior derecha
de la ventana principal, se puede ver c
omo
cambia cada bit de los registros involucrados
en nuestro programa.

Figura 31: Ventana de Depuracion del AVR


Studio

Ve

rs

de

pr

Para terminar, se debe tener especial cuidado


con el tipo de oscilador y manejo de fusibles
a la hora de descargar el c
odigo a la memoria
FLASH del dispositivo.

ue
ba

En el men
u Debug se puede iniciar el proceso de depuracion ante la cual, la interfaz indicara sobre la ventana del c
odigo la instrucci
on que est
a proxima a ejecutarse a traves de una flecha
como se puede observar en la figura 30. De la misma manera se puede observar una ventana llamada Processor en la que se muestran las variables principales de la CPU. Si se requiere, puede
adicionarse una ventana de Watches donde se puede visualizar los valores y las ubicaciones en
la memoria de datos de las variables que hayamos definido.

Você também pode gostar