Cargando...

jueves, 1 de septiembre de 2011

Proyecto Final: Reloj Digital - Anteproyecto

En esta entrada informamos sobre nuestro Proyecto Final: un Reloj digital que pueda activar múltiples alarmas automáticamente en momentos previamente establecidos, el cual va a ser utilizado para controlar el horario en que suenan las alarmas del colegio.
El Proyecto es diseñado en conjunto con el Grupo 4 del mismo curso, integrado por Emmanuel Morano, Juan Manuel Sanchez Valle y Lorenzo Lamas, Aquí su blog:
http://seele-04.blogspot.com/

Debido tanto a la importancia del proyecto como a la unión de nuestros 2 grupos decidimos crear un nuevo blog, en el que publicaremos todo lo relacionado al denominado Proyecto Nagato, es decir, complementos teóricos, simulaciones, ejercicios de prueba, pruebas y mediciones en protoboard, diseño y armado de circuitos y gabinete, etc.
El blog fue nombrado "The Minute Group", y para entrar en él pulsa en el siguiente link:
http://theminutegroup.blogspot.com/
Cualquier otra novedad sobre el proyecto será comentada en ese blog.

domingo, 28 de agosto de 2011

Prácticas de Programación

En esta entrada publicaremos unos ejercicios que hicimos como práctica de programacion tanto en Assembler (usando el MPLab 8.1) como en C (Usando el CCS C v 4.114).
En caso de querer comprobar estos programas o usarlos como base para otros más complejos, dejamos a disposición el siguiente link, en que se encuentran todos los archivos que utilizamos en las prácticas:



Elemental_01:
Por el Puerto B se obtiene el dato de las 5 líneas del Puerto A, al que está conectado un array de interruptores, sumándole el valor de una constante.
La constante que le sumamos es 20, quedando así (despues de definir la configuración, las etiquetas y el lugar que ocupan, y la configuración de entrada/salida de los puertos) el código en Assembler:


Debido a problemas con el editor de texto de Blogger, y para presentar el programa de forma ordenada, decidimos utilizar una imagen sacada desde el MPLAB; utilizaremos este recurso en toda la entrada.

En C el programa es aún mas sencillo, requiriendo tan solo de las siguientes líneas:

#include <Elemental01.h>

void main()
{
   while (1) {
      output_b( input_a() + 10);
   }
}

El "Elemental01.h" al que hace referencia es un header, un archivo que contiene la configuración del microcontrolador sobre el que se va a programar y otras opciones, y a su vez incluye otro header que contiene la información específica del microcontrolador. Estos archivos son completamente necesarios para el funcionamiento del programa a ser grabado.
Como ejemplo, mostramos la forma en que configuramos el header que usamos en estas prácticas:

#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                             //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT                           //Power Up Timer
#FUSES NOPROTECT           //Code not protected from reading

#use delay(clock=4000000)


Elemental_02:
Por el Puerto B se obtiene el dato del Puerto A multiplicado por 2.

En Assembler:
A pertir de este ejercicio, para no hacer muy engorrosa la entrada, dejamos tan solo la parte del programa que varía de acuerdo al ejercicio propuesto, estando el mismo completo tanto en la carpeta descargable a través del link de arriba como en el link individual de cada ejercicio.


En C:
void main()
{
   while(1) {
      output_b (input_a()*2);
   }     
}

Elemental_03:
Por el Puerto B se obtiene el dato introducido por el Puerto A, pero los bits pares de la salida se fijan siempre a "1". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los pares "b6 b4 b2 b0". Observar que:
  • Los bits pares están a "1", efectivamente: (Puerto B)= 'x1x1x1x1'.
  • Los impares permanecen con el dato del puerto de entrada.
En Assembler:
En C:
void main()
{
   while (1) {
      output_b ( input_a () | 0b01010101);
   }
}

Elemental_04:
Por el Puerto B se obtiene el contenido del Puerto A, pero los bits impares de la salida se fijan siempre a "0". El orden de los bits será "b7 b6 b5 b4 b3 b2 b1 b0", siendo los impares "b7 b5 b3 b1".
Observar que:
  •  Los bits impares están a "0", efectivamente: (Puerto B)= '0x0x0x0x'.
  •  Los pares permanecen con el dato del puerto de entrada.
En Assembler:

