domingo, 23 de enero de 2011

Microcontroladores - parte III

Hoy seguiremos detallando los componentes de los microcontroladores, y el turno hoy es para la memoria y el subsistema de entrada/salida.

Pero antes, revisemos otro de los videos relacionados con el macro mundo de los micros.

NAO

Lo que podemos hacer con los micros es interminable... vean los features de comunicación que tiene este pequeño robot para interactuar con su entorno... Excelente.

Para llegar a hacer algo como NAO, no solo debemos conocer como diseñar aplicaciones para micros, sino como programarlos, como integrarlos la mundo real, como determinar su comportamiento, etcetera.

Debemos saber un poco de electrónica, de robótica, de mecánica, y mucha imaginación... y aunque este es un modelo comercial, la red está plagada de ejemplos de gente como nosotros que hace cosas interesantes, útiles e inútiles, que hacen de este mundo uno fascinante.

En el árticulo anterior hablamos de la CPU de los microcontroladores. Para que este pueda operar debe tener acceso a datos, los cuales son albergados en lo que se conoce como memoria.

MEMORIA

Existen 2 tipos básicos de memoria: Memoria de Programa y Memoria de Datos.

De Progama

En esta memoria se guardan las instrucciones de los programas que definen el comportamiento del micro. Esta puede ser de una sola escritura (ROM) o pueden ser volátiles, es decir, son reprogramables. Existen diferentes tipos de memoria volátil, las diferencias fundamentales están en los procedimientos de escritura y borrado de las mismas. Entre los tipos de memoria volátiles se encuentran la EPROM, EEPROM y la FLASH, esta última muy utilizada últimamente por sus prestancias, capacidad y confiabilidad, llegando a ofrecer hasta 1000 ciclos escritura-borrado.

De Datos

La memoria de datos permite mantener la información con la que los programas trabajan. Esta memoria puede ser volátil como la memoria RAM (SRAM). Este tiene el inconveniente que si existe una caída de voltage, los datos se perderán. Hay aplicaciones que permiten este tipo de comportamiento, pero en el caso de aplicaciones que no lo permitan por su criticidad existen memorias no volátiles, como EEPROM la cual la traen disponible muchos micros. Estas memorias mantienen sus datos inclusive sin alimentación eléctrica.

NOTA: La memoria tipo EEPROM y la tipo Flash pueden escribirse y borrarse eléctricamente, sin necesidad de sacar el circuito integrado del grabador.

ENTRADA y SALIDA

Un microcontrolador puede obtener input de su entorno, o sacar información al exterior a través de sus líneas de entrada y salida. Estas son las patas que se pueden ver en la siguiente imagen.


A excepción de dos patas destinadas a recibir la alimentación, otras dos para el cristal de cuarzo (no todos los modelos requieren cristales externos), que regula la frecuencia de trabajo, y una más para reiniciar el micro, las patas restantes sirven para la comunicación con los periféricos externos que pudiera controlar.

Las líneas de E/S que se adaptan con los periféricos manejan información en paralelo y se
agrupan en grupos de ocho, y reciben el nombre de Puertas (Gates). Hay modelos con líneas que soportan la comunicación en serie; otros disponen de conjuntos de líneas que implementan
puertas de comunicación para diversos protocolos, como el I2oC, el USB, etc.

Estas patas o pines pueden configurarse como líneas de entrada o líneas de salida, es decir, estas pueden ser adaptadas a las necesidades del proyecto.

E/S Analógicos y Digitales.

Existen diferentes tipos de puertos. Los que son analógicos pueden aceptar diferentes voltages (generalmente entre 0V y 5V) en escalas decimales. Desde adentro del micro estos valores de voltaje pueden ser leídos desde una pin de entrada como un valor numérico (i.e. 0-1023).

Por ejemplo, un sensor de temperatura genera, de acuerdo a la temperatura a la cual se somete (Ambiental), un voltaje que si está conectado a un pin análogo, este podrá leerse como un valor numérico. De acuerdo al fabricante este valor numérico se podrá convertir a grados celsius o farenheit, de acuerdo a la la escala que necesitemos.

Las líneas Digitales solo aceptan valores binarios. OV o cero lógico (FALSE) y 5V o 1 lógico (TRUE).

Ejemplo, una salida digital puede utilizarse para encender o apagar un led que esté conectado a un pin de salida digital.

Existe un tipo de salida especial llamado PWM (Pulse Width Modulation). Generalmente se usa para cambiar la resolución de la salida de un micro a valores más discretos en rangos grandes. Esto permite, por ejemplo, graduar la intensidad de un led como si usáramos un dimmer o para controlar un servo.

Otros RECURSOS

Existen otros recursos en los procesadores que pueden ser útiles para hacerlos comportarse de una u otra forma de forma más rápida. Estos recursos pueden ser:

a) Circuitos de reloj, encargados de generar los impulsos que sincronizan el funcionamiento de todo el sistema.

b) Temporizadores, orientados a controlar tiempos.

c) Perro Guardián («watchdog»), el cual permite generar una inicialización cuando el programa quede bloqueado eventualmente.

d) Conversores AD y DA, para poder recibir y enviar señales analógicas.

e) Comparadores analógicos, para verificar el valor de una señal analógica.

f) Sistemas de protección ante fallos de alimentación.

Entrar en estos conceptos puede ser interesante, pero lo haré de aquí en adelante cuando sea requerido implementarlo para algún ejemplo o proyecto.


Algunos conceptos (Wikipedia y otros)

1) PWM: La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.


Read More......

lunes, 17 de enero de 2011

Regulador de Voltaje 5V

Antes de seguir con los micros, hay otro punto que debemos considerar y creo conveniente describirlo con la experiencia que tuve al montar un simple circuito regulador de voltaje.

Los microprocesadores son suceptibles a los cambios de voltaje que las fuentes o transformadores convencionales nos ofrecen, y antes de comprar algo muy costoso para regular voltaje, existe un forma muy fácil de crear nuestro propio regulador que podemos acomplar con una fuente en desuso.

Todos tenemos fuentes en desuso en nuestras casas, desde las que cargan teléfonos celulares hasta los que alimentan electrodomésticos. En mi caso yo tengo un pequeño mini televisor, el cual tiene una fuente de alimentación de 3.5V y 2Amp, lo cual es bastante potente como para usarla alternativamente para obtener una fuente estable de 5V inicialmente, lo que la mayoría de los microcontroladores utilizan como voltaje de alimentación, adicionalmente a ser el standard que utilizan todos los conectores USB del mercado.


Basado en el siguiente esquema inicie mi montaje.


A continuación verán en una secuencia de imágenes de como monté este simple circuito.































Finalmente, la fuente que sirve aún para alimentar con 13.5V a mi pequeño TV, me permite alimentar el protoboard.

He conectado la salida de la fuente a la entrada de mi regulador y a la salida del mismo le he colocado un conector USB tipo A. Esto me permitirá crear un conector basado en USB que alimente mi protoboard, pero al menos ya tento una salida estable de 5V que puedo utilizar para, por ejemplo, cargar cualquier celular que tenta un cable de alimentación USB.

Este mismo circuito lo pueden hacer para crear su propio conversor de voltaje de 12V de su auto a 5V estables para cargar sus celulares en el auto. Lo que deben conseguir es el adaptador para sacar 12V del encendedor de cigarrillos del tablero (por cierto, cada vez más en desuso).

Espero lo rebauticen como adaptador de 12V para cargar dispositivos, como celulares, PDAs, GPSs, etc.

Googleando consegui dos buenos artículos que pueden ser de utilidad:


Cabe destacar, que estos reguladores i.e. 78XX) convierten voltajes altos en voltajes nominales más bajos, por lo que en el proceso deben disipar calor. Para lo que me he propuesto hacer no hace falta preocuparse ya que los micros consumen muy poco (~500mA), pero para aplicaciones más pesadas es requerido adosarle a estos reguladores un disipador, preferiblemnte de aluminio. El cáculo de estos lo podrán conseguir en este otro artículo.







Read More......

viernes, 14 de enero de 2011

Microcontroladores - parte II

Sigamos entonces con este proceso de aprender un poco acerca de los microcontroladores. En este artículo empezaremos a detallar las partes fundamentales de la mayoría de los microcontroladores que existen en el mercado.

