viernes, 30 de mayo de 2008

Día Décimoprimero (11°) - 30/5/08

Comenzamos el día con la consigna de comprender y hacer buen uso de los Arrays y lograr comprender y aplicar el manejo de la memoria EEPROM (memoria no-volatil) interna que posee nuestro PIC. Averiguamos las distitnas instrucciones de BASIC que permiten este manejo e intentamos llevarlas a la práctica con un programa simple que incluyera Arrays. Estas funciones se llaman:

READ
WRITE
EEPROM


Creímos que la instrucción EEPROM era la que nos ayudaría a grabar datos en la memoria y por lo tanto el programa contenía esta instrucción.
Al compilar el programa recibíamos un error referido a una variable. Como obteníamos este error de compilación no podíamos pasar el programa al PIC (cuando se produce un error de compilación el compilador no finaliza de generar el programa en lenguaje de máquina y por lo tanto no se puede programar un microcontrolador). Como el error tenía que ver con una variable supusimos que el error estaba en la lógica utilizada para el manejo del Array (que es la lógica que aprendimos para manejar arrays en C con Leandro Arcusin). Investigamos más y no encontramos ningún error aparente. Por lo tanto, descartada esta posibilidad, tuvimos la seguridad de que el error residía en como estabamos manejando la EEPROM. Desafortunadamente malgastamos mucho tiempo en tratar de hacer que el programa funcione sin verificar las instrucciones de manejo de memoria interna y finalizamos el día sin poder probar ningún programa en el PIC.

martes, 27 de mayo de 2008

Día Décimo BIS (10º II) - 26/5/08