En C:
void main()
{
  while(1)  {
       output_b (input_a () & 0b01010101);
   }
}


Elemental_05:
Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y los ceros.

En Assembler:
En C:
void main()
{
   while (1)   {
      output_b (~ input_a () );
   }
}

Elemental_06:
Por el Puerto B se obtiene el dato del Puerto A intercambiando los nibbles alto y bajo.

En Assembler:
En C:
void main()
{
   while (1)   {
      output_b ( swap(input_a () )); 
   }
}

Elemental_07:
Por el puerto B se obtiene el dato del Puerto A desplazando un bit hacia la izquierda, por la derecha entrará un "1".

En Assembler:

En C:
void main()
{
   while(1) {
      output_b (rotate_left (input_a() ));
   }
}

Elemental_08:
Por el Puerto B se saca el dato del puerta A desplazando un bit hacia la derecha, por la izquierda entrará un "0".

En Assembler:
En C:
void main()
{
   while(1) {
      output_b (rotate_right (input_a() ));
   }
}


Elemental_09:
Por el Puerto B se saca el dato del puerto A invirtiendo los bits pares. Los impares se dejan como en la entrada.

En Assembler:


En C:
void main()
{
   while (1) {
      output_b(input_a()^0b01010101);
   }
}

Elemental_10:
Por el Puerto B se obtiene el dato de las 5 líneas del Puerto A al que está conectado un array de interruptores. Esta operación la realizará una única vez. Después el programa entrará en modo Standby o de bajo consumo del cual no podrá salir.

En Assembler:
En C:
void main()
{
   while (1) {
      output_b (input_a());
      sleep();
   }
} 

martes, 12 de julio de 2011

Trabajo Práctico Nº5: Contadores - Sistemas secuenciales

Complemento teórico:
Sistemas secuenciales:
En los sistemas secuenciales los valores de las salidas, en un momento dado, no dependen exclusivamente de los valores de las entradas en dicho momento, sino también dependen del estado anterior o estado interno. El sistema secuencial más simple es el biestable de los cuales, el de tipo D (o cerrojo) es el más utilizado actualmente.
La mayoría de los sistemas secuenciales están gobernados por señales de reloj. A éstos se los denomina "síncronos" o "sincrónicos", a diferencia de los "asíncronos" o "asincrónicos" que son aquellos que no son controlados por señales de reloj.
Contador:
Un contador (counter) es un circuito secuencial construido a partir de biestables y puertas logicas capaz de realizar el computo de los impulsos que recibe en la entrada destinada a tal efecto, almacenar datos o actuar como divisor de frecuencia.

Parte A: Contador discreto

Para realizar el contador utilizamos los siguientes materiales:


Lista de Materiales
Cantidad
Componentes Activos
1
Transistor BC337
1
Circuito Integrado 4510
1
Circuito Integrado 4511
1
Circuito Integrado 4013
2
Circuito Integrado 4002

Componentes Pasivos
7
Resistores de 330Ω
5
Resistores de 10KΩ
1
Capacitor de 1nF

Varios
1
Buzzer
1
Display de 7 segmentos cátodo-común
1
Switch
1
Zócalo de 14 pines
4
Zócalo de 16 pines


Circuito eléctrico:



Funcionamiento del circuito:

En el “estado primario” la señal está insertada en el circuito pero la alimentación no, el display muestra un 9 titilando. 

Al conectar la alimentación el circuito se establece en el que llamaremos el “estado de epera” que muestra un 9 en el dislay. Para lograr esto se preestablecen, en código binario, las entradas del CD4510 (4, 12, 13, 3) que, al consistir de cuatro flip-flop’s tipo D sincronizados interconectados como contadores, copia la entrada en los pines de salida, que son enviados a la entrada del 4511, que decodifica el número en código binario y lo prepara para ser enviado al display por medio de sus 7 salidas, que finalmente muestra el número deseado.

El R.C conectado a las entradas de la primera compuerta NOR del CD4002, con su salida conectada a la pata 1 (Preset Enable) del CD4510,  le da un pequeño tiempo de 10uS a este último para asegurar el sincronismo en el circuito integrado.