Pero antes un pequeño inciso para mostrarles lo fácil que puede ser trabajar con estos micros. En el siguiente link podrán ver un video de un pequeño tutorial de como manejar un servo con un arduino.


En los micros tradicionales, hacer esto es relativamente complejo si lo hicieramos en el lenguaje nativo, es decir en assembler. En C y Basic tiende a ser más fácil y ya se consiguen librerías especializadas que permiten manejar los mismos a través de simples comandos. Pero verán en el video que con Arduino y una librería especializada son básicamente 5 comandos para controlar el servo a través de un potenciómetro... la utilidad... infinita realmente.

PROCESADOR

El procesador de los microcontroladores de la actualidad está basado principalmente en arquitecturas tipo Harvard(1) y microprocesadores tipo RISC (2), que se identifica por poseer un repertorio de instrucciones de máquina pequeño y simple, de forma que la mayor parte de las instrucciones se ejecuten en un ciclo de instrucción.

El objetivo de diseñar micros con esta arquitectura es posibilitar la segmentación y el paralelismo en la ejecución de instrucciones y reducir los accesos a memoria.

La arquitectura Harvard es por excelencia la utilizada en supercomputadoras, en microcontroladores, y sistemas integrados en general. El procesador tiene los buses segregados, de modo que cada tipo de memoria tiene un bus de datos, uno de direcciones y uno de control.

La ventaja fundamental de esta arquitectura es que permite adecuar el tamaño de los buses a las características de cada tipo de memoria; además, el procesador puede acceder a cada una de ellas de forma simultánea, lo que se traduce en un aumento significativo de la velocidad de procesamiento, típicamente los sistemas con esta arquitectura pueden ser dos veces más rápidos que sistemas similares con arquitecturas Von Neumann(3).

La desventaja esta es que consume muchas líneas de E/S del procesador; por lo que en sistemas donde el procesador está ubicado en su propio sustrato, solo se utiliza en supercomputadoras. Sin embargo, en los microcontroladores y otros sistemas integrados, donde usualmente la memoria de datos y programas comparten el mismo sustrato que el procesador, este inconveniente deja de ser un problema serio y es por ello que encontramos la arquitectura Harvard en la mayoría de los microcontroladores.

Algunos Conceptos (de Wikipedia y otros)

(1) Arquitectura Harvard: en esta arquitectura son independientes la memoria de instrucciones y la memoria de datos y cada una dispone de su propio sistema de buses para el acceso. Esta dualidad, además de propiciar el paralelismo, permite la adecuación del tamaño de las palabras y los buses a los requerimientos específicos de las instrucciones y de los datos.

(2) RISC: es una filosofía de diseño de CPU para computadora que está a favor de conjuntos de instrucciones pequeñas y simples que toman menor tiempo para ejecutarse. El tipo de procesador más comúnmente utilizado en equipos de escritorio, el x86, está basado en CISC en lugar de RISC, aunque las versiones más nuevas traducen instrucciones basadas en CISC x86 a instrucciones más simples basadas en RISC para uso interno antes de su ejecución.

(3) Arquitectura Von Neumann: se caracteriza porque la CPU (Central Process Unit) se conecta con una memoria única, donde co-existen datos e instrucciones, a través de un sistema de buses.


Read More......

jueves, 6 de enero de 2011

Un GPS Navigator para bibicletas?

En esta segunda parte, creo interesante adoptar un modo de operación que nos mantendrá alertas y enfocados a lo que es el fin último de aprender y practicar con estos dispositivos de HW.

Se trata de ofrecerles un pequeño ejemplo de la vida real que pueda despertar en nosotros la curiosidad y la imaginación, para así poder crear eventualmente algún proyecto significativo para nosotros.

Siempre he pensado que la mejor forma de aprender es haciendo, y la mejor forma de hacer es plantearse un problema de la vida real para llevarlo a cabo... eso me ha funcionado a mi personalmente.

Como les iba diciendo, en este y en los próximos artículos empezaré los mismos con algún ejemplo que haya visto en la red. El primero que les entregaré es uno que apareció en un nuevo gadget que encontrarán a mano derecha, el cual muestra videos de youtube relacionados a este tema.

Android + Device Built Into Handlebars = Bike Navigation Evolved

Se trata de una ingeniosa idea puesta en acción, que utiliza un teléfono inhalámbrico Android, el cual obtiene la navegación vía gps. Está se transmite a un Arduino(1) el cual está conectado a dos varillas vibradoras las cuales se insertan en los puños del volante de la bicicleta.

Cuando requerimos cruzar porque hemos alcanzado un punto de control, vibrará el puño hacia donde debemos doblar. Vean el video del link... muy ingenioso.

Y como este no es un artículo teórico, veamos otro ejemplo de la vida real que puede entusiasmarnos!


Se trata de un sistema de notificación automática para buzones de correspondencia. Un switch instalado en la puerta del mismo activa una entrada de un arduino, el cual se conecta vía internet a una página web que envía una notifiación Push(2) a un Iphone que tiene instalada una aplicación especializada para recibir mensajes push.

Cool, isn't it?.

En la próxima entrega seguiremos aprendiendo microcontroladores... pero ahora, dos pie de página que deben leer!

Cortesía de Wikipedia

(1) Arduino es una plataforma de hardware libre basada en una sencilla placa de entradas y salidas simple y un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador.

(2) Push Mail. Mientras que lo más habitual es que nuestro cliente de correo electrónico (Outlook, Mail, Thunderbird...) consulte de forma períodica al servidor en busca de nuevos correos, con push mail recibimos el correo al instante, siendo el servidor el que "empuja" el correo a nuestro cliente de correo (en nuestro caso el iPhone)

Read More......

martes, 4 de enero de 2011

Microcontroladores - parte I

Este es el segundo artículo asociado a microcontroladores y aunque debo iniciar con Arduino, quisiera en primer lugar introducirnos al mundo genérico de estos disposivos de hardware.

Empecemos con lo más básico; entendamos que es un microcontrolador; este es elementalmente un chip o circuito integrado que contiene un diseño digital, que se encarga de realizar múltiples tareas. La forma en que se comporta está ajustado a instrucciones que se deben suminitrar en forma de un programa.

He aquí la diferencia fundamental con un chip como lo conocemos tradicionalmente, el cual está diseñado para ejecutar una tarea específica. En un microcontrolador, el programa que se suministra define un curso de acción, por lo tanto un comportamiento. Este comportamiento cambiará tantas veces como reprogramemos el dispositivo. Las instrucciones del programa son ejecutadas por el micro una a una hasta conseguir la tarea por la cual fue programado.

Como en un computador (algo que conocemos del día a día), en un microcontrolador podemos encontrar los siguientes componentes.

- Procesador o Unidad Central de Proceso
- Memoria RAM para Contener los datos
- Memoria para el programa tipo ROM/PROM/EPROM
- E/S para comunicación con el exterior
- Módulos para el control de periféricos: temporizadores, Puertas Serie y Paralelo, conversores Analógico/Digital, conversores Digital/Analógico, etc.
- Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema




Pero a diferencia de un computador de propósito general, un microcontrolador es un computador dedicado. En su memoria sólo reside un programa destinado a ejecutar una aplicación determinada; su entrada/salida permite la conexión de sensores del dispositivo a controlar, y todos los recursos complementarios disponibles tienen como único fin atender sus requerimientos. Una vez programado y configurado el microcontrolador solamente sirve para ejecutar la tarea asignada, teniendo en cuenta que puede ser reprogramado para hacer otra tarea; pero solo una a la vez.

Los usos finales de los micros son tan diversos hoy día y tan sutiles que la mayoría de nosotros ni nos enteramos que usamos más de uno diariamente. Se encuentran virtualmente en todo lo que tocamos:

Teléfonos celulares
Alarmas
Vehículos
Coladoras de Café
Dispositivos de Calefacción
Neveras
Lavadoras
Relojes de mesa
Cámaras
Ascensores
Equipos de Sonido
Cargadores de baterías
UPSs
Linternas
Lava Vajillas
Hornos
Chimeneas Eléctricas o a Gas
Aires Acondicionados
Sistemas de Seguridad

... y bueno, la lista cada vez es más grande. El número de productos que funcionan en base a uno o varios microcontroladores aumenta de forma exponencial.

Siempre recordaré a un jefe que tuve hace 20 años, el cual siempre nos catalogaba a los entusiastas de la computación como ratones en un submundillo!. Muy querido por cierto!... espero no esté en una isla desierta huyendo de la tecnología. Just kidding.

to be continued...

Read More......

lunes, 3 de enero de 2011

Introducción a los microcontroladores de HW abierto

Me he propuesto realizar una serie de artículos que me permitan mostrar las funcionalidades de los microcontroladores de hw abierto como el Arduino.

Mi principal motivación es la posibilidad de crear pequeños proyectos para realizar multiples funciones; desde crear sistemas de seguridad para mi hogar, pasando por la creación de elementos que permitan interactuar con sensores, hasta jugar con componentes robóticos que nos permitan aprender la interacción humano-micro-robot, en cierta medida.

Otra de las áreas que quisiera explorar es utilizar microcontroladores para automatizar tareas de vuelo de aeromodelos, lo cual es mucho más fácil decirlo que desarrollarlo.

Otro aspecto que estaré explorando en esta serie de árticulos es la interacción inhalámbrica entre dispositivos como el Iphone/iTouch, ya que estos permiten utilizar la WiFi para comunicarnos con un computador que a su vez nos permitirá, en primera instancia, comunicarnos con un microcontrolador Arduino o Teensy!. Este por supuesto es la forma más fácil inicialmente, ya que el objetivo final es comunicar directamente un iphone (un ejemplo) con el microcontrolador sin intermediarios... pero una cosa a la vez.

Para lograr (idealmente todos) los objetivos que he comentado antes, debemos primero entender una cantidad importante de elementos teóricos, desde como funciona un microcontrolador, como debemos modelar su comportamiento, como hemos de diseñar su interacción con el computador o con el exterior, etc.

Será un viaje largo pero interesante de aprendizaje... ya que el fin último de este espacio es aprender para enseñar a quien quiera leer las próximas publicaciones de este blog.

MICROCONTROLADORES

Mi primer ensayo será introducirnos al mundo de los microcontroladores de corte abierto. Un ejemplo de este tipo de micros es el Arduino, del cual he tomado su definión de Wikipedia (por cierto mucho de lo que escribiré está basado en experiencias de muchas personas a las cuales referenciaré en su debido momento).

"Arduino es una plataforma de hardware libre basada en una sencilla placa de entradas y salidas simple y un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring. Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software del ordenador (por ejemplo: Macromedia Flash, Processing, Max/MSP, Pure Data). Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente."

Mucha información cierto?... bueno, es lo más fácil que he conseguido para definir este tipo de microcontroladores.

Vamos a retroceder un tanto, ya que arduino está basado en microcontroladores, los cuales debemos definir.


"Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: unidad central de procesamiento, memoria y unidades de E/S (entrada/salida)."


Otra definición interesante la podemos encontrar http://www.networkdictionary.com/hardware/m.php

"Microcontroller is a computer-on-a-chip optimised to control electronic devices. It is designed specifically for specific tasks such as controling a specific system, in contrast to a general-purpose microprocessor, the kind used in a PC. A typical microcontroller contains an integrated CPU, all the memory and I/O interfaces needed on the same chip, whereas a general purpose microprocessor requires additional chips to provide these necessary functions. Examples of microcontrollers are Microchip's PIC, the 8051, Intel's 80196, and Motorola's 68HCxx series."

Fíjense como en esta última definición se puede ver como contrastan sus características con un PC, el cual es la forma más habitual de ver un computador.

Arduino o Teensy están basados en microcontroladores como los que hemos definido. Estas plataformas de hardware son fáciles de utilizar, programar y adquirir, por lo que son de forma preferente los dispositivos de hardware a utilizar.

Con estos microcontroladores es posible hace un número infinito de proyectos para multiples funciones, entre las cuales están las que he listado brevemente al principio de este artículo.

En las próximas entregas estaremos ahondando en los detalles que requerimos para crear piezas de HW+SW que permitan realizar desde tareas sencillas (orientadas al aprendizaje) hasta tareas de relativa complejidad.

Stay Tuned!

Proxima Entrega: La plataforma de hardware abierto Arduino!

Read More......