viernes, 27 de junio de 2008

Día Decimocuarto (14°) - 20/6/08

Nos juntamos con Martín Rinemberg (Alumno de Informática) quién nos informó que él sería quién se encargara de la interfáz de la PC, por lo tanto el trabajo hecho en la clase previa junto a Mariano Foullier fue descartado. Estuvimos probando algunos programas prototipos que Martín trajo. El optó por utilizar el lenguaje C# (ó C Sharp) para programar la interfáz. Los primeros programas no funcionaron. Martín tenía que ir y venir desde su edificio hasta el nuestro para poder probar los programas así que dedicamos una clase a armarle un cable DB-9 invertido para que el pueda comunicar 2 computadoras y ahorrarse el tener que ir hasta el piso de electrónica para probar sus programas. Además estuvimos el resto de la clase discutiendo con él como serían los datos que debía recibir él, como interpretarlos y procesarlos.
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

Nos juntamos con Mariano Foullier e intentamos comenzar a desarrollar lo que sería la interfaz gráfica para recibir los datos en una PC. Mariano nos recomendó utilizar el IDE(Entorno de Desarrollo Integrado) llamado Microsoft Visual Basic 6.0. Ya teníamos un conocimiento previo de este lenguaje de programación ya que lo utilizamos en nuestro primer año de especialidad y también en el segundo de ciclo básico. Sin embargo, desconocíamos totalmente el manejo del puerto serie mediante este lenguaje. Mariano nos mostró como configurar el componente que maneja tal puerto e hicimos un programa simple que nos permitió hacer lo mismo que hacíamos con el HyperTerminal hasta el momento, pero obviamente con más posibilidades de procesar los datos (funcionalidad que el HyperTerminal no posee). Estuvimos el resto de la clase probando programas con la interfáz que habíamos creado y tratando de procesar algunos datos. Cosa que logramos exitosamente. Pudimos mostrar en pantalla el voltaje del punto medio del potenciómetro, cosa que antes no habíamos podido hacer debido a que había que multiplicar el valor del Byte por el valor del escalon (0,02V) y eso nos demandaba usar Punto Flotante sistema que resulta muy complejo y demanda mucha memoria. El error de calculo que arrastran tanto la medición de los ADC (CDA) del PIC como el de cálculo de la computadora nos dejaron con un error de ± 0,04V o sea 2 escalones, medición que resulta bastante confiable.

viernes, 20 de junio de 2008

Programación

En este apartado trataremos todo lo concerniente a la programación del PIC e incluiremos la lista completa de programas que le hemos cargado (que además pueden ser encontrados en los días en que fueron hechos).
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í:

void main (void)
{
char variable;
printf("Hola mundo!");
getch();
}
La semántica nos da la noción de como deben ser escritas las declaraciones, instrucciones y/o funciones. Por ejemplo:

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:

char variable;
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.

  • BASIC
COMENTARIOS: Pueden hacerse para que el programador o alguien que lea el programa se guie, no influyen absolutamente en nada en el programa, el compilador las descarta cuando le toca traducir el programa. para poder hacer un comentario hay que indicar su inicio y este es válido por el resto de la linea. El inicio se puede marcar (en BASIC) mediante un punto y coma o un apostrofe. Ejemplo: INDEX=0 ;Pongo index en 0.

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:

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.
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.

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:



Read this document on Scribd: TODAS LAS PROGRAMACIONES

viernes, 6 de junio de 2008

Día Décimosegundo (12°) - 6/6/08

Continuamos con el intento de confeccionar un programa que permitiera manejar la memoria EEPROM. Antes que nada queremos aclarar que intentamos aprender el manejo de esta memoria debido a que tenemos planeado que el módulo montado en el CAN-SAT no solo envie sus adquisiciones de datos a tierra sino que también almacene unas pocas para poder leer una vez recuperado el módulo en tierra (en caso de que el enlace de Radiofrecuencia con tierra se rompa por un periodo de tiempo o por todo el vuelo). El PIC tiene 256 posiciones de memoria EEPROM por lo tanto la cantidad de datos que podemos salvar con seguridad es bastante acotada.

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.