Al presionar el botón es cuando el conteo decresivo, al que llamamos “estado activo”, comienza. Gracias al seteo producido en el CD4013 al presionar el botón, el Clock Input del CD4510 es activado, iniciando la secuencia decresiva (configurada al conectar la pata Up/Down a masa) hasta llegar al cero; mostrándose todos estos números en el display mediante el mismo funcionamiento con que mostrase el 9, reemplazando a las entradas por la secuencia mencionada.
Al llegar la secuencia a 0 (cero) comienza el “estado de aviso”, en el que la segunda compuerta NOR del DC4002 es activada (dado que sus 4 entradas están conectadas a las propias del CD4511 y éstas muestran el número 0 en binario, es decir, 0000) y resetea el CD4013, haciendo necesaria la reconección de la alimentación para volver a repetir la secuencia. Además, activa el buzzer por medio del transistor en configuración “C”, lo que indica al usuario (mediante el ruido que el buffer produce) que la secuencia ha terminado.
 
En este video puede verse la simulación del contador hecha en Proteus:

Para comprobar su correcto funcionamiento, armamos el circuito en el protoboard :


En este video puede verse su funcionamiento:

Con el objetivo de mejorar nuestro manejo del Protel 99 es que diseñamos este circuito de la siguiente manera:
Circuito esquemático:


Diseño PCB:


Parte B : Contador con microcontrolador
En esta actividad pretendemos reemplazar los circuito integrados 4002, 4013 y 4510 por un microcontrolador programado para la tarea. Gracias e esto, el circuito es mucho mas pequeño, sencillo y configurable, pudiendo cambiar su funcionamiento con tan solo modificar el programa cargado.
El microcontrolador que usamos es el PIC12F683, y el programa compilador es el CCS 4.114.


Armamos el circuito en el protoboard :








 Circuito Esquemático:

Diseñamos en PCB:

jueves, 9 de junio de 2011

Actividad Nº4: Amplificadores Operacionales


Objetivo:

  • Conocer el uso del amplificador operacional realimentado.
  • Conocer las tres de sus configuraciones básicas.
  • Evaluar sus características.
  • Informar la actividad desarrollada en este trabajo práctico.

Introducción teórica

Los amplificadores operacionales (A.O) son circuitos electrónicos, generalmente circuitos integrados que tienen dos entradas y una salida. La salida es la diferencia de las dos entradas multiplicada por un factor (G) (ganancia):


Son dispositivos lineales con la capacidad de manejar señales desde los 0 Hz de su frecuencia. hasta la frecuencia definida por el fabricante. Además tiene límites de señal que van desde el orden de los nV, hasta unas docenas de voltio (esto también esta definido por el fabricante). Los amplificadores operacionales se caracterizan por su entrada diferencial y una ganancia muy alta, que generalmente supera los 100 dB.


El amplificador operacional es un amplificador de alta ganancia directamente acoplado, que en general se alimenta con fuentes positivas y negativas, lo cual permite que tenga excursiones tanto por arriba como por debajo de tierra (o el punto de referencia que se considere).

El nombre de A.O proviene de una de las utilidades básicas de este, como lo son realizar operaciones matemáticas en computadores analógicos (características operativas).

Tienen tres configuraciones básicas:

1.- Amplificador Inversor : La señal se inyecta en el modo inversor. Para poder analizar el comportamiento eléctrico de este circuito debemos tener en cuenta las características del amplificador.


2.- Amplificador No Inversor : Posee una entrada diferencial y amplifica la diferencia de tensión entre sus entradas.




3.- Amplificador Buffer : El buffer es un caso especial del amplificador no inversor. Si en el lazo de realimentación se anula el valor del resistor su ganancia queda limitada 0 dB.

En esta ocasión usamos los integrados LM 741 y el TL081 que acontinuación les daremos una breve explicación de éstos :


LM741

Generalmente se utilizan estos amplificadores operacionales, ya que presentan un mayor desempeño sobre los estándares de la industria, como el LM709.


Puede ser sustituido por los siguientes integrados (en la mayoría de las aplicaciones):

- 709C;
- LM201;
- MC1439;
- 748.


Ofrecen muchas características que hacen que su aplicación sea casi infaltable, protegen de sobrecarga en la entrada y salida, no se prende cuando el rango de modo común se supera, así como la ausencia de oscilaciones.


Su configuración es idéntica en los casos del LM741A, en el LM741C se garantiza su funcionamiento durante un 0º C a 70º C, en lugar de -55º C a +125º C.

