Está en la página 1de 33

Captulo 5

El Software
Indice
1. Compiladores de C para microcontroladores Avr _______________________Pg. 69
1.1. Comparativa de Compiladores y Razones de Eleccin

2. El Entorno de Desarrollo Software (EDS) Utilizado _______________________Pg.72


2.1. Descripcin del EDS 2.2. Instalacin del EDS 2.3. Utilizacin del EDS 2.4. Particularidades del cdigo C para microcontroladores 2.5. Configuracin y Utilizacin de perifricos 2.6. Proceso para la programacin del microcontrolador

3. Mdulos del programa del registrador ________________________________ Pg. 80


3.1. Enumeracin de los Mdulos del Programa 3.2. Configuracin de los Pines de E/S de propsito general 3.3. Mdulos de la Pantalla LCD 3.4. Salvado de datos en la Dataflash 3.5. La memoria EEprom 3.6. Conversin de Datos de 8 bits a 16 bits 3.7. Comunicacin por el Puerto Serie a travs de la UART 3.8. Modos de Ahorro de Energa 3.9. Captura de la seal analgica procedente del sensor

Resumen 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 Gnu-Gcc, se describe el entorno de desarrollo software utilizado, y se dice cmo instalarlo y utilizarlo eficientemente. Por ltimo se describen los mdulos que forman el programa del registrador de datos.

Captulo 1

Motivaciones del Proyecto

1. Compiladores de C para microcontroladores Avr


1.1. Comparativa de Compiladores y Razones de Eleccin
Dadas las caractersticas del cdigo que de deseaba 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.. Dicho cdigo es ms verstil porque es ms cmodo de programar y porque las modificaciones en l son ms fciles de realizar dado que es un lenguaje de ms alto nivel. Una caracterstica que hace que los microcontroladores Atmel estn especialmente indicados para su programacin con el Lenguaje C es que estn diseados y optimizados para su programacin en C, y por ello presenta caractersticas tales como 32 registros acumuladores de uso general que le dan una gran libertad a los compiladores de C a la hora de compilar el cdigo de C a ensamblador. Esta caracterstica es de vital importancia ya que A la hora de escoger un compilador disponemos de mltiples opciones disponibles:

Codevision AVR Gcc-Avr ImageCraft Compiler IAR Embedded Workbench Otros

De estos 4 destacados el nico que no es un producto comercial el es GCCAVR, que se trata de un programa bajo licencia de Software Libre y de Libre Distribucin y uso. El resto son programas cuya licencia pueden llegar a costar en su configuracin bsica 1.200, como es el caso del compilador IAR. Pasemos a enumerar las caracterstica de cada uno de ellos:

CodeVision AVR
El entorno IDE (Integrated Development Environment) es amigable y muy fcil de usar.

69

Captulo 1

Motivaciones del Proyecto

Est basado en proyectos, e incluye un generador de cdigo automtico llamado Codewizard AVR que genera todo el cdigo necesario para la inicializacin de los perifricos internos de los microcontroladores AVR, as como de algunos perifricos externos (usando libreras que tambin incluye). Dichas libreras dan soporte a un gran nmero de aparatos frecuentemente usados como son pantallas LCD, Relojes de Tiempo Real RTC, sensores de temperatura, la UART, el SPI, etc... Codevision dispone tambin de un programa terminal que puede enviar y recibir archivos y tambin visualizar los datos recibidos o enviarlos en hexadecimal o ASCII.

GCC-AVR
El compilador GNU para AVR es una versin del popular compilador GNU C a la plataforma AVR. Se ejecuta sobre MsDos o una consola MsDos bajo Windows32, o bajo Linux. GCC-AVR no dispone de un entorno IDE (Entorno de Desarrollo Interactivo) o las herramientas que acompaan a los otros compiladores. ES tan slo un compilador C. Sin embargo, la Distribucin WinAvr dispone de herramientas de este tipo, aunque no del IDE, ya que si bien el programa Programmers Notepad es un potente editor de cdigo, no tiene la integracin y especializacin necesaria como para considerarlo un IDE propiamente. En cualquier caso este compilador dispone de una gran ventaja sobre el resto de compiladores, y es que es completamente gratis y su cdigo fuente est disponible en sourceforge.com bajo licencia de software libre. GCC-AVR, como todos los compiladores GNU se suministra con el programa estndar de Unix make, usado para construir (build) los proyectos. Pero aunque un en este compilador no dispone de un IDE, el programa de Atmel AVR Studio v3.28 puede ser utilizado como IDE para cualquier compilador basado en lnea de cdigo, y dicho AVR Studio incluso dispone de resaltado de cdigo. Esto soluciona el problema prcticamente, aunque sigue habiendo la necesidad de gestionar los archivos makefile, aunque la mayora de los usuarios pueden hacerlo sin problemas. Es de resaltar que las actuales versiones de AvrStudio v4 en adelante no permiten la utilizacin de GCC, por tanto slo se recomienda la versin v3.28. No obstante, aunque AvrStudio puede utilizarse para la edicin del cdigo, el citado Programmers Notepad tiene unas opciones de resalado de cdigo ms potentes.

70

Captulo 1

Motivaciones del Proyecto

IAR Embedded Workbench V4.12 for Atmel AVR


Sin duda es el compilador de ms potencia, con ms herramientas, ms profesional y que genera un cdigo ms eficiente, aunque por supuesto tambin es ms caro (1.200 por licencia) Posee un IDE con editor y herramientas de gestin del proyecto. Genera un cdigo muy optimizado que genera el mnimo nmero de instrucciones en ensambaldo una vez compilado, soportando C y C++ Incorpora archivos de configuracin de los perifricos para AVR Classic, Atmega, incluyendo sus perifricos internos Con soporte para el depurador JTAG ICE mkll Dispone de libreras de funciones en tiempo real Depurador C-SPY con simulador AVR y soporte para Hardware de depuracin de Sistemas en Tiempo real RTOS-aware. Proyectos de ejemplo AVR y plantillas de cdigo Guas de usuario y ayuda online

ImageCraft C Compiler
Es un compilador totalmente compatible con ANSI C. ImageCraft es una empresa muy asentada en el campo de los compiladores para arquitecturas con microcontroladores desde 1994 (tiene compiladores para Motorola 68HC11, Atmel AVR, PsoC, y otros) El entorno IDE es muy fcil de usar. Est orientado a proyectos, e incluye un generador de cdigo automtico llamado Application Wizard que genera el cdigo de inicializacin para los perifricos internos de los microcontroladores AVR. As pose libreras que dan soporte a perifricos como UART, SPI, EEPROM y tambin a funciones de comprobacin de la pila.

71

Captulo 1

Motivaciones del Proyecto

2. El Entorno de Desarrollo Software (EDS) Utilizado


2.1. Descripcin del EDS
El entorno de desarrollo del AvrButterfly utilizando en compilador GNU GCC est formado bsicamente por dos programas: La distribucin WinAvr, que es una recopilacin de programas de software libre diseados para facilitar las tareas de programacin y desarrollo de los microcontroladores Avr. Dicha distribucin WinAvr incorpora adems del compilador gcc de consola, un editor de texto especialmente diseado para ayudar al programador y hacer el cdigo ms legible mediante su resaltado con colores. El programador va puerto serie mprog.exe, que permite transferir el programa compilado, que se encuentra en un archivo llamado main.hex, a la memoria flash del microcontrolador utilizando nicamente un cable de tres lneas.

2.2. Instalacin del EDS Instalacin de WinAvr


La distribucin WinAvr surge como una iniciativa para impulsar el desarrollo de software libre en el campo del desarrollo de los microcontroladores Avr de Atmel, a la vez de facilitar a sus potenciales usuarios el conocer la existencia de tales herramientas, y no slo las ms famosas, y tambin facilitar su actualizacin. Es por ello que dicho paquete de software incorpora no slo dichas herramientas, sino adems unos ficheros de ayuda y de descripcin de cada una de las utilidades. Por supuesto, el soporte tcnico es mayor segn la herramienta tenga ms importancia. Como hemos dicho, WinAvr instala automticamente Programmers Notepad como editor de cdigo, por lo que tan slo necesitaramos configurarle unos detalles a este ltimo para mejorar su rendimiento (y esta es una aportacin original de este proyecto).

Instalacin de mProg.exe
La distribucin WinAvr incorpora todo lo necesario para la programacin de los microcontroladores Avr, incluyendo un programa similar al mprog.exe, pero dado que este ltimo tiene un interfaz de ventanas de Windows, y el que

72

Captulo 1

Motivaciones del Proyecto

trae la distribucin es en modo comando, se prefiri la utilizacin del original de Atmel. Para cuya instalacin hubo que instalar la suite de desarrollo de Atmel AvStudio, que lo incluye.

Configuracin ptima de Programmers Notepad


Adems con macros diseadas para que pulsando un botn se

a) Configurar los estilos de texto para una fcil programacin A la hora de programar el cdigo que se desea desarrollar, Programmers Notepad 2 presenta una caracterstica que hace el cdigo mucho ms legible que el editor Notepad de Windows, y aunque se necesitan unos minutos para configurar el entorno grfico con este aspecto, merece la pena completamente.
Para configurarlo es necesario ir a la Barra de Mens de "Programmers NotePad2" y elegir: ----->/Tools/Options/ ----------> Hacer Click en Styles/ -----------------> Base Style Settings: Font: Bitstream Vera Sans Mono Size: 10 (esta fuente de letra es altamente recomendable, al ser de libre distribucin, y equiespaciada) ----------> Hacer Click en Styles/Schemes/
Style
Default Default WhiteSpace Comment Comment Line Number KeyWord String Character Operator Identifier EndOfLineString Doc Comments UUID Preprocessor Verbatim Coment Line Doc DarkRed Green Lavender (fill to end of line) Black BrightGreen BrightGreen (fill to end of line) Bold Bold Bold /// /** */ // #define

Text Colour
Black Black Green Green DarkGreen Indigo Dark Green Sea Green Blue DarkGreen

BackGround
White(default) White (default)

FontStyle

Bold & Italic Bold PaleYellow Bold

Tabla 1: Configuracin utilizada Estilos de Resaltado de Cdigo del Programmers Notepad

-----------------> Seleccionar el esquema (Scheme): C/C++ e insertar posteriormente los siguientes valores:

b) Teclas de Acceso directo 73

Captulo 1

Motivaciones del Proyecto

El programa Programmers NotePad 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 exhaustivamente:
Teclas
Ctrl+F2

Accin
Crea una marca de referencia para poder desplazar la pantalla a ese punto rpidamente (estas marcas de referencia no se guardan en ningn archivo, por lo que al salir del programa se desaparecen) Salta a la siguiente marca de referencia creada (hay que definirlo) Borra los archivos de salida de la compilacin anterior (hay que definirlo) Guarda los archivos del proyecto definidos en el makefile y realiza la compilacin de stos, de acuerdo con los parmetros de makefile.

F2 F4 F5

Ctrl+Tab Cambia de una pestaa de cdigo de una archivo a otra.

Tabla 2: Combinaciones de Teclas de Accin Directa en Programmers Notepad

2.3. Utilizacin del EDS Configurar el archivo makefile


Para hacer una compilacin del proyecto en el que trabajamos, es necesario crear y configurar adecuadamente un archivo llamado makefile, que se encuentra en el mismo directorio de nuestro proyecto, y que contiene la informacin 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 conforman, adems del main.c. Para facilitar esta tarea, WinAvr dispone de un programa especial de configuracin de makefile, que permite su creacin en un entorno de ventanas de Windows con cajas deslizantes de opciones, y espacios para rellenar con el listado de archivos del proyecto. No obstante, tambin se puede coger un archivo makefile de un proyecto y modificarlo, lo cual es bastante simple. A continuacin se muestra un extracto del principio del archivo makefile, que es la parte ms importante que hay que configurar:
# # # # # # # # # # # # # # # # # # # # -*- makefile -*On command line: make all = Make software. make clean = Clean out built project files. make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB). make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio 4.07 or greater). make program = Download the hex file to the device, using avrdude. customize the avrdude settings below first! Please

make filename.s = Just compile filename.c into the assembler code only To rebuild project do "make clean" then "make all".

# MCU name MCU = atmega169 # Output format. (can be srec, ihex, binary) FORMAT = ihex

74

Captulo 1

Motivaciones del Proyecto

# Target file name (without extension). TARGET = main # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c SRC += timer0.c \ timer1_sound.c \ timer2_RTC.c \ powersave.c\ system_clock.c\ LCD_functions.c \ LCD_driver.c \ menu_date_time.c\ menu_comm.c \ menu_ADC_sensors.c\ usart.c \ eeprom.c \ dataflash.c \ button.c \ BCD.c \ conversions16b_8b.c\ ADC.c \ ram_atmega.c\ windspeed.c # Compiler flag to set the C Standard level. # c89 - "ANSI" C # gnu89 - c89 plus GCC extensions # c99 - ISO C99 standard (not yet fully implemented) # gnu99 - c99 plus GCC extensions CSTANDARD = -std=gnu99 [...]

Programar Cdigo C usando Programmers Notepad


a) Aspecto del Editor El editor dispone de una pestaa lateral en la que podemos agregar los archivos de que est compuesto el proyecto, tal y como podemos ver en la figura 1. Esta lista no tiene efectos a la hora de compilar , siendo nicamente vlida la lisa de archivos que se encuentra en el archivo makefile, pero s hace ms fcil la edicin de mltiples archivos, o la bsqueda de trminos lxicos el todo el proyecto.

Figura 1: Aspecto del Entorno de Programacin con Programmers Notepad

b) Resaltado de cdigo 75

Captulo 1

Motivaciones del Proyecto

Con el fin de hacer ms cmoda la programacin, Programmers Notepad posee un sistema de resaltado de cdigo que es configurable por el usuario. En la pgina 5 se muestra la tabla 1, con los valores con los que hay que configurar el programa para que el cdigo tenga el aspecto deseado. As los comentarios tendrn diferente color segn su contenido. Para ver los usos que se le da a cada color se recomienda ver el captulo 6, Listado de Cdigo del Proyecto.

c) Consejos para facilitar la programacin Se pueden crear dentro de Programers Notepad unas teclas rpidas muy tiles, como son F4=make clean y F5=make all.
Tambin a la hora de probar partes del cdigo, en lugar de borrarlo o comentar cada lna, se puede hacer lo siguiente: Crear una lnea que empiece por //* y despus del cdigo que funciona (COD1) pero que queremos sustituir poner otra lnea con /*/ Escribir el nuevo cdigo(COD2) a partir de la lnea siguiente y tras l crear una nueva lnea con la cadena //*/. De esta forma, tal y como est escrito, COD1 ser compilado, y COD2 est comentado. Y cuando queramos lo contrario, slo tendremos que quitar el la primera barra inclinada de la primera lnea para que COD2 se compile y COD1 se comente, como se puede ver en a figura 2.

Figura 2: Ejemplo de comentarios de cdigo que sirve para activar partes de cdigo que se quieren probar sin borrarlas

76

Captulo 1

Motivaciones del Proyecto

2.4. Particularidades del cdigo C para microcontroladores


A continuacin explicamos para qu sirven tres tipos de prefijos que se ponen en las definiciones de ciertas variables y que tienen repercusiones importantes en el resultado final e la implementacin del cdigo en ensamblador: const, volatile y static.

const
La definicin const sirve para definir una cadena de caracteres utilizando slo memoria ROM del microcontrolador, en el caso del AtMega169, no memoria Rom, sin la memoria flash destinada al cdigo de programa, que a todos los efectos cuando el programa est en funcionamiento es como si fuese memoria ROM. Esta definicin tiene utilidad cuando se necesitan muchas cadenas de caracteres o tablas que nunca van a ser modificadas. En ese caso no hay necesidad de malgastar memoria RAM almacenando cadenas constantes. La forma ms obvia de hacer esta declaracin (aunque esta forma es incorrecta) sera:
#include <avr/pgmspace.h> PGM_P array[2] PROGMEM = { "Foo", "Bar" }; int main (void) { char buf[32]; strcpy_P (buf, array[1]); return 0; }

Pero el resultado de este cdigo no es el que se buscaba. De esta forma (incorrecta) obtendramos una tabla de cadenas de caracteres almacenada en ROM, y una cadena individual almacenada en RAM (en la seccin .data de la memoria). Para obtener el resultado realmente buscado, se necesita un cdigo as:
#include <avr/pgmspace.h> const char foo[] PROGMEM = "Foo"; const char bar[] PROGMEM = "Bar"; PGM_P array[2] PROGMEM = { foo, bar }; int main (void) { char buf[32]; strcpy_P (buf, array[1]); return 0; }

donde PGM_P es una definicin macro (macro definition) usada en lugar del siguiente cdigo:
PGM_P == const prog_char *

Esta macro se usa para declarar una variable que es un puntero a cadena en el espacio de memoria destinada a memoria de programa:
#define PGM_P const prog_char *

77

Captulo 1

Motivaciones del Proyecto

volatile
La definicin de volatile se utiliza como prefijo para que el programa reconozca que esa variable ser actualizada mediante una rutina de interrupcin. As, cuando se utiliza un optimizador, en un bucle como el siguiente:
uint8_t flag; ... while (flag == 0) { ... }

el compilador tradicionalmente optimizara el cdigo de manera que ignorara la condicin dada por la bandera como siempre cierta, ya que dara igual, ya que analizando del cdigo se observa que nada dentro del bucle puede cambiar el valor de la bandera. Para decirle al compilador qe es una variable que puede ser modificada fuera del mbito del anlisis de la ruta de cdigo (por ejemplo mediante una rutina de interrupcin), la variable debe ser declarada tal que as:
volatile uint8_t flag;

static
Las variables definidas como locales a una funcin desaparecen al final de la ejecucin de dicha funcin. E manera que cuando se llama a esa funcin de nuevo, se crea un nuevo espacio de almacenamiento para esa variable y los valores son reinicializados. As que si se pretende que el valor de una variable local se extienda y no se pierda de una llamada a otra de esa funcin a lo largo de un programa, se puede definir esa variable local como static. La inicializacin de las variables static se hace slo en la primera llamada a la funcin que las contiene, y ene l resto de llamadas no se hace, y conserva el valor de la ltima llamada. La diferencia respecto de las variables globales es que las static slo pueden ser accedidas dentro del mbito de la funcin que las llama, y por tanto otras funciones pueden tener el mismo nombre de variable, sin que se interfieran unas con otras. Adems esta particularidad ayuda para la bsqueda de errores, ya que la variable no puede ser modificada fuera de esa funcin, y por lo tanto all es donde debe buscarse dicho error.
static char letra;

2.5. Configuracin y Utilizacin de perifricos


En entornos con IDE se dispone de generadores automticos de cdigo, lamentablemente en gcc no se dispone de tal facilidad, aunque s pueden encontrarse libreras de inicializacin y manejo e determinados perifricos, pero siempre se ha de mirar da hoja de catlogo del microcontrolador para configurarlo adecuadamente. No obstante en el presente proyecto se ha tenido especial cuidado en intentar hacer el proyecto lo suficientemente generalista como para que su cdigo pueda ser reutilizado en otros proyectos con la placa AvrButterfly, y otras funcionalidades, razn por la cual se invirti mucho tiempo es estructurar lo todo modularmente y por funcionalidades, tal y como se ver en el siguiente apartado.

78

Captulo 1

Motivaciones del Proyecto

2.6. Proceso para la programacin del microcontrolador


Para programar el microcontrolador con el cdigo de nuestro programa se debe compilar dicho cdigo haciendo:
make clean = Realiza una Limpieza de archivos de una construccin del proyecto anterior. make all = Realiza 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 habran de transferirse al microcontrolador, y que son main.hex y main.eep, archivos de memoria de programa y de memoria EEprom respectivamente. Para transferir dichos archivos hemos de ser muy meticulosos en el procedimiento, que que aunque es bastante simple, como se han de sincronizar el Pc con el AvrButterfly, hay que pulsar los botones en su momento justo. Por ello debemos poner especial en hacer lo siguiente:

Alimentar con 3.3v la placa AvrButterfly Pulsar el botn de Reset (si la placa ya estaba alimentada, si la acabamos de alimentar no es necesario) Al mismo tiempo pulsar el botn Enter del Joystick (presionarlo hacia adentro) y Hacer doble click sobre el icono de mprog.exe (ejecutarlo). Si esto se hizo correctamente, y el cable que une PC y AvrButterfly est bien construido, entonces en la pantalla del PC deber aparecer la ventana del programa mprog.exe donde hay un espacio para elegir el archivo main.hex que se desea transferir. Una vez elegido el archivo a transferir, slo hay que pulsar el botn aceptar, para iniciar el borrado, la programacin y la verificacin de la correcta programacin del sistema. Concluida dicho proceso, el programa nos dir si culmin satisfactoriamente. En cualquier caso hay que cerrar la ventana del programa para poder continuar, y hay que reinicializar el microcontrolador forzando un Reset. Si todo se hizo correctamente, el sistema est programado.

79

Captulo 1

Motivaciones del Proyecto

3. Mdulos del programa del registrador


3.1. Enumeracin de los Mdulos del Programa
El programa del registrador de datos consta de los siguientes mdulos funcionales: El Mdulo Principal (es un programa que se ejecuta constantemente y que cada vez que acaba vuelve a empezar, y desde l se activa el funcionamiento de los restantes mdulos de programa (subprogramas) que a continuacin listaremos). El Mdulo de Manejo y especificacin de las funcionalidades de los pines del microcontrolador y de la placa de desarrollo. El Mdulos de Mens de Carga de funciones e Interaccin con el usuario El Mdulos de Gestin de Temporizadores, Reloj en Tiempo Real y modos de ahorro de energa El Mdulos de Adquisicin de Datos El Mdulo de visualizacin de datos en el Display LCD de 6 dgitos del Butterfly El Mdulo USART El Mdulo de digitalizacin de seales analgicas El Mdulo de manejo del Joystick El Mdulos de Almacenamiento de Datos El Mdulo de manejo de la DataFlash El Mdulo de manejo de la EEprom El Mdulos Auxiliares de conversin de formato de datos El Mdulos de procesado estadstico de los datos del encoder (sensor de viento).

3.2. Configuracin de los Pines de E/S de propsito general


A la hora de codificar una nueva aplicacin para el AvrButterfly es importante conocer qu pines estn libres y pueden ser utilizados de propsito general. Esta caracterstica, que parece una tontera, tienen especial importancia en la placa AvrButterfly porque la mayora de sus pines se encuentran ocupados por la pantalla LCD de 22 pines, utilizando la funcionalidad del perifrico interno del AtMega llamado LCDdriver . Por ello, el uso de esta pantalla utilizando dicho driver limita muchsimo las aplicaciones posibles con el AtMega. Y puede suceder que se desee utilizar un

80

Captulo 1

Motivaciones del Proyecto

perifrico interno del AtMega como el Comparador Analgico y no se puede porque los pines de entrada de dicho perifrico estn siendo utilizados con otra funcionalidad.

Figura 3: Listado de pines y esquema de su distribucin con su configuracin

Por 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 AvrButterfly. En la figura 3 se puede ver una captura de pantalla del aspecto del comentario que s encuentra en el archivo pin_management.h

3.3. Mdulos de la Pantalla LCD


Para el manejo de la pantalla LCD se utilizan dos archivos: El de ms alto nivel es LCD_functions, que son unas funciones genricas para cualquier pantalla LCD en modo alfanumrico. La funciones de ms bajo nivel se encuentran el archivo LCD_Driver, que contiene funciones especficas para la pantalla LCD que posee de fbrica la placa AvrButterfly (en caso de poner otra pantalla habra que crear otras funciones).

Figura 4: Segmentos de la pantalla LCD que es posible activar

Con las funciones que tenan implementados los controladores de la pantalla LCD nicamente se podan activar los seis dgitos alfanumricos que aparecen en la figura anterior, dado que los dgitos que estn en blanco no estn conectados fsicamente al perifrico DriverLCD. Sin embargo, pese a que la hilera de nmeros y sus respectivos subrayados s estn conectados fsicamente con dicho perifrico, su activacin no viene

81

Captulo 1

Motivaciones del Proyecto

implementada en el programa controlador, por lo que se procedi a la elaboracin de funciones que habilitasen dicha funcionalidad:

Figura 5: Intefaz entre Bits del Registro LCD y segmentos del LCD

Ello se consigui manipulando los registros de los segmentos LCD y dndole valores a los bits que no se usaban siguiendo un mtodo de prueba y error. Para ello se tuvo que hacer un estudio intensivo y algo de ingeniera inversa para conocer la funcionalidad de cada bit de dicho registro, que a continuacin pasamos a describir:

Figura 6: Registro de los segmentos LCD (en el perifrico driver LCD)

Dicho registro lo interpretaremos como una tabla cuyas filas las denominaremos por LCDDRxx, y cuyas columnas las llamaremos por un nmero de bit (de 0 a 7). Ahora se establecer una correspondencia entre los bits de este registro y los segmentos de cada dgito del LCD (ver Figura 6): as pues las columnas 0, 1, 2 y 3 se corresponden con segmentos de los dgitos 0, 2 y 4, y las columnas 4, 5, 6 y 7 se corresponden con segmentos de los dgitos 1, 3 y 5.

82

Captulo 1

Motivaciones del Proyecto

Por poner un ejemplo de correspondencia, podemos decir que los segmentos que se corresponden con el dgito 0 son:
Fila fila LCDDR1 fila LCDDR6 fila LCDDR11 fila LCDDR16 bit 3 SEG311(K) SEG211(L) SEG111(L) SEG011(M) bit 2 SEG310(X) SEG210(F) SEG110(E) SEG010(P) bit 1 SEG309(Y) SEG209(H) SEG109(G) SEG009(N) bit 0 SEG308(A) SEG208(B) SEG108(C) SEG008(D)

Tabla 3: Ejemplo de correspondencia entre los segmentos del LCD del dgito 0 y los bits del registro de segmentos del LCD que le corresponden

Segmentos especiales del LCD


Utilizando la informacin de la figura 6, y contrastndola con la de la Tabla 3, y utilizando un procedimiento que inicialmente fue a prueba y error, ya que en ninguna hoja de catlogo vena especificado que los segmentos X e Y se pudiesen utilizar, se definieron unos nuevos segmentos especiales grficos del LCD como son los nmeros y los subrayados del Display que incorpora el AvrButterfly.

Figura 7: Segmentos especiales del LCD

La informacin relativa a las mscaras y las funciones para la utilizacin de tales segmentos se puede encontrar en la seccin deDisplay LCD del captulo 6 Listado de Cdigo. De esta forma de pueden activar o desactivar individualmente los siguientes segmentos:

los nmeros 1,2 4, 5, 9 y 10, los subrayados 1,2,3,4,9,10, y el nmero 3 conjuntamente con el subrayado 5.

Nuevos Caracteres LCD


Adems, utilizando las posibilidades que permitan los segmentos alfanumricos del LCD, se disearon nuevo caracteres para mostrar mejor la informacin de pantalla. As se crearon m , / y s para la informacin en m/s. Y unos caracteres que simulan un rotor en movimiento para dar sensacin de captura de datos. Los resultados de estas definiciones se pueden ver en la tabla 4 de la pgina 16, en la que a partir de los segmentos de cada dgito del LCD, y haciendo una combinacin de stos combinndola en una mscara, se logran disear estos nuevos caracteres especiales.

83

Captulo 1

Motivaciones del Proyecto

Simbolo

Mscara
0xEAA8

{MPND}
1110

{LEGC}
1010

{JFHB}
1010

{KXYA}
1000

* / \ m s _
JPM GNK HPL GJM HKN JLP KGM NLH

0x4008

0100

0000

0000

1000

0x8020

1000

0000

0010

0000

0x2F00

0010

1111

0000

0000

0x9800

1001

1000

0000

0000

0x1000

0001

0000

0000

0000

0xC080

1100

0000

1000

0000

0x2208

0010

0010

0000

1000

0x4820

0100

1000

0010

0000

0x8280

1000

0010

1000

0000

0x2028

0010

0000

0010

1000

0x4880

0100

1000

1000

0000

0x8208

1000

0010

0000

1000

0x2820

0010

1000

0010

000

Tabla 4: Nuevos caracteres alfanumricos creados especialmente para este proyecto

84

Captulo 1

Motivaciones del Proyecto

Por ltimo en lo relativo al LCD se describen las funciones que se tienen en sendos archivos de programacin del LCD: Funciones deLCDDriver.h Manejador del Display especfico que incorpora el AvrButterfly
LCD_Init(); Inicializa la pantalla LCD y prepara para su uso LCD_WriteDigit(2); Escribe un carcter en uno de los seis dgitos del LCD //SIGNAL(SIG_LCD)--> LCD Interrupt Routine LCD_Num1_On(); LCD_Num1_Off(); LCD_Led1_On(); LCD_Led1_Off() // ENCIENDE el Numero_1 del LCD // ENCIENDE el Led_1 del LCD

Funciones de LCDFunctions.h Funciones genricas para cualquier Display con caracteres alfanumricos.
void LCD_put_u8b (unsigned char data); void LCD_put_u16b (unsigned int data); void LCD_puts_f(const char *pFlashStr, char scrollmode); void LCD_puts(char *pStr, char scrollmode); void LCD_putc(uint8_t digit, char character); Cuando se carga en ellos nuevos datos, slo cambiarn los bytes especificados para que se sobreescriban, no vindose afectados los restantes bytes por dicha accin. void void void void char LCD_UpdateRequired(char update, char scrollmode); LCD_Clear(void); LCD_Colon(char show); LCD_FlashReset(void); SetContrast(char input);

Se evita hacer una descripcin pormenorizada de las unciones debido a que en el listado de cdigo del programa, en el captulo 6, se comenta exhaustivamente el cdigo diciendo en el encabezado de cada funcin cual es su funcionalidad.

85

Captulo 1

Motivaciones del Proyecto

3.4. Salvado de datos en la Dataflash Descripcin del Funcional de la Dataflash


La placa de desarrollo AvrButterfly incorpora como ya hemos mencionado un dispositivo de memoria externa no-voltil con capacidad de 512KBytes y con comunicacin a travs del puerto SPI con el AtMega. A la hora de implementar el software especial Figura 8: Dataflash AT45DB041B montada en la Placa AvrButterfly de manejo de este dispositivo externo es necesario saber algunas particularidades de su construccin herdware que a continuacin se exponen: El AT45DB041B incorpora dos buffers bidireccionales para expedir el flujo de datos hacia y desde el dispositivo.
0 0

Buffer #2

Pgina 2047

Buffer #1

dato8b Buffer Write Byte dato8b

