viernes, 5 de diciembre de 2008
Guía De Programación en BASIC
Sin más, les dejo la portada de la Guía:
Les queremos comentar que esta guía fue hecha sin ánimo de lucro y que es enteramente producto de nuestro trabajo. No es una traducción, todo el material es original.
Por lo tanto esta guía es completamente gratuita para aquel que la necesite o desee tenerla. La guía no se encuentra en Internet ya que carecemos de un servidor ftp propio y porque deseamos hacer un seguimiento de esta, es decir, saber quienes son aquellos que piden nuestra guía.
Es por esto que aquél que la desee puede enviarme un mail a mi (Ezequiel) a ezewajs@gmail.com o a Matías a mmaravankin@gmail.com para pedirnos la guía que será enviada a la brevedad. El peso de esta es de 381Kb, por lo tanto puede ser enviada tranquilamente por e-mail. La guía posee un Menú y Bookmarks jerarquizados que permiten navegar por ella más fácilmente. Basta con clickear el título deseado en el menú para que la guía se sitúe automáticamente en la hoja deseada.
Esperamos que sea de ayuda para aquél que la solicite.
Sin más nos despedimos.
Matías Maravankin y Ezequiel Wajs
lunes, 17 de noviembre de 2008
Día del Vuelo - 30/10/08
Luego del viaje de aproximadamente hora y media, llegamos a San Vicente donde nos reunimos junto a dos escuelas mas y distintos miembros de la ACEMA.
El predio pertenece a Guillermo Descalzo, también miembro de la ACEMA.
Ni bien llegamos armamos la carpa donde pondríamos todo nuestro instrumental.
Una vez desempacado todo lo traído del micro, presenciamos algunos lanzamientos, desde su éxito total hasta su destrucción contra el suelo.
Mas tarde, junto con Leandro Arcusin nos dispusimos a probar los programas de emergencia realizados la noche anterior.
Al principio y sin saber porque, los PIC's calentaban demasiado al conectarlos en la placa y aplicarle tensión. Es por esto que rehicimos los conexionados auxiliares (que eran cables y resistencias agregadas a ultimo momento de manera rudimentaria) con mas cuidado.
Los conexionados auxiliares consistían en cables y una resistencia que salían directamente de los ejes utilizados para la alimentación (tornillos largos de bronce que atraviesan todas las placas) e iban a algún puerto del PIC para retornar de la misma manera al otro eje.
Luego de este retoque, el programa auxiliar HPWM8 comenzó a funcionar correctamente.
La forma que utilizamos para detectar el funcionamiento, fue usar una antena creada por alumno de 4to año de electrónica que vinieron con nosotros al campo. Esta antena recibía una señal y emitía un tono de la misma frecuencia por unos auriculares. De esta forma cuando variaba la presión, variaba el sonido. Mientras mas alto estaba el cohete, mas aguda debería sonar el tono de la antena y mientras mas bajo, mas grave.
Contentos con lo que pudimos llegar a improvisar, nos fuimos a almorzar un buen asado.
Después del almuerzo, continuamos dándole retoques finales a la placa.
Nuestro mayor desafío, fue el de montar algún tipo de sensor que nos permitiera detectar el despegue. Para ello, utilizamos dos contactos metálicos, separados por un recorte aislante improvisado. Este recorte, por medio de un hilo, salia del cohete y se ataba a la base, de esta manera al despegar el cohete se arrancaría el aislante y las dos placas entrarían en contacto, detectando así el despegue. Esta tarea no fue fácil, ya que nos vimos dificultados por la estructura del cohete y por la ausencia de un hilo resistente al tirón del despegue. Tal fue la incertidumbre, que no supimos si iba a funcionar hasta el momento del despegue.
Llegada la hora de despegue de nuestro cohete que casi no tiramos por la ausencia de cabezales que encajaran en nuestro cohete. Una vez resuelto este problema, lo llevamos hasta la base de lanzamientos, lo colocamos y nos retiramos a una distancia prudencial.
El lanzamiento fue un éxito y pudimos oír el ascenso y descenso del cohete por medio de la antena antes nombrada.
Felices por lo logrado, nos volvimos hacia el colegio, terminando la jornada no de la mejor manera( porque hubiéramos preferido tirar el cohete con el programa final), pero de todas formas alegres. Les dejamos unas fotos de este memorable evento:
Armando la carpa, Maravankin nos señala el Norte.
Secretos en reunión es mala educación.
Uno de los despegues.
EL asado.
Gracias Leandro por todo lo que nos enseñaste.
Con cariño Mati y Wajs.
Los alumnos que hicieron la antena... y la antena.
Leandro y Ezequiel dando los ultimos retoques.
Matias vigila que ningun asteroide nos arruine la tarde.
Todos.
Matias Maravankin y Ezequiel Wajs.
martes, 11 de noviembre de 2008
Noche Previa al Vuelo - 29/10/08
- HPWM10
El programa toma una medición en 10 bits, la emite por un PWM donde la frecuencia de este es 1000 mas 2 veces el dato medido (igual que en el protocolo), también las reduce a 8 Bit's mediante una operación bastante grosera (ya que lo correcto hubiera sido dividir el dato por 4) y la guarda en la EEPROM.
- HPWM8
El programa toma una medición de 8 bits, la emite por un PWM donde la frecuencia de este es 1000 mas 4 veces el dato medido (parecido al protocolo) y luego las guarda en la EEPROM.
- Almacenamiento
El programa toma y almacena mediciones de 8 bits
Aquí los programas:
Ultima Posibilidad
lunes, 10 de noviembre de 2008
Día Trigesimosegundo (32º) - 24/10/08
Edgardo nos comentó que no estaba muy satisfecho con los rangos con los que trabajaba nuestra placa de altímetro y que prefería utilizar la del año pasado que tenía incluido un potenciómetro que permitía regular el rango de salida. Es por esto que utilizamos el mismo método explicado en el post anterior para calibrar el viejo altímetro, logramos obtener un rango que llegaba hasta los 5V (Límite de los conversores Analógico-Digital del PIC) y partía de un voltaje más bajo que el del Altímetro fabricado por nosotros. Nos dispusimos a grabar 5 PICs, 2 con programas auxiliares que se límitaban a transmitir por antena el Dato que estaban midiendo (en 8 Bit's, para simplificar el funcionamiento, ya que es sólo un programa Auxiliar) y a guardarlo en la EEPROM y otros 3 con el programa principal que contiene las siguientes funciones, todas integradas y de funcionamieto cuasi simultaneo:
- Toma de datos en 10 Bit's (1024 posibles valores)
- Detección y Aviso de Despegue y Medición de Altura Inicial
- Promediado de Datos (Se hace un promedio de 3 datos consecutivos, baja el error)
- Procesamiento de Datos (Por programa la Altura del Suelo se vuelve 0)
- Procesaimiento de Datos para Transmisión en RF (Para adaptar al Protocolo)
- Procesamiento de Datos para Almacenamiento (Se reduce a 8 Bit's)
- Guardado de Datos en la EEPROM (en 8 Bit's)
- Busqueda de Apogeo (Constantemente chequenado la trayectoría balística)
- Subrutina de Apogeo (Simplificada, para mejor funcionamiento en el descenso)
- 2 Programas en 1 ("Fase de Vuelo" y "Conexión a Computadora")
- Programa Interactivo de Conexión a PC para recuperación de Datos
- El dato iría montado en un PWM y sería proporcional a la frecuencia de este.
- El Duty Cycle (Ciclo de Trabajo) discriminaría si el cohete estaba en vuelo o en tierra.
- Las Frecuencias irían de 1000Hz a no más de 3048Hz
- El dato (entre 0 y 1024, realmente menos por el procesamiento que recibe en el PIC) sería multiplicado por 2 y luego se le sumaría 1000 y de esta forma se obtiene la frecuencia del PWM.
Aquí la ecuación: F(d) = d*2 + 1000
- A la frecuencia medida se le resta 1000 y se la divide por 2 y se obtiene el dato (entre 0 y 1024, realmente menos por el procesamiento que recibe en el PIC).
Aquí la ecuación: D(f) = (f - 1000)/2
Aquí el código de programación:
Programa Final V3
El "Programa Final V3" (como lo llamamos, ya que tuvo otras dos versiones anteriores que fueron modificadas) era demasiado complejo para poder probar en el laboratorio ya que había muchas condiciones y variables a simular que para medir en el Protoboard y con antenas receptoras era demasiado engorroso, se necesitaba el Cohete con su infraestructura (el programa estaba pensado con esa filosofía y por lo tanto allí es donde debía ser probado), y más allá de que no disponíamos del cohete en ese momento, hubieramos necesitado que este se eleve, cosa que no podíamos simular. Es por esto que fuimos probando porciones del programa adaptadas especialmente para ser probadas en el laboratorio independientemente de las demás.
Desafortunadamente nos llevamos la sorpresa de que la emisión de datos por RadioFrecuencia no estaba funcionando nada bien. Como no podíamos encontrar el error en la programación, ni siquiera con la ayuda y la pericia de Edgardo Baez y Leandro Arcusin (2 profesores letrados en el tema) hicimos varios cambios consecutivos de Antenas de transmisión y antenas de recepción (estas últimas de laboratorio, para probar si el PIC emitía realmente los datos) y sin embargo no lograbamos recibir cosas coherentes, sino más bien ruido.
Después de un buen rato Leandro Arcusin notó que el PWM estaba variando constantemente y sin pausa, y nos recomendó poner una pausa luego de modificarlo para que no sea pisado constantemente por el dato que sucede al actual. La corrección que nos dió era correcta, pero el programa seguía sin funcionar. Cabe destacar que nos quedamos hasta mucho después del horario escolar que nos correspondía, de hecho era más del doble de tiempo que teníamos ese día en el colegio. Luego de mucho tiempo decidimos asumir que quizá habían errores al operar con el dato para aplicar el protocolo, luego probando, nos dimos cuenta que por alguna razón externa a nosotros el compilador no manejaba correctamente la multiplicación ni la división, haciendo que los registros se cargaran con valores que no estaban permitidos en el protocolo y que las antenas no podían emitir por un impedimento físico. De esta forma concluyó nuestro día con un final muy desalentador, no teníamos un programa útil para cargar en el Cohete ni podíamos hacer nada a nuestro alcance para arreglar nuestro programa, que habíamos programado asumiendo que el compilador haría exactamente lo que le decíamos. Nos retiramos a nuestras casas ya que nos habíamos quedado hasta tan tarde que comenzaban las clases del Instituto Tecnológico que funciona en nuestro colegio por las noches y debíamos liberar el Aula. Damos las gracias a Edgardo y a Leandro por haberse quedado con nosotros y habernos ayudado.
viernes, 7 de noviembre de 2008
Día Trigésimoprimero (31º) - 17/10/08
Para calibrar el circuito debíamos simular los niveles de presión por los que pasaría el cohete una vez en vuelo, es por eso que utilizamos una campana para crear vacío y generar los posibles valores de presión. La idea original se basa en el método obtenido en la página de Guillermo Descalzo. Esta consiste en un frasco totalmente sellado, excepto por dos agujeros por donde pasarán mangueras, del que se succionará el aire para simular distintos niveles de presión. Al succionar, el agua se abre paso por
En base a los niveles de agua que se presentaban, utilizamos una tabla de equivalencias realizada por Guillermo Descalzo en donde se establecía una altura para cada nivel de agua. Esta es la tabla de equivalencias de Guillermo Descalzo:
El sensor de presión se encarga de asignar un valor de tensión a un determinado valor de presión atmosférica. El circuito estaba conformado por unas resistencias que realimentadas al amplificador hacían que la salida alcance los 5v, pero cuando lo llevamos a la practica no llegábamos ni a 4v y luego de
lunes, 3 de noviembre de 2008
Día Trigésimo (30º) - 10/10/08
1. Limpiado y lijado de la Placa sobre la cara de cobre.
2. Planchado del circuito ya impreso con Toner en una hoja especial sobre la placa de cobre.
3. Separado de la hoja de la placa de cobre dentro de un recipiente de agua fria.
Subproducto: Placa de cobre con las pistas de Toner cubriendo parte de su superficie.
4. Sumergido de la placa con las pistas en un tanque de Cloruro Férrico durante 20 minutos.
5. Retirado de la placa del tanque de Cloruro.
6. Enjuagado de la placa.
Subproducto: Placa con el cobre disuelto, salvo en las partes bajo el toner.
7. Removido mediante el lijado de las partes con toner.
Subproducto: Placa con las pistas de cobre.
8. Recubrimiento de la cara de cobre con ContacFlux.
9. Agujereado de los pads y demás orificios necesarios.
Subproducto: Placa final vacía.
10. Montado de los componentes en sus respectivos lugares.
11. Soldado de los componentes.
Producto Final: Circuito Impreso.
Día Vigésimonoveno (29º) - 3/10/08
Le sustituimos los conectores cortados del sensor, por alambres nuevos y lo colocamos en el protoboard, para ver el desempeño del sistema entero.
Conseguimos amplificar las mediciones de variaciones de presion, traduciendolas en variaciones de tensión que son más apreciables que las de la salida del sensor que es de unos pocos miliVolt (mV), de esta forma el PIC puede apreciar con menor error la medición que se está realizando, ya que el PIC mide de 0 a 5 Volt y con una resolución de, como máximo 10 bit's, es decir, 1024 escalones por lo que el escalón más pequeño es de 5V/1024 que es aproximadamente 4 mV . Si no hubieramos amplificado la salida del sensor la medición sería realmente muy vaga. Amplificandola conseguimos un mayor grado de certeza.
viernes, 31 de octubre de 2008
Día Vigésimoctavo (28º) - 26/09/08
Primero diseñamos un circuito nosotros, es decir con un dibujo esquemático desde cero, que usaba 4 operacionales y por ese motivo, 2 integrados (cada integrado tiene 2 operacionales). Pero al compararlo con el diseño del año pasado, que en su momento anduvo bien pero no disponíamos de él porque el oxido se encargó de arruinarlo, notamos que el diseño tenia 2 operacionales, es decir, un solo integrado, siendo el diagrama mucho mas pequeño.
Es así que recreamos el circuito del año pasado en un protoboard, ya que era mas compacto (característica importante a la hora de meterlo dentro del cohete), y lo quisimos probar, pero no disponíamos de un sensor de presión como el que necesitábamos.
Igualmente sabíamos que el circuito funcionaba por los resultados obtenidos el año pasado, y a pesar de que no lo pudimos probar en el protoboard, imprimimos el circuito para poder hacer la placa en un futuro.
Día Vigésimoseptimo (27º) - 19/09/08
Bajamos el programa al PIC y probamos distintas situaciones iniciales del sistema, en el protoboard. En absolutamente todas el PIC detectó solamente la descarga del capacitor, cumpliendo con lo previsto por el programa.
Día Vigésimoquinto (25º) - 5/09/08
Día Vigésimocuarto (24º) - 29/08/08
El PIC que utilizaba el transmisor distorsionaba la señal, es por eso que hicimos un corto con un cable, desde una pata del PIC a otra, solucionando así el presunto problema, pero al probarlo seguía sin emitir.
Hicimos otra prueba del programador, subiendo un programa mas complejo que el anterior y funcionaba muy bien.
Día Vigésimotercero (23º) - 22/08/08
Estuvimos tratando de solucionar este problema pero sin ningún logro.
Probamos el programador terminado la clase anterior, pero nos encontramos con el problema de que el cable antes hecho, que va desde la placa programadora al protoboard tenia una longitud mayor a la necesaria y esto causaba un problema de atenuación en la señal.
Luego de solucionar el problema, lo probamos pasándole un programa básico al PIC, hecho anteriormente que hacia titilar un LED, y todo anduvo a la perfección.
lunes, 6 de octubre de 2008
Día Vigésimosegundo (22º) - 15/08/08
Terminamos de preparar los cables, es decir, crimpearlos y soldarlos al conector del puerto paralelo y con esto finalizamos el cable que va de la computadora a la placa programadora y el que va de la placa programadora al protoboard donde esta el PIC a programar.
Terminamos de soldar los últimos componentes de la placa programadora y poner el PIC.
martes, 23 de septiembre de 2008
Día Vigésimoprimero (21º) - 8/08/08
Día Vigésimo (20º) - 1/08/08
Día Decimonoveno (19º) - 25/7/08
El primer programa, lo llamaremos Apogeo 1.0, consistía en la siguiente secuencia de programación:
- Se crea una variable de un solo Byte llamada Index y un array 16 de Bytes llamado Array
- Index se inicializa en 00 y se utiliza para direccionar a Array
- Se ingresa un dato en Array{Index}
- Se incrementa Index
- Se ingresa otro dato en Array{Index}
- Se compara Array{Index} con Array{Index-1} si es mayor Array{Index-1} se vuelve a empezar, sino continua
- Se incrementa Index nuevamente
- Se ingresa un tercer dato en Array{Index}
- Se realiza la misma comparación, si es mayor Array{Index-1} se vuelve a empezar, sino continua
- Apogeo Detectado (Sub-rutina de Apogeo)
Es decir, el programa tomaba una muestra, luego otra, y las comparaba, si la primera era mayor que la segunda, el cohete estaba descendiendo, para evitar que el ruido haga activar la rutina de apogeo se tomaba una tercera muestra que compruebe definitivamente el descenso del cohete. Este programa era altamente falible y de hecho nunca anduvo como debía.
Es por esto que programamos el programa que llamamos Apogeo 2.0, cuya secuencia de programación era:
- Se crea un Array de 16 Bytes y una variable de 1 Byte que lo direcciona, son Array e Index.
- Se crea una variable de 1 Byte usada para contar llamada Cont inicializada en 0.
- Se inicializan todos los elementos en 0
- Se ingresa el primer dato en Array{0}
- Se rotan todos los datos hacia el final del Array (Array{0} pasa a Array{1}, etc.) el último dato se pierde.
- Se comparan los datos contiguos desde el principio del Array hasta el final, si los valores van en ascenso es porque el cohete va en descenso, cada vez que hay un descenso de un valor al contiguo se suma Cont.
- Si al finalizar la comparación de todo el Array Cont es 3 o más, se ejecuta la subrutina de apogeo. Si no, se ingresa otro dato en Array{0} y se sigue desde ese paso.
Este programa era mucho más efectivo. lo que hacía era ir ingresando los datos de a uno en un Array vacío y compararlo con los demás. De esta forma, cada vez que se ingresa un dato, se ejecuta la comparación completa del Array. Hasta que no haya 3 descensos seguidos, no se salta a la sub-rutina de Apogeo. Este programa si funcionó correctamente y cumple con nuestras necesidades.
lunes, 22 de septiembre de 2008
Dia Decimooctavo (18°) - 18/7/08
Concurrimos al acto realizado, en memoria de las victimas.
viernes, 19 de septiembre de 2008
Dia Decimoseptimo (17°) - 11/7/08
Circuito RC:
Gráfico de la señal durante la Carga (Interruptor cerrado) versus descarga (Interruptor abierto):
Por otra parte, terminamos de soldar el circuito que nos permitiría programar el PIC sin utilizar el ChipMax ni sacarlo del Protoboard (mencionado en el post anterior).
Por último nos dispusimos a probar el circuito altímetro para ver como sería el funcionamiento de este. A efectos de hacerlo solicitamos una Campana de Vacío que nos permite reducir la presión del aire dentro de ella y de esta forma simular altura en el altímetro (recuerde que el altímetro es en realidad un circuito medidor de presión).
Campana de Vacío: Ninguno de los dos sensores funcionó correctamente, en un futuro deberemos rediseñarlos.
lunes, 1 de septiembre de 2008
Día Decimosexto (16°) - 4/7/08
Es por esto que el proyecto se vera ralentizado debido a que semana de por medio faltará uno de los dos integrantes.
Matias se avocó al desarrollo de una plaqueta y su correspondiente set de cables que permitirán reemplazar definitivamente al módulo programador de memorias ChipMax debido a que este no suele funcionar en las nuevas computadoras del laboratorio y nos fuerza a utilizar una Notebook que resulta incomoda para trabajar en el aula debido al cableado que requiere para funcionar como una máquina cualquiera de la red. Esta plaqueta programadora se comunica con la computadora sirviendose del puerto paralelo. Esta nueva plaqueta nos permite programar el PIC sin retirarlo siquiera del Protoboard haciendo la programación mucho más velóz. Dedicó el resto del día en la puesta a punto de la placa de cobre/fibra de vidrio para luego someterla al tratamiento con Cloruro Férrico que más tarde daría a lugar al circuito impreso sobre el cual montar los componentes de la plaqueta.
A pesar de estar a más de 800Km. el grupo estuvo en contacto mediante Internet. Ezequiel pidió prestada una computadora de la Universidad mientras que Matias utilizó una del Laboratorio, la comunicación fue posible gracias a un cliente de mensajería instantanea que permitió un ida y vuelta de ideas y datos en vivo. Ezequiel Wajs realizó en Rio Cuarto un programa que detectara el apogeo del cohete es decir el punto más alto que alcanzará en vuelo. Suponiendo que la gravedad será la única fuerza que actuará sobre el cohete luego del impulso inicial proveido por el combustible explosivo (y descartando los cambios de momento que causará la pérdida de masa a medida que el combustible se queme), el vuelo del cohete podrá representarse en función del tiempo con forma de parábola, cuyo vértice será el punto más alto de la trayectoria. Aquí un ejemplo aunitario de la parabola que representa la trayectoria del cohete:Cabe destacar que lo que se ve en el gráfico es la Altura en función del Tiempo, el desplazamiento (teóricamente) se realiza completamente sobre la misma linea recta que es aquella vertical en la cual se lanza el cohete y no un gráfico que denota desplazamiento en el eje X e Y.
viernes, 29 de agosto de 2008
Día Decimoquinto (15°) - 27/6/08
Los datos que se necesitan transmitir son del acelerador y el altimetro, para asi poder detectar el apogeo del cohete y poder expulsar la caja hermetica que tomaria una muestra del aire a esas alturas, para luego poder analizarlo.
Para poder transmitir los datos con la mayor fidelidad posible, se estuvo pensando en un codigo que consistia en mandar dos bytes, el primero con la primer parte del dato de altura, precedido por un protocolo que lo identificaba el principio del dato 010XXXXX, y la segunda parte seguida de otro protocolo de bits, identificando el final del dato XXXXX101
Al tener el codigo para mandar, luego de diseñar un sistema bastante fiable, se empezo con la programacion que requería dicho codigo para ser transmitido.
Tambien se habló con Martin Rinemberg algunos de los protocolos que usamos, como la frecuencia y el codigo que se decidió utilizar, para que él los pueda aplicar en su proyecto.
Luego de terminar el programa que utilizaba el codigo, utilizamos el Realterm porque el Hyperterminal de Windows no esta programado para poder decodificar señal en binario.
Es asi que luego de conectar la placa con la pc, pusimos en practica nuestro programa y notamos que fue un total exito.
viernes, 27 de junio de 2008
Día Decimocuarto (14°) - 20/6/08
En el 2 Bloque Martín se acercó comentando que no lograba comunicar las PC's de ninguna forma. Es por esto que abrimos el cable y nos dimos cuenta de que habíamos leido los pins al revéz. Arreglamos el cable y sus programas comenzaron a funcionar.
Día Decimotercero (13°) - 13/6/08
viernes, 20 de junio de 2008
Programación
Cómo bien aclaramos previamente, programaremos nuestro PIC (por elección propia) en un lenguaje de programación que se llama BASIC. Un lenguaje de programación es un lenguaje que se utiliza para controlar el comportamiento de una máquina, en nuestro caso el PIC. Consiste en un conjunto de símbolos, instrucciones y reglas sintácticas y semánticas que definen su estructura, su funcionamiento, interpretación y el significado de sus elementos y expresiones.
Las reglas sintácticas son aquellas que nos explican como debe ser escrito un programa en este lenguaje. Por ejemplo:
En C todas las instrucciones, declaraciones y/o funciones deben finalizar con un punto y coma, y las rutinas y estructuras de control marcan su inicio y fin mediante corchetes por lo tanto un buen programa de C podría verse así:La semántica nos da la noción de como deben ser escritas las declaraciones, instrucciones y/o funciones. Por ejemplo:
void main (void)
{
char variable;
printf("Hola mundo!");
getch();
}
En C las variables se declaran de la siguiente forma: "TIPO_DATO NOMBRE;" por lo tanto una buena declaración de variable en C sería:Los lenguajes de programación pueden ser clasificados de acuerdo a su "nivel", donde un lenguaje de alto nivel es aquel que se acerca más a las nociones humanas de la sintaxis y la semántica y un lenguaje de mas bajo nivel es aquel que se aleja mas de estas nociones. Por lo tanto un lenguaje de mas bajo nivel es de más difícil interpretación para un ser humano (obviamente de mejor interpretación para la máquina). El BASIC es un lenguaje de Alto Nivel (el C que es el lenguaje dado en las ejemplificaciones también es de alto nivel pero no tanto como el BASIC). Los lenguajes de programación se traducen a código de máquina (1's y 0's) para poder luego ser realmente interpretados por la máquina, esto, a veces, se hace mediante un programa que se llama "programa compilador". El nuestro es el PIC BASIC PRO (PBP). A continuación explicaremos las nociones básicas del lenguaje aplicadas a la programación de PIC's.
char variable;
- BASIC
VARIABLES: Sirven para almacenar datos y manejarlos pueden tener variados tamaños, desde un BIT a un par de Bytes. Deben ser declaradas de la siguiente forma: NOMBRE VAR TAMAÑO. Ejemplo: PERRO VAR BYTE. Acabamos de crear una variable a la cual en el resto del programa llamaremos como PERRO cuando la queramos usar y su tamaño es de 1 Byte (8 BIT's).
ENTRADAS/SALIDAS: Estos son generalmente pins, puertos o canales del PIC, pueden ser nombrados según su ubicación y posición. Ejemplo: portb.2. Donde lo que va despues del punto indica el Bit del puerto B que se utiliza (los puertos son generalmente de 8 Bits, por lo tanto es de 0 a 7). También se les puede asignar un nombre al igual que a las variables. Ejemplo: BOTON VAR portb.2. De esta forma cada vez que digamos BOTON el compilador interpretará que es el Bit 2 del puerto B.
ESTRUCTURAS DE CONTROL: Son aquellas que permiten interpretar y comparar datos y actuar de acuerdo a estas interpretaciones. Son varias y muy intuitivas y por lo tanto no ahondaremos en cada una de ellas, las que utilizamos son IF, WHILE y REPEAT-UNTIL y su estructura es:
DECLARACIONES: Son aquellas que actuan en el programa modificando distintas variables, estados y memorias, es decir, los comandos de acción que desencadenan una secuencia de pasos en el microcontrolador. Ejemplo1: HIGH portb.1 Ejemplo2: PERRO=PERRO+1.
IF (CONDICION) THEN
DECLARACION A
DECLARACION B
DECLARACION Z
ELSE
DECLARACION 1
DECLARACION 2
DECLARACION N
ENDIF
Explicación: Si sucede condición se ejecutan A, B y Z. Si no, se ejecutan 1. 2 y N, luego finaliza y se sigue normalmente con el programa.
REPEAT
DECLARACION1
DECLARACION2
DECLARACIONx
UNTIL(CONDICION)
Explicación: Se repiten las declaraciones 1, 2 y x hasta que se cumpla la condición indicada. Esta condición suele irse dando adentro de las declaraciones que contiene el bucle(una variable que se aumenta hasta llegar a un valor determinado, etc.).
WHILE (CONDICION)
DECLARACION1
DECLARACION2
DECLARACIONx
WEND
Explicación: Mientras se cumpla la condición se ejecutaran las declaraciones 1, 2 y x, una vez se deje de cumplir la condición, se sale del bucle.
Esta fue la introducción básica que esperamos permita comprender los programas que iremos haciendo. A continuación estan todos los programas hechos por el grupo:
viernes, 6 de junio de 2008
Día Décimosegundo (12°) - 6/6/08
Ahora sí, continuamos redactando lo que concierne a la actividad del día.
Durante la semana y por separado investigamos en nuestras casas (con los HelpTopics de MicroCode) y descubrimos nuestro error. Estabamos utilizando las instrucciones incorrectas o interpretando mal su funcionamiento. Logramos determinar el funcionamiento de las 3 instrucciones dadas previamente:
EEPROM:
Sirve para guardar datos en tiempos de compilación. Le indica al grabador de memoria que setee las direcciones indicadas de la EEPROM con los valores dados. Se hace una única vez (cuando se programa el PIC).
READ:
Sirve para leer datos en tiempos de ejecución. Es decir, para leer de la EEPROM datos almacenados en esta y guardarlos en variables que se encuentran en la memoría principal y se borraran una vez que se corte la alimentación del PIC.
WRITE:
Sirve para escribir datos en tiempos de ejecución. Es decir, para guardar datos almacenados temporalmente en variables que se encuentran en la memoría principal y se borraran una vez que se corte la alimentación del PIC.
Por lo tanto las instrucciones que necesitabamos eran READ y WRITE y no EEPROM ya que nosotros queremos guardar datos que se obtendran mientras el PIC se encuentra activo (de hecho el PIC es el dispositivo encargado de obtener estos datos).
Decidimos que el uso de Arrays era innecesario ya que de hecho se podía reemplazar por solamente 2 variables (recordando que un array es un conjunto de variables direccionable y por lo tanto supone utilizar mas espacio en memoria que solo 2 variables). Hicimos un programa utilizando variables normales (de un Byte de tamaño u 8 Bit's) que pudo ser compilado y pasado al PIC. El programa anduvo a la perfección. Aquí la programación.
Es el programa mas complejo que programamos hasta ahora y consiste en varias etapas que explicaremos:
El PIC se conecta a la PC mediante el cable que armamos y una vez prendido envía el siguiente texto que se lee por HyperTerminal:
LUEGO DE PRESIONAR UNA TECLA TIENE 2 SEGS.
SI PRESIONA EL BOTON LEE, SI NO GRABA.
REINICIE EL PIC CUANDO SE ENCIENDA EL LED POR 2 VEZ.
Esto le indica al usuario lo que debe hacer:
Una vez que el usuario presiona una tecla del teclado (cualquiera), el PIC le da 2 segundos para decidir que va a hacer. Si presiona el Botón que está en el Protoboard (conectado al PIC) se leerá lo que esta guardado en los primeros 10 sectores de la memoria EEPROM, si no lo presiona durante 10 segundos se harán adquisiciones analógicas del punto medio de un potenciómetro y las guarda en los primeros 10 sectores de la memoria EEPROM. Todos estos tiempos se indican en el Protoboard mediante un LED que se prende o apaga según la ocasión y la actividad. Una vez finalizada cualquier actividad hay que desconectar la alimentación del PIC y reconectarla, para que se resetee y así demostrar que los datos almacenados fueron realmente guardados en la EEPROM (cualquier otro dato se borra al cortarse la alimentación). Cuando se reinicia comienza de nuevo el proceso permitiendo adquirir los datos guardados en la sesión anterior o guardar nuevos.
El programa anduvo perfectamente y supuso el avance mas grande hasta la fecha. Ya estamos listos para comenzar a programar el programa final, es decir, el que irá realmente en el módulo CAN-SAT.
viernes, 30 de mayo de 2008
Día Décimoprimero (11°) - 30/5/08
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
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 VDD (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
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.
viernes, 9 de mayo de 2008
Día Octavo (8°) - 9/5/08
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
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.
viernes, 25 de abril de 2008
Día Sexto (6°) - 25/04/08
El programa anduvo a la perfección, nos dedicamos a hacer programas mas complejos. Para el final del día habíamos realizado un programa que manejaba 2 entradas digitales (Botones) y en función de que combinación era la presionada, el LED titilaba con distintas frecuencias. Aquí el programa.
El programa funcionó a la perfección. Dimos un gran avance con respecto a las clases anteriores
sábado, 19 de abril de 2008
Software Utilizado
En este apartado colocaremos los distintos tipos de Software que hemos ido utilizando a lo largo del proyecto. Iremos ampliando esta sección a medida que utilizemos nuevo Software. Los programas utilizados son:
- MicroCode Studio
El MicroCode Studio es el IDE (Integrated Development Interface - Interfaz De Desarrollo Integrada) que utilizamos para programar el PIC. El lenguaje de programación con el que funciona este IDE es el BASIC que es un lenguaje diseñado para ser de fácil interpretación, es altamente humano en cuanto a esto. El compilador que utilizamos para poder traducir la programación de BASIC a lenguaje de máquina es el PicBasicPro cuyos archivos de ayuda y descripción (uno por cada Microcontrolador que puede programar) son muy útiles a la hora de configurar inicialmente a los Microcontroladores. Aquí un snapshot del MicroCode Studio:
- MaxLoader
El MaxLoader es la herramienta de eeTools que nos permite bajar los programas compilados al PIC. Es de una interfaz sencilla que permite borrar, verificar, leer y programar memorias y Microcontroladores. Tiene un catalogo variado de Microcontroladores que permite programar y funciona con varias de las herramientas de grabación de eeTools como ChipMax, TopMax, etc. Aquí un snapshot del MaxLoader:
- HyperTerminal
HyperTerminal es el programa de comunicaciones que nos permite comunicar al Microcontrolador con la PC, es un porgrama sencillo que permite utilizar distintos tipos de puertos para comunicaciones, en nuestro caso el COM1. El HyperTerminal permite setear muchas opciones de funcionamiento, como velocidad de transmisión, protocolo, etc. En nuestro caso usamos en protocolo N9600 (9600 Baudios, bytes negados y un bit de Stop). HyperTerminal es una apliación que se instala junto con Windows. Aquí un Snapshot del HyperTerminal:
Herramientas Utilizadas
En este apartado colocaremos los distintos tipos de Herramientas (y Hardware) que hemos ido utilizando a lo largo del proyecto. Iremos ampliando esta sección a medida que utilizemos nuevas Herramientas. Los programas utilizados son:
- ChipMax
El ChipMax es el Hardware grabador de memorias utilizado para grabar la programación en el PIC. Es una herramienta proveída por eeTools. Consiste en un módulo de programación que tiene un zócalo en el cual se pueden colocar componentes de hasta 40 patas. Se conecta a la PC mediante un cable al Puerto Paralelo (Printer Cable al Parallel Port). Para programarlo se necesita el Software MaxLoader. El módulo contiene dos LED's indicadores, uno que indica si se está recibiendo alimentación "POWER" (va a 220V mediante un transformador), y el otro que indica si el módulo está escribiendo o leyendo datos dentro de un circuito integrado mediante la etiqueta "BUSY". El ChipMax es bastante rápido, programar el PIC toma de 4 a 7 segundos. Aquí una foto del módulo:
- Osciloscopio
El Osciloscopio Digital (también llamado ORC por los antiguos Osciloscopios de Rayos Catódicos, CRO en inglés), es una herramienta que permite visualizar señales eléctricas tanto analógicas como digitales. Cabe aclarar que para interpretar las señales analógicas (Siendo el Osciloscopio Digital) es necesario convertirlas en valores digitales mediante un ADC (Analog To Digital Converter - Conversor Analógico Digital). Básicamente un Osciloscopio es un Tester que permite graficar los valores en función del tiempo. Consiste en un Display y una botonera que posee botones y diales que permiten obtener medidas y ajustar parámetros de medición. Posee 2 entradas o "Canales" (Channels) por las cuales ingresan las señales. Los terminales de medición (Puntas de Osciloscopio) son cables especialmente blindados para evitar la distorsión de la señal que viaja por el. Poseen una punta particular que permite engancharse a terminales, pins y cables. También un cable cocodrilo que es para conectar a la masa (0V) del circuito y así tener la referencia, el conector mediante el cual se ingresa al osciloscopio es un BNC. El que utilizamos nosotros es el modelo TDS 220 de la marca Tektronix. Aquí una foto del osciloscopio:
- Tester (Multímetro)
El Tester (o Multímetro) es una herramienta que permite medir varios parámetros eléctricos, estos son:
- Diferencia de Potencial Continua y Alterna (Tester en modo Voltímetro)
- Intensidad de Corriente Continua y Alterna (Tester en modo Amperímetro)
- Resistencia (Tester en modo Ohmetro)
- Continuidad de Conductores y Diodos.
El Tester consiste en un display de 4 digitos, 4 terminales de entrada de señal (uno para Tensión/Resistencia/Continuidad, un común "common", uno para medir corrientes de hasta 200mA y otro para medir corrientes de hasta 10A) y 2 cables con puntas que son los que ingresan (en distintas combinaciones según la medición) a los terminales del Tester y una perilla central que permite variar el modo y la escala en la que mide el Tester. Cabe destacar que según el modo, las mediciones se efectúan distinto. Para medir Tensiones el Tester debe colocarse en Paralelo a los bornes de los cuales se quiere obtener la diferencia de potencial. Para medir Corriente el tester se coloca en serie al conductor o componente por el cual pasa el flujo a medir cerrando el circuito mediante el Tester (para medir corrientes hay que conectar uno de los dos terminales del Tester en otro conector). Para medir Resistencia o Continuidad los componentes deben estar desconectados y el Tester debe colocarse entre los bornes de los componentes. El tester que usamos nosotros es el Wavetek 15XL. Aquí una foto:
- Fuente de Alimentación
La Fuente de Alimentación es el dispositivo que provee la energía eléctrica para el funcionamiento de los circuitos. Posee un transformador y un circuito rectificador que convierte la señal alterna de 220v a una continua cuyo valor es regulable dentro de las siguientes opciones: 3V/4,5V/6V/7,5V/9V/12V. La corriente máxima que permite entregar la fuente que utilizamos (que posee un fusible) es de 2A. La fuente es de la marca MW2122A. Aquí una foto de la fuente:
- Protoboard
El Protoboard esta dividido en cuatro secciones, las dos externas están conectadas verticalmente (según la foto) y las dos internas, con cinco orificios cada una, están conectadas horizontalmente, los orificios están conectados internamente, por lo que no es necesario rehacer estas conexiones.