Su datasheet es el siguiente :


TL081


Son amplificadores operacionales que permiten incorporar transistores bien adaptados, de alta tensión, J-FET y bipolares en un circuito integrado monolítico.
Se caracterizan por altas tasas de giro, de polarización de entrada baja y corrientes de desplazamiento, y la baja temperatura de la tensión de desvío coeficiente.




Algunos modelos de alta velocidad:

- TL081
- TL081A
- TL081B

Su datasheet es el siguiente :


Desarrollo Práctico:

Realizamos el siguiente circuito tanto en Protel como en un protoboard:


Comportamiento en continua:


Primero comparamos los valores medidos del divisor resistivo (para lo que quitamos el jumper J1) con los valores calculados:


Valores medidosValores ideales
Vmin-0,99-1,2
Vmax0,991,2


Con el Jumper J1 conectado y moviendo de un extremo hacia el otro el Preset, registramos una serie de mediciones en Vs al mismo tiempo que en Vo. Usamos una tabla para la comparación de los valores medidos, gracias a la cual podemos apreciar la curva de transferencia (rango dinámico) del circuito, reflejada en el gráfico debajo.
Observando tanto el cuadro como el gráfico podemos establecer el rango de correcto funcionamiento del circuito, que se ubica entre los valores medidos 0,654 y -0,611 para Vs, para los cuales la ganancia se mantiene entre los 23 y los 24dB (14 a 16 veces) aproximadamente. Exediendo ámbos valores de tensión de entrada la salida deja re responder, manteniendo fijo su valor, reduciendo así continuamente la ganancia del circuito. 
Además, observamos que el circuito se comporta como un inversor debido a la configuración del LM741, mostrando en la salida el valor amplificado de tensión pero de señal invertida.
También Medimos la tensión residual de salida (u offset), para la cual reconectamos el Jumper y conectamos Vs a GND. El valor medido es de 104mV.


El gráfico de función de transferencia también puede ser observado en un osciloscopio. Para ello es preciso inyectarle al circuito, en la entrada Vs y desconectando el divisor de tensión formado por el preset, R3 y R4, una señal triangular de 1KHz de frecuencia con una tensión pico a pico de 2V. Para esto último medimos la salida del generador de señales con el osciloscopio y la ajustamos hasta obtener el valor deseado.
Una vez inyectada la señal en el circuito, medimos con el canal 1 del osciloscopio (X) la tensión en Vs, y con el canal 2 (Y) la tensión en Vo. Configuramos el osciloscopio en modo X-Y, presionando MENU en el área de control horizontal y seleccionando en el submenú Time Base el modo X-Y.
Se observan en la medición con osciloscopio pequeñas variaciones con respecto a los valores medidos anteriormente.


Para probar la respuesta del circuito frente a distintos valores de alimentación, realizamos las medidas expresadas en los siguientes cuadros:


Con una alimentación de 14V:
Como vemos, el rago dinámico aumenta ligeramente con respecto a las mediciones hechas con 12V de alimentación.


Según la hoja de datos del LM741, la tensión mínima de alimentación para su correcto funcionamiento es de 10V, y para comprobar esto medimos la ganacia en uno de los extremos del grafico que hicimos anteriormente, el resultado es éste:
Cómo vemos, el circuito aún se mantiene dentro de los valores aceptables de ganancia.
Probamos disminuir la tensión de alimentación a 8V, comprobando en las mediciones de debajo que el rango dinámico del circuito ha disminuído:.


Por último, dejamos fijo el valor del Preset en un punto cercano al centro de la recta de transferencia original para ver como se comporta al disminuir continuamente la tensión de alimentación:
Como puede verse, el rango diámico del circuito disminuye continuamente junto a la alimentación, llegando al extremo en que ya termina convirtiendose en un atenuador; a menor valor de tensión, el circuito no obtiene tensión a la salida.
Gracias a estas mediciones podemos concluir que la tensión de alimentación no afecta a la ganacia del circuito, pero sí lo hace directamente con su rango dinámico.


Otras observaciones:
  • Al quitar la resistencia de carga la ganancia no cambia su valor
  • El valor de la ganacia aumenta al aumentar la resistencia de realimentación (R2), mientras que disminuye al aumentar la resistencia de entrada (R1), respetando la fórmula de configuración inversora: Vo = V1 x R2/R1.
  • Al desconectar el PIN 4 de VEE y conectarlo a GND el circuito deja de invertir la señal de salida y la mantiene en un un valor fijo de 10,85V, por lo que es independiente de la señal en Vs.

Comportamiento en alterna:
    Desconectamos el Jumper y  pusimos en Vs una señal senoidal con una frecuencia de 1KHz y tensión de 300mV como ésta:

    Al compararla con la señal de salida producida obtenemos los datos marcados a continuación:
    Vo: 4,44V
    Período: 1mS

    Aumentando la tensión de entrada, capturamos el valor máximo de tensión que puede adoptar Vo sin sufrir recortes en su señal:


    Con el objetivo de comparar la respuesta a distintos niveles de tensión de alimentación hicimos algunas mediciones como éstas:
    • Con 7V de alimentación la salida se recorta a partir de 712mV de entrada.
    • Con 10,9V de alimentación la salida se recorta a partir de 1,12V de entrada.
    De acuerdo a lo registrado podemos establecer que la tensión de alimentación modifica los valores máximos y mínimos que puede adoptar la señal a la salida sin recortarse, pero no modifica los valores de ésta dentro de esos límites.

    Modificando solo la frecuencia de la señal de entrada, comprobamos que por debajo de los 20KHz el valor de tensión en Vo (la salida) no sufre modificaciones; sin embargo, al enviar valores superiores a los 20KHz la tensión en la salida comienza a disminuir progresivamente, siendo ésta inversamente proporcional a la frecuencia.
    Cambiamos el LM741 por un TL081 para comparar la respuesta a frecuencia de ámbos, y de acuerdo a las mediciones efectuadas en el TL081 el nivel de tensión a la salida se ve afectado a partir de los 32KHz, pero actúa de igual manera que el LM741 (tensión en Vo inversamente proporcional a la frecuencia).
    Diseñamos el PCB del Amplificador Inversor:


    Amplificador no inversor y Buffer:

    Para comprobar el funcionamiento del circuito en configuración no inversor aplicamos en la entrada una señal senoidal con una frecuencia de 1KHz y los siguientes niveles de amplitud:
    200mV:

    Vo = 3,08V
    G = 15,4

    400mV:
    Vo = 6,36V 
    G = 15,9

    600mV:
     Vo = 9,92V
    G = 16,53

    1V:
    Vo = 16V
    G = 16

    1,2V:
    Vo = 20V
    G = 16,16
    Este es el límite de recorte del circuito. Hasta este punto observamos el correcto funcionamiento del circuito, en el que la ganancia se mantiene cercana a los 16V (tomando en cuenta los errores de medición), que es el valor ideal de ganancia siendo que:
    R1 = 6,8 K
    R2 = 100 K
    G = R2/R1 = 14,7 K

    1,4V:
    Vo = 21V
    G = 15
    En este punto la señal se muestra cortada y por lo tanto la ganancia comienza a disminuir. A partir de aquí la señal aumentará su recorte, disminuyendo la ganancia de forma progresiva.

    A travéz de la siguiente medición se puede comprobar que la teoría sobre la alta impedancia de entrada en el amplificador no inversor es cierta:
    1º) Colocamos una resistencia de valor conocido en la entrada(Vs)
    2º) Medimos la tensión de entrada al operacional Vin (pata 4 del LM741)
    3º) Calculamos la tensión en la resistencia VR:


    4º) Calculamos la corriente eléctrica que circula por la resistencia:

    5º) Por último, calculamos la impedancia de entrada Zin:
     


    Con el objetivo de examinar al circuito en configuración de buffer, removimos la resistencia R1 y cambiamos la resistencia R2 por un cable (cortocircuito), de esta manera se establece la configuración buffer, que entrega una ganancia de 1 (0 dB), lo cual comprobamos mediante estas mediciones:



    Esta configuración presenta una característica muy importante: posee una impedancia de entrada muy alta y una impedancia de salida casi nula. Esto permite conectar 2 circuitos sin que el segundo resulte carga para el primero, a esto se lo llama "adapatar impedancias".
    Este circuito es utilizado,por ejemplo, para medir tensiones de manera muy exacta en un sensor sin afectar a la medición.


    Diseñamos el PCB del Amplificador No Inversor: