martes, 15 de abril de 2014

Manejo de instrucciones básicas del procesador HCS12 de Freescale

Objetivo:
Hacer uso de las distintas instrucciones para el HCS12 en el programa code warrior, con el fin de aplicar y entender cada uno de ellos.
Material y Equipo:
Ø  Computadora personal
Ø  Programa: Code Warrior

Marco Teórico:
El procesador o CPU. Es el elemento más importante del microcontrolador y determina sus principales características, tanto a nivel hardware como software.
Se encarga de direccionar la memoria de instrucciones, recibir el código OP de la instrucción en curso, su decodificación y la ejecución de la operación que implica la instrucción, así como la búsqueda de los operandos y el almacenamiento del resultado. A continuación se explica de manera general como está formado un procesador. La función esencial de un procesador se describe en lo que se conoce como “ciclo de ejecución” consiste en 1.Traer una instrucción de la Memoria, 2. Decodificar la instrucción y 3. Ejecutar la instrucción, el ciclo continúa indefinidamente. El primer paso se realiza en varias etapas, puesto que tiene que acceder a la memoria para leer la instrucción, esto requiere enviar la dirección donde se encuentra la instrucción, las señales de lectura y selección de la memoria se envían mediante un grupo de señales que forman el bus de control.

Desarrollo:
Instrucciones de carga y almacenamiento.
Las instrucciones de carga copian el contenido de una localidad de memoria a un acumulador o registro, nótese que el contenido de la memoria no cambia debido a la operación de carga. En cambio las instrucciones de almacenamiento copian lo que se encuentra en un acumulador o registro del CPU a una localidad de memoria sin alterar el valor que se encuentre en el registro o acumulador del CPU.
Las instrucciones de carga se representan con las iniciales LD que quiere decir Load, la segunda parte del mnemónico depende del acumulador o registro que se esté utilizando, ya sea el acumulador A, B o los registros X, Y o SP (de los cuales SP no es recomendable usar si no se tiene suficiente experiencia programando) que se representan de la siguiente manera LDAA, LDAB, LDD, LDX, LDY, LDS.
Para tener un concepto más detallado a continuación se vera una tabla que muestra los códigos objetos que se generan para el acumulador A cuando se le carga el contenido de una localidad de memoria, nótese que este código varía dependiendo del modo de direccionamiento que se esté usando.
Para ejemplificar esto, veamos ahora como en el simulador de code warrior se representa el código objeto en los distintos acumuladores y registros.
Para las instrucciones de almacenamiento al igual que las instrucciones de carga se reprecentan con un mnemónico, el cual inicia con ST y dependiendo del acumulador o registro es la terminación de este, las cuales son STAA, STAB, STD, STX, STY, STS (del cual no se recomienda usar el STS sin alta experiencia como  programador). Como demostración a continuación se mostrara una tabla con los códigos objetos de almacenamiento para el acumulador A.
Si somos observadores notaremos que en diferencia con la tabla de carga, la de almacenamiento no se puede usar el modo de direccionamiento inmediato, ya que si hacemos uso del sentido común nos daremos cuenta que no se puede guardar a un valor desde un acumulador o registro, sino solamente a localidades de memoria.
Para ilustrar esto, se mostrara como se almaceno desde los registros a localidades de memoria:
Transferencia, intercambio y extensión de signo.
La instrucción de transferencia copia el contendió de un acumulador o registro a el contenido de otro acumulador  o registro. Se pueden hacer transferencias de A a B usando la instrucción TAB, ó de B a A usando la instrucción TBA. También hay una instrucción que podría decirse que es universal dentro de las instrucciones de transferencias, ya que no necesita un mnemónico relacionado con algún la letra de acumulador o registro, este mnemónico es TFR, capaz de transferir (copiar) de cualquier acumulador o registro a cualquier otro acumulador o registro no importando la cantidad de bits que se quieran transferir.
En comparación con las instrucciones de transferencia, la instrucción EXG intercambia los valores de ambos acumuladores o registros, por ejemplo si en A<=$20 y en B<=30, después de usar la instrucción EXG ahora los acumuladores tendrán A<=30 y en B<=20. Hay que tomar en cuenta que si queremos intercambia un dato de 16 bits a un acumulador de solo 8 bits, se perderá la parte alta del dato de 16 bits, en cambio si queremos intercambiar un dato de 8  bits a un registro de 16 bits, se hará a la parte baja del registro llenando con ceros la parte más alta de este registro.
Para la extensión de signo, hay una instrucción especial SEX, ya que cuando transferimos o intercambiamos de una acumulador de 8 bits a un registro de 16 bits este dato quede en la parte baja del registro (como ya se explicó anteriormente), entonces si este dato es negativo al momento de que este en un registro de 16 bits se hará positivo ya que el ultimo bit es el que define si es positivo o negativo el dato (1-> negativo, 0-> positivo). Para hacer el cambio de signo se utiliza la instrucción SEX, la cual rellena con 1’s en lugar de 0’s los otros 8 bits del registro de 16 bits, y de esta manera el dato que anteriormente era de 8 bits y se transfirió o intercambio al de 16 bits ya conserve el signo negativo en caso de que lo haya sido.

Intercambio de datos:



: Transferencia y extensión de signo



