viernes, 1 de abril de 2011

Microcontroladores - parte V - E/S

En esta entrega estaremos ahondando un poco en los puertos de entrada y salida de los microcontroladores, con ejemplos básicos de como interactuar con ellos dependiendo de tu tipo, y por consiguiente de su utilidad.

Pero antes una nota especial a este artículo que conseguí en internet que habla de Limor Fried, una chica cuyo objetivo ha sido impulsar el hardware de electrónica de línea abierta. Muy interesante el artículo, pero aún más interesante es luego ver la página de la empresa para la cual trabaja!... vean los siguientes links.













PUERTOS DE ENTRADA Y SALIDA

Los puertos de los microcontroladores son su sinapsis con el mundo exterior. Los mismos permiten llevar datos a los micros u obtener datos de ellos.

La final
idad de un microcontrolador al final es realizar tareas repetitivas (como cualquier computador) ejecutando programas y respondiendo a estímulos externos.

En un computador, un software de diseño gráfico permite crear imágenes a partir de múltiples fuentes:

1) Imágenes ya creadas por otros. En este caso la imagen es un archivo que se encuentra en un periférico llamado disco (almacenamiento) y el mismo está conectado al computador a través de un puerto (internos o externos).

2) Inspiración del ejecutante. A través del teclado y el mouse o cualquier otro dispositivo de adquisición de información, el programa de diseño responde al input de los mismos. El teclado está conectado a un puerto (interno o externo) y el mouse seguramente estará conectado a un puerto USB.

3) El usuario del programa de diseño obtiene feedback del mismo a través de la pantalla, la misma es un dispositivo de salida conectada a un puerto del computador.

4) El producto final de la ejecución del programa de diseño seguramente será un archivo que finalmente se guardará en un periférico de almacenamiento que está conectado a un puerto de E/S del computador.

Como podemos observar de los puntos anteriores, un micro no se aleja de un computador en mucho.

Los puertos de E/S de un micro son entradas digitales o analógicas que nos permiten hacer diferentes actividades:

1) Obtener datos de periféricos como switches, potenciómetros, celdas fotoeléctricas, sensores de temperatura, sensores de humedad, sensores de proximidad, Memorias EEPROM, dispositivos de conexión Wifi, dispositivos de conexión alámbrica a internet, tarjetas para lectura/escritura de memorias SD, Keypads, Lectores RFID, etc.

2) Sacar datos del micro hacia diferentes periféricos tales como: leds, reles, memorias EEPROM, displays LCD, altavoces, dispositivos con interfaces serial, USB, I2C, 1Wire, etc.

Los datos de entrada/salida pueden venir en formatos: digitales o analógicos.

Entradas Digitales

Un pin se define como entrada digital cuando este permite leer solo dos estados. Valor lógico LOW o (0) cuando el pin está conectado a tierra. Valor lógico HIGH o (1) cuando el pin está conectado a 5+ V.

Salidas Digitales

Un pin se define como salida digital cuando este permite sacar solo dos estados. Valor lógico LOW o (0) cuando el pin entrega 0V. Valor lógico HIGH o (1) cuando el pin entrega 5+ V.

Entradas Analógicas

Un pin se define como entrada análoga cuando este permite leer un rango de voltaje entre 0V y +5V. Estos valores son mapeados hacia el microcontrolador en un rango de valores numéricos entre 0 y 1023 o 0 y 255.

Para saber que voltaje se está leyendo en un pin analógico solo requerimos hacer una simple regla de 3. Por ejemplo:

0V equivale al valor 0 leído desde el micro
1V equivale al valor 204 leído desde el micro
2.5V equivale al valor 511 leído desde el micro
3.5V equivale al valor 716 leído desde el micro
5V equivale al valor 1023 leído desde el micro

Salidas Analógicas

Un pin se define como salida análoga cuando este permite variar el voltaje del pin en un rango de voltaje entre 0V y +5V. Estos valores son mapeados desde el microcontrolador en un rango de valores numéricos entre 0 y 1023 o 0 y 255.

De forma análoga a la entrada analógica, si queremos colocar un pin analógico en un voltaje de 3.5V, solo tenemos que hacer el cálculo correspondiente, que en nuestro ejemplo es el valor numérico 716 si utilizamos el rango (0,1023).

Las salidas analógicas se trabajan con una técnica llamada PWM o Pulse Width Modulation, el cual es una técnica para obtener valores análogos a través de medios digitales.

El control digital es utilizado para crear una onda cuadrada, la cual cambia periódicamente entre un estado ON y un estado OFF. Este patrón ON-OFF puede simular un voltaje entre 5V y 0V cambiando la porción del tiempo que la señal se mantiene en ON versus el tiempo que la misma se mantiene en OFF.

La duración que la señal esta ON se denomina ancho del pulso. Para obtener valores de voltaje diferentes hay que modular o cambiar el ancho del pulso (también llamado ciclo de trabajo). Si esta modulación se hace lo suficientemente rápido el efecto final es un voltaje que permite por ejemplo hacer que un LED ilumine con diferentes intensidades de luminiscencia, o controlar un motor de pulso o un servo.

La siguiente gráfica muestra algunos ejemplos de modulación del ancho de pulso con pic.


PWM pulse width modulation signal

En general, los pines de los microcontroladores vienen con diferentes capacidades, en diferentes proporciones. No todos los pines son digitales o analógicos. Cada micro viene con la documentación para determinar que pines usar de acuerdo a las tareas a realizar.

Si requerimos encender o apagar un LED, hay que escoger un pin que sea digital, el cual solo permite aplicar dos estados (ON,OFF) o (HIGH, LOW).

Si requerimos controlar un servo debemos escoger un pin con salida analógica.

Si requerimos leer un sensor de temperatura que entrega un rango de voltaje entre 0V y 5V de acuerdo a la temperatura ambiente, debemos escoger como entrada un pin análogo.

Esto aplica para muchos micros del mercado, como por ejemplo PIC o AtMega, así como generaciones posteriores que utilizan estos micros para construir sobre ellos, microcontroladores ampliados que permiten hacer lo mismo que los anteriormente mencionados pero de forma más amigable y con lenguajes de alto nivel. Tal es el caso de Arduino el cual se basa en AtMega, o Pinguino cuya plataforma es PIC.

Como ejemplo podemos ver el siguiente código el cual enciende y apaga un LED cada 300 milisegundos. Este ejemplo solo permite mostrar como utilizar un pin como una salida. En próximas entregas estaremos empezando con el "Hola Mundo" con dos de mis favoritos... Arduino y Pinguino, y empezaremos formalmente a interactuar con ellos.

Código para Pinguino

LEDBlink.pde

void setup()
{
// Definimos el pin 0 como salida
pinMode(0,OUTPUT);
}

void loop()
{
//Colocamos el pin 0 en 5V (encendemos el LED)
digitalWrite(0,HIGH);
//Establecemos una pausa de 300ms
delay(300);
//Colocamos el pin 0 en 0V (apagamos el LED)
digitalWrite(0,LOW);
//Establecemos una pausa de 300ms
delay(300);
}

Links de interés:



Algunos conceptos (Wikipedia y otros)

1) I²C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Circuitos Inter-Integrados)


2) 1-Wire es un protocolo de comunicaciones en serie diseñado por Dallas Semiconductor. Está basado en un bus, un maestro y varios esclavos de una sola línea de datos en la que se alimentan. Por supuesto, necesita una referencia a tierra común a todos los dispositivos.


Read More......