Buffer_to_Page

Pgina 0

263 263

8bits 8bits

2 buffers sRAM

Figura 9: Funciones de almacenamiento y estructura de la memoria DataFlash

Cada buffer tiene una longitud de 264Bytes (la misma longitud que las pginas en que est dividida la memoria). Estos buffers son memoria static RAM (voltil) y confieren una especie de memoria cach durante una operacin de programacin o borrado. Por lo tanto a la hora de almacenar o recuperar datos de la memoria Dataflash no-voltil, dicha informacin pasar por uno de estos buffers antes de transferirse al AtMega por el interfaz SPI. Por ello se crearon tres capas de manejo cuyas funcionalidades son:

la capa 1 que maneja el interfaz SPI, la capa 2 que gestiona la transferencia de datos entre el AtMega y uno de los buffers, y la transferencia entre uno de los buffers y el banco e memoria Dataflash. La capa 3 que maneja la Dataflash como si se tratase de una pila de almacenamiento de informacin en paquetes de 8 bits con ndices totalmente transparente al usuario, que se limita nicamente a enviar o recibir datos, y la gestin de pginas es completamente automtica.

86

Page_to_Buffer Buffer Read Byte


263 263 263 263

SPI

2048 pginas Flash


8bits

Captulo 1

Motivaciones del Proyecto

En la Tabla 5 se muestra las definiciones de las funciones de manejo de la Dataflash separadas por capas, en las que se puede apreciar los parmetros necesarios para la utilizacin de cada una.
///Funcions Layer3:______________________________________________________ unsigned char DF_Write8 (unsigned char BufferNo ,unsigned int *TopBuf ,unsigned int *PageNum ,unsigned char Data ); unsigned char DF_Read8 (unsigned char BufferNo ,unsigned int *PageNum ,unsigned int *TopBuf ,unsigned int PageNumLP, unsigned int TopBufLP ,unsigned char *Data ); ///Funcions Layer2:______________________________________________________ void Buffer_To_Page (unsigned char BufferNo ,unsigned int PageAdr ); void Page_To_Buffer (unsigned int PageAdr ,unsigned char BufferNo ); void Buffer_Write_Byte (unsigned char BufferNo ,unsigned int IntPageAdr ,unsigned char Data ); unsigned char Buffer_Read_Byte (unsigned char BufferNo ,unsigned int IntPageAdr ); ///Funcions Layer1:______________________________________________________ void DF_SPI_init (void); unsigned char DF_SPI_RW (unsigned char output ); unsigned char Read_DF_status (void);

Tabla 5: Definiciones de las funciones de manejo de la Dataflash separadas por capas

Funciones de Escritura y Lectura


Como ya hemos mencionado, las funciones de la capa 3 hacen una gestin integral del almacenamiento y restaurado secuencial de datos en el dispositivo de almacenamiento no voltil. Estas funciones DF_Write8() y DF_Read8() almacenan o leen un Byte de informacin y preparan el sistema para que prxima vez que sean llamadas se se coloque la informacin en el Byte que secuencialmente se encuentra despus, aunque se cambie del Byte ltimo de una pgina de memoria al primer Byte de la siguiente pgina. Pero los datos de memoria que se guardarn en este proyecto (y en general) sern de 16bits (2Bytes), y no de 8bits(1Byte) , por lo que se crearon unas funciones auxiliares que se utilizan en varias funciones de perifricos del cdigo dedicadas a la conversin de datos de 8bits a datos de 16bits, y viceversa. Estas funciones de describen en el siguiente apartado (Conversin de Datos de 8 bits a 16 bits) de la pg. 22. Con lo cual para almacenar en memoria un dato de 16bits, slo habra que llamar previamente a una de estas funciones y

Encapsulado de los datos para su almacenamiento


A la hora de escribir los datos en la memoria Dataflash d almacenamiento masivo no-voltil, se hace necesario un sistema que los ordene. Afortunadamente tanto el proceso de lectura como el de escritura son secuenciales (siempre se escribirn o leern los datos de menor a mayor direccin de memoria), lo que facilita considerablemente la labor. Por otro lado, aunque gracias a esta caracterstica el problema se reduce, hay que considerar los distintos datos que se escribirn en dicha memoria, y que una vez escritos, al leerse debe saberse qu significan los bits que se tienen, es decir, se debe tener capacidad para interpretar los datos tras ser recuperados. Por ello se desarroll la idea de almacenar los datos en paquetes o contenedores de informacin, cada uno de ellos con un cdigo gracias al cual se conoce implcitamente su contenido y su longitud. As pues, para esta aplicacin se disearon 4 tipos de contenedores: Los que fijan una referencia temporal fecha (se escribe uno al da y tienen una longitud de 2Bytes)
Fecha [2B]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Mes y dia (mes12,dia30=1230) [11b]

87

Captulo 1

Motivaciones del Proyecto

Los que fijan una referencia temporal horaria y registran la temperatura ambiente Hora_Temp(se escriben 24 al da y tienen una longitud de 2Bytes)
Hora Temp[2B]
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

crc

Hora(0h,23h) [5b]

Temperatura(-25,+60) [8b]

Los que fijan una referencia temporal implcita y registran los datos estadsticos elicos correspondientes a un perodo de 10 minutos (la media, varianza y valor mximo d la velocidad del viento en ese perodo), recibe el nombre de Datos (se escriben 144 al da y tienen una longitud de 4Bytes)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Datos [4B]

crc ... varianza [9b]

Media [9b] Valor_pico [9b]

Varian..

Por ltimo hay un paquete de datos que se ha dejado reservado para almacenar datos varios, y para futuras mejoras del sistema.
Especial [2B] 0 0 1 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 op op

Para el correcto manejo de todos estos paquetes, se crearon unas funciones de escritura y lectura que gestionan la memoria Dataflash en forma de paquetes, y sin las cuales, el contenido de dicha memoria se convierte en una ristra de Bytes sin sentido. Dichas funciones se encuentran en el archivo
df_encapsulation.c
//Funciones de ayuda a la escritura en el Paquetes DataFlash___________________ unsigned char DF_Write_Logs (uint16_t Data16_Mean, uint16_t Data16_Vari, uint16_t Data16_Peak); unsigned char DF_Write_Hour (void); unsigned char DF_Write_Date (void); unsigned char DF_Write_Wind (uint16_t Data16_Wind); //Paquete Especial unsigned char DF_Read_Logs (uint16_t *Data16_Mean, uint16_t *Data16_Vari, uint16_t *Data16_Peak, uint8_t *vhora, uint8_t *vtemperat, uint8_t *DataType);

Las cuatro primeras funciones son de escritura de paquetes en la Dataflash, y las tres es una funcin de lectura que extrae los datos del los paquetes interpretndolos, devolviendo como salida el tipo de datos ledo, y actualizando los parmetros de salida con los datos extrados, de manera que segn fuese el tipo de contenedor de datos se actualizan unos parmetros u otros, y despus con una condicin if se procesan nicamente lo datos que se extrajeron.

Capacidad de Almacenamiento de Datos Elicos


Para determinar dicha capacidad, se han de hacer unos clculos sencillos que pasamos a enumerar: Cada 10 minutos se almacena en memoria Dataflash un contenedor de datos[4B], por lo que cada da se registran:

Bytes Contenedores horas Bytes 6 24 =576 Contenedor Hora dia dia

Cada hora se guarda un contenedor de hora y de temperatura [2B]

88

Captulo 1

Motivaciones del Proyecto

Bytes Contenedores horas Bytes 1 24 =24 Contenedor Hora dia dia Bytes Contenedor Bytes 1 =2 Contenedor dia dia

Cada da se almacena un contenedor registrando la fecha[2B]

Luego cada da se almacenan:

contenedores Bytes =576482=628 da da

Con lo que como la memoria Dataflash tiene 4Mbits de capacidad

4 Mbits = 512 KBytes bits 8 Byte


puede almacenar

512 KBytes = 815 dias de capacidad =ms de 2 aos de capacidad Bytes 628 dia
Adems el intervalo de registro de los valores estadsticos de la media y la varianza puede ser con figurable:
Intervalo de Registro
Cada 10 minutos 576+48+2 Cada 5 minutos Cada 2 minutos

Bytes/dia
628 Bytes/dia

Capacidad
815 dias = 2 aos y 2 meses 424 das = 1 aos y 2 meses 217 das = 7 meses

(2*576)+48+2 1205 Bytes/dia (4*576)+48+2 2354 Bytes/dia

Tabla 6: Capacidades de Almacenamiento de Datos Elicos segn el perodo estadstico elegido.

3.5. La memoria EEprom


Se trata de otro tipo de memoria no voltil, pero a diferencia de la DataFlash, esta memoria es un dispositivo interno en el AtMega. Para su utilizacin se ha estructurado en dos capas: La capa 1 posee las funciones ms bsicas de manejo de la transmisin de la informacin a la EEprom, y son de bajo nivel. La capa 2 utiliza las funciones de la capa 1 para realizar tareas ms complejas, como la gestin da datos del nmero de pgina inicial, final y ltimo utilizado de la DataFlash,

DFSave_CtrlInfo () DFSave_FP_Info () DFLoad_CtrlInfo ()

y la gestin de varios arrays de informacin de longitud configurable destinados a guardar textos editables con el joystick 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.

EE_Save_TableUint() EE_Load_TableUint()

89

Captulo 1

Motivaciones del Proyecto

En la Tabla 7 se adjunta un Listado de funciones de manejo de la EEprom ubicadas en el archivo eeprom.h


/// Function Prototypes:_(CAPA 2)__________________________________________ unsigned char EEPROM_Read_Str(unsigned int EE_Start_adr, char *pBufferRam, char RAM_Max_num_bytes ); void EEPROM_Write_Str (char *pBufferRam, unsigned int EE_Start_adr, char EE_Max_num_bytes); /// Funciones de Manejo de la informacion de control de la DataFlash mediante la EEPROM__(CAPA 2)__________________________________________________________ void DFSave_CtrlInfo (unsigned int TopBufLP, unsigned int LastPage ); void DFSave_FP_Info (unsigned int void DFLoad_CtrlInfo (unsigned int unsigned int FirstPage); *TopBufLP, unsigned int *FirstPage); *LastPage,

void EE_Save_TableUint(unsigned int *TablaUint, uint8_t iMax_Tabla); void EE_Load_TableUint(unsigned int *TablaUint, uint8_t iMax_Tabla); /// Function Prototypes Special for atMega169:___(CAPA 1)__________________ uint8_t EEPROM_Read8b (const uint16_t *addr); void EEPROM_Write8b (uint16_t *addr, uint8_t val); Tabla 7: Listado de funciones de manejo de la EEprom ubicadas en el archivo eeprom.h

3.6. Conversin de Datos de 8 bits a 16 bits


En distintas funciones del programa se hace necesaria la transferencia, visualizacin o almacenamiento de datos de 16bits, mientras que la arquitectura del Avr es de 8bits, y por tanto las funciones estndar estn adecuadas a ese ancho de datos. Por ello se hicieron necesarias estas dos funciones :
Conv16b_to_2x8b() convierte un dato de 16bits en dos datos de 8bits

haciendo una copia del de 16bits, desplazando los bits de una copia 8 posiciones hacia el bit menos significativo, y haciendo un cast de ambas variables a 8bits. El diagrama conceptual del proceso se muestra en la Figura 10.

up

Data16 Aux16

down down

igual >>8

up up

down up

cast down cast


up

Data16

up

Figura 10: Conversin de un Dato de 16bits (2Bytes) a dos datos de 8bits (1Byte)

Conv2x8b_to_16b() convierte dos datos de 8bits haciendo en un dato de 16bits tomando ambos datos, hacindole un cast a ambos a int, desplazando el bit superior 8 posiciones hacia el bit ms significativo, sumando de forma lgica ambas variables de 16bits. El diagrama conceptual del proceso se muestra en la Figura 11.

90

Captulo 1

Motivaciones del Proyecto

down8b cast 0000

down

Mask 0x00FF

0000

down

OR

up8b cast 0000

up

<<8

up

cast up Mask 0xFF00

up

0000

up
Figura 11: Conversin de dos datos de 8bits (1Byte) a un Dato de 16bits (2Bytes)

down

Data16

Para probar el correcto funcionamiento de la librera creada, as como la librera de la DataFlash y la librera UART, se crearon mltiples versiones de un programa de ejemplo cuya funcionalidad era guardar en memoria Dataflash 1000 nmeros de 16bits y ver el tamao que ocupan en sta, as como enviarlos va uart para ver que se grabaron correctamente. 1000nmeros x 2Bytes/num = 2000Bytes --> 7 pginas de 264 Bytes y 1 pgina con 152Bytes (0-151)ocupados En dichos programas se utilizaban intensivamente dichas funciones de conversin, ya que las transmisiones serie se hacan en modo carcter (8bits), y en la DataFlash se almacena la informacin en Bytes, por lo tanto en ambas se utilizaban conversiones de 16 a 8bits.

3.7. Comunicacin por el Puerto Serie a travs de la UART Configuracin y manejo de la UART
Como en anteriores perifricos, la estructura se organiza en varias capas, en este caso en dos: La capa 1 hace las funciones de ms bajo nivel como son:

la inicializacin del perifrico a la velocidad BaudRate deseada (esto es importante hacerlo bien, y configurar el sistema que est al otro lado e la comunicacin con el mismo BaudRate), La deshabilitacin del perifrico (esto es interesante para el ahorro de energa), y el envo y recepcin de caracteres por el puerto serie, que es su principal cometido.

///___CAPA 1___________________________________________ void USART_Init(unsigned int baudrate);//Inicializa la UART void USART_Close(void); //Deshabilita la UART char USART_Try2Rx(char *data); //Intenta recibir un carcter por Rs232 void USART_putc(char data); //Enva un carcter por Rs232

Texto 1: Funciones de la Capa 1 de la USART

En la capa 2 se encuentran funciones ms especializadas, como son:

el envo de cadenas de caracteres ledas directamente de una zona de memoria Ram de datos, o bien en memoria Flash de programa,

91

Captulo 1

Motivaciones del Proyecto

el envo de nmeros enteros de 8bits, y de 16 bits el envo del valor de una velocidad del viento genrica ( con un formato de dos dgitos enteros y un dgito decimal 00.0m/s). el envo de datos correspondientes a la fecha (minuto, hora, da, mes, ao). El envo del carcter nueva lnea con el que el extremo receptor pasa a la lnea siguiente si se encuentra en modo de consola terminal.
una cadena desde RAM una cadena desde Flash

///___CAPA 2___________________________________________ void USART_puts(char *pStr, uint16_t num_bytes);//enva void USART_puts_f(const char *pFlashStr); //enva void USART_put_u8b(unsigned char Data_u8b); void USART_put_u16b(unsigned int Data_u16b);

//enva enteros de 8bits //enva enteros de 16bits

void USART_put_WSpeed(unsigned int Data_u16b); //enva datos d velocidad viento void USART_put_datetime(uint8_t Month,uint8_t Day,uint8_t Hour,uint8_t Minute); void USART_NewLine(void); //enva el carcter nueva lnea

Texto 2: Funciones de la Capa 2 de la USART

Volcado de datos y comunicacin serie entre el analizador y el registrador


Como ya hemos indicado anteriormente, para que la comunicacin sea efectiva, los sistemas que estn a ambos extremos de sta deben estar configurados con los mismos parmetros de velocidad y tipos de datos. Para la comunicacin entre el prototipo Rv1 y un Pc se los parmetro son:

Figura 12: Pantalla de configuracin del programa Hyperterminal de windows, con los valores empleados en la comunicacin con el AvrButterfly

En la Figura 12 se pueden ver los parmetros de configuracin del sistema para configurar el programa Hyperterminal de Windows, pero para un mejor manejo de la comunicacin se recomienda utilizar el programa Bray's Terminal, que es un programa gratuito, especialmente diseado para hacer pruebas y probar la comunicacin entre sistema, permitiendo el visionado de los datos tanto en hexadecimal, como en modo carcter, y que a lo largo del desarrollo del proyecto se pudo comprobar que es una buena herramienta de trabajo. En la Figura 13 se puede observar el aspecto de dicho programa , y las mltiples opciones que ofrece.

92

Captulo 1

Motivaciones del Proyecto

Figura 13: Captura de Pantalla Bray's Terminal y fotografa de una sincronizacin usando dicho programa

Aunque para el desarrollo de funciones y visin de resultados las citadas herramientas de comunicacin entre Pc y AvrButterfly son muy tiles, para la aplicacin de volcado se buscaba una aplicacin especialmente creada para ese fin. Por ello se desarroll un programa creado con Visual C++ que al ejecutarse en el Ordenador Pc extrajese los datos del AvrButterfly y los almacenase en un fichero de texto.

AVR

r a Txir Empeza

PC

Rfaga d e 1 00 datos
Txon

Rfaga d e 100 datos EOF Txon Final de


Figura 14: Diagrama de comunicacin entre Prototipo Rv1 y Programa de Volcado en PC

#*#=

En la Figura 14 se muestra el protocolo de comunicaciones que se dise para el programa consola de recepcin de datos del Rv1 en el Pc. Pero dicho programa se desarroll para un entorno MsDos (porque minimizar el tiempo de desarrollo y acabar ms rpido el proyecto), y la interaccin con el usuario es muy pobre, por lo que dado que en s dicho programa no es una especificacin del proyecto, se decidi no adjuntarlo, y para la transferencia de la informacin se recomienda, para la versin prototipo, el Brays Terminal, ya que posee la opcin de guardar los datos transmitidos en un fichero de texto, y como los datos que se envan desde el AvrButterfly vienen en el correcto orden, indentacin con comas, y con saltos de lnea, para el prototipo es ms que suficiente.

93

Captulo 1

Motivaciones del Proyecto

3.8. Modos de Ahorro de Energa


Como una de las especificaciones del proyecto es que tiene que tener una autonoma mnima de 6 meses capturando datos y almacenndolos en memoria Flash, el ahorro de energa es un aspecto de importancia, y debe aplicarse siempre que se pueda. Como puede verse en la Tabla 8,el AtMega169 tiene cinco modos seleccionables de ahorro de energa:
Modo de Ahorro
IDLE

Mantiene Activo
- sRam - Timer/Counters 0,1,2 - Puerto SPI - Sistema de Interrupciones - Timer2 Asncrono(RTC) - Controlador LCD - ADC

Deshabilita
Detiene a la CPU

ADC-NOISE REDUCTION Se usa para minimizar el ruido de conmutacin durante als conversiones del CA/D.

Detiene a la CPU y todos los mdulos de Entrada/Salida

POWER-SAVE - Timer2 Asncrono(RTC) Se usa para permitir al usuario - Controlador LCD mantener una base temporal a la vez de operar el DisplayLCD mientas que el resto del sisteam est dormido. STANDBY Permite un encendido muy rpido combinado con un bajo consumo de energa POWERDOWN -Oscilador ce Cuarzo El resto del dispositivos estn dormidos

Salva al informacin de los registros, pero congela el oscilador, deshabilitando todas las demas funciones del chip hasta la siguiente inetrrupcin o Reset Hardware.

Tabla 8: Caractersticas de los Modos de Ahorro de Energa del AtMega

La eleccin del modo de ahorro de energa adecuado tiene bastante importancia, porque si hacemos una maa eleccin, por ejemlo, si estamos utilizando el timer0 para generar interrupciones con una cadencia determinada y al final del bucle infinito hacemos que entre en modo ahorro de energa powersave, dichas interrupciones cesarn hasta que se reactive el sistema a active con una interrupcin de timer2 (RTC) con una del display o del joystick del aparato. Como lo que se desea es mantener la cadencia de interrupciones, la opcin adecuada para ese ahorro de energa sera el modo idle, que no deshabilita el timer0, aunque segn se puede ver en la Tabla 9, tambin el ahorro de energa es menor, pero es bastante mejor que no aplicar ningn modo de ahorro de energa.
Ahorro de Energa a 1Mhz, Vcc=3v MODE
Active (pleno rendimiento) Modo Idle de Ahorro de Energa Modo PowerSave de Ahorro de Energa

Icc (25C)
0,700mA 0,370mA 0,006mA

%Ahorro
0% -47,2% -99,1%

Tabla 9: Consumo Energtico en los distintos modos de Ahorro de Energa

94

Captulo 1

Motivaciones del Proyecto

Los valores de la tabla estn extrados de las grficas de las figuras 15,16 y 17, en las que grficamente se puede ver el consumo energtico del AtMega169 dependiendo de la tensin de alimentacin, para lso distintos modos de ahorro de energa.

Figura 15: Consumo Energtico a pleno rendimiento del microcontrolador (ACTIVE)

Figura 16: Consumo Energtico del AtMega169 en el modo IDLE de Ahorro de Energa

Figura 17: Consumo Energtico del en el modo POWER-SAVE de ahorro de Energa

95

Captulo 1

Motivaciones del Proyecto

3.9. Captura de la seal analgica procedente del sensor El Convertidor Analgico Digital integrado en el ATmega169V
El CA/D es un perifrico que debe ser comprendido bien para poder usarlo correctamente, y las diferentes opciones de configuracin deben elegirse con cautela porque es difcil darse cuenta de dnde se ha cometido el error. Por ello es necesario antes de configurar el dispositivo hacer un estudio de la seal y determinar si es una seal flotante o a tierra, su amplitud mxima, y la rapidez de cambio de la seal. Por todo ello se ha creido necesario hacer un tutorial detallado que sirva de ayuda a a hora de determinar la configuracin ms adecuada para la captura de seales.

a) Modos de captura de seal del CA/D


Los Canales del Convertidor Analgico Digital (ADC) pueden configurarse de dos formas:

Modo Diferencial Modo de terminacin nica

La eleccin de una configuracin u otra debe depender de si la seal de entrada es flotante o est referida a tierra. Una seal flotante es aquella que utiliza una referencia de tierra aislada y no estara conectada al nivel de tierra de la placa. Como resultado, la seal de entrada y el dispositivo hardware no se conectan a la ninguna referencia comn, lo cual puede provocar que la seal de entrada exceda el rango vlido de tensiones del dispositivo hardware. Para evitar este problema, se debe conectar la seal a la tierra de la placa del dispositivo. Ejemplos de fuentes de seal flotantes son los termoacopladores sin tierra y bateras. Una seal a tierra es aquella que se conecta a la tierra de la placa. Como resultado, la seal de entrada y el dispositivo hardware se conectan a una referencia comn. Ejemplos de seales a tierra son las salidas de instrumentacin no aisladas y dispositivos conectados al sistema de alimentacin de la placa del microcontrolador.

b) ADC configurado para Entradas Diferenciales Cuando se configura el ADC para entrada diferencial, hay dos cables de seal asociados con cada canal de entrada (uno para el canal de entrada y otro para la referencia o retorno de seal). La medida es la diferencia en tensin entre las dos lneas, que ayuda a reducir el ruido y cualquier tensin no comn a ambas lneas.

96

Captulo 1

Motivaciones del Proyecto

Segn National Instruments, sera recomendable utilizar entradas diferenciales en los siguientes casos: Cuando la seal de entrada tiene un bajo nivel (menos de 1 voltio) Cuando los cables que llevan la seal tienen una longitud superior a 3 metros. Cuando la seal de entrada requiere un punto de referencia de tierra o un retorno de seal. Cuando los cables que transmiten la seal pasan a travs de un entorno ruidoso.

c) ADC configurado para Entradas a Tierra Cuando se configura el hardware para entradas a tierra, cada seal de entrada se conecta a la misma tierra. Por ello este tipo de ntradas son ms vulnerables ante el ruido que las diferenciales (debido a las diferencias en los caminos de la seal). d) Funcionamiento del ADC El ADC convierte una entrada analgica de tensin en un valor digital de 10 bits mediante aproximaciones sucesivas.
El valor mnimo adquirible viene dado por el valor de tensin que haya en la patilla GND, y el mximo por la tensin en la patilla AREF menos 1LBS(menos un bit menos significativo). Opcionalmente, una tensin de referencia interna e 1.1V o la tensin de la patilla AVCC pueden conectarse al pin AREF escribiendo en los registros del ADMUX sobre los bits de REFSn. En ese caso, la referencia interna de tensin debe desacoplarse mediante un condensador externo en el pin AREF para mejorar la inmunidad ante el ruido.

e) La Tensin de Referencia del ADC El voltaje de referencia del ADC (Vref) indica su rango de conversin.
Los canales single ended que exceden Vref dan como resultado valores de conversin cercanos a 0x3FF. Vref puede ser selecciona de entre AVCC, referencia interna de 1.1V o el pin externo AREF. AVCC se conecta al ADC a travs de un interruptor pasivo. La referencia interna se genera de una referencia de tensin bandgap Vgb mediante un amplificador interno. En ambos casos, el pin externo AREF se encuentra conectado directamente al ADC, y el voltaje de referencia puede hacerse ms inmune al ruido conectando un condensador entre los pines AREF y tierra. Vref puede tambin ser medido en el pin AREF con un voltmetro de alta impedancia. Es de observar que Vref es una fuente de alta impedancia, y slo una carga capacitiva debe ser conectado e un sistema as. Si se conectase una fuente de tensin constante al pin AREF, no se deberan usar las otras referencias de tensin en la aplicacin, ya que sern cortadas por la tensin externa.

97

Captulo 1

Motivaciones del Proyecto

Si so se aplicase una tensin externa al pin AREF, entonces se debe elegir entre AVCC o los 1.1V como tensiones de referencia. Despus de conmutar la tensin de referencia, la primera medicin de ADC ser imprecisa, por lo que el usuario debe descartar dicho resultado.

f) El Preescalado y el Tiempo de conversin Por defecto, el circuito de aproximaciones sucesivas requiere la entrada de una seal de reloj de entre 50kHz a 200kHz para obtener la mxima resolucin. En caso de que se necesite una resolucin mayor a 10bits, dicha seal de reloj deber ser mayor de 200kHz para alcanzar una mayor tasa de muestreo.
El mdulo de conversin Analgico-Digital contiene un preescalador que genera una frecuencia de reloj aceptable de cualquier frecuencia de CPU por encima de 100kHz. Dicho preescalador puede configurarse con los bits ADPS en el registro ADCSRA. El preescalador empieza a contar desde el momento en el que el ADC es encendido mediante el bit ADEN del registro ADCSRA, y se mantiene en funcionamiento mientras ste se encuentre a 1, resetendose cuando ADEN se ponga a 0. Cuando se inicia una conversin single ended poniendo ADSC=1 en el ADCSRA, la conversin comienza en el siguiente flanco de subida de la seal de reloj del ADC.

La Captura de la Temperatura
Pese a que finalmente la captura de la seal del anemmetro se ha hace con el Convertidor Analgico/Digital porque se cambi el sensor y se us finalmente uno digital, la captura de la temperatura si se hace usando el mencionado CA/D. Los parmetros del CA/D para la captura de la seal del Sensor de Temperatura con una configuracin en Modo de terminacin nica y una resolucin de 10 bits, y con el muestreo de seal realizado a la mnima frecuencia de muestreo posible en modo rfaga.

Figura 18: Fotografa del sensor de temperatura del AvrButterfly (Resistencia Negativa de Tensin)

La captura se realiza haciendo una rfaga d conversiones A/D de 8 muestras, y promediando las (sumndolas y dividindolas entre 8), ya que como la temperatura es una magnitud con una inercia muy grande, al promediarla se est eliminando el ruido detectado en las conversiones.

98

Captulo 1

Motivaciones del Proyecto

Bibliografa del Captulo


Referencia Descripcin ATmega169V Reference Manual Ref. Doc: 2514IAVR10/03 (Documento Imprescindible) http://www.atmel.com [CAD-01] [CAD-02] Ayuda de Matlab para comprobacin de funciones estadsticas
http://www.mathworks.com/access/helpdesk/help/toolbox/daq/c1_int13.html

Fecha

Ayuda sobre captura de seales y sobre entradas con resistencia Pull-Up http://www.iotech.com/sensors9712.html Ayudas para programar en Lenguaje C: http://www.drpaulcarter.com/cs/common-c-errors.php#2.3.2 http://www.plethora.net/~seebs/faqs/c-iaq.html AVR Butterfly Application code port to avr-gcc by Martin Thomas (Documento Imprescindible) http://www.siwawi.arubi.uni-kl.de/avr_projects/ Pgina de Ayuda al desarrollo de sistemas basados en microcontroladores Avr, y principal ayuda en la obtencin de documentacin para este proyecto (Documento Imprescindible) http://www.avrfreaks.com/ Comunidad y Foro de Dudas tcnicas sobre programacin de microcontroladores en GCC y dudas sobre diseo hardware. http://www.avrfreaks.com/forum Topics: Avr Butterfly Real Available Pins Timer0_callback funtion in AVR Butterfly Port with GCC ? Jos Juan Lpez tiene en el foro el pseudnido de sequan Pgina de Ayuda del compilador C para Avr utilizado GNU GCC Compiler http://www.gnu.org/home.es.html Otros Compiladores de C para microcontroladores Atmel Avr: IAR Embedded Workbench http://www.iar.com/ CodeVision C Compiler http://www.hpinfotech.ro/html/download.htm ImageCraft C Embedded Compiler http://www.imagecraft.com/software/ WebRing (Enlaces relacionados) de AVR http://r.webring.com/hub?ring=avr

[HLPC-01] [HLPC-02]

Agradecimientos
Martin Thomas , Ingeniero de por la Universitt Kaiserslautern Vertiefungsrichtungen, y programador de la portabilidad del cdigo de demostracin del AvrButterfly,escrito para IAR, al lenguaje C compatible con el compilador Gnu-Gcc. Jrg Wunsch , experto en programacin de microcontroladores Atmel, desarrollador del proyecto WinAvr con Gnu-Gcc, e incansable colaborador en el foro de avrfreaks, por su ayuda y orientacin en la resolucin de dudas relativas a la programacin del AtMega169. Alberto Prieto Lfkrantz, desarrollador en el pto. I+D de Indra Espacio, por su ayuda y orientacin a la programacin en el lenguaje C++ utilizado para la consola terminal del Pc utilizada para a transferencia de datos desde el Prototipo Rv1 al Pc.

Escuela Superior de Ingenieros de Sevilla www.esi.us.es Avda.de los Descubrimientos,s/n 41092, Sevilla, Espaa

Universidad de Sevilla www.us.es Paseo del Rectorado, s/n Sevilla, Espaa

Departamento de Automtica y Robtica www.us.es Avda.de los Descubrimientos,s/n Sevilla, Espaa

Jos Juan Lpez Ruiz www.josejuanlopez.xs3.com Sevilla, Espaa

99

También podría gustarte