Sumas y restas.
La suma entre registros y registro, y registro y memora de 8 y 16 bits con y sin signo. También hay instrucciones de suma que suman el bit de acarreo (carry) en el CCR. Al igual que en la suma también en la resta se puede hacer entre registro y registro y registro y memoria de 8 y 16 bits con signo y sin signo. Y al igual que en las sumas se usa un bit de acarreo del CCR, pero en esta ocasión nos sirve como pedir prestado (borrow).
Como se mencionó anteriormente, se considera un bit del CCR para realizar la suma o resta en algún registro o memoria, además de que se alteran los registros de las banderas medio acarreo (H), signo (N), cero (z), sobrecupo (V) y por supuesto el acarreo (C). Algunas de estas instrucciones son solamente inherentes como la suma y resta entre registros, en cambio la suma y resta entre un registro y memoria los modo de direccionamiento son los complementarios al inherente, es  decir, aplican el resto de los modos de direccionamiento. A continuación se mostrara la lo anterior dicho de los modos de direccionamiento.
 
Ejemplificando la suma entre registros se realiza una suma entre registros A + B ($70 + $90) y el resultado de esta suma es $100, en el cual en el procesador solo nos dará el resultado de $00, ya que se queda cargado el resultado de esta operación en acumulador A (y este es de 8 bits), entonces se queda el resultado de $00 ahí, pero se activa la bandera de acarreo y esto nos indica que el resultado de esta operación es un número mayor a 8 bits.
Ahora, para la suma de un registro con memoria, al igual que en el ejemplo anterior se usa el modo de direccionamiento inmediato. Hay que notar que el ejemplo anterior para cargar los datos que se usaron se utilizó el modo inmediato, pero solo para cargar el dato, no para realizar la operación, como ya se había explicado anteriormente en la suma o resta entre registros solo se puede usar el modo inherente. Ahora, para el siguiente ejemplo de suma que se realizara entre registro y memoria se suma al $00 un $FF, entonces esto nos dará como resultado $FF, pero hay que notar el para esta instrucción se toma en cuenta el carreo y en caso de que el bit este activado debido al resultado de la suma anterior, entonces se le suma 1 al resultado de la operación, es decir, $FF+1 y el resultado efectivo de esta suma (por así llamarlo) es $00 y se vuelva a activar el bit de acarreo, porque el resultado real es $100.
Para el caso de la resta ocurre lo mismo, pero en lugar de ser acarro es pedir prestado (carry/borrow).
Instrucciones BCD
Las instrucciones BCD, son usadas para ajustar un número hexadecimal a un número decimal, una de las principales condiciones es que los números en hexadecimal no contengan letras, es decir, que los operandos no sean mayores a $9. Para el uso de ajuste decimal se usan las instrucciones de suma que consideran el medio acarreo (H) del CCR, y después se ajusta el resultado de la operación usando la instrucción DAA. Para ejemplificar esto, se realizara una suma entre un registro y memoria después, como el resultado está en el registro B se cambia al registro A para poder realizar el juste decimal.
Instrucciones de decrementos e incrementos.
Estas instrucciones pueden ser usadas para registros de 8 y 16 bits. Estas instrucciones se usan o aplican para realizar contadores ascendentes o descendentes, ya que el bit de acarreo (C) en el CCR no afecta. A continuación se mostrara una tabla de los distintos tipos de decrementos e incrementos.

Hay que destacar que estas instrucciones son inherentes, si se desea guardar en una localidad de memoria como por ejemplo, una tabla se pueden usar varios métodos distintos, pero en si, estas instrucciones son puramente inherentes.
A continuación se presentara una aplicación de un contador y llenado de una tabla con los resultados.
 
En este ejemplo primero se carga la dirección de la tabla (que para este caso está en el origen de la RAM) después el valor de inicio $FF, y por sentido común sabremos que será un contador descendente. Después se guarda en cierta localidad de memoria, que para este caso es la primera localidad de la dirección de la tabla, y por último se incrementa el índice de la tabla, por lo tanto cambia de dirección después de haber guardado el valor, y posteriormente decrementamos 1 al valor inicial provocando que este vaya contando descendentemente, y como dije anteriormente guardando los datos, generando una tabla de 255 datos.




Instrucciones de comparaciones:
Estas instrucciones se utilizan para hacer una prueba a un registro o a una localidad de memoria, la manera de comparar es haciendo una resta entre lo que se dece comparar, pero a diferencia de las instrucciones de resta en esta resta que se realiza en la comparación no se genera resultado alguno, solo se afectan las banderas del CCR. Estas instrucciones son usualmente usadas para establecer las condiciones de para las instrucciones de bifurcación.


Como ejemplo de esto, se realiza una comparación un cero de un registro, para esto se usa la instrucción de TSTA, la cual compara con cero la localidad de memoria A, esto con el fin de activar la bandera Z, en caso de que sea igual a cero lo que se encuentre cargado en el acumulador A. se hace una bifurcación o salta a otra sección de programa.






Operaciones lógicas.
Para las operaciones lógicas booleanas se realizan operaciones entre acumuladores, memoria e incluso el CCR. Las operaciones lógicas que se realizan son AND, OR y OR exclusiva.

A continuación se mostrara la tabla de las distintas instrucciones booleanas que se pueden usar.
Como ejemplo de esto, se realiza una operación entre el acumulador A y una localidad de memoria (en modo inmediato) de la cual se realizara la operación booleana AND, donde el resultado se quedara cargado en el registro A, notemos que esta instrucción se puede usar como enmascaramiento de bits,de manera que solo los bits que sean 1’s tanto en la memoria como en el registro son los que se mantendrán iguales en el resultado como se muestra en la tabla de verdad de AND.
Ahora, para demostrar la compuerta OR, se carga otro valor en modo inmediato y el resultado de igual manera se mantiene en A, pero ahora en donde sea que haya 1’s tanto en A como en memoria se mantendrá en 1, no importando si en A o memoria había un cero como se muestra en la tabla de la verdad de OR.
Y por último se le aplica la instrucción XOR, para que los bits que sean diferentes se mantengan en 1’s y los bits que son iguales se hagan 0’s, como se muestra en la tabla de verdad de XOR.