El profesor Rubén Bernardoni estaba tomando examen de Electrónica Analógica por lo que tuvimos la hora libre y decidimos continuar avanzando con las funciones del PIC. Es así que probamos el programa que habíamos diseñado para las mediciones analógicas hacía ya varias clases y que nunca habíamos podido probar debido a que hubo problemas con la comunicación "ChipMax<-->PC". Cargamos ese programa y reordenamos el circuito. Este consistía en el PIC, un preset cuyo punto medio estaba conectado al RA0 (Puerto Analógico 0) y un LED conectado (a través de una R de 330Ω) al RB0 (Bit 0 del Puerto B). El PIC16F819 posee conversores ADC (Analog To Digital Converter - Conversor Analógico/Digital) lo cual permite hacer mediciones sin necesidad de más componentes. La conversión que elegimos nosotros se efectua en 8 bits por lo cual el resultado puede ser de 0 a 255 y son equivalentes el 0 a la masa del circuito y el 255 a la VDD. Por lo tanto, haciendo regla de 3 simple, un escalón equivale a 0,02V o 20mV. Aquí la programación.
La Configuración Inicial la obtuvimos de los archivos de ayuda (Help Topics) del MicroCode Studio. El programa checkea constantemente la tensión del RA0, si esta es menor que 128 (o sea la mitad de V
DD (2,5V) enciende el LED, si es mayor lo apaga. El programa anduvo a la perfección.
Continuamos avanzando, decidimos integrar las mediciones analógicas con la comunicación con la PC. Aquí la programación.

El programa se comunica con el usuario a través de HyperTerminal y le avisa que presione M si quiere obtener la medición. Si presiona M (o m) el programa devuelve el valor de B0 y avisa que hay que multiplicarlo por 0,02V para obtener el Voltaje. Mas adelante utilizaremos un entorno programado por nosotros que nos permitirá presentar los datos de una forma mucho mas ordenada y legible. El programa funcionó a la perfección. El PIC quedó convertido en un Voltímetro (De 0V a 5V).

viernes, 23 de mayo de 2008

Día Décimo (10º) - 23/5/08

Volvimos a intentar programar el PIC desde la PC, fallamos nuevamente. Este resultado era frustrante ya que no era la primera vez que fracasábamos en programar el PIC cuando antes lo habíamos logrado sin mayor grado de dificultad. Mariano Foullier nos sugirió que el problema que podíamos estar experimentando era a causa del ChipMax (Grabador de memoria) y la PC (fallas en la comunicación entre estos). Solicitamos la Notebook y procedimos a utilizar el ChipMax desde allí. El programa funcionó a la perfección.



Rápidamente nos avocamos a recuperar el tiempo perdido en las clases anteriores y comenzamos a investigar acerca de las funciones que necesitábamos. Encontramos la página TODOPIC.COM que básicamente es una traducción de los Help Topics (Temas de Ayuda) del MicroCodeStudio y nos fue muy útil (junto con la ayuda de Mariano Foullier) para interiorizar las nuevas instrucciones que utilizaríamos. Estas eran las instrucciones de comunicación con la PC. Primero nos avocamos a comprender y utilizar la función SEROUT, que manda bytes en serie por uno de los bit's de algún puerto. Una vez hecho el programa lo bajamos al PIC (esta vez desde la Notebook) y anduvo a la perfección. La comunicación se realizaba a través de HyperTerminal (Software que permite utilizar en COM1 para comunicarse usando distintos protocolos). Aquí la programación.
De esta forma el programa mostraba por HyperTerminal cada medio segundo el mensaje"Hola Edgar, lo hicimos andar! Iteracion: #X" Donde X es la N vez que se repetía el loop. Esto significó un avance muy grande para nosotros, pero seguimos investigando y nos propusimos cerrar el día habiendo programado una comunicación de 2 vías (Ida y Vuelta, PC<-->Micro). En la página previamente mencionada nos informamos de la función SERIN, que recibe bytes en serie por uno de los bit's de algún puerto. Una vez programado lo pasamos al PIC y anduvo a la perfección. El programa preguntaba si había alguien y si se respondía "SI" tenía una respuesta particular, si se respondía algún otra cosa respondía con la misma respuesta siempre. Aquí la programación.

Terminamos el día con un gran avance. Nos restaba las mediciones Analógicas y aprender a hacer un sistema de adquisición de datos.

Día Noveno (9°) - 16/5/08

El profesor Edgardo Baez nos trajo dos PIC16F819 completamente nuevos.
Para tratar de programar uno de los PIC's, abrimos todos los programas, y tratamos de cargarle una programación muy básica, que consistía en prender y apagar constantemente un LED.
Al tratar de cargar el programa en el PIC, nos topamos con un error del MaxLoader (Software del Grabador de memoria), que no reconocía el PIC, pero era porque no lo habíamos configurado previamente, así que configuramos todo debidamente y cargamos el programa.
Igualmente una vez hecho todo el circuito en el protoboard no prendía el LED. Mediante ningún medio logramos correr el programa dentro del PIC.
Decidimos no estancarnos con eso y pasar a hacer alguna otra parte del proyecto. Es así que comenzamos a probar los sensores viejos de presión que fueron montados en los años anteriores. Para eso cortamos la cobertura plástica de un cable de red y lo utilizamos como "tubo" para colocar en la boquilla de los sensores y así poder variar la presión utilizando nuestra boca, ya sea soplando (aumenta la presión) o aspirando (disminuye la presión).
La plaqueta armada en el 2006 no funcionaba. La del 2007 presentaba variaciones al soplar o aspirar pero no habíamos calibrado el sensor, no poseíamos métodos para hacerlo, y tampoco sabíamos si lo estaba, es así que la calibración del sensor se postergó para otra ocasión, para saber si las variaciones efectivamente respondían a la fuerza que soplábamos.

Existe la posibilidad de que rearmemos la plaqueta con un sensor nuevo y con un diseño propio.

viernes, 9 de mayo de 2008

Día Octavo (8°) - 9/5/08

No pudimos conseguir otro PIC para este día, nos dedicamos a averiguar proveedores que nos pudieran suplir con tal instrumento. El precio promedio que conseguimos fue de 5 U$S aprox. Mientras tanto estuvimos a punto de programar otro PIC que nos dió Mariano Foullier para seguir practicando y aprendiendo programación, pero este PIC (16F628A) carece de ADC y éso lo volvía significativamente diferente del 16F819, solo poseía comparadores y programar este PIC significaba usar una lógica distinta de la que tendríamos que usar para el PIC que utilizamos y por lo tanto nos limitamos a programar en la computadora.
A su vez, nos dedicamos a preparar un cable que nos permitiera conectar algunos pins del PIC al puerto serie de la computadora para comenzar a programar un sistema de envío de datos con una PC. Partiendo de un cable de Mouse viejo, lo cortamos (descartamos el conector que venía con el cable ya que no usaba los pins indicados). A partir de un DB-9 nuevo y los conductores que venían dentro del cable de Mouse armamos un conector polarizado (para evitar conectarlo al revéz).

viernes, 2 de mayo de 2008

Día Séptimo (7°) - 2/5/08

Preparamos todo el circuito para hacer una nueva prueba de programación. Pero antes probamos si seguía cargado el programa de la semana anterior. Cuando hicimos la conexión y testeábamos su funcionamiento, vimos que por alguna parte del circuito salió un poco de humo. Inmediatamente apagamos la fuente y comenzamos a buscar la falla. Nos dimos cuenta que la fuente estaba en 6v.
Al ver que el programa seguía funcionando correctamente (a 5v) intentamos reprogramar, cargamos el siguiente programa y pudimos (aparentemente) hacerlo. Generamos 2 nuevos programas mas simples para saber si la falla era de programación, pero ni siquiera los programas mas simples andaban. Es asi que consultamos con un profesor para ver que sucedia.
El profesor Leitner nos explicó que si bien el programador del PIC podía no devolver errores, podría haberse quemado un registro (o varios) que no permiten correr un programa nuevo (esto explica por que el programa siguió andando hasta que le cargamos otro).
Es así que empezamos una búsqueda, de un nuevo PIC, que lamentablemente no teniamos y empezamos a buscar distribuidores del mismo.
Luego nos acordamos que en el departamento de Fisica, había uno que no estaba en uso, así que lo fuimos a buscar para el día siguiente.