jueves, 31 de marzo de 2011

Microcontroladores - Parte IV

Después de mucho tiempo vuelvo a escribir algo... honestamente el trabajo no me deja mucho tiempo con fuerzas para experimentar y escribir.

Hoy hablaremos de que debemos hacer para que los microcontroladres se comporten o ejecuten las actividades que uno requiere para cierta aplicación.

Pero antes... como es mi costumbre veamos algo interesante hecho con micros para entusiasmarnos con lo que se puede hacer.

Esta vez es interesante pero algo soso, aunque habrá gente que le parezca impresionante.

Icono Like it de Facebook

Pues esto es interesante solo como ilustración de lo que se puede hacer con un micro. En este caso es el icono de facebook que se pulsa cuando a alguien le gusta lo que uno cuelga en esta página. Lo interesante es que es como una lámpara hecha con legos, que se enciende cuando alguien presiona like it en algún post nuestro.

Veamos que hay detrás... Pues un arduino como microcontrolador para conectarse al computador y a través del API gráfico de Facebook y una librería diseñada para arduino, podemos hacer pooling de nuestros like it y encender la lámpara cuando esto sucede.

Algo que yo no sabía es que nosotros podemos diseñar nuestros legos y pedirlos a fábrica con un software que se baja de la página web de la LEGO. ESTO SI QUE ES INTERESANTE, sobre todo para robótica.


Bueno.. ahora a la materia.

Un microprocesador tiene la posibilidad de cambiar su comportamiento mediante la programación del mismo. En los viejos tiempos, el único lenguaje que se utilizaba para tal fin era el Assembler.

Este era el único lenguaje disponible por ese tiempo debido a la poca memoria con la que contaban los micros, por lo que el assembler era el lenguaje por excelencia, ya que el mismo no tiene los desperdicios que lenguajes de alto nivel introducen.

Lo que es cierto, es que esto ha evolucionado y ya los temas de memoria no son tan neurágilcos. Por un lado, porque la memoria ha bajado de precio en los últimos años. A su vez los micros han evolucionado en capacidades y memoria, por lo que los lenguajes de alto nivel se han metido en este terreno... y debo ser honesto, a Dios gracias.

Trabajar en lenguaje de alto nivel es realmente una bendición, ya que podemos con nuestros conocimientos de la universidad, hacer trabajar a estos controladores. Desde que los lenguajes de alto nivel aparecieron en este terreno, han proliferado desde pascal, pasando por C y hasta Basic.

En lo particular programo en C desde que tengo memoria y por tanto me ciento cómodo trabajando con el mismo. Pero entiendo que C no es del gusto popular, así que no problem, existen lenguajes como Pascal y Basic para los gustos restantes.

Algunos de los fabricantes con más éxito en este terreno se han especializado no solo en los compiladores sino en los ambientes de desarrollo. Tal es el caso de la gente de MikroElectronika.

MikroElektronika

Esta gente tiene muy buenos compiladores y además, desde mi perspectiva, presentan la curva de aprendizaje más sencilla, al ocultar muchas particularidades y configuraciones que deben hacerse de acuerdo al micro que utilicemos.

mikroC PRO for PIC

mikroBasic PRO for PIC

mikroPascal PRO for PIC

El compilador de estos lenguajes, toma nuestra fuente... este ejemplo enciende y apaga un led conectado al puerto RB0 en intervalos de 50 milisegundos:

...
#define led0 0b00000001

void main() {

TRISB=0; //puerto B Salida
PORTB = 0; //todas las salidas en 0 lógico

do {
PORTB = led0;
Delay_ms(50);
PORTB = led0;
Delay_ms(50);
} while(1);
}

No nos asustemos aún. En el próximo artículo explicaremos para que son los puertos y los tipos de puertos que hay, etc. Por lo pronto hagamos un acto de FE y entendamos que este programita de pocas líneas solo hace titilar un led en intervalos de 50 milisegundos.

Al ser compilado lo que obtendremos es un archivo de extensión .hex, con la siguiente información.

:0A00000005280000000000000028A1
:10000A00831686018312860101308600A330CC0054
:10001A005530CD00CD0B0F28CC0B0F2801308600B0
:10002A00A330CC005530CD00CD0B1928CC0B1928A4
:04003A0009281E284B
:02400E00FA3F77
:00000001FF

Finalmente este es el archivo que vamos utilizar para programar nuestro micro. Este archivo contiene registros en hexadecimal que traduce lo que programamos en el lenguaje que escogimos. Esto sucede para cualquier lenguaje, incluyendo al assembler.

Con que programamos el micro?... no con el código de alto nivel sino con el producto compilado el cual es este archivo .hex. Existen programas especializados, que utilizan nuestro código compilado y permiten programar el micro, pero esto es harina de otro costal... o material de otro artículo, el cual prometo será pronto.

De hecho, y es para otro artículo también, hay simuladores que permiten probar nuestro código compilado y verificar que el mismo se comporta adecuadamente. Puedo comentarles que uno de los mejores que he visto y en el cul me he divertido más es ISIS de Proteus.

En este simulador no solo puedes armar el circuito virtual, sino cargar en el microprocesador escogido el código compilado y ejecutarlo. El simulador es tan bueno que permite crear los circuitos con los componentes virtuales y estos interactúan como si fuesen reales (ejemplo, leds, reles, servos, etc.)

OK, pero no nos distraigamos del objetivo de este artículo, terminemos con este capítulo de lenguajes de programación para micros.

Lo que hemos visto hasta el momento refiere a los lenguajes que nos permiten programar a los microprocesadores PIC, pero hay otros en el mercado. No me voy a extender mucho porque hay tanto que no tiene sentido.

Mi interés principal está en entender la tecnología y por lo que he revisado, he escogido dos tipos: PIC y ARDUINO-Like.

Ya veremos en otros artículos de que se trata y explicaremos cada uno en específico, por lo pronto entendamos que de la gran cantidad de tecnologías existentes en el mercado, he escogido 2 para seguir este viaje.

Lo que si puedo decir en este punto es que Arduino o sus clones (y tendremos oportunidad de extendernos aquí) son mucho más amigables que los PIC, pero cada uno tiene sus encantos.

ARDUINO es más amigable, más sencillo y con las mismas prestancias que los PIC, pero los PIC están muy difundidos en el mercado desde hace años, por lo que se consiguen muchísimos desarrollos para estos, lo cual los hace atractivos.

Ya seguiremos con los micros y cada vez más cercanos a proyectos prácticos que nos permitan verle el queso a la tostada.

Cheers!



Algunos conceptos (Wikipedia y otros)

1) Assembler

El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en código binario, que es el único código entendible por la computadora, es en la práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje ensamblador originó también la evolución de este programa ensamblador hacia lo que se conoce como programa compilador.


2) Hex files

Intel HEX es un formato de archivo para la programación de microcontroladores, EPROMs y otros circuitos integrados. Datando de los años 70[cita requerida], está entre los formatos más viejos con esta finalidad.

Consiste en un archivo de texto cuyas líneas contienen valores hexadecimales que codifican los datos, y su offset o dirección de memoria.

fuente: Wikipedia
Read More......