Está en la página 1de 33

Indice

1. Compiladores de C para microcontroladores Avr _______________________Pg. 69


1.1. Comparativa de Compiladores y Razones de Eleccin
2. El Entorno de esarrollo !o"t#are $E!% &tili'ado _______________________Pg.(2
2.1. Descripcin del EDS
2.2. Instalacin del EDS
2.3. Utilizacin del EDS
2.4. Particlaridades del cdi!o C para microcontroladores
2.". Con#i!racin y Utilizacin de peri#$ricos
2.%. Proceso para la pro!ramacin del microcontrolador
). *+dulos del programa del registrador ________________________________Pg. ,-
3.1. Enmeracin de los &dlos del Pro!rama
3.2. Con#i!racin de los Pines de E'S de propsito !eneral
3.3. &dlos de la Pantalla (CD
3.4. Salvado de datos en la Data#las)
3.". (a memoria EEprom
3.%. Conversin de Datos de * +its a 1% +its
3.,. Comnicacin por el Perto Serie a trav$s de la U-R.
3.*. &odos de -)orro de Ener!/a
3.0. Captra de la se1al anal!ica procedente del sensor
El !o"t#are
.esumen del Captulo
Este captulo se centra a la parte en la que se invirti ms tiempo de ejecucin en el
proyecto, que es la parte de la programacin del sistema electrnico de registro de
datos. En l se comienza haciendo una comparacin de los distintos compiladores de
C para microcontroladores Avr de que se dispone en el mercado, y una vez elegido el
nu!cc, se descri"e el entorno de desarrollo so#t$are utilizado, y se dice cmo
instalarlo y utilizarlo e#icientemente. %or &ltimo se descri"en los mdulos que #orman
el programa del registrador de datos.
Captulo 1 Motivaciones del Proyecto
1. Compiladores de C para
microcontroladores Avr
1.1. Comparativa de Compiladores / .a'ones de Elecci+n
'adas las caractersticas del cdigo que de desea"a implementar (no
requiere tiempo real y si versatilidad) de opt por utilizar un lenguaje de alto
nivel C para la escritura del cdigo del programa que correr en el
microcontrolador..
'icho cdigo es ms verstil porque es ms cmodo de programar y porque
las modi#icaciones en l son ms #ciles de realizar dado que es un lenguaje de
ms alto nivel.
*na caracterstica que hace que los microcontroladores Atmel estn
especialmente indicados para su programacin con el +enguaje C es que estn
dise,ados y optimizados para su programacin en C, y por ello presenta
caractersticas tales como -. registros acumuladores de uso general que le dan
una gran li"ertad a los compiladores de C a la hora de compilar el cdigo de C
a ensam"lador. Esta caracterstica es de vital importancia ya que
A la hora de escoger un compilador disponemos de m&ltiples opciones
disponi"les/
Codevision A01
cc!Avr
2mageCra#t Compiler
2A1 Em"edded 3or4"ench
5tros
'e estos 6 destacados el &nico que no es un producto comercial el es CC!
A01, que se trata de un programa "ajo licencia de 7o#t$are +i"re y de +i"re
'istri"ucin y uso. El resto son programas cuya licencia pueden llegar a costar
en su con#iguracin "sica 8..99:, como es el caso del compilador 2A1.
%asemos a enumerar las caracterstica de cada uno de ellos/
Code0ision A0.
El entorno 2'E (2ntegrated 'evelopment Environment) es amiga"le y muy
#cil de usar.
%0
Captulo 1 Motivaciones del Proyecto
Est "asado en proyectos, e incluye un
generador de cdigo automtico llamado
Code$izard A01 que genera todo el
cdigo necesario para la inicializacin de
los peri#ricos internos de los
microcontroladores A01, as como de
algunos peri#ricos e;ternos (usando
li"reras que tam"in incluye). 'ichas
li"reras dan soporte a un gran n&mero de
aparatos #recuentemente usados como son
pantallas +C', 1elojes de <iempo 1eal
1<C, sensores de temperatura, la *A1<, el 7%2, etc...
Codevision dispone tam"in de un programa terminal que puede enviar y
reci"ir archivos y tam"in visualizar los datos reci"idos o enviarlos en
he;adecimal o A7C22.
1CC2A0.
El compilador =* para A01 es una versin del popular
compilador =* C a la plata#orma A01.
7e ejecuta so"re >s'os o una consola >s'os "ajo
3indo$s-., o "ajo +inu;.
CC!A01 no dispone de un entorno 2'E (Entorno de
'esarrollo 2nteractivo) o las herramientas que acompa,an a
los otros compiladores. E7 tan slo un compilador C. 7in em"argo, la
'istri"ucin 3inAvr dispone de herramientas de este tipo, aunque no del
2'E, ya que si "ien el programa %rogrammers =otepad es un potente editor de
cdigo, no tiene la integracin y especializacin necesaria como para
considerarlo un 2'E propiamente.
En cualquier caso este compilador dispone de una gran ventaja so"re el resto
de compiladores, y es que es completamente gratis y su cdigo #uente est
disponi"le en source#orge.com "ajo
licencia de so#t$are li"re.
CC!A01, como todos los
compiladores =* se suministra con el
programa estndar de *ni; make, usado
para construir ("uild) los proyectos.
%ero aunque un en este compilador no
dispone de un 2'E, el programa de
Atmel A01 7tudio v-..? puede ser
utilizado como 2'E para cualquier compilador "asado en lnea de cdigo, y
dicho A01 7tudio incluso dispone de resaltado de cdigo. Esto soluciona el
pro"lema prcticamente, aunque sigue ha"iendo la necesidad de gestionar los
archivos makefile, aunque la mayora de los usuarios pueden hacerlo sin
pro"lemas.
Es de resaltar que las actuales versiones de Avr7tudio v6 en adelante no
permiten la utilizacin de CC, por tanto slo se recomienda la versin v-..?.
=o o"stante, aunque Avr7tudio puede utilizarse para la edicin del cdigo,
el citado %rogrammers =otepad tiene unas opciones de resalado de cdigo
ms potentes.
,2
Captulo 1 Motivaciones del Proyecto
IA. Em3edded 4or53enc6 07.12 "or Atmel A0.
7in duda es el compilador de ms potencia, con ms herramientas, ms
pro#esional y que genera un cdigo ms e#iciente, aunque por supuesto
tam"in es ms caro (8..99: por licencia)
@ %osee un 2'E con editor y herramientas de gestin del proyecto.
@ enera un cdigo muy optimizado que genera el mnimo n&mero de
instrucciones en ensam"aldo una vez compilado, soportando C y CAA
@ 2ncorpora archivos de con#iguracin de los peri#ricos para A01
Classic, Atmega, incluyendo sus peri#ricos internos
@Con soporte para el depurador B<A 2CE m4ll
@ 'ispone de li"reras de #unciones en tiempo real
@ 'epurador C!7%C con simulador A01 y soporte para Dard$are de
depuracin de 7istemas en <iempo real 1<57!a$are.
@ %royectos de ejemplo A01 y plantillas de cdigo
@ uas de usuario y ayuda online
ImageCra"t C Compiler
Es un compilador totalmente compati"le con A=72 C.
2mageCra#t es una empresa muy asentada
en el campo de los compiladores para
arquitecturas con microcontroladores desde
8EE6 (tiene compiladores para >otorola
F?DC88, Atmel A01, %soC, y otros)
El entorno 2'E es muy #cil de usar. Est
orientado a proyectos, e incluye un
generador de cdigo automtico llamado
Application 3izard que genera el cdigo de
inicializacin para los peri#ricos internos de
los microcontroladores A01. As pose
li"reras que dan soporte a peri#ricos como
*A1<, 7%2, EE%15> y tam"in a #unciones
de compro"acin de la pila.
,1
Captulo 1 Motivaciones del Proyecto
2. El Entorno de Desarrollo
Software (EDS) Utilizado
2.1. escripci+n del E!
El entorno de desarrollo del AvrGutter#ly utilizando en compilador =*
CC est #ormado "sicamente por dos programas/
La distribucin WinAvr, que es una recopilacin
de programas de so#t$are li"re dise,ados para
#acilitar las tareas de programacin y desarrollo de
los microcontroladores Avr.
'icha distri"ucin 3inAvr incorpora adems del
compilador gcc de consola, un editor de te;to
especialmente dise,ado para ayudar al programador
y hacer el cdigo ms legi"le mediante su resaltado
con colores.
El programador va puerto serie mprog.exe, que permite trans#erir el
programa compilado, que se encuentra en un archivo llamado main.hex, a la
memoria #lash del microcontrolador utilizando &nicamente un ca"le de tres
lneas.
2.2. Instalaci+n del E!
Instalaci+n de 4inAvr
+a distri"ucin WinAvr surge como una iniciativa para impulsar el
desarrollo de so#t$are li"re en el campo del desarrollo de los
microcontroladores Avr de Atmel, a la vez de #acilitar a sus potenciales
usuarios el conocer la e;istencia de tales herramientas, y no slo las ms
#amosas, y tam"in #acilitar su actualizacin. Es por ello que dicho paquete de
so#t$are incorpora no slo dichas herramientas, sino adems unos #icheros de
ayuda y de descripcin de cada una de las utilidades. %or supuesto, el soporte
tcnico es mayor seg&n la herramienta tenga ms importancia.
Como hemos dicho, 3inAvr instala automticamente %rogrammers
=otepad como editor de cdigo, por lo que tan slo necesitaramos
con#igurarle unos detalles a este &ltimo para mejorar su rendimiento (y esta es
una aportacin original de este proyecto).
Instalaci+n de mProg.e8e
+a distri"ucin 3inAvr incorpora todo lo necesario para la programacin de
los microcontroladores Avr, incluyendo un programa similar al mprog.e;e,
pero dado que este &ltimo tiene un inter#az de ventanas de 3indo$s, y el que
,2
Captulo 1 Motivaciones del Proyecto
trae la distri"ucin es en modo comando, se pre#iri la utilizacin del original
de Atmel. %ara cuya instalacin hu"o que instalar la suite de desarrollo de
Atmel Av7tudio, que lo incluye.
Con"iguraci+n 9ptima de Programmers :otepad
Adems con macros dise,adas para que pulsando un "otn se
a) Configurar los estilos de texto para una fcil programacin
A la hora de programar el cdigo que se desea desarrollar, %rogrammers
=otepad . presenta una caracterstica que hace el cdigo mucho ms legi"le
que el editor =otepad de 3indo$s, y aunque se necesitan unos minutos para
con#igurar el entorno gr#ico con este aspecto, merece la pena completamente.
%ara con#igurarlo es necesario ir a la Garra de >en&s de H%rogrammers
=ote%ad.H y elegir/
!!!!!I/Tools/Options/
!!!!!!!!!!I Dacer Clic4 en Styles/
!!!!!!!!!!!!!!!!!I Gase Style Settings/
Jont/ Bitstream Vera Sans Mono 7ize/ 10
(esta #uente de letra es altamente recomenda"le,
al ser de li"re distri"ucin, y equiespaciada)
!!!!!!!!!!I Dacer Clic4 en Styles/Schemes/
!!!!!!!!!!!!!!!!!I 7eleccionar el esquema (Scheme)/ C/C++
e insertar posteriormente los siguientes valores/
b) Teclas de Acceso directo
,3
Style .e3t Color 4ac56rond 7ontStyle
De#alt Black White(default)
De#alt
8)iteSpace
Black White (default)
Comment Green
Comment (ine Green
9m+er DarkGreen
:ey8ord Indigo
Strin! Dark Green Bold & Italic
C)aracter Sea Green
;perator Blue Bold
Identi#ier DarkGreen PaleYellow Bold
End;#(ineStrin!
Doc Comments Black BrightGreen
(fill to end of line)
/** */
UUID BrightGreen Bold //
Preprocessor Bold #define
<er+atim Darked Bold
Coment (ine
Doc
Green !a"ender
(fill to end of line)
///
<a"la 8/ Con#iguracin utilizada Estilos de 1esaltado de Cdigo del %rogrammers =otepad
Captulo 1 Motivaciones del Proyecto
El programa %rogrammers =ote%ad tiene algunas teclas de acceso directo de
gran utilidad, que merece la pena conocer cuando se emplea como sistema de
desarrollo y por consiguiente vamos a utilizar e;haustivamente/
2.). &tili'aci+n del E!
Con"igurar el arc6ivo ma5e"ile
%ara hacer una compilacin del proyecto en el que tra"ajamos, es necesario
crear y con#igurar adecuadamente un archivo llamado makefile, que se
encuentra en el mismo directorio de nuestro proyecto, y que contiene la
in#ormacin general del proyecto, como es el modelo de microcontrolador
para el que se va a compilar el proyecto, y los archivos de cdigo .c que lo
con#orman, adems del main.c.
%ara #acilitar esta tarea, WinAvr dispone de un programa especial de
con#iguracin de makefile, que permite su creacin en un entorno de ventanas
de 3indo$s con cajas deslizantes de opciones, y espacios para rellenar con el
listado de archivos del proyecto. =o o"stante, tam"in se puede coger un
archivo makefile de un proyecto y modi#icarlo, lo cual es "astante simple.
A continuacin se muestra un e;tracto del principio del archivo ma4e#ile,
que es la parte ms importante que hay que con#igurar/
! "" makefile ""
!
! On comman# line$
!
! make all % Make soft&are.
!
! make clean % Clean o't ('ilt pro)ect files.
!
! make coff % Con*ert +,- to .V/ CO-- 0for 'se &ith .V/ St'#io 1.x or VM,.B2.
!
! make extcoff % Con*ert +,- to .V/ +xten#e# CO-- 0for 'se &ith .V/ St'#io
! 3.04 or greater2.
!
! make program % 5o&nloa# the hex file to the #e*ice6 'sing a*r#'#e. 7lease
! c'stomi8e the a*r#'#e settings (elo& first9
!
! make filename.s % :'st compile filename.c into the assem(ler co#e only
!
! To re('il# pro)ect #o ;make clean; then ;make all;.
!
! MC< name
MC< % atmega1=>
! O'tp't format. 0can (e srec6 ihex6 (inary2
-O/M.T % ihex
,4
.eclas -ccin
#trl$%& #rea una 'arca de referencia (ara (oder de)(la*ar la (antalla a
e)e (unto r+(ida'ente (e)ta) 'arca) de referencia no )e
guardan en ning,n archi"o- (or lo .ue al )alir del (rogra'a )e
de)a(arecen)
%& Salta a la )iguiente 'arca de referencia creada
#trl$/a0 #a'0ia de una (e)ta1a de c2digo de una archi"o a otra3
%4 (ha5 .ue definirlo) Borra lo) archi"o) de )alida de la co'(ilaci2n
anterior
%6 (ha5 .ue definirlo) Guarda lo) archi"o) del (ro5ecto definido) en
el makefile 5 reali*a la co'(ilaci2n de 7)to)- de acuerdo con
lo) (ar+'etro) de makefile3
<a"la ./ Com"inaciones de <eclas de Accin 'irecta en %rogrammers =otepad
Captulo 1 Motivaciones del Proyecto
! Target file name 0&itho't extension2.
T./?+T % main
! ,ist C so'rce files here. 0C #epen#encies are a'tomatically generate#.2
S/C % @0T./?+T2.c
S/C +% timer0.c A
timer1Bso'n#.c A
timerCB/TC.c A
po&ersa*e.cA
systemBclock.cA
,C5Bf'nctions.c A
,C5B#ri*er.c A
men'B#ateBtime.cA
men'Bcomm.c A
men'B.5CBsensors.cA
'sart.c A
eeprom.c A
#ataflash.c A
('tton.c A
BC5.c A
con*ersions1=(BD(.cA
.5C.c A
ramBatmega.cA
&in#spee#.c
! Compiler flag to set the C Stan#ar# le*el.
! cD> " ;.ESF; C
! gn'D> " cD> pl's ?CC extensions
! c>> " FSO C>> stan#ar# 0not yet f'lly implemente#2
! gn'>> " c>> pl's ?CC extensions
CST.E5./5 % "st#%gn'>>
G...H
Programar C+digo C usando Programmers :otepad
a) Aspecto del Editor
El editor dispone de una pesta,a lateral en la que podemos agregar los
archivos de que est compuesto el proyecto, tal y como podemos ver en la
#igura 8. Esta lista no tiene e#ectos a la hora de compilar , siendo &nicamente
vlida la lisa de archivos que se encuentra en el archivo ma4e#ile, pero s hace
ms #cil la edicin de m&ltiples archivos, o la "&squeda de trminos l;icos el
todo el proyecto.
b) Resaltado de cdigo
,"
Jigura 8/ Aspecto del Entorno de %rogramacin con %rogrammers =otepad
Captulo 1 Motivaciones del Proyecto
Con el #in de hacer ms cmoda la programacin, %rogrammers =otepad
posee un sistema de resaltado de cdigo que es con#igura"le por el usuario.
En la pgina K se muestra la ta"la 8, con los valores con los que hay que
con#igurar el programa para que el cdigo tenga el aspecto deseado.
As los comentarios tendrn di#erente color seg&n su contenido. %ara ver los
usos que se le da a cada color se recomienda ver el captulo F, L+istado de
Cdigo del %royectoM.
c) Consejos para facilitar la programacin
7e pueden crear dentro de %rogramers =otepad unas teclas rpidas muy
&tiles, como son F4Nmake clean y F5Nmake all.
<am"in a la hora de pro"ar partes del cdigo, en lugar de "orrarlo o
comentar cada lna, se puede hacer lo siguiente/
Crear una lnea que empiece por //
y despus del cdigo que #unciona (C5'8) pero que queremos sustituir
poner otra lnea con //
Escri"ir el nuevo cdigo(C5'.) a partir de la lnea siguiente y tras l crear
una nueva lnea con la cadena ///.
'e esta #orma, tal y como est escrito, C5'8 ser compilado, y C5'. est
comentado. C cuando queramos lo contrario, slo tendremos que quitar el la
primera "arra inclinada de la primera lnea para que C5'. se compile y
C5'8 se comente, como se puede ver en a #igura ..
,%
Jigura ./ Ejemplo de comentarios de cdigo que sirve para activar partes de cdigo que se quieren pro"ar sin
"orrarlas
Captulo 1 Motivaciones del Proyecto
2.7. Particularidades del c+digo C para microcontroladores
A continuacin e;plicamos para qu sirven tres tipos de pre#ijos que se
ponen en las de#iniciones de ciertas varia"les y que tienen repercusiones
importantes en el resultado #inal e la implementacin del cdigo en
ensam"lador/ const, *olatile y static.
const
+a de#inicin LconstM sirve para de#inir una cadena de caracteres utilizando
slo memoria 15> del microcontrolador, en el caso del At>ega8FE, no
memoria 1om, sin la memoria #lash destinada al cdigo de programa, que a
todos los e#ectos cuando el programa est en #uncionamiento es como si #uese
memoria 15>.
Esta de#inicin tiene utilidad cuando se necesitan muchas cadenas de
caracteres o ta"las que nunca van a ser modi#icadas. En ese caso no hay
necesidad de malgastar memoria 1A> almacenando cadenas constantes.
+a #orma ms o"via de hacer esta declaracin (aunque esta #orma es
incorrecta) sera/
!incl'#e Ia*r/pgmspace.hJ
7?MB7 arrayGCH 7/O?M+M %
K
;-oo;6
;Bar;
LM
int main 0*oi#2
K
char ('fG1CHM
strcpyB7 0('f6 arrayG1H2M
ret'rn 0M
L
%ero el resultado de este cdigo no es el que se "usca"a.
'e esta #orma (incorrecta) o"tendramos una ta"la de cadenas de caracteres
almacenada en 15>, y una cadena individual almacenada en 1A> (en la
seccin .#ata de la memoria).
%ara o"tener el resultado realmente "uscado, se necesita un cdigo as/
!incl'#e Ia*r/pgmspace.hJ
const char fooGH 7/O?M+M % ;-oo;M
const char (arGH 7/O?M+M % ;Bar;M
7?MB7 arrayGCH 7/O?M+M % K
foo6
(ar
LM
int main 0*oi#2
K
char ('fG1CHM
strcpyB7 0('f6 arrayG1H2M
ret'rn 0M
L
donde 7?MB7 es una de#inicin macro (macro de#inition) usada en lugar del
siguiente cdigo/
7?MB7 %% const progBchar
Esta macro se usa para declarar una varia"le que es un puntero a cadena en
el espacio de memoria destinada a memoria de programa/
!#efine 7?MB7 const progBchar
,,
Captulo 1 Motivaciones del Proyecto
volatile
+a de#inicin de L*olatileM se utiliza como pre#ijo para que el programa
reconozca que esa varia"le ser actualizada mediante una rutina de
interrupcin.
As, cuando se utiliza un optimizador, en un "ucle como el siguiente/
'intDBt flagM
...
&hile 0flag %% 02
K
...
L
el compilador tradicionalmente optimizara el cdigo de manera que
ignorara la condicin dada por la "andera como siempre cierta, ya que dara
igual, ya que analizando del cdigo se o"serva que nada dentro del "ucle
puede cam"iar el valor de la "andera.
%ara decirle al compilador qe es una varia"le que puede ser modi#icada
#uera del m"ito del anlisis de la ruta de cdigo (por ejemplo mediante una
rutina de interrupcin), la varia"le de"e ser declarada tal que as/
*olatile 'intDBt flagM
static
+as varia"les de#inidas como locales a una #uncin desaparecen al #inal de la
ejecucin de dicha #uncin. E manera que cuando se llama a esa #uncin de
nuevo, se crea un nuevo espacio de almacenamiento para esa varia"le y los
valores son reinicializados. As que si se pretende que el valor de una varia"le
local se e;tienda y no se pierda de una llamada a otra de esa #uncin a lo largo
de un programa, se puede de#inir esa varia"le local como LstaticM.
+a inicializacin de las varia"les static se hace slo en la primera llamada a
la #uncin que las contiene, y ene l resto de llamadas no se hace, y conserva el
valor de la &ltima llamada. +a di#erencia respecto de las varia"les glo"ales es
que las static slo pueden ser accedidas dentro del m"ito de la #uncin que
las llama, y por tanto otras #unciones pueden tener el mismo nom"re de
varia"le, sin que se inter#ieran unas con otras. Adems esta particularidad
ayuda para la "&squeda de errores, ya que la varia"le no puede ser
modi#icada #uera de esa #uncin, y por lo tanto all es donde de"e "uscarse
dicho error.
static char letraM
2.5. Con"iguraci+n / &tili'aci+n de peri";ricos
En entornos con 2'E se dispone de generadores automticos de cdigo,
lamenta"lemente en gcc no se dispone de tal #acilidad, aunque s pueden
encontrarse li"reras de inicializacin y manejo e determinados peri#ricos,
pero siempre se ha de mirar da hoja de catlogo del microcontrolador para
con#igurarlo adecuadamente.
=o o"stante en el presente proyecto se ha tenido especial cuidado en
intentar hacer el proyecto lo su#icientemente generalista como para que su
cdigo pueda ser reutilizado en otros proyectos con la placa AvrGutter#ly, y
otras #uncionalidades, razn por la cual se invirti mucho tiempo es
estructurar lo todo modularmente y por #uncionalidades, tal y como se ver en
el siguiente apartado.
,*
Captulo 1 Motivaciones del Proyecto
2.6. Proceso para la programaci+n del microcontrolador
%ara programar el microcontrolador con el cdigo de nuestro programa se
de"e compilar dicho cdigo haciendo/
make clean N 1ealiza una +impieza de archivos de una
construccin del proyecto anterior.
make all N 1ealiza una compilacin del cdigo del proyecto
utilizando make.
En este punto, en el directorio del proyecto se han generados dos
archivos que son los que ha"ran de trans#erirse al microcontrolador, y
que son main.hex y main.eep, archivos de memoria de programa y de
memoria EEprom respectivamente.
%ara trans#erir dichos archivos hemos de ser muy meticulosos en el
procedimiento, que que aunque es "astante simple, como se han de
sincronizar el %c con el AvrGutter#ly, hay que pulsar los "otones en su
momento justo. %or ello de"emos poner especial en hacer lo siguiente/
Alimentar con -.-v la placa AvrGutter#ly
%ulsar el "otn de 1eset (si la placa ya esta"a alimentada, si
la aca"amos de alimentar no es necesario)
Al mismo tiempo pulsar el "otn +nter del Boystic4
(presionarlo hacia adentro) y Dacer do"le clic4 so"re el icono
de mprog.exe (ejecutarlo).
7i esto se hizo correctamente, y el ca"le que une %C y
AvrGutter#ly est "ien construido, entonces en la pantalla del
%C de"er aparecer la ventana del programa mprog.exe donde
hay un espacio para elegir el archivo main.hex que se desea
trans#erir.
*na vez elegido el archivo a trans#erir, slo hay que pulsar el
"otn aceptar, para iniciar el "orrado, la programacin y la
veri#icacin de la correcta programacin del sistema.
Concluida dicho proceso, el programa nos dir si culmin
satis#actoriamente. En cualquier caso hay que cerrar la ventana
del programa para poder continuar, y hay que reinicializar el
microcontrolador #orzando un 1eset.
7i todo se hizo correctamente, el sistema est programado.
,0
Captulo 1 Motivaciones del Proyecto
3. Md!los del pro"rama del
re"istrador
).1. Enumeraci+n de los *+dulos del Programa
El programa del registrador de datos consta de los siguientes mdulos
#uncionales/
El >dulo %rincipal (es un programa que se ejecuta constantemente
y que cada vez que aca"a vuelve a empezar, y desde l se activa el
#uncionamiento de los restantes mdulos de programa (su"programas)
que a continuacin listaremos).
El >dulo de >anejo y especi#icacin de las #uncionalidades de los
pines del microcontrolador y de la placa de desarrollo.
El >dulos de >en&s de Carga de #unciones e 2nteraccin con el
usuario
El >dulos de estin de <emporizadores, 1eloj en <iempo 1eal y
modos de ahorro de energa
El >dulos de Adquisicin de 'atos
El >dulo de visualizacin de datos en el 'isplay +C' de F dgitos
del Gutter#ly
El >dulo *7A1<
El >dulo de digitalizacin de se,ales analgicas
El >dulo de manejo del Boystic4
El >dulos de Almacenamiento de 'atos
El >dulo de manejo de la 'ataJlash
El >dulo de manejo de la EEprom
El >dulos Au;iliares de conversin de #ormato de datos
El >dulos de procesado estadstico de los datos del encoder (sensor
de viento).
).2. Con"iguraci+n de los Pines de E<! de prop+sito general
A la hora de codi#icar una nueva aplicacin para el AvrGutter#ly es
importante conocer qu pines estn li"res y pueden ser utilizados de propsito
general. Esta caracterstica, que parece una tontera, tienen especial
importancia en la placa AvrGutter#ly porque la mayora de sus pines se
encuentran ocupados por la pantalla +C' de .. pines, utilizando la
#uncionalidad del peri#rico interno del At>ega llamado +C'driver .
%or ello, el uso de esta pantalla utilizando dicho driver limita muchsimo las
aplicaciones posi"les con el At>ega. C puede suceder que se desee utilizar un
*2
Captulo 1 Motivaciones del Proyecto
peri#rico interno del At>ega como el Comparador Analgico y no se puede
porque los pines de entrada de dicho peri#rico estn siendo utilizados con
otra #uncionalidad.
%or estos motivos se crey de importancia el poder plasmar en el mismo
cdigo del programa, aunque sea como comentario, la situacin del patillaje
de la placa AvrGutter#ly. En la #igura - se puede ver una captura de pantalla
del aspecto del comentario que s encuentra en el archivo pinBmanagement.h
).). *+dulos de la Pantalla =C
%ara el manejo de la pantalla +C' se utilizan dos archivos/
El de ms alto nivel es ,C5Bf'nctions, que son unas #unciones genricas
para cualquier pantalla +C' en modo al#anumrico.
+a #unciones de ms "ajo nivel se encuentran el archivo ,C5B5ri*er, que
contiene #unciones espec#icas para la pantalla +C' que posee de #"rica la
placa AvrGutter#ly (en caso de poner otra pantalla ha"ra que crear otras
#unciones).
Con las #unciones que tenan implementados los controladores de la pantalla
+C' &nicamente se podan activar los seis dgitos al#anumricos que aparecen
en la #igura anterior, dado que los dgitos que estn en "lanco no estn
conectados #sicamente al peri#rico 'river+C'.
7in em"argo, pese a que la hilera de n&meros y sus respectivos su"rayados s
estn conectados #sicamente con dicho peri#rico, su activacin no viene
*1
Jigura 6/ 7egmentos de la pantalla +C' que es posi"le activar
Jigura -/ +istado de pines y esquema de su distri"ucin con su con#iguracin
Captulo 1 Motivaciones del Proyecto
implementada en el programa controlador, por lo que se procedi a la
ela"oracin de #unciones que ha"ilitasen dicha #uncionalidad/
Ello se consigui manipulando los registros de los segmentos +C' y
dndole valores a los "its que no se usa"an siguiendo un mtodo de prue"a y
error.
%ara ello se tuvo que hacer un estudio intensivo y algo de ingeniera inversa
para conocer la #uncionalidad de cada "it de dicho registro, que a continuacin
pasamos a descri"ir/

'icho registro lo interpretaremos como una ta"la cuyas #ilas las
denominaremos por ,C55/xx, y cuyas columnas las llamaremos por un
n&mero de "it (de 9 a O).
Ahora se esta"lecer una correspondencia entre los "its de este registro y los
segmentos de cada dgito del +C' (ver Jigura F)/ as pues
las columnas 9, 8, . y - se corresponden con segmentos de los dgitos 9, . y 6,
y las columnas 6, K, F y O se corresponden con segmentos de los dgitos 8, - y K.
*2
Jigura F/ 1egistro de los segmentos +C' (en el peri#rico driver +C')
Jigura K/ 2nte#az entre Gits del 1egistro +C' y segmentos del +C'
Captulo 1 Motivaciones del Proyecto
%or poner un ejemplo de correspondencia, podemos decir que los segmentos
que se corresponden con el dgito 9 son/
!egmentos especiales del =C
*tilizando la in#ormacin de la #igura F, y contrastndola con la de la <a"la -,
y utilizando un procedimiento que inicialmente #ue a prue"a y error, ya que
en ninguna hoja de catlogo vena especi#icado que los segmentos P e C se
pudiesen utilizar, se de#inieron unos nuevos segmentos especiales gr#icos del
+C' como son los n&meros y los su"rayados del 'isplay que incorpora el
AvrGutter#ly.
+a in#ormacin relativa a las mscaras y las #unciones para la utilizacin de
tales segmentos se puede encontrar en la seccin deM'isplay +C'M del
captulo F L+istado de CdigoM.
'e esta #orma de pueden activar o desactivar individualmente los siguientes
segmentos/
los n&meros 8,. 6, K, E y 89,
los su"rayados 8,.,-,6,E,89, y
el n&mero - conjuntamente con el su"rayado K.
:uevos Caracteres =C
Adems, utilizando las posi"ilidades que permitan los segmentos
al#anumricos del +C', se dise,aron nuevo caracteres para mostrar mejor la
in#ormacin de pantalla.
As se crearon LmM , LQM y LsM para la in#ormacin en mQs.
C unos caracteres que simulan un rotor en movimiento para dar sensacin de
captura de datos.
+os resultados de estas de#iniciones se pueden ver en la ta"la 6 de la pgina
8F, en la que a partir de los segmentos de cada dgito del +C', y haciendo una
com"inacin de stos com"inndola en una mscara, se logran dise,ar estos
nuevos caracteres especiales.
*3
<a"la -/ Ejemplo de correspondencia entre los segmentos del +C' del dgito 9 y los "its del registro de
segmentos del +C' que le corresponden
7ila +it 3 +it 2 +it 1 +it 2
#ila (CDDR1 S+?1110N2 S+?1100O2 S+?10>0P2 S+?10D0.2
#ila (CDDR% S+?C110,2 S+?C100-2 S+?C0>0Q2 S+?C0D0B2
#ila (CDDR11 S+?1110,2 S+?1100+2 S+?10>0?2 S+?10D0C2
#ila (CDDR1% S+?0110M2 S+?010072 S+?00>0E2 S+?00D052
Jigura O/ 7egmentos especiales del +C'
Captulo 1 Motivaciones del Proyecto
*4
Sim+olo &=scara >&P9D? >(E6C? >@7A4? >:BC-?
*
0x+..D 1110 1010 1010 1000
/
0x300D 0100 0000 0000 1000
8
0xD0C0 1000 0000 0010 0000
'
0xC-00 0010 1111 0000 0000
)
0x>D00 1001 1000 0000 0000
9
0x1000 0001 0000 0000 0000
:P;
0xC0D0 1100 0000 1000 0000
G<=
0xCC0D 0010 0010 0000 1000
>P!
0x3DC0 0100 1000 0010 0000
G:;
0xDCD0 1000 0010 1000 0000
>=<
0xC0CD 0010 0000 0010 1000
:!P
0x3DD0 0100 1000 1000 0000
=G;
0xDC0D 1000 0010 0000 1000
<!>
0xCDC0 0010 1000 0010 000
<a"la 6/ =uevos caracteres al#anumricos creados especialmente para este proyecto
Captulo 1 Motivaciones del Proyecto
%or &ltimo en lo relativo al +C' se descri"en las #unciones que se tienen en
sendos archivos de programacin del +C'/
Funciones deLCDDriver.h Manejador del Display espec!ico "ue
incorpora el Avr#utter!ly
,C5BFnit02M Fniciali8a la pantalla ,C5 y prepara para s' 'so
,C5BRrite5igit0C2M +scri(e 'n carScter en 'no #e los seis #Tgitos #el ,C5
//SF?E.,0SF?B,C52""J ,C5 Fnterr'pt /o'tine
,C5BE'm1BOn02M // +ECF+E5+ el E'meroB1 #el ,C5
,C5BE'm1BOff02M
,C5B,e#1BOn02M // +ECF+E5+ el ,e#B1 #el ,C5
,C5B,e#1BOff02
Funciones de LCDFunctions.h R Junciones genricas para cualquier 'isplay
con caracteres al#anumricos.
*oi# ,C5Bp'tB'D( 0'nsigne# char #ata2M
*oi# ,C5Bp'tB'1=( 0'nsigne# int #ata2M
*oi# ,C5Bp'tsBf0const char p-lashStr6 char scrollmo#e2M
*oi# ,C5Bp'ts0char pStr6 char scrollmo#e2M
*oi# ,C5Bp'tc0'intDBt #igit6 char character2M
C'an#o se carga en ellos n'e*os #atos6 sUlo cam(iarSn los (ytes especifica#os
para V'e se so(reescri(an6 no *iWn#ose afecta#os los restantes (ytes por #icha
acciUn.
*oi# ,C5B<p#ate/eV'ire#0char 'p#ate6 char scrollmo#e2M
*oi# ,C5BClear0*oi#2M
*oi# ,C5BColon0char sho&2M
*oi# ,C5B-lash/eset0*oi#2M
char SetContrast0char inp't2M
7e evita hacer una descripcin pormenorizada de las unciones de"ido a que
en el listado de cdigo del programa, en el captulo F, se comenta
e;haustivamente el cdigo diciendo en el enca"ezado de cada #uncin cual es
su #uncionalidad.
*"
Captulo 1 Motivaciones del Proyecto
).7. !alvado de datos en la ata"las6
escripci+n del >uncional de la ata"las6
+a placa de desarrollo AvrGutter#ly incorpora
como ya hemos mencionado un dispositivo de
memoria e;terna no!voltil con capacidad de
K8.SGytes y con comunicacin a travs del
puerto 7%2 con el At>ega.
A la hora de implementar el so#t$are especial
de manejo de este dispositivo e;terno es
necesario sa"er algunas particularidades de su construccin herd$are que a
continuacin se e;ponen/
El .T3X5B031B incorpora dos "u##ers "idireccionales para e;pedir el #lujo de
datos hacia y desde el dispositivo.
Cada "u##er tiene una longitud de .F6Gytes (la misma longitud que las
pginas en que est dividida la memoria).
Estos "u##ers son memoria static 1A> (voltil) y con#ieren una especie de
memoria cach durante una operacin de programacin o "orrado.
%or lo tanto a la hora de almacenar o recuperar datos de la memoria 'ata#lash
no!voltil, dicha in#ormacin pasar por uno de estos "u##ers antes de
trans#erirse al At>ega por el inter#az 7%2.
%or ello se crearon tres capas de manejo cuyas #uncionalidades son/
la capa $ que maneja el inter#az 7%2,
la capa % que gestiona la trans#erencia de datos entre el At>ega y uno
de los "u##ers, y la trans#erencia entre uno de los "u##ers y el "anco e
memoria 'ata#lash.
La capa & que maneja la 'ata#lash como si se tratase de una pila de
almacenamiento de in#ormacin en paquetes de ? "its con ndices
totalmente transparente al usuario, que se limita &nicamente a enviar o
reci"ir datos, y la gestin de pginas es completamente automtica.
*%
Jigura E/ Junciones de almacenamiento y estructura de la memoria 'ataJlash
P=!ina 224,
&?@
datoA0
4##er D2
B
&?@
A0it)
Buffer Write B5te
B u f f e r e a d B 5 t e
Buffer9to9Page
datoA0
4##er D1
B
&?@
A0it)
&?@
&?@
P=!ina 2
B
&?@
A0it)
&B4A
(+gina)
%la)h
P a g e 9 t o 9 B u f f e r
& 0uffer)
)C;
Jigura ?/ 'ata#lash .T3X5B031B
montada en la %laca AvrGutter#ly
SPI
Captulo 1 Motivaciones del Proyecto
En la <a"la K se muestra las de#iniciones de las #unciones de manejo de la
'ata#lash separadas por capas, en las que se puede apreciar los parmetros
necesarios para la utilizacin de cada una.
>unciones de Escritura / =ectura
Como ya hemos mencionado, las #unciones de la capa - hacen una gestin
integral del almacenamiento y restaurado secuencial de datos en el dispositivo
de almacenamiento no voltil. Estas #unciones 'JT3rite?() y 'JT1ead?()
almacenan o leen un Gyte de in#ormacin y preparan el sistema para que
pr;ima vez que sean llamadas se se coloque la in#ormacin en el Gyte que
secuencialmente se encuentra despus, aunque se cam"ie del Gyte &ltimo de
una pgina de memoria al primer Gyte de la siguiente pgina.
%ero los datos de memoria que se guardarn en este proyecto (y en general)
sern de 8F"its (.Gytes), y no de ?"its(8Gyte) , por lo que se crearon unas
#unciones au;iliares que se utilizan en varias #unciones de peri#ricos del
cdigo dedicadas a la conversin de datos de ?"its a datos de 8F"its, y
viceversa. Estas #unciones de descri"en en el siguiente apartado (Conversin
de 'atos de ? "its a 8F "its) de la pg. ... Con lo cual para almacenar en
memoria un dato de 8F"its, slo ha"ra que llamar previamente a una de estas
#unciones y
Encapsulado de los datos para su almacenamiento
A la hora de escri"ir los datos en la memoria 'ata#lash d almacenamiento
masivo no!voltil, se hace necesario un sistema que los ordene.
A#ortunadamente tanto el proceso de lectura como el de escritura son
secuenciales (siempre se escri"irn o leern los datos de menor a mayor
direccin de memoria), lo que #acilita considera"lemente la la"or.
%or otro lado, aunque gracias a esta caracterstica el pro"lema se reduce, hay
que considerar los distintos datos que se escri"irn en dicha memoria, y que
una vez escritos, al leerse de"e sa"erse qu signi#ican los "its que se tienen, es
decir, se de"e tener capacidad para interpretar los datos tras ser recuperados.
%or ello se desarroll la idea de almacenar los datos en paquetes o
contenedores de in#ormacin, cada uno de ellos con un cdigo gracias al cual
se conoce implcitamente su contenido y su longitud.
As pues, para esta aplicacin se dise,aron 6 tipos de contenedores/
+os que #ijan una re#erencia temporal L#echaM (se escri"e uno al da y tienen
una longitud de .Gytes)
%echa D&BE
B F & @ 4 6 ? G A H FB FF F& F@ F4 F6
2 1 I I I ;e) 5 dia ('e)F&-dia@BJF&@B) DFF0E
*,
///Funcions Layer3:______________________________________________________
unsigned char 5-BRriteD (unsigned char B'fferEo ,unsigned int *TopB'f ,unsigned int *7ageE'm ,unsigned char 5ata );
unsigned char 5-B/ea#D (unsigned char B'fferEo ,unsigned int *7ageE'm ,unsigned int *TopB'f ,unsigned int 7ageE'm,7,
unsigned int TopB'f,7 ,unsigned char *5ata );
///Funcions Layer2:______________________________________________________
oid B'fferBToB7age (unsigned char B'fferEo ,unsigned int 7age.#r );
oid 7ageBToBB'ffer (unsigned int 7age.#r ,unsigned char B'fferEo );
oid B'fferBRriteBByte (unsigned char B'fferEo ,unsigned int Fnt7age.#r ,unsigned char 5ata );
unsigned char B'fferB/ea#BByte (unsigned char B'fferEo ,unsigned int Fnt7age.#r );
///Funcions Layer!:______________________________________________________
oid 5-BS7FBinit (oid);
unsigned char 5-BS7FB/R (unsigned char o'tp't );
unsigned char /ea#B5-Bstat's (oid);
<a"la K/ 'e#iniciones de las #unciones de manejo de la 'ata#lash separadas por capas
Captulo 1 Motivaciones del Proyecto
+os que #ijan una re#erencia temporal horaria y registran la temperatura
am"iente LDoraT<empM(se escri"en .6 al da y tienen una longitud de .Gytes)
>ora /e'(D&BE
B F & @ 4 6 ? G A H FB FF F& F@ F4 F6
1 2 crc >ora(Bh-&@h) D60E /e'(eratura(I&6K-$?BK) DA0E
+os que #ijan una re#erencia temporal implcita y registran los datos
estadsticos elicos correspondientes a un perodo de 89 minutos (la media,
varianza y valor m;imo d la velocidad del viento en ese perodo), reci"e el
nom"re de L'atosM (se escri"en 866 al da y tienen una longitud de 6Gytes)
Dato) D4BE
B F & @ 4 6 ? G A H FB FF F& F@ F4 F6
1 1 crc ;edia DH0E Larian33
333 "arian*a DH0E Lalor9(ico DH0E
%or &ltimo hay un paquete de datos que se ha dejado reservado para
almacenar datos varios, y para #uturas mejoras del sistema.
M)(ecial D&BE
B F & @ 4 6 ? G A H FB FF F& F@ F4 F6
2 2 o( o(
%ara el correcto manejo de todos estos paquetes, se crearon unas #unciones
de escritura y lectura que gestionan la memoria 'ata#lash en #orma de
paquetes, y sin las cuales, el contenido de dicha memoria se convierte en una
ristra de Gytes sin sentido. 'ichas #unciones se encuentran en el archivo
#fBencaps'lation.c
+as cuatro primeras #unciones son de escritura de paquetes en la 'ata#lash, y
las tres es una #uncin de lectura que e;trae los datos del los paquetes
interpretndolos, devolviendo como salida el tipo de datos ledo, y
actualizando los parmetros de salida con los datos e;trados, de manera que
seg&n #uese el tipo de contenedor de datos se actualizan unos parmetros u
otros, y despus con una condicin LifM se procesan &nicamente lo datos que
se e;trajeron.
Capacidad de Almacenamiento de atos E+licos
%ara determinar dicha capacidad, se han de hacer unos clculos sencillos que
pasamos a enumerar/
Cada 89 minutos se almacena en memoria 'ata#lash un contenedor de
datosU6GV, por lo que cada da se registran/
4
Bytes
Contenedor
6
Contenedores
Hora
24
horas
dia
=576
Bytes
dia
Cada hora se guarda un contenedor de hora y de temperatura U.GV
**
//-'nciones #e ay'#a a la escrit'ra en el 7aV'etes 5ata-lashBBBBBBBBBBBBBBBBBBB

'nsigne# char 5-BRriteB,ogs 0'int1=Bt 5ata1=BMean6 'int1=Bt 5ata1=BVari6
'int1=Bt 5ata1=B7eak2M
'nsigne# char 5-BRriteBQo'r 0*oi#2M
'nsigne# char 5-BRriteB5ate 0*oi#2M
'nsigne# char 5-BRriteBRin# 0'int1=Bt 5ata1=BRin#2M //7aV'ete +special
'nsigne# char 5-B/ea#B,ogs 0'int1=Bt 5ata1=BMean6 'int1=Bt 5ata1=BVari6
'int1=Bt 5ata1=B7eak6 'intDBt *hora6
'intDBt *temperat6 'intDBt 5ataType2M
Captulo 1 Motivaciones del Proyecto
2
Bytes
Contenedor
1
Contenedores
Hora
24
horas
dia
=24
Bytes
dia
Cada da se almacena un contenedor registrando la #echaU.GV
2
Bytes
Contenedor
1
Contenedor
dia
=2
Bytes
dia
+uego cada da se almacenan/

contenedores
da
=576482=628
Bytes
da
Con lo que como la memoria 'ata#lash tiene 6>"its de capacidad
4 Mbits
8
bits
Byte
= 512KBytes
puede almacenar

512 KBytes
628
Bytes
dia
=815dias decapacidad=ms de2aos decapacidad
Adems el intervalo de registro de los valores estadsticos de la media y la
varianza puede ser con #igura"le/
).5. =a memoria EEprom
7e trata de otro tipo de memoria no voltil, pero a di#erencia de la 'ataJlash,
esta memoria es un dispositivo interno en el At>ega.
%ara su utilizacin se ha estructurado en dos capas/
La capa $ posee las #unciones ms "sicas de manejo de la transmisin de la
in#ormacin a la EEprom, y son de "ajo nivel.
La capa % utiliza las #unciones de la capa 8 para realizar tareas ms
complejas, como la 'estin da datos del n()ero de p*'ina inicial+ !inal y
(lti)o utili,ado de la DataFlash,
5-Sa*eBCtrlFnfo 02
5-Sa*eB-7BFnfo 02
5-,oa#BCtrlFnfo 02
y la 'estin de varios arrays de in!or)acin de longitud con#igura"le
destinados a 'uardar te-tos editables con el joystic. del sistema como son el
nombre del emplazamiento donde se situar al registrador de datos, un nmero de
telfono de asistencia tcnica, o el nombre de la empresa instaladora.
++BSa*eBTa(le<int02
++B,oa#BTa(le<int02
*0
Intervalo de
Re!istro
4ytes'dia Capacidad
#ada FB 'inuto) 6G?$4A$& ?&A B5te)/dia AF6 dia) J & a1o) 5 & 'e)e)
#ada 6 'inuto) (&*6G?)$4A$& F&B6 B5te)/dia 4&4 dNa) J F a1o) 5 & 'e)e)
#ada & 'inuto) (4*6G?)$4A$& &@64 B5te)/dia &FG dNa) J G 'e)e)
<a"la F/ Capacidades de Almacenamiento de 'atos Elicos seg&n el perodo estadstico elegido.
Captulo 1 Motivaciones del Proyecto
En la <a"la O se adjunta un +istado de #unciones de manejo de la EEprom
u"icadas en el archivo eeprom.h
).6. Conversi+n de atos de , 3its a 16 3its
En distintas #unciones del programa se hace necesaria la trans#erencia,
visualizacin o almacenamiento de datos de 8F"its, mientras que la
arquitectura del Avr es de ?"its, y por tanto las #unciones estndar estn
adecuadas a ese ancho de datos. %or ello se hicieron necesarias estas dos
#unciones /
Con*1=(BtoBCxD(02 convierte un dato de 8F"its en dos datos de ?"its
haciendo una copia del de 8F"its, desplazando los "its de una copia ?
posiciones hacia el "it menos signi#icativo, y haciendo un LcastM de am"as
varia"les a ?"its. El diagrama conceptual del proceso se muestra en la Jigura
89.
Con*CxD(BtoB1=(02 convierte dos datos de ?"its haciendo en un dato de
8F"its tomando am"os datos, hacindole un LcastM a am"os a LintM,
desplazando el "it superior ? posiciones hacia el "it ms signi#icativo,
sumando de #orma lgica am"as varia"les de 8F"its. El diagrama conceptual
del proceso se muestra en la Jigura 88.
02
Jigura 89/ Conversin de un 'ato de 8F"its (.Gytes) a dos datos de ?"its (8Gyte)
Data16
up down
Data16
up down
Aux16
up down
up up
igual
>>8
up
down
cast
cast
/// -'nction 7rototypes$B0C.7. C2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
'nsigne# char ++7/OMB/ea#BStr0'nsigne# int ++BStartBa#r6 char pB'ffer/am6
char /.MBMaxBn'mB(ytes 2M
*oi# ++7/OMBRriteBStr 0char pB'ffer/am6 'nsigne# int ++BStartBa#r6
char ++BMaxBn'mB(ytes2M
/// -'nciones #e Mane)o #e la informacion #e control #e la 5ata-lash me#iante
la ++7/OMBB0C.7. C2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
*oi# 5-Sa*eBCtrlFnfo 0'nsigne# int TopB'f,76 'nsigne# int ,ast7age 2M
*oi# 5-Sa*eB-7BFnfo 0'nsigne# int -irst7age2M
*oi# 5-,oa#BCtrlFnfo 0'nsigne# int TopB'f,76 'nsigne# int ,ast7age6
'nsigne# int -irst7age2M
*oi# ++BSa*eBTa(le<int0'nsigne# int Ta(la<int6 'intDBt iMaxBTa(la2M
*oi# ++B,oa#BTa(le<int0'nsigne# int Ta(la<int6 'intDBt iMaxBTa(la2M
/// -'nction 7rototypes Special for atMega1=>$BBB0C.7. 12BBBBBBBBBBBBBBBBBB
'intDBt ++7/OMB/ea#D( 0const 'int1=Bt a##r2M
*oi# ++7/OMBRriteD( 0'int1=Bt a##r6 'intDBt *al2M
<a"la O/ +istado de #unciones de manejo de la EEprom u"icadas en el archivo eeprom.h
Captulo 1 Motivaciones del Proyecto
%ara pro"ar el correcto #uncionamiento de la li"rera creada, as como la
li"rera de la 'ataJlash y la li"rera *A1<, se crearon m&ltiples versiones de
un programa de ejemplo cuya #uncionalidad era guardar en memoria
'ata#lash 8999 n&meros de 8F"its y ver el tama,o que ocupan en sta, as
como enviarlos va uart para ver que se gra"aron correctamente.
8999n&meros ; .GytesQnum N .999Gytes !!I O pginas de .F6 Gytes y
8 pgina con 8K.Gytes (9!8K8)ocupados
En dichos programas se utiliza"an intensivamente dichas #unciones de
conversin, ya que las transmisiones serie se hacan en modo carcter (?"its), y
en la 'ataJlash se almacena la in#ormacin en Gytes, por lo tanto en am"as se
utiliza"an conversiones de 8F a ?"its.
).(. Comunicaci+n por el Puerto !erie a trav;s de la &A.?
Con"iguraci+n / mane@o de la &A.?
Como en anteriores peri#ricos, la estructura se organiza en varias capas, en
este caso en dos/
La capa $ hace las #unciones de ms "ajo nivel como son/
la inicializacin del peri#rico a la velocidad Gaud1ate deseada (esto
es importante hacerlo "ien, y con#igurar el sistema que est al otro
lado e la comunicacin con el mismo Gaud1ate),
+a desha"ilitacin del peri#rico (esto es interesante para el ahorro de
energa),
y el envo y recepcin de caracteres por el puerto serie, que es su
principal cometido.
En la capa % se encuentran #unciones ms especializadas, como son/
el envo de cadenas de caracteres ledas directamente de una zona de
memoria 1am de datos, o "ien en memoria Jlash de programa,
01
Jigura 88/ Conversin de dos datos de ?"its (8Gyte) a un 'ato de 8F"its (.Gytes)
Data16
0000 down
0000 up
up 0000
up up
Mask 0x00FF
<<8 up8b
down8b
cast cast
0000 down
up down
cast
O
R
Mask 0xFF00
///BBBC.7. 1BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
*oi# <S./TBFnit0'nsigne# int (a'#rate2M//Fniciali8a la <./T
*oi# <S./TBClose0*oi#2M //5esha(ilita la <./T
char <S./TBTryC/x0char #ata2M //Fntenta reci(ir 'n carScter por /sC1C
*oi# <S./TBp'tc0char #ata2M //+n*Ta 'n carScter por /sC1C
<e;to 8/ Junciones de la Capa 8 de la *7A1<
Captulo 1 Motivaciones del Proyecto
el envo de n&meros enteros de ?"its, y de 8F "its
el envo del valor de una velocidad del viento genrica ( con un
#ormato de dos dgitos enteros y un dgito decimal 99.9mQs).
el envo de datos correspondientes a la #echa (minuto, hora, da, mes,
a,o).
El envo del carcter nueva lnea con el que el e;tremo receptor pasa
a la lnea siguiente si se encuentra en modo de Lconsola terminalM.
0olcado de datos / comunicaci+n serie entre el
anali'ador / el registrador
Como ya hemos indicado anteriormente, para que la comunicacin sea
e#ectiva, los sistemas que estn a am"os e;tremos de sta de"en estar
con#igurados con los mismos parmetros de velocidad y tipos de datos.
%ara la comunicacin entre el prototipo 1v8 y un %c se los parmetro son/
En la Jigura 8. se pueden ver los parmetros de con#iguracin del sistema
para con#igurar el programa Dyperterminal de 3indo$s, pero para un mejor
manejo de la comunicacin se recomienda utilizar el programa GrayWs
<erminal, que es un programa gratuito, especialmente dise,ado para hacer
prue"as y pro"ar la comunicacin entre sistema, permitiendo el visionado de
los datos tanto en he;adecimal, como en modo carcter, y que a lo largo del
desarrollo del proyecto se pudo compro"ar que es una "uena herramienta de
tra"ajo. En la Jigura 8- se puede o"servar el aspecto de dicho programa ,
y las m&ltiples opciones que o#rece.
02
///BBBC.7. CBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
*oi# <S./TBp'ts0char pStr6 'int1=Bt n'mB(ytes2M//en*Ta 'na ca#ena #es#e /.M
*oi# <S./TBp'tsBf0const char p-lashStr2M //en*Ta 'na ca#ena #es#e -lash
*oi# <S./TBp'tB'D(0'nsigne# char 5ataB'D(2M //en*Ta enteros #e D(its
*oi# <S./TBp'tB'1=(0'nsigne# int 5ataB'1=(2M //en*Ta enteros #e 1=(its
*oi# <S./TBp'tBRSpee#0'nsigne# int 5ataB'1=(2M //en*Ta #atos # *eloci#a# *iento
*oi# <S./TBp'tB#atetime0'intDBt Month6'intDBt 5ay6'intDBt Qo'r6'intDBt Min'te2M
*oi# <S./TBEe&,ine0*oi#2M //en*Ta el carScter n'e*a lTnea
<e;to ./ Junciones de la Capa . de la *7A1<
Jigura 8./ %antalla de con#iguracin del programa Dyperterminal de
$indo$s, con los valores empleados en la comunicacin con el
AvrGutter#ly
Captulo 1 Motivaciones del Proyecto
Aunque para el desarrollo de #unciones y visin de resultados las citadas
herramientas de comunicacin entre %c y AvrGutter#ly son muy &tiles, para la
aplicacin de volcado se "usca"a una aplicacin especialmente creada para ese
#in. %or ello se desarroll un programa creado con 0isual CAA que al
ejecutarse en el 5rdenador %c e;trajese los datos del AvrGutter#ly y los
almacenase en un #ichero de te;to.
En la Jigura 86 se muestra el protocolo de comunicaciones que se dise,
para el programa consola de recepcin de datos del 1v8 en el %c.
%ero dicho programa se desarroll para un entorno >s'os (porque
minimizar el tiempo de desarrollo y aca"ar ms rpido el proyecto), y la
interaccin con el usuario es muy po"re, por lo que dado que en s dicho
programa no es una especificacin del proyecto, se decidi no adjuntarlo, y para la
trans#erencia de la in#ormacin se recomienda, para la versin prototipo, el
Brays Terminal, ya que posee la opcin de guardar los datos transmitidos en un
#ichero de te;to, y como los datos que se envan desde el AvrGutter#ly vienen
en el correcto orden, indentacin con comas, y con saltos de lnea, para el
prototipo es ms que su#iciente.
03
Jigura 8-/ Captura de %antalla GrayWs <erminal y #otogra#a de una sincronizacin usando dicho programa
Jigura 86/ 'iagrama de comunicacin entre
%rototipo 1v8 y %rograma de 0olcado en %C
PC
Fin
a
l d
e
T
x
o
n
#
*
#
=
E
O
F
R
faga d
e 100
dato
T
xo
n
R
faga d
e 100
dato
E
!
p
e
"a
# a
T
x
i#
A$R
Captulo 1 Motivaciones del Proyecto
).,. *odos de A6orro de Energa
Como una de las especi#icaciones del proyecto es que tiene que tener una
autonoma mnima de F meses capturando datos y almacenndolos en
memoria Jlash, el ahorro de energa es un aspecto de importancia, y de"e
aplicarse siempre que se pueda.
Como puede verse en la <a"la ?,el At>ega8FE tiene cinco modos
selecciona"les de ahorro de energa/
+a eleccin del modo de ahorro de energa adecuado tiene "astante
importancia, porque si hacemos una maa eleccin, por ejemlo, si estamos
utilizando el timer9 para generar interrupciones con una cadencia
determinada y al #inal del "ucle in#inito hacemos que entre en modo ahorro de
energa Lpo$ersaveM, dichas interrupciones cesarn hasta que se reactive el
sistema a LactiveM con una interrupcin de timer. (1<C) con una del display
o del joystic4 del aparato. Como lo que se desea es mantener la cadencia de
interrupciones, la opcin adecuada para ese ahorro de energa sera el modo
LidleM, que no desha"ilita el timer9, aunque seg&n se puede ver en la <a"la E,
tam"in el ahorro de energa es menor, pero es "astante mejor que no aplicar
ning&n modo de ahorro de energa.
04
&odo de -)orro &antiene -ctivo Des)a+ilita
ID!M I )a'
I /i'er/#ounter) B-F-&
I Puerto SPI
I Si)te'a de Interru(cione)
Detiene a la #PO
CD#I<PISM MDO#/IP<
Se u)a (ara 'ini'i*ar el ruido
de con'utaci2n durante al)
con"er)ione) del #C/D3
I /i'er& C)Nncrono(/#)
I #ontrolador !#D
I CD#
Detiene a la #PO 5
todo) lo) '2dulo) de
Mntrada/Salida
PPWMISCLM
Se u)a (ara (er'itir al u)uario
'antener una 0a)e te'(oral a
la "e* de o(erar el Di)(la5!#D
'ienta) .ue el re)to del )i)tea'
e)t+ dor'ido3
I /i'er& C)Nncrono(/#)
I #ontrolador !#D
S/C<DBY
Per'ite un encendido 'u5
r+(ido co'0inado con un 0aQo
con)u'o de energNa
IP)cilador ce #uar*o Ml re)to del di)(o)iti"o)
e)t+n dor'ido)
PPWMDPW< Sal"a al infor'aci2n de
lo) regi)tro)- (ero
congela el o)cilador-
de)ha0ilitando toda) la)
de'aR) funcione) del
chi( ha)ta la )iguiente
inetrru(ci2n o e)et
>ardware3
<a"la ?/ Caractersticas de los >odos de Ahorro de Energa del At>ega
-)orro de Ener!/a a 1&)zE <ccF3v
&;DE Icc G2"HCI J-)orro
Ccti"e ((leno rendi'iento) B-GBB'C BS
;odo TIdleU de Chorro de MnergNa B-@GB'C I4G-&S
;odo TPowerSaveU de Chorro de MnergNa B-BB?'C IHH-FS
<a"la E/ Consumo Energtico en los distintos modos de Ahorro de Energa
Captulo 1 Motivaciones del Proyecto
+os valores de la ta"la estn e;trados de las gr#icas de las #iguras 8K,8F y
8O, en las que gr#icamente se puede ver el consumo energtico del At>ega8FE
dependiendo de la tensin de alimentacin, para lso distintos modos de
ahorro de energa.

0"
Jigura 8K/ Consumo Energtico a pleno rendimiento del
microcontrolador (AC<20E)
Jigura 8F/ Consumo Energtico del At>ega8FE en el modo 2'+E de
Ahorro de Energa
Jigura 8O/ Consumo Energtico del en el modo %53E1!7A0E de
ahorro de Energa
Captulo 1 Motivaciones del Proyecto
).9. Captura de la seAal anal+gica procedente del sensor
El Convertidor Anal+gico igital integrado en el
A?mega1690

El CAQ' es un peri#rico que de"e ser comprendido "ien para poder usarlo
correctamente, y las di#erentes opciones de con#iguracin de"en elegirse con
cautela porque es di#cil darse cuenta de dnde se ha cometido el error. %or
ello es necesario antes de con#igurar el dispositivo hacer un estudio de la se,al
y determinar si es una se,al #lotante o a tierra, su amplitud m;ima, y la
rapidez de cam"io de la se,al. %or todo ello se ha creido necesario hacer un
tutorial detallado que sirva de ayuda a a hora de determinar la con#iguracin
ms adecuada para la captura de se,ales.
a) Modos de captura de seal del CA/
+os Canales del Convertidor Analgico 'igital (A'C) pueden con#igurarse
de dos #ormas/
>odo 'i#erencial
>odo de terminacin &nica
+a eleccin de una con#iguracin u otra de"e depender de si la se,al de
entrada es #lotante o est re#erida a tierra.
/na se0al !lotante es aquella que utiliza una re#erencia de tierra aislada y no
estara conectada al nivel de tierra de la placa. Como resultado, la se,al de
entrada y el dispositivo hard$are no se conectan a la ninguna re#erencia
com&n, lo cual puede provocar que la se,al de entrada e;ceda el rango vlido
de tensiones del dispositivo hard$are. %ara evitar este pro"lema, se de"e
conectar la se,al a la tierra de la placa del dispositivo. Ejemplos de #uentes de
se,al #lotantes son los termoacopladores sin tierra y "ateras.
/na se0al a tierra es aquella que se conecta a la tierra de la placa. Como
resultado, la se,al de entrada y el dispositivo hard$are se conectan a una
re#erencia com&n.
Ejemplos de se,ales a tierra son las salidas de instrumentacin no aisladas y
dispositivos conectados al sistema de alimentacin de la placa del
microcontrolador.
b) AC configurado para Entradas iferenciales
Cuando se con#igura el A'C para entrada di#erencial, hay dos ca"les de
se,al asociados con cada canal de entrada (uno para el canal de entrada y otro
para la re#erencia o retorno de se,al). +a medida es la di#erencia en tensin
entre las dos lneas, que ayuda a reducir el ruido y cualquier tensin no com&n
a am"as lneas.
0%
Captulo 1 Motivaciones del Proyecto
7eg&n =ational 2nstruments, sera recomenda"le utilizar entradas
di#erenciales en los siguientes casos/
Cuando la se,al de entrada tiene un "ajo nivel (menos de 8 voltio)
Cuando los ca"les que llevan la se,al tienen una longitud superior a
- metros.
Cuando la se,al de entrada requiere un punto de re#erencia de tierra
o un retorno de se,al.
Cuando los ca"les que transmiten la se,al pasan a travs de un
entorno ruidoso.
c) AC configurado para Entradas a Tierra
Cuando se con#igura el hard$are para entradas a tierra, cada se,al de
entrada se conecta a la misma tierra. %or ello este tipo de ntradas son ms
vulnera"les ante el ruido que las di#erenciales (de"ido a las di#erencias en los
caminos de la se,al).
d) !uncionamiento del AC
El A'C convierte una entrada analgica de tensin en un valor digital de 89
"its mediante apro;imaciones sucesivas.
El valor mnimo adquiri"le viene dado por el valor de tensin que haya en la
patilla =', y el m;imo por la tensin en la patilla A1EJ menos 8+G7(menos
un "it menos signi#icativo).
5pcionalmente, una tensin de re#erencia interna e 8.80 o la tensin de la
patilla A0
CC
pueden conectarse al pin A1EJ escri"iendo en los registros del
A'>*P so"re los "its de 1EJ7n.
En ese caso, la re#erencia interna de tensin de"e desacoplarse mediante un
condensador e;terno en el pin A1EJ para mejorar la inmunidad ante el ruido.
e) "a Tensin de Referencia del AC
El voltaje de re#erencia del A'C (0re#) indica su rango de conversin.
+os canales Lsingle endedM que e;ceden 0re# dan como resultado valores de
conversin cercanos a 9;-JJ.
0re# puede ser selecciona de entre A0
CC
, re#erencia interna de 8.80 o el pin
e;terno A1EJ.
A0CC se conecta al A'C a travs de un interruptor pasivo.
+a re#erencia interna se genera de una re#erencia de tensin L"andgapM 0
g"
mediante un ampli#icador interno.
En am"os casos, el pin e;terno A1EJ se encuentra conectado directamente al
A'C, y el voltaje de re#erencia puede hacerse ms inmune al ruido conectando
un condensador entre los pines A1EJ y tierra.
0
re#
puede tam"in ser medido en el pin A1EJ con un voltmetro de alta
impedancia. Es de o"servar que 0
re#
es una #uente de alta impedancia, y slo
una carga capacitiva de"e ser conectado e un sistema as.
7i se conectase una #uente de tensin constante al pin A1EJ, no se de"eran
usar las otras re#erencias de tensin en la aplicacin, ya que sern cortadas por
la tensin e;terna.
0,
Captulo 1 Motivaciones del Proyecto
7i so se aplicase una tensin e;terna al pin A1EJ, entonces se de"e elegir
entre A0CC o los 8.80 como tensiones de re#erencia. 'espus de conmutar la
tensin de re#erencia, la primera medicin de A'C ser imprecisa, por lo que
el usuario de"e descartar dicho resultado.
f) El #reescalado $ el Tiempo de con%ersin
%or de#ecto, el circuito de apro;imaciones sucesivas requiere la entrada de
una se,al de reloj de entre K94Dz a .994Dz para o"tener la m;ima
resolucin. En caso de que se necesite una resolucin mayor a 89"its, dicha
se,al de reloj de"er ser mayor de .994Dz para alcanzar una mayor tasa de
muestreo.
El mdulo de conversin Analgico!'igital contiene un preescalador que
genera una #recuencia de reloj acepta"le de cualquier #recuencia de C%* por
encima de 8994Dz.
'icho preescalador puede con#igurarse con los "its A'%7 en el registro
A'C71A. El preescalador empieza a contar desde el momento en el que el
A'C es encendido mediante el "it A'E= del registro A'C71A, y se mantiene
en #uncionamiento mientras ste se encuentre a 8, resetendose cuando A'E=
se ponga a 9.
Cuando se inicia una conversin Lsingle endedM poniendo A'7CN8 en el
A'C71A, la conversin comienza en el siguiente #lanco de su"ida de la se,al
de reloj del A'C.
=a Captura de la ?emperatura
%ese a que #inalmente la captura de la se,al del anemmetro se ha hace con el
Convertidor AnalgicoQ'igital porque se cam"i el sensor y se us #inalmente
uno digital, la captura de la temperatura si se hace usando el mencionado
CAQ'.
+os parmetros del CAQ' para la captura de la se,al del 7ensor de
<emperatura con una con#iguracin en >odo de terminacin &nica y una
resolucin de 89 "its, y con el muestreo de se,al realizado a la mnima
#recuencia de muestreo posi"le en modo r#aga.

+a captura se realiza haciendo una r#aga d conversiones AQ' de ?
muestras, y promediando las (sumndolas y dividindolas entre ?), ya que
como la temperatura es una magnitud con una inercia muy grande, al
promediarla se est eliminando el ruido detectado en las conversiones.
0*
Jigura 8?/ Jotogra#a del sensor de temperatura del
AvrGutter#ly (1esistencia =egativa de <ensin)
Captulo 1 Motivaciones del Proyecto
00
Escuela !uperior de
Ingenieros de !evilla
www.esi.us.es
Avda.de los escu!"i#ie$tos%s&$
410'2% (evilla% )s*a+a
&niversidad de !evilla
www.us.es
,aseo del Recto"ado% s&$
(evilla% )s*a+a
epartamento de
Automtica / .o3+tica
www.us.es
Avda.de los escu!"i#ie$tos%s&$
(evilla% )s*a+a
Bos; Buan =+pe' .ui'
www.-ose-ua$lo*e..xs/.co#
(evilla% )s*a+a
Agradecimientos
Martin 1ho)as +
2ngeniero de por la *niversitXt Saiserslautern
0ertie#ungsrichtungen, y programador de la
porta"ilidad del cdigo de demostracin del
AvrGutter#ly,escrito para 2A1, al lenguaje C
compati"le con el compilador nu!cc.
23r' Wunsch +
e;perto en programacin de microcontroladores
Atmel, desarrollador del proyecto 3inAvr con
nu!cc, e incansa"le cola"orador en el #oro de
avr#rea4s, por su ayuda y orientacin en la
resolucin de dudas relativas a la programacin del
At>ega8FE.
Alberto 4rieto L3!.rant,+
desarrollador en el pto. 2A' de 2ndra Espacio,
por su ayuda y orientacin a la programacin en el
lenguaje CAA utilizado para la consola terminal del
%c utilizada para a trans#erencia de datos desde el
%rototipo 1v8 al %c.
Ci3liogra"a del Captulo
.e"erencia escripci+n >ec6a
A?mega1690 .e"erence *anual
.e". ocD 2517IEA0.E1-<-) $ocumento Imprescindi3le%
6ttpD<<###.atmel.com
FCA2-1G A/uda de *atla3 para compro3aci+n de "unciones estadsticas
6ttpD<<###.mat6#or5s.com<access<6elpdes5<6elp<tool3o8<daH<c1_int1).6tml
FCA2-2G A/uda so3re captura de seAales / so3re entradas con resistencia Pull2&p
6ttpD<<###.iotec6.com<sensors9(12.6tml
FI=PC2-1G
FI=PC2-2G
A/udas para programar en =engua@e CD
6ttpD<<###.drpaulcarter.com<cs<common2c2errors.p6pJ2.).2
6ttpD<<###.plet6ora.net<Ksee3s<"aHs<c2iaH.6tml
A0. Cutter"l/ Application code port to avr2gcc
3/ *artin ?6omas $ocumento Imprescindi3le%
6ttpD<<###.si#a#i.aru3i.uni25l.de<avr_pro@ects<
Pgina de A/uda al desarrollo de sistemas 3asados en microcontroladores
AvrL / principal a/uda en la o3tenci+n de documentaci+n para este
pro/ecto $ocumento Imprescindi3le%
6ttpD<<###.avr"rea5s.com<
Comunidad / >oro de udas t;cnicas so3re programaci+n de
microcontroladores en 1CC / dudas so3re diseAo 6ard#are.
6ttpD<<###.avr"rea5s.com<"orum
?opicsD Avr Cutter"l/ .eal Availa3le Pins
?imer-_call3ac5 "untion in A0. Cutter"l/ Port #it6 1CC M
NBos; Buan =+pe'O tiene en el "oro el pseud+nido de NseHuanO
Pgina de A/uda del compilador C para Avr utili'ado
1:& 1CC Compiler
6ttpD<<###.gnu.org<6ome.es.6tml
Ptros Compiladores de C para microcontroladores Atmel AvrD
IA. Em3edded 4or53enc6
6ttpD<<###.iar.com<
Code0ision C Compiler
6ttpD<<###.6pin"otec6.ro<6tml<do#nload.6tm
ImageCra"t C Em3edded Compiler
6ttpD<<###.imagecra"t.com<so"t#are<
4e3.ing $Enlaces relacionados% de A0.
6ttpD<<r.#e3ring.com<6u3MringQavr

También podría gustarte