Limpiar, complementar y negar.
Las instrucciones de limpieza sirven para poner en cero localidades de memoria , acumuladores y algunos bits del CCR. Como por ejemplo CLC que consiste en mandar un 0 a bit de acarreo (C) del CCR, el CLR hace lo mismo pero para una localidad e memoria  y el CLRA para el acumulador A.
Las instrucciones de complemento, dan como resultado el valor que falta para completar el valor máximo de un acumulador o memoria, es decir si es de 8 bits (FF) se realiza una resta entre ese valor y lo que se tiene en el Acumulador o localidad de memoria, entonces el resultado es lo que falta para obtener valor del byte. Un  ejemplo sencillo es: el complemento de 0, si este es de 8 bits, entonces el valor máximo es FF, lo que se hace es una resta FF-0 el resultado es FF, y ese es el complemento de 0, es decir lo que le falta para llegar a su valor máximo.
La negación es el complemento de 2, algo muy similar a lo realizado anteriormente, al diferencia está en que se le suma 1 después de haber complementado A continuación se mostrara la tabla de las instrucciones:
Para ejemplificar lo anterior dicho se hace un programa muy sencillo.
Primero se borra lo que está en B con la instrucción de limpiar, después se complementa y el resultado es FF (como se explicó anteriormente), y por último se hace la negación que es el complemento de 2, el cual consiste en obtener el complemento y después sumarle 1 como se muestra a continuación.




Multiplicación y división.
Dentro de las instrucciones de multiplicaciones y división, hay operaciones con signo y sin signo. Las operaciones de 8 bits tienen un producto de 16 bits y las multiplicaciones de 16 bits tienen productos de 32 bits. Para las divisiones, ocurre algo similar, pero inverso, ya que si se tiene un dividendo de 16 bits  y un divisor de 8 bits y se produce un consiente y residuo de 8 bits cada uno, pero también hay divisiones con un dividendo de 32 bits y un divisor de 16 bits y estos tiene un cociente y residuo de 16 bits cada uno. Para ver esto más claro se mostrara la tabla de instrucciones y se podrá apreciar que registros se concatenan para formas 32 bits tanto en multiplicaciones como en divisiones.
Como se puede apreciar en la tabla, para hacer uso de multiplicaciones de 32 bits se usa como producto el registro Y y D para formar un producto de 32 bits, de tal manera que en el Y queda la parte alta del producto y en D la parte baja del producto. Para el dividendo de las divisiones ocurre exactamente igual, se usa el registro Y para la parte más alta y el registro D para la parte más baja. A continuación se verá un ejemplo para tener esto más claro.
Para la multiplicación con signo ocurre exactamente lo mismo, solo hay que tomar en cuenta que el ultimo bit es quien definirá el signo del producto. Ahora, como se comentó anteriormente para la división y división con signo y división fraccionaria  se hace algo similar con lo que sucedió con el producto de la multiplicación, solo que en esta ocasión ocurre eso para los dividendos, lo cual es concatenar 2 registros de 16 bits para crear un dividendo de 32 bits como se muestra a continuación.


Instrucciones de corrimientos y rotaciones.

En estas instrucciones hay corrimientos para todos los registros y acumuladores, y también para memoria. Para todos los desplazamientos y rotaciones pasan a través del bit de acarreo (C) del CCR, pero la diferencia es que para los corrimientos los bits recorridos se remplazan por ceros, en cambio en rotación los bits recorridos se remplazan por los lo bits que van saliendo por el bit de acarreo (C), claro tomando en cuenta que el primer bit rotado es el bit de acarreo, pero no hay que olvidar que el ultimo bit rotado se queda en el bit de acarreo (C).

Como ejemplo de esto tenemos un $3C y corremos a la derecha el valor, entonces cada vez que se corra se rellenaran con ceros los bits que se recorrieron. En cambio sí se rota a la derecha el bit de acarreo, aunque no haya habido nada en ese acumulador si se le asigna un 1 al bit de acarreo cada vez que se haga una rotación se llena de 1’s el acumulador.

Este pequeño programa recorre el bit hacia la derecha 8 veces dejando en cero lo que hay en el acumulador a.
 


En este programa ocurre lo contrario rotando el bit de acarreo asignándole siempre 1 al bit de acarreo antes de rotarlo hacia la izquierda dejando puros el valor final del registro en 1’s.





Conclusiones:
Durante la práctica se aprendió en funcionamiento de cada una de las instrucciones del HCS12, además de ver los diferentes modos de direccionamiento que se utilizan en cada una de las instrucciones haciendo sencillos programas demostrativos.






Bibliografía:
ü  El Microcontrolador HCS12
TutorialHC12:http://caos.uab.es/~dlugones/courses_archivos/HC12tutorial.pdf
ü  HCS12_CPU
www.freescale.com ó http://michelletorres.mx/modos-de-direccionamiento/#.UwbKDPl5O1U
ü  Apuntes vistos en clase

Escritos por alumno de ingeniería en electrónica: Juan Daniel Flores Gutiérrez

martes, 3 de abril de 2012

Display de 4 Caracteres


Seguramente ya sabrás a que nos referimos cuando mencionamos un display de 7 segmentos. Estos útiles dispositivos de salida, constan de 7 LED cuasi-rectangulares, uno por tramo, dispuestos en forma de “8” y uno redondo que es el punto decimal. Mediante el encendido de algunos de los tramos que forman el “8” se puede representar cualquier digito del “0” al “9”, e incluso algunos caracteres, como la “A” o la “U”, aunque no siempre resultan muy legibles.

Uno de los problemas que presentan estos displays es su reducido tamaño. En efecto, aunque teóricamente es posible encontrarlos tan grandes como 12 pulgadas de alto (unos 30 centímetros), su precio resulta prohibitivo, sobre todo para el aficionado. Y los mas comunes, de 1 o 2 centímetros, muchas veces son demasiado pequeños para leerlos desde un par de metros de distancia.


Imagen:DLED14.jpg
Display terminado.


La solución a este problema es utilizar varios LED comunes, redondos o rectangulares, para armar los segmentos, y construirnos nosotros mismos el display del tamaño que queramos. A pesar de que emplearemos una cantidad importante de LEDS, su costo individual es tan bajo que el importe total que desembolsaremos será mucho menor que si compramos un display grande.

A lo largo de este artículo explicaremos paso a paso como construir un display gigante de 4 dígitos, que podremos conectar a un ordenador o microcontrolador para mostrar información en él.

Algunos de sus usos posibles son el empleo como un reloj digital, cronometro, termómetro, dispensador de turnos, etc.

Como ya es costumbre, los alentaremos a que modifiquen este proyecto para construir un display que se adapte exactamente a sus necesidades. Para que eso sea posible, les brindaremos toda la información necesaria sobre su funcionamiento.

Un segmento

La célula básica de nuestro proyecto será el segmento. Efectivamente, deberemos diseñar un segmento en base a algunos LEDs(y otros componentes), y luego repetirlo 7 veces para formar un digito.

Como se puede ver en la figura de mas abajo , para encender un LED hace falta que lo atraviese una corriente determinada en el sentido correcto. La intensidad de la corriente depende un poco de cada tipo de led en particular, pero se suele tomar como correcto un valor de entre 10 y 20 mA. Nosotros tomaremos un valor de 15mA, pero el lector podrá rehacer sus cálculos para otros valores.

El sentido de circulación de esta corriente por dentro del LED debe ser desde el ánodo hacia el cátodo para que este se ilumine, por lo que el ánodo se conectara al positivo de la fuente, y el cátodo al negativo.


Imagen:DLED02.gif
La corriente debe atravesar el LED para encenderlo


La tensión necesaria en los pines del LED también varia de un modelo a otro, pero 2V es un valor bastante adecuado para un LED rojo como el que usaremos aquí.

Generalmente, el valor de la fuente de alimentación no es el correcto para el LED, por lo que se debe incluir una resistencia limitadora en serie. El cálculo se realiza mediante la formula que acompaña la figura, y para una fuente de 12V, debe tener un valor de 666.66 ohms. Como las resistencias no se fabrican de todos los valores posibles, deberemos utilizar el valor comercial más cercano, en este caso, 680 ohms.

Ahora bien, todo lo explicado esta muy bien para encender un LED, pero nuestro segmento, para ser visible debe constar de al menos 3 o 4 leds (¡o mas!). El número elegido de LEDs se conectaran en serie, el cátodo de uno unido eléctricamente al cátodo del siguiente, y así.

Esto significa que la corriente que los atravesara a todos será la misma, y el voltaje aplicado deberá ser mayor que la tensión necesaria en cada uno (2V) por el número de LEDs.

En el segundo diagrama vemos tres leds conectados en serie, y la formula para calcular la resistencia limitadora. En el caso de usar la misma fuente de alimentación de 12V, la resistencia necesaria será de 400 ohms. Nuevamente, al buscar en un catalogo vemos que el valor mas cercano disponible es de 390 ohms, y es el que en la practica emplearemos.


Imagen:DLED03.gif
Forma de conectar varios LEDs en serie.

Tenemos que ver que si en la formula introducimos un numero de LEDs elevado, puede darse el caso de que el termino nLeds x VLedssea mayor que la tensión de alimentación, con lo que el valor de R será negativo, lo que por supuesto es una incongruencia. Esto nos esta indicando que la tensión de la fuente de alimentación es insuficiente para encender tantos LEDS, y deberemos utilizar una de un voltaje mayor.

En nuestro display, cada segmento constara de tres LEDs.



Dígitos

Una vez que tenemos la teoría necesaria sobre como construir un segmento, debemos dar el siguiente paso lógico: la construcción de undigito.

En realidad, un digito no es mas que repetir el esquema de un segmento 7 veces. Pero (lamentablemente siempre hay un “pero”) si tenemos intenciones de controlar nuestro digito gigante desde la PC o desde un microcontrolador, necesitaremos alguna etapa adicional, capaz de manejar el consumo de un numero elevado de LEDs, y si fuera posible, sin requerir un pin de E/S de los pocos disponibles, para manejar cada segmento.


Imagen:DLED04.gif
Un par de transistores permiten manejar varios LEDs.


El problema de manejar una corriente mas elevada de la que es capaz de brindar la PC o el microcontrolador se soluciona fácilmente mediante el uso de un transistor.

Aunque muchos de los lectores de este articulo lo tienen seguramente muy claro, intentaremos explicar con palabras sencillas y sin involucrar formulas complicadas como utilizar un transistor para excitar una serie de LEDs.

Explicado en términos simples, un transistor puede ser visto como un dispositivo de tres pines, donde la corriente que se aplica a uno de ellos, denominado “base”, controla una corriente mayor entre sus otros dos terminales, llamados “emisor” y “colector”. Esta es una gran simplificación de lo que es un transistor, pero es suficiente para entender lo que sigue.

Supongamos que el port paralelo de la PC, o el pin de salida de un microcontrolador solo puede entregar una corriente de 5mA.

Esta corriente es a todas luces insuficiente para encender los LEDs, pero si para excitar un transistor que a su vez le entregue a los LEDs los 15mA que necesita para brillar. Si no pusiéramos el transistor, el puerto se dañaría debido a que circularía por el una corriente 3 veces mayor a la que puede manejar.

El esquema de la izquierda muestra un segmento, controlado por dos transistores. T1 es un transistor PNP, y T2 es un transistor NPN. Cuando la base de T1 esta puesta a masa (un un 0 lógico lógico) y la base de T2 a un “1” los LEDs se encenderán. Las resistencias conectadas a las bases de los transistores limitan la corriente que deberá entregar el puerto de nuestra PC, y “R” se calcula tal como lo explicamos antes.

Esto soluciona el primero de los problemas. Los lectores mas avispados se habrán dado cuenta que esto se podría haber resuelto con solo un transistor. Pero para abordar el segundo problema, el no requerir un gran numero de pines de control, necesitamos multiplexar los segmentos de los 4 dígitos, y ahí necesitamos el transistor extra.



Multiplexado

Multiplexar significa básicamente reutilizar unos pocos recursos disponibles para que a lo largo del tiempo realicen diferentes funciones.

Una de las formas seria encender brevemente cada segmento, apagarlo, pasar al siguiente digito, encenderlo brevemente, pasar al otro… y así sucesivamente. Este es un sistema muy utilizado (y recomendado) pero que para nosotros tiene un problema importante: requiere que estas tareas se lleven a cabo continuamente, y cada unos pocos milisegundos, para que no se noten parpadeos o apagados indeseables de algunos segmentos. Esto obligaría a que nuestra PC este pendiente completamente del manejo del display, lo que es poco practico.

Dado que los datos del display seguramente no van a cambiar con una frecuencia muy elevada, podemos utilizar un registro de desplazamiento como el visto en otros artículos. La ventaja del registro de desplazamiento es que una vez que introducimos un dato en el, este se mantiene hasta que necesitemos cambiarlo, sin requerir la atención de la computadora. Por ejemplo, en el caso de un reloj, si no tenemos segundero, solo deberemos escribir la hora una vez por minuto.

No nos explayaremos demasiado sobre el funcionamiento del registro de desplazamiento aquí, que ya como se trata de un circuito útil y utilizado a menudo, le dedicaremos un articulo especial en este sitio. Solo mencionaremos que gracias a su empleo, con cuatro líneas del puerto paralelo podremos controlar los 28 segmentos de los cuatro dígitos, y el par de LEDs que hay entre el segundo y tercer digito.

Las salidas tendrán las funciones siguientes: proveer pulsos de CLOCK, los datos en forma serial (DATA), RESET para borrar todos los dígitos, y la ultima controla el encendido y apagado de todos los segmentos para proceder a la escritura de los datos sin que aparezcan parpadeos.



El circuito

En los diagramas podemos ver el esquema eléctrico del display en si mismo, y del registro de desplazamiento que será nuestra placa de control, el vínculo entre el display y la PC o el microcontrolador.

Cada uno de ellos va montado en su propio circuito impreso, de manera que se puedan montar en un espacio mas reducido, colocando una plaqueta detrás de la otra, unidas entre si por cables flexibles, y unidas mediante los mismos separadores plásticos que se emplean para montar los motherboards en las computadoras.

Como siempre, para construir los impresos utilizaremos la técnica explicada aquí.

Al momento de soldar los leds, debemos tener cuidado con la orientación de los semiconductores, ya que si los colocamos al revés, el proyecto no funcionara. Si observan atentamente, los conectores de la placa controladora se corresponden con los del display, y una vez que tengamos listas ambas, deberemos unir cada punto con un cable, y luego doblar el mazo de conductores para poner una placa a espaldas de la otra. Se deben practicar agujeros para unir ambas plaquetas, teniendo cuidado de que al agujerear no perforemos un componente o cortemos una pista del circuito impreso. Las imágenes que ilustran la nota nos muestran como debe quedar el modelo terminado.



El circuito eléctrico del display es extenso pero sencillo.



Este es el circuito de nuestro registro de desplazamiento.

PCB

Imagen:DLED07.gif

Circuito impreso correspondiente al display de LEDs.


Imagen:DLED08.gif
Este es el circuito impreso que corresponde al registro de desplazamiento.




Aquí hemos puesto algunas fotos del display terminado.


Imagen:DLED11.jpg
Display montado sobre el registro de desplazamiento

Puede verse el conector de entrada de datos que debe conectarse al controlador, ya sea una PC o un microcontrolador.


Imagen:DLED12.jpg
Los transistores se deben montar cortando sus pines para que queden a menor altura que los LEDs.


Imagen:DLED13.jpg
La mayor parte de los componentes de este montaje son diodos LED.






Créditos al autor del proyecto:
Ariel Palazzesi

domingo, 1 de abril de 2012

Como hacer un puente "H"

Este circuito maneja pequeños motores dc de 100W, 5 Amperios o 40 Voltios, cualquiera de las tres especificaciones. Y usando elementos de mayor potencia para implementar el puente se pueden manejar motores dc que necesiten mas potencia.

Su funcionamiento es simple, puede manejar un motor de 6 a 40 Voltios. Tiene dos entradas lógicas A y B, y dos salidas denominadas también A y B. Si la entrada A es alta, entonces la salida A también será alta y el motor gira en un sentido. Ahora, si la entrada B es alta, la salida B es alta y el motor gira en sentido contrario.

Si las dos entradas son bajas, el motor estará apagado y no existe consumo de potencia alguno. Por el contrario, si las dos entradas son altas, el motor entra en corto pero no sufre daño alguno ya que esto se hace para producir un efecto de frenado del motor. Esto solo se hace por un corto tiempo.

Se puede tener control de velocidad por PWM (Pulse Width Modulation). Solo tiene que aplicar la señal PWM a una de las entradas de control del puente. Este puente generalmente trabaja bien para bajas frecuencias de señales que no son PWM.

TABLA DE VERDAD:

input | output  A | B | A | B  ----------------  0   0 | libre  1   0 | 1   0  0   1 | 0   1  1   1 | 1   1

  

domingo, 12 de junio de 2011

¿Que es la Óptica?

El sentido de la visión es el medio de comunicación con el mundo exterior más importante que tenemos, lo que quizá pueda explicar por qué la óptica es una de las ramas más antiguas de la ciencia. En broma podríamos decir que la óptica comenzó cuando Adán vio a Eva por primera vez, aunque más seriamente podemos afirmar que tan pronto el hombre tuvo conciencia del mundo que habitaba se comenzó a percatar de muchos fenómenos luminosos a su alrededor, el Sol, las estrellas, el arco iris, el color del cielo a diferentes horas del día, y muchos otros. Estos fenómenos sin duda despertaron su curiosidad e interés, que hasta la fecha sigue sin saciarse completamente.

Antes de hablar de óptica conviene saber lo que ésta es. En forma estricta, podemos definir la óptica de acuerdo con la convención de la Optical Society of America, para la cual es el estudio de la luz, de la manera como es emitida por los cuerpos luminosos, de la forma en la que se propaga a través de los medios transparentes y de la forma en que es absorbida por otros cuerpos. La óptica, al estudiar los cuerpos luminosos, considera los mecanismos atómicos y moleculares que originan la luz. Al estudiar su propagación, lógicamente estudia los fenómenos luminosos relacionados con ella, como la reflexión, la refracción, la interferencia y la difracción. Finalmente, la absorción de la luz ocurre cuando la luz llega a su destino, produciendo ahí un efecto físico o químico, por ejemplo, en la retina de un ojo, en una película fotográfica, en una cámara de televisión, o en cualquier otro detector luminoso.

Sin embargo, con el fin de que la definición de la óptica quedara completa, la siguiente pregunta lógica sería: ¿qué es la luz? En forma rigurosa, aún no se tiene una respuesta completamente satisfactoria a esta pregunta, aunque sí podemos afirmar de manera muy general y elemental que la luz es esa radiación que al penetrar a nuestros ojos produce una sensación visual.

Por otro lado, más científicamente, sabemos que la luz es una onda electromagnética idéntica a una onda de radio, con la única diferencia de que su frecuencia es mucho mayor y por lo tanto su longitud de onda es mucho menor. Por ejemplo, la frecuencia de la luz amarilla es 5.4 x 108 MHz, a la que le corresponde una longitud de onda de 5.6 x 10-5cm. En el cuadro 1 se comparan las longitudes de onda de la luz con las de las demás ondas electromagnéticas. Según los instrumentos que se usen para observarlas, decimos que están en el dominio electrónico, óptico, o de la física de altas energías.

En un sentido mucho más amplio, se considera frecuentemente óptica al estudio y manejo de las imágenes en general, aunque éstas no hayan sido necesariamente formadas con luz o métodos ópticos convencionales. Éste es el caso del procesamiento digital de imágenes o de la tomografia computarizada, de las que hablaremos en la sección sobre procesamiento digital de imágenes.

La óptica, desde que se comenzó a estudiar seriamente, ha desempeñado un papel muy importante en el desarrollo del conocimiento científico y de la tecnología. Los principales avances de la física de nuestro siglo, como la teoría cuántica, la relatividad o los láseres tienen su fundamento o comprobación en algún experimento óptico. Por otro lado, también los grandes avances tecnológicos, como las modernas comunicaciones por fibras ópticas, las aplicaciones de los láseres y de la holografía tienen una base óptica.

CUADRO 1. Espectro electromagnético


Tipo de onda electromagnética
Límites aproximados de sus longitudes de onda

DominioOndas de radio y TV1 000 m0.5 m
electrónicoMicroondas50 cm0.05 mm
Infrarrojo lejano0.5 mm0.03 mm
Infrarrojo cercano30 mm0.72 mm
Dominio ópticoLuz visible720 nm400 nm
Ultravioleta400 nm200 nm
Extremo ultravioleta2 000 500
Física deRayos X500 1
alta energíaRayos gamma1 .01

donde las unidades usadas aquí son:
1 micra = 1 mm = 10-6 m
1 ngstrom = 1 = 10-10 m
1 nanómetro = 1 nm = 10-9 m



LOS PRIMEROS DESCUBRIMIENTOS

A continuación haremos una breve revisión histórica de cómo se ha desarrollado esta ciencia, desde los comienzos más tempranos de que se tienen registros o evidencias. Mucho antes de que se iniciaran los estudios metódicos y formales de los fenómenos ópticos, se construyeron espejos y lentes para mejorar la visión. Por ejemplo, los espejos ya fueron usados por las mujeres del antiguo Egipto para verse en ellos (1900 a.C.), como pudo comprobarse al encontrar uno cerca de la pirámide de Sesostris II. Naturalmente, estos espejos eran solamente unos trozos de metal con un pulido muy imperfecto. En las ruinas de Nínive, la antigua capital asiria, se encontró una pieza de cristal de roca que tenía toda la apariencia de una lente convergente. Una de la más antiguas referencias a las lentes se encuentra en los escritos de Confucio (500 a.C.), quien decía que las lentes mejoraban la visión, aunque probablemente no sabía nada acerca de la refracción. Otra mención muy temprana de ellas se encuentra en el libro de Aristófanes, Las nubes, una comedia escrita en el año 425 a.C., en donde describe unas piedras transparentes, con las que se puede encender el fuego mediante la luz del Sol. Probablemente fue él quien construyó la primera lente del mundo, con un globo de vidrio soplado, lleno de agua, en el año 424 a.C. Sin embargo, ésta no fue construida con el propósito de amplificar imágenes, sino de concentrar la luz solar. Según la leyenda, Arquímedes construyó unos espejos cóncavos, con los que reflejaba la luz del Sol hacia las naves enemigas de Siracusa para quemarlas. Aunque esto se puede lograr si se usa una gran cantidad de espejos que reflejen todos simultáneamente la luz hacia el mismo punto, probablemente este hecho sea más leyenda que historia.

La primera mención al fenómeno de la refracción de la luz la encontramos en el libro de Platón, La República. Euclides estableció por primera vez (300 a.C.) la ley de la reflexión y algunas propiedades de los espejos esféricos en su libro Catóptrica. Herón de Alejandría (250 d.C.) casi descubrió el Principio de Fermat al decir que la luz al reflejarse sigue la mínima trayectoria posible. Claudio Tolomeo (130 d.C.), sin duda uno de los más grandes científicos de la antigüedad, escribió el libro Óptica, donde establece que el rayo incidente, la normal a la superficie y el rayo reflejado están en un plano común. Tolomeo también encontró una forma aproximada de la ley de refracción, válida únicamente para ángulos de incidencia pequeños.

Durante la Edad Media, la óptica, al igual que la demás ciencias, progresó muy lentamente. Este adelanto estuvo en manos de los árabes. El filósofo árabe Abu Ysuf Yaqub Ibn Is-Hak, más conocido como Al-Kindi, que vivió en Basora y Bagdad (813- 880 d.C.), escribió un libro sobre óptica llamado De Aspectibus. En él hace algunas consideraciones generales acerca de la refracción de la luz, pero además contradice a Platón al afirmar, igual que Aristóteles, que la visión se debe a unos rayos que emanan de los cuerpos luminosos, y no del ojo, de donde parten viajando en línea recta para luego penetrar al ojo, donde producen la sensación visual. Otro científico árabe muy importante, Ibn al-Haitham, más conocido por su nombre latinizado Alhazen (965-1038 d.C.), hizo investigaciones sobre astronomía, matemáticas, física y medicina. Alhazen escribió un libro llamado Kitab-ul Manazir (Tratado de óptica), donde expone sus estudios sobre el tema. Entre sus principales resultados está el descubrimiento de la cámara obscura, mediante la cual pudo formar una imagen invertida de un objeto luminoso, haciendo pasar la luz a través de un pequeño orificio. Alhazen también hizo el primer estudio realmente científico acerca de la refracción, probando la ley aproximada de Tolomeo y además encontró una ley que daba las posiciones relativas de un objeto y su imagen formada por una lente o por un espejo convergente. Sin duda este científico fue la más grande autoridad de la Edad Media, y tuvo una gran influencia sobre los investigadores que le siguieron, incluyendo a Isaac Newton.

Los árabes ya tenían lentes, pero muy imperfectas y rudimentarias. Tuvieron que pasar muchos años, hasta que en el año 1266, en la Universidad de Oxford, Inglaterra, el fraile franciscano inglés Roger Bacon (1214-1294) talló las primeras lentes con la forma de lenteja que ahora conocemos, y de donde proviene su nombre. En su libro Opus Majus, en la sección siete, dedicada a la óptica, Bacon describe muy claramente las propiedades de una lente para amplificar la letra escrita. Sin duda a Bacon se le puede considerar, en plena Edad Media, como el primer científico moderno partidario de la experimentación cuyos estudios son impresionantemente completos y variados para su época.

La razón por la cual no se habían fabricado lentes de calidad aceptable con anterioridad, era la ausencia de un buen vidrio. A principios de la Edad Media, la fabricación de vidrio de alta calidad era un secreto celosamente guardado por los artesanos de Constantinopla. Los bizantinos habían descubierto la necesidad de emplear productos químicos de muy alta pureza para obtener buena transparencia, al mismo tiempo que habían adquirido una gran habilidad en el tallado y pulido del vidrio. Durante la cuarta Cruzada, en 1204, los venecianos decidieron saquear Constantinopla en lugar de acudir a Tierra Santa, por lo que descubrieron sus secretos. Al regresar a Venecia, los invasores de Constantinopla se llevaron consigo un gran número de artesanos especializados en el manejo del vidrio, lo que les permitió después adquirir una gran reputación en toda Europa. Hasta la fecha, la artesanía del vidrio de Venecia tiene fama en todo el mundo.

Después de tallar las primeras lentes, el siguiente paso natural era montarlas en una armazón para colocar una lente en cada ojo, con el fin de mejorar la visión de las personas con defectos visuales. Como era de esperarse, esto se realizó en Italia, casi un siglo después, entre los años 1285 y 1300 d.C., aunque siempre ha existido la duda de si fue Alexandro della Spina, un monje dominico de Pisa, o su amigo Salvino de Armati, en Florencia. El primer retrato conocido de una persona con anteojos es el de un fresco pintado por Tomaso da Modena, en 1352, que se muestra en la figura 1.



Figura 1. Fresco de Tomaso da Modena donde se muestra una persona con anteojos, pintado en 1352.


HISTORIA DE LA ÓPTICA INSTRUMENTAL

Como es natural, la historia de la óptica geométrica e instrumental está íntimamente ligada a la historia de las lentes, al descubrimiento de las leyes de la reflexión, de la refracción, y de la formación de las imágenes, al igual que a la historia de la invención de los primeros instrumentos ópticos, como el telescopio, el microscopio y el espectroscopio. En cierto modo, la mayoría de los instrumentos ópticos posteriores son derivaciones o modificaciones de éstos, por lo que es sumamente interesante describir cómo se inventaron y desarrollaron.



Figura 2. Willebrod Snell (1591-1626). Copia al óleo por Zacarías Malacara M.

Al fabricar las primeras lentes, más de dos siglos antes del inicio del Renacimiento, Roger Bacon (1214-1294) sugirió en Inglaterra la forma en que se podría hacer un telescopio, aunque nunca llegó a construir uno. Ya durante el Renacimiento volvió a progresar la óptica a grandes pasos, comenzando por el descubrimiento del telescopio, que se describirá más adelante. Es interesante saber que fue hasta después de que se construyeron los primeros telescopios, que Willebrod Snell (1591-1626), (Figura 2), en Leyden, Holanda, en 1621, descubrió la ley de la refracción. Esta ley es válida y exacta para cualquier magnitud del ángulo de incidencia y no solamente aproximada como la de Tolomeo. Snell era un matemático, más interesado en problemas matemáticos que en óptica. Independientemente de Snell, en 1637 René Descartes también encontró la misma ley, deduciéndola de analogías mecánicas. Esta ley es el pilar fundamental de la óptica geométrica, gracias a la cual fue posible establecer más tarde toda la teoría de la formación de imágenes con lentes y con espejos. La ley de Snell la podemos enunciar diciendo que el cociente de los senos de los ángulos de incidencia y de refracción, respectivamente, es igual a una constante característica del medio, n, a la que llamamos índice de refracción. Esto se puede representar por:

donde q1 es el ángulo de incidencia y q2 es el ángulo de refracción, respectivamente, que se miden con respecto a una línea imaginaria perpendicular a la superficie como se muestra en la figura 3. Estos índices de refracción son unas constantes, que tienen valores característicos para diferentes materiales, como se muestra en el cuadro 2. En general, el índice de refracción es tanto mayor cuanto más denso sea el material.

Pierre Fermat (1601-1665) en Toulouse, estableció su muy famoso principio que dice que la luz, al viajar de un punto a otro, atravesando uno o más medios con diferentes densidades, sigue la trayectoria que le tome el mínimo tiempo de recorrido. De este principio es posible deducir la ley de la refracción de Snell. Sir William Rowan Hamilton (1805-1865) probó en 1831 que el concepto de rayo de luz se puede usar con bastante precisión si la frecuencia de la onda de luz es muy alta, demostrando así que la óptica geométrica es solo un caso particular de la óptica de ondas. Con esto se validaba el concepto de rayo luminoso, que tanto se ha usado para diseñar sistemas ópticos.



Figura 3. Refracción de un rayo luminoso, siguiendo la ley de Snell.

CUADRO 2. Índices de refracción de algunos materiales transparentes

Material
Índice de refracción

Vacío
1.0000
Aire
1.0003
Agua
1.33
Cuarzo fundido
1.46
Acrílico
1.49
Crown borosilicato
1.51
Crown ordinario
1.52
Bálsamo de Canadá
1.53
Flint ligero
1.57
Crown de bario denso
1.62
Flint extra denso
1.72
Diamante
2.42



Karl Friedrich Gauss (1777-1855) nacido en Brunswick, Alemania, fue otro de los grandes genios que trabajaron para el desarrollo de la ciencia en muchos aspectos y que, por supuesto, no dejaron de hacer su contribución al desarrollo de la óptica. Desde niño, Gauss manifestó su gran inteligencia. Es famosa la anécdota de que cuando tenía apenas diez años de edad, su maestra solicitó a todos los alumnos de su clase que sumaran todos los números del uno al cien. La razón era que la maestra deseaba mantener ocupados a sus alumnos por un gran tiempo. Sin embargo, el niño Karl entregó el resultado en tan sólo unos segundos. El método que el niño empleó se basaba en el hecho de que el primer número más el último sumaban 101, lo mismo que el segundo y el penúltimo, y así sucesivamente. De esta manera formaba 50 parejas, por lo que el resultado debía ser 101x50=5 050. Los descubrimientos matemáticos de Gauss durante su vida son tantos y tan importantes que sin lugar a dudas se le puede considerar como uno de los mejores matemáticos que han existido. La contribución de Gauss a la óptica fue el establecimiento de la teoría de primer orden de la óptica geométrica, que se basa en la ley de la refracción y en consideraciones geométricas, para calcular las posiciones de las imágenes y sus tamaños, en los sistenas ópticos formados por lentes y espejos. Esta teoría, hasta la fecha, se sigue usando con mucho éxito para diseñar todo tipo de instrumentos ópticos, y con ella es posible, por ejemplo, calcular las posiciones del objeto y de la imagen formada por una lente convergente simple, es decir, aquella que hace que los rayos que entren paralelos a la lente converjan a un punto llamado foco, como se muestra en la figura 4.



Figura 4. Formación de una imagen con una lente.