Autor Tema: GUIA: PIC SIMULATOR IDE, Cap. 7 y 8  (Leído 5537 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
GUIA: PIC SIMULATOR IDE, Cap. 7 y 8
« en: 12 de Febrero de 2007, 11:44:56 »
> Capitulo 07 - Operaciones Lógicas y Matemáticas:
PIC SIMULATOR IDE dispone de cinco operaciones matemáticas básicas, disponibles para las variables tipo Byte y Word. Estas son la suma (operador +), la sustracción (operador -), el producto (operador *), el cociente (operador /) y el módulo (operador MOD) .Por supuesto, el compilador es capaz de combinarlas para obtener operaciones matemáticas mas complejas.


DIM A AS WORD
DIM B AS WORD
DIM X AS WORD
A = 123
B = A * 234
X = 2
X = (12345 - B * X) / (A + B)

Es posible calcular raíces cuadradas (aunque el resultado debe ser entero) con la función SQR:

DIM A AS WORD
A = 3600
A = SQR(A)

Para las variables de tipo Bit existen siete operaciones lógicas disponibles. Solo es posible efectuar una operación lógica por instrucción (aunque es muy posible que próximas versiones permitan mas flexibilidad. Este al tanto de las novedades!). Estas operaciones también están disponibles para variables tipo Word o Byte. Veamos algunos ejemplos:


DIM A AS BIT
DIM B AS BIT
DIM X AS BIT
X = NOT A
X = A AND B
X = A OR B
X = A XOR B
X = A NAND B
X = A NOR B
X = A NXOR B


DIM A AS WORD
DIM B AS WORD
A = A OR B
PORTB = PORTC AND %11110000
 



> Capitulo 08 - Mi primer programa
Luego de todos estos capítulos de introducción, puramente teóricos, vamos a encarar nuestro primer programa. A diferencia de un programa de ordenador, donde uno escribe el programa, lo compila, lo ejecuta y ya, en el mundo de los microcontroladores hay que, previamente, definir el tipo de microcontrolador que se va a utilizar, cual va a ser su frecuencia de clock, como va a ser el circuito en que se va a utilizar el mismo, etc.

Para estas practicas, utilizaremos un PIC16F628A, uno de los mas difundidos y que mas o menos viene a reemplazar al viejo y popular PIC16F84, ya obsoleto. El diagrama circuital que utilizaremos para las primeras practicas es el siguiente:



Si bien se supone que quien esta leyendo este tutorial tiene una buena idea sobre electrónica y microcontroladores, igualmente vamos a hacer una muy breve descripción del circuito.

En primer lugar, vamos a aprovechar el oscilador interno del 16F628A y nos evitaremos el xtal y condensadores asociados. El puerto B del micro (pines 6 al 13) esta conectado a 8 LEDs mediante 8 resistencias de 220ohms, que tienen como función limitar la corriente que circula por los LEDS. Estos serán nuestras "salidas". Los pines 17 y 18, correspondientes al PORTA.0 y PORTA.1 están conectados a sendos pulsadores, que al ser presionados conducen 5V (un "1") al pin respectivo. Cuando están en reposo, las resistencias R1 y R2 se encargan de mantener el pin en "0". Por ultimo, el pin 1 (PORTA.2) comanda un parlante mediante un transistor, para hacer alguna prueba con sonidos.

El circuito debe alimentarse con 5v bien filtrados y regulados. Si no sabes como construir una fuente,  puedes leer algo sobre el tema aquí.

Volviendo a nuestro programa, vamos a escribir el "hola mundo" de los microcontroladores: encender un LED.

El primer paso es, desde el menú "Opciones" -> "Select Microcontroller", elegir el PIC16F628A.


Luego, debemos configurar los bits correspondientes:


Lo destacable por ahora de esta configuración es que estamos dejando la memoria (FLASH y EEPROM) sin protección, que el pin RESET se va a comportar como I/O y que usaremos como oscilador el oscilador interno INTRC.

Una vez hecho esto, arrancamos el edito de BASIC (presionando CTRL-C, por ejemplo), y escribimos el siguiente código:


Vamos a analizarlo línea por línea para entender su funcionamiento:

La línea 001 utiliza la sentencia AllDigital para convertir todos los pines del micro en pines de E/S. Esto equivale a deshabilitar los comparadores, conversores A/D y todos los módulos que pudiese tener nuestro microcontrolador. No es la única manera de hacer esto, pero si la mas sencilla desde el punto de vista del programador BASIC.

Las líneas 003 y 004 convierten todos los pines del puerto A en entradas ( TRISA = %11111111 ) y los del puerto B en salidas ( TRISB = %00000000 ). El "%" indica que el numero que viene a continuación esta en binario. Se podría haber escrito, por ejemplo TRISB = 0 y hubiera sido lo mismo. Personalmente me gusta esta manera, ya que "veo" el estado de cada pin. Por supuesto, es valido activar como entrada algunos pines, y como salidas otros, haciendo algo parecido a TRISB = %11000111 .

En la línea 006 encontramos una "etiqueta" ( loop: ). Esta no hace nada, solo sirve como referencia para enviar el flujo del programa a esa línea desde otro lugar, mediante la sentencia "Goto".

La línea 007 pone en "1" el pin correspondiente a PORTB.0, de manera que en el pin 6 del microcontrolador habrá 5V. Esta tensión hará que circule una corriente a través de la resistencia limitadora y el LED1, haciendo que este se encienda, ya que el cátodo se encuentra conectado a 0V.

En 008 tenemos la sentencia WaitMs 500 . WaitMs se encarga de hacer una pausa en milisegundos. La duración de la pausa esta dada por el numero que sigue a la instrucción, en este caso 500 milisegundos, o medio segundo.

Luego, en 009, otra vez se vuelve a poner en 0 el pin 6, mediante PORTB.0 = 0 , lo que provoca que ese pin se ponga a 0V, y no haya mas circulación de corriente a través de la resistencia y del LED, con lo que este se apaga.

En 010 se hace nuevamente una pausa de medio segundo, y por ultimo, la línea Goto Loop hace que el programa continúe en la línea 006 (que es donde esta la etiqueta Loop).

El programa se repite indefinidamente, encendiendo el LED medio segundo, apagándolo otro medio segundo.

Si presionamos F9 o vamos al menú que vemos a continuación


con lo que PIC SIMULATOR IDE compilara el programa, y cargara el HEX resultante en el simulador. Aparecerá el cuadro de dialogo siguiente, en donde se nos informa entre otras cosas que no han ocurrido errores, el tamaño del programa (69 words), y la ruta a donde se ubicaron los archivos generados.


Si volvemos a la ventana principal del PIC SIMULATOR IDE, y desde "Tools" -> "Microcontroller View" abrimos la vista del microntrolador, al darle "Start" a la simulación tendremos algo parecido a lo que sigue:


En la captura se puede apreciar que el pin 6, correspondiente a RB0 esta en "ON". Si esperamos lo suficiente, veremos como pasa a "OFF", y mas tarde vuelve a "ON", etc. Si queremos esperar menos tiempo, y esto lo debemos tomar como una regla general al correr simulaciones, podemos disminuir el tiempo indicado en las instrucciones "WaitMS" a valores iguales a 1, de esta manera la simulación será mucho mas ágil. Por supuesto, al momento de llevar el HEX a nuestro microcontrolador en el circuito "real", debemos cambiar a los tiempos originales y volver a compilar. Caso contrario, el LED permanecería encendido solo una milésima de segundo, luego apagado el mismo tiempo, etc., por lo que nuestro ojo lo percibiría como encendido a medias, incapaz de discriminar su verdadero estado.

Se podría haber utilizado la instrucción SYMBOL para hacer mas claro el programa. En el siguiente ejemplo, hemos hecho algunos cambio y obtenido un programa que hace exactamente lo mismo que el anterior, pero que resulta mas claro de entender, ya que se aproxima algo mas al "lenguaje natural":

El programa BASIC puede descargarse desde [aquí], y el correspondiente archivo HEX desde ]http://www.ucontrol.com.ar/Articulos/picsimuide/ejemplo001.hex[aquí] .

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert