Vistas de página en total

lunes, 15 de agosto de 2011

Ejercicios Capitulo 8

Ejercicios ASM



Elemental_01.asm: Por el puerto B se obtiene el dato de las cinco líneas del Puerto A , al que se está conectado un array de interruptores , sumándole el valor de una constante , por ejemplo 74 decimal. Es decir (PORTB)= (PORTA)+Constante
1)
;====================================================================
 Main
;====================================================================
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw     b'00000000' ;todo el PORTB como salida
                movwf    TRISB
                BANK0
;====================================================================
; Programa principal
;====================================================================
 ABC       
    movf   PORTA,W
                addlw      K
                movf       PORTB  
    goto    ABC

;====================================================================



Elemental_02.asm: Por el Puerto B se obtiene el dato del Puerto A multiplicando por 2. Es decir : (PORTB) = 2(PORTA) =(PORTA)+(PORTA)
2)
;====================================================================
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código

; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw     b'00000'
                movwf    TRISB
                BANK0
;====================================================================
; Programa principal
;====================================================================
                movf       PORTA,W              
                addwf     PORTA,PORTB
;====================================================================





Elemental_03.asm: Por el Puerto B se obtiene el dato introducido por el Puerto A , pero los bits pares de salida se fijan siempre a “1”. El orden de los bits será “b7 b6 b5 b4 b3 b2 b1 b0” , siendo los pares el b6 , b4, b2 , y b0. Por ejemplo , si el Puerto A se introduce el dato ‘---01100’, por el Puerto B se visualiza ‘ ---11101’. Observa que:
-Los bits pares están a “1”, efectivamente (Puerto B)= ‘---1x1x1’
-Los impares permanecen con el datos con el dato del puerto de entrada , efectivamente: (Puerto A) = ‘---x1x0x’ y (Puerto B) = ‘---x1x0x’
3)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw   b'00000000'
    movwf   TRISB       
                BANK0
;====================================================================
; Programa principal
;====================================================================
  ABC
   movf     PORTA,W
   movwf    PORTB
   bsf      PORTB,8
   bsf      PORTB,6
   bsf      PORTB,4
   bsf      PORTB,2
   goto     ABC
;====================================================================




Elemental_04.asm: Por el Puerto B se obtiene el contenido del Puerto A , pero los bits impares de salida se fijan a “0”. El orden de los bits será “b7 b6 b5 b4 b3 b2 b1 b0”, siendo los impares el b7, b5 , b3 , b1. Por ejemplo , si por el puerto B se introduce el dato b’---01100’ , por el Puerto B se visualiza ‘00000100’. Observar que:
-          Los bits impares están en “ 0 “ , efectivamente (Puerto B) = ‘0x0x0x0x’
-          -Los pares permanecen con el dato del puerto de entrada , efectivamente : (Puerto A) = ‘---0x1x0’ y (Puerto B) = ‘ –0x1x0’
4)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw     b'00000000'          
    movwf   TRISB       ;todo el PORTB como salida
                BANK0
;====================================================================
; Programa principal
;====================================================================
 Loop 
   movf   PORTA,W
   movlw  PORTB
   bcf    PORTB,7
   bcf    PORTB,5
   bcf    PORTB,3
   bcf    PORTB,1
   goto   Loop
;====================================================================


Elemental_05.asm:  Por el Puerto B se obtiene el dato del Puerto A invertidos los unos y los ceros. Por ejemplo , si por el Puerto A se introduce ‘---11001’, por el Puerto B aparecerá ‘xxx00110’. (No importa el estado de los tres bits superiores del Puerto B)
5)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw   b'00000000'
    movwf   TRISB       
                BANK0
;====================================================================
; Programa principal
;====================================================================
 ABC  
    movf    PORTA,W
    xorlw   11111
    movwf   PORTB
    goto    ABC
;====================================================================




Elemental_06.asm: Por el Puerto B se obtiene el dato del Puerto A intercambiado los nibbles alto y bajo. Por ejemplo , si por el Puerto A se introduce ‘---1001’, por el Puerto B apare ‘1001xxx1’.
6)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw     b'00000000'          
    movwf   TRISB       ;todo el PORTB como salida
                BANK0
;====================================================================
; Programa principal
;====================================================================
 Loop 
   movf   PORTA,W
   swapf  W,PORTB
   goto   Loop
;====================================================================



Elemental_07.asm: Por el Puerto B se obtiene el dato del Puerto A despazando un bit hacia la izquierda , por la derecha entrará un “1”. Por ejemplo , si por el Puerto A se introduce “---11001”, por el Puerto B aparecerá “xx110011”
7)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw   b'00000000'
    movwf   TRISB       
                BANK0
;====================================================================
; Programa principal
;====================================================================
 ABC 
   rlf     PORTA,W
   addlw   .1
   movwf   PORTB
   goto    ABC  
;====================================================================


Elemental_08.asm: Por el Puerto B se obtiene el dato del Puerto A despazando un bit hacia la derecha , por la izquierda entrará un “1”. Por ejemplo , si por el Puerto A se introduce “---11001”, por el Puerto B aparecerá “0xxx1100’
8)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw   b'00000000'
    movwf   TRISB       
                BANK0
;====================================================================
; Programa principal
;====================================================================
 ABC
   rrf     PORTA,W
   bcf     W,7
   movwf   PORTB  
   goto    ABC  
;====================================================================



Elemental_09.asm: Por el Puerto  B se saca el dato del Puerto A invirtiendo los bits pares . Los impares se dejan como entrada.
9)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw   b'00000000'
    movwf   TRISB       
                BANK0
;====================================================================
; Programa principal
;====================================================================
 ABC  
    movf    PORTA,W
    xorlw   b'01010101'
    movwf   PORTB
    goto    ABC
;====================================================================


Elemental_10.asm: Por el Puerto B se obtiene el dato de las cinco líneas del Puerto A al que esta conectado un array de interruptores. Esta operación se realizará una única vez . Despues del programa entrara en modo Standby o de bajo consumo el cual no podrá salir 
10)
Main
;====================================================================
; A partir de aqui se escribe el pgm principal
; A partir de aquí incluí tu código
; El código que sigue es un ejemplo de configuración de puertos
; Configuro los puertos I/O
                BANK1
                movlw     b'11111'
                movwf    TRISA       ;todo el PORTA como entrada
                movlw     b'00000000'          
    movwf   TRISB       ;todo el PORTB como salida
                BANK0
;====================================================================
; Programa principal
;====================================================================
   movf   PORTA,W
   movwf  PORTB
   sleep
;====================================================================

En C:

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

void main()
{
while(1){
output_b(input_a()*2);
}
}
3)

void main()
{
while(1){
output_b(input_a()|0b10101);  
}
}


4)


void main()

{
while(1){
output_b(input_a()&0b10101);
}
}


5)



void main()
{
while(1){
output_b(input_a()^01010101);
}
}


6)

void main()
{
while(1){
swap(input_a());
output_b(input_a());
}
 }


7)



void main()
{
while(1){
rotate_left(input_a(), 1);
bit_set(input_a(),0);
output_b(input_a());
}   
}


8)

void main()
{
while(1){
rotate_right(input_a(), 1);
output_low(input_a(),7);
output_b(input_a());
}   
}



9)



void main()
{
while(1){
output_b(input_a()^11111);
}
}


10)



void main()
{
output_b(input_a());
sleep();
}







jueves, 11 de agosto de 2011

Act 5: Contador - Sistemas secuenciales


Introducción
A diferencia de los sistemas combinacionales, 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.
Los principales sistemas secuenciales que pueden encontrarse en forma de circuito integrado o como estructuras en sistemas programados son los Contadores y los Registros (fuente: Wikipedia)

En esta actividad se estudiará el comportamiento de los contadores. Se evaluará el funcionamiento de un contador BCD UP/DOWN y se contrastará con el funcionamiento de un microcontrolador realizando la misma función. 

Objetivos de la Actividad
Evaluar el funcionamiento de un contador BCD con controles de cuenta de manera discreta y programar un microcontrolador, para que realice la misma función. 



PARTE A: Contador discreto
Listado de materiales necesarios para realizar la práctica:

http://www.megaupload.com/?d=7VF35420   

Imagen circuito esquematico Protel
Fotografía del circuito armado en protoboard.

Video de nuestro circuito en funcionamiento:


Funcionamiento:

El 4511 funciona en código BCD ,y convierte la información en un display de 7 segmentos , logrando formar números del 0 al 9 .

El 4510 es un simple contador , donde las entradas A1 , A2, A3 y A4 (patas 4,12, 13 y 3) indican en que numero va a empezar el conteo  ya sea creciente o descendiente. En nuestro caso , 9 (1001 en código BCD). Las patas Q1 , Q2 , Q3 y Q4 (patas: 6, 11 , 14,2 respectivamente.) son las salidas, las que generan los números que luego van a ingresar al 4511. La pata 15 es el Clock , sin el cual no se podría realizar ningún tipo de conteo. La pata 10 , U/D , es el que indica si la cuenta se va a hacer de mayor a menor , y de menor a mayor y PE ( Preset Enable) es la pata que funcionaría como un habilitador. La pata 9 , es el MCLR.

 La pata 5 , CI(Carry in) , controla cuando empieza el conteo; al obtener un 0 en dicha pata  comienza la cuenta regresiva  y asi a la salida de este microcontrolador , se van generando los números en BCD , del 9 al 0. El integrado 4511 recibe esos datos y los traduce en el display , en sus correspondientes números.
El buzzer suena dado a que la compuerta que esta conectada a la salida y entrada de estos dos microcontroladores , cuando llega al numero 0 (0000 en BCD) , esta compuerta da a la salida un 1 , que activa al mismo tiempo el transistor , y el reset del 4013; el transistor le da corriente al buzzer , logrando que suene.
Este proceso no se puede realizar repetitivamente , sin sacarle la alimentación al circuito , ya que a la salida de esta compuerta , siempre va a haber un 1 , por ende el reset siempre va a estar en 1 , y entonces el 4013 en Qnegado , siempre va a tener un 1 , por ende , no se va a volver a activar el 4510
El 4013 genera un 0 en Qnegado cuando se obtiene un 1 en el Set.


Circuito en protoboard parte B



martes, 28 de junio de 2011

TP 4

Circuito esquemático de la PARTE B
Plaqueta de la PARTE B


Imagen del circuito esquemático realizado en protel.
 Imagen de nuestro circuito armado en protoboard
Mediciones realizadas con el tester:

Tensión mínima  medida en Va :  -1,64V
Tensión máxima medida en Va :  1,55V
Tensión en Vo con Vs a GND. -24,4 V

Tabla de valores de Vo y Vs medidas variando el Preset:

Gáfico de las mediciones hechas realizadas en Excel:
aclaración: la ultima medición corresponde al offset.

De -1,47 V a 0,96 , y de 0,69V a 1,46V, aproximadamente,  el circuito se comporta linealmente. Porque cuando el valor de entrada es positivo , el valor de la salida es negativo , por eso es que el circuito es inversor.  Cambia es el signo y el modulo de los valores es diferente

Para medir con el osciloscopio y lograr el mismo gráfico que hicimos con el exel pusimos el osciloscopio en modo X-Y. En la X , que es el canal 1 , pusimos Vs , en la Y , que es el canal 2 , pusimos Vo . Ajustamos el canal 1 en 200mV y el canal 2 en 5V.


Ganancia de tensión es Vo / Vs. Tomando un valor de la zona lineal cualquiera , por ejemplo de la tensión de offset nos da como resultado.  -8,35V / 0,56V = 14,9 Veces

En db es : 20 log (14,9V)= 23,52

Si Variamos la tensión de alimentación a 8V,  y nos dio como resultado en Vo:  -4,38 y en Vs  0,28V. El cociente entre estos dos valores da como resultado 15,6. Es decir que prácticamente no varia con la ganancia a 12 V
Al cambiar la R2 por una de 220Kohm, la ganancia ganancia disminuye considerablemente ( nos dio como resultado 2 veces).  Si  solo cambiamos la R1 , por una de 5,6Kohm , la ganancia de tensión aumenta .( nos dio como resultado 25 veces).
A  valores menores a 1 V ,inclusive ,el circuito deja de funcionar. Pudimos ver que en la entrada había más tensión que en la salida.
Si sacamos RL , la ganancia se mantiene prácticamente igual, Hay una variación de 1 vez.
Si conecto el terminal 4 a tierra , el circuito sigue amplificando , pero la ganancia disminuye en comparación al punto anterior. 
Si R1 la cambiamos por una resistencia de 390Ohm y R2 por una de 5,6Kohm , la ganancia de tensión disminuye ( Vo = 12,3mV y Vs =0,5 provocando una ganancia de 0,024 ) Vs nos da 0,505 V.

El canal 1 es la salida , y el canal 2 es la entrada del circuito. Al medir con el osciloscopio logramos obtener la siguiente imagen:



Imagen capturada con el osciloscopio del recorte de la señal.  Esto se comienza a producir a partir de los 20,5 V aproximadamente.

Imagen de la seña , al límite de que se produzca un recorte.
Teóricamente la señal se recorta porque la tensión que usamos (tanto negativa como positiva) en el generador de señales supera a la que usamos en la fuente de tensión para alimentar el circuito menos un V. o sea 12V -1V.


Ganancia de tensión de forma teórica :

R2/R1=  150Kohm / 10Kohm = 15.
En forma práctica a 1Mhz de frecuencia :
A 1Mhz , y con una tensón de entrada de 200mV , el amplificador deja de responder al cociente entre R2 y R1, obteniendo una señal de salida de 356mV

Imagen de la seña de entrada a 1MHz:

Imagen de la señal de salida a 1Mhz:

Circuito TL081:
Al colocar el tl081 en el lugar del 741, observamos que el circuito sigue funcionando como amplificador , pero la ganancia de tensión , a la misma frecuencia (1Khz) , no es la misma.

Imagen tensión de entrada. (160mv  = Vpp):

Imagen tensión de salida(1,96V =Vpp):
La ganancia de tensión , teóricamente debería dar  -15 veces , pero en la práctica nos dio 12,25 veces.

Ganancia de tensión en forma teórica:
-/ R2/R1 / = - 150Kohm / 10Kohm = -15
A 1Mhz el TL081 no sigue funcionando como amplificador.
Es decir que a ganancia de tensión depende de la frecuencia , ya que si la misma es my alta , el circuito deja de funcionar correctamente.

Demostración de que la ganancia depende de la relación entre R2 y R1:
Tomemos el siguiente circuito:
Para demostrar que la tensión de salida depende de R2 y R1 debemos asignar 2 “ Reglas de oro”:
I(-) e I(+) = 0
V1=0
Entonces , con el siguiente circuito sacamos las siguientes ecuaciones:
Ir1 . R1 = (Vs – Va) / R1                                 Ir2 = (Va-Vo) / R2
Ir1 = Ir2 + I(-)

Como I(-) es igual a 0A por a “Regla de Oro”

Entonces : Ir1 = Ir2

(Vs-Va) / R1 = (Va - Vo)/ R2
 Va = 0 por la “ Regla de Oro”

Entonces : Vs/R1 = -Vo/R2

Haciendo pasaje de términos llegamos a la conclusión de que

Vo/Vs = - R2 /R1

Imágenes del circuito  a 1Khz pero con distintas amplitudes:

Canal 1 la señal amarilla ,donde se encuentra Vo. Canal 2 es la señal celeste , donde se encuentra VS:

Vpp= 15,2mV
Vpp= 3,02V  (amplificada)
Ganancia : 201,33

Vpp= 28,8 mV
Vpp = 6,2 V(amplificada)
Ganancia: 240,31

Vs=  60,8mV
Vpp= 13,8V(amplificada)
Ganancia: 226,9







El límite de corte para la señal de entrada es 103 mV



Para poder medir  la resistencia de entrada en el circuito, se debe conectar una resistencia variable en serie antes de la entrada del amplificador. Un caso puede ser utilizar un preset, en el cual puenteamos un extremo con el medio , lo que será conectado a la entrada y el otro extremo se conecta al generador. Una vez hecho esto, se realizan diferentes mediciones variando el valor de la resistencia , y cuando se logre fijar el valor máximo de amplificación , será ese el valor de la resistencia fija que será igual al de la resistencia de entrada del circuito.
Tambien se puede poner una resistencia de prueba en la entrada , en serie con el circuito , que sea mayor a la resistencia que nosotros creemos que vale de entrada. Si hacemos esto , por medio de un divisor , y teniendo las tensiones de entrada y de salida , podemos calcular el valor de la resistencia de entrada con un simple divisor de corriente.
Como nuestra resistencia de prueba es de 100Kohm , la resistencia de entrada del circuito es:

Vi= Vs [Ri/(Rp+Ri)]

268mv= 572mv[Ri / (1Mohm +Ri)]

0,46 ( 1Mohm + Ri) = Ri

460 Kohm + 0,46 Ri = Ri

460Kohm = 0,54 Ri

Ri= 851 Kohm.


Imagen del circuito funcionando como buffer . ( En vez de R2 , va un puente):



Las aplicaciones del amplificador buffer pueden ser :
Como adaptador de impedancia, por ejemplo para poder conectar dos cosas que tienen distintas impedancias ( como un parlante a un amplificador) . Tambien puede servir para manejar corrientes mayores , y como controlador de etapas
Ejemplo: si tenemos que conectar un cartel de alta luminosidad como los que vemos en la calle , si lo conectamos directamente es probable de que no funcione , entonces por medio de un buffer podemos hacer que este cartel ande)