domingo, 15 de septiembre de 2013

Prógramacion Escencial

En esta práctica se resolverán los problemas a continuación, estos problemas están resueltos de una manera, y no es la única posible, ya que cada persona programa a su manera.

PROBLEMAS RESUELTOS: 

Se realizaron 20 ejercicios, en los cuales cada ejercicio tiene un objetivo distinto.
Ejercicio1: Manejo de PORTS
Ejercicios2y 3: Funciones matemáticas
Ejercicios 4,5 y 6: Mascaras
Ejercicios 7, 8, 9 y 10: Funciones lógicas
Ejercicio 11: Funciones especiales
Ejercicio 12: Comparaciones
Ejercicio 13: BCD
Ejercicio 14: Salto Indexado
Ejercicio 15: Tablas
Ejercicios 16, 17, 18, 19 y 20: Retardos
Además se realizó los ejercicios 19 y 20 en un Display LCD para mostrar las funciones del mismo.

Estos ejercicios se pueden encontrar en la página donde realizamos las actividades anteriores


RESOLUCION:
Los ejercicios se pueden debuggear de varias maneras, nosotros utilizamos 3 maneras:
MPLAB:
1)
IR A DEBUGGER -> Select Tools -> MPLAB SIM -> Ahí en configuración seleccionaremos el Clock con que deseamos funcionar el PIC, en nuestro caso es 4MHZ.
En Debugger podremos:
Dar estimulos (stimulus), esto lo utilizaremos para poner en 1 o en 0 las entradas de PORTA
Ver el tiempo máquina del PIC (StopWatch), esto sirve para hacer delays y para ver cuánto tiempo tarda en realizar una instrucción.
Para hacer delays se deberá utilizar el Breakpoints conjuntamente con Run que sirve para correr el programa, este se frenará en el breakpoint
Si queremos ir instrucción por instrucción utilizaremos Step Into, para resetear el programa utilizaremos RESET.



CON ISIS
2) CON MPLAB e ISIS
IR A DEBUGGER ->Select Tools -> PROTEUS VSM -> Donde aparecerá dos botones UNO VERDE y UNO ROJO, el verde abrirá una pantalla donde podremos abrir una plantilla hecha en ISIS anteriormente.



3) CON ISIS
ABRIR EL ISIS, y poner el microcontrolador con “PICK DEVICES” [P] conectado con Vdd, si seleccionamos este, podremos cambiar la frecuencia del clock y cargarle el programa desde adentro.
Para probar si funciona, en las salidas podremos conectar LOGICS PROPES, que indicarán si hay un 0 o un 1 en la salida.
Para la entrada conectaremos LOGIC STATE o LOGIC TOGGLE, que funcionaran como una llave o un pulsador respectivamente.




CONCLUSIONES
En esta práctica vimos muy a fondo la programación en asembler, utilizamos muchas instrucciones para realizar varios ejercicios, vimos FUNCIONES MATEMÁTICAS, LOGICAS, MASCARAS, SALTOS INDEXADOS TABLAS, COMPARACIONES, ALGUNAS FUNCIONES ESPECIALES, RETARDOS Y TIMERS.
FUNCIONES MATEMÁTICAS: addlw, addwf, sublw, subwf
Addlw/sublw: sumara/restara un número a w
Addwf/subwf: sumara/restara w con un file
FUNCIONES LOGICAS: comf, swapf, rlf, rrf
Comf complementa el file por ejemplo si A= b´10101010´
Al complementarlo quedara A=´01010101´
Swapf cambiara los estados bajos y altos por ejemplo A=b’00111100’
Quedará A=b’11000011’
Rlf y rrf rotan un número a la derecha o izquierda desde el carry al file que le decimos, si el carry es 1 rotara el 1, si es 0 rotara un 0

MASCARAS: iorlw, andlw, xorlw
Estas funciones realizan las mismas funciones lógicas que la and la or y la xor, además de guardarlas en W se podrán guardar en un file
SALTOS INDEXADOS: movwf PORTB
                  Addwf PCL,PORTA
TABLA    movwf PORTB
         addwf   PLC,PORTA
         retlw b’00000000’
         retlw b’00000001’
         retlw b’00000010’
         ……
Dependiendo de el valor de PORTA, saltara a las distintas posiciones
COMPARACIONES: Para hacer comparaciones se utilizara sublw que hace una resta y lo guarda en W y luego utilizaremos la instrucciones de preguntar btfss o btfsc al STATUS, preguntando al C y a Z

SI Z es 0 y C es 1 entonces A > B
SI Z es 0 y C es 0 entonces A < B
Si Z es 1 y C es 1 entonces A = B

FUNCIONES ESPECIALES: sleep, lo que hace es poner al uC en bajo consumo donde el clock estará apagado, para volver a su modo normal se podrá realizar a través de interrupciones
RETARDOS: No es conveniente usarlos ya que utiliza la potencia del uC
               se utilizan contadores y la instrucciones de salto
           decfsz (decrementa f y salta en 0)
EJEMPLO
Delay_200ms_1
decfsz   cont1,F     
goto Delay_200ms_1       
decfsz   cont2,F
goto Delay_200ms_1   
return  

TMR0 como Temporizador: Se utiliza para realizar la misma función que el delay pero utiliza el TMR0, realizando la misma operación pero preguntando cuando el T0IF desborda.
Para ello se utilizara una carga al TMR0 para que desbode antes, y un contador que cuando llegue a 0 volvera con return, y si es uno se quedará preguntando si T0IF desbordó, al desbordar, seteara en 0 T0IF y decrementará el contador realizando todo de nuevo.


LCD
EL display LCD es un dispositivo microcontrolado, para la visualización de caracteres y símbolos. En modelos más actuales hasta dibujos (realizados con pixeles)
Existen LCD de varios tamaños, nosotros vamos a utilizar un LCD de 2X16, es decir 2 lineas por 16 caracteres.
Cada carácter tiene 7x5 pixeles, este LCD tiene un microcontrolador Hitachi interno que regula el proceso de visualización.
CARACTERISTICAS
Consumo reducido del orden de 7,5mW
Pantalla de caracteres ASCII, además del Kanji (japonés),caracteres griegos y símbolos matemáticos.
Posee 8 caracteres programables
Puede ser gobernado mediante una conexión de bus de 8 bits y una conexión de bus de 4 bits (conexión un poco más lenta).
POSEE
8 pines de Datos          DB0…DB7
3 pines de control        Enable, Read/Write, Register Select
2 pines de alimentación   VDD, VSS
1 pin de backlight        VLC

El pin enable cuando  E=0, el LCD esta deshabilitado; cuando E=1, el LCD esta habilitado
El pin Read/Write cuando R/W=0, escribe el LCD; cuando R/W=1 , lee el LCD
El pin Register Select cuando R/S=0, se pone en MODO COMANDO, cuando R/S=1, se pone en MODO CARÁCTER.
Si ponemos conexión de 8 bits, PORTB se ocupa todo y PORTA 3 pines.
Si ponemos conexión de 4 bits, tenes 4 bits de PORTB para usar, el PORTA se utilizan también 3 pines, pero envía dos veces la información por lo que es más lento. Esto se indicara en la inicialización. Esta debe respetar los tiempos dados para que funcione correctamente.

CONCLUSIONES

En esta práctica se realizó la conexión del LCD y su simulación con el ISIS. La inicialización del LCD se realizó con con 2 librerías sacadas del libro Microcontrolador PIC16F84A, donde en el programa tuvimos que cargar las 2 librerias y fijarse que subrutinas utilizar, donde luego realizamos 2 contadores de 0 a 9, ascendentes y descendentes. 

jueves, 13 de junio de 2013

Amplificadores Operacionales

Antes de empezar esta actividad debemos conocer el uso del Amplificador operacional y ver sus características.
Al comenzar debemos tener algunos conocimientos teóricos sobre los A.O (amplificadores operacionales).
Este es un circuito integrado que tiene dos entradas y una salida, siendo la salida la diferencia de las dos entradas multiplicadas por la Ganancia.

Vo = G.[(+V)−(-V)]




Su implementación por ejemplo es en las calculadores analógicas donde los A.O realizarán cuentas de suma, resta, multiplicación, división, integración, derivación, etc.
Los A.O tiene varias configuraciones, nosotros veremos las más básicas que son Amplificador Inversor, No inversor y Buffer.

La práctica se realizará siguiendo el siguiente circuito, utilizando un LM741

Amplificador Inversor

La entrada no inversora está a tierra. Por tanto, la tensión en R2 vale vout, y la tensión en R1 vale vin, y por tanto la ganancia vale:
Av = -vout / vin = -R2 / R1
El signo menos por ser la señal invertida en fase.
La impedancia de entrada Zin vale R1, puesto que como dijimos, A está puesto a tierra a efectos prácticos. La impedancia de salida Zout vale una fracción de ohm.
V1 = V2; V2 = 0
I= Vi / R1 = -Vo / R2
Av= Vo / Vi = - R2 / R1




En el armado del circuito tener en cuenta:
  A) No invertir la polaridad de la fuente, ya que el A.O se quemara
  B) Respetar la polaridad de los capacitores, los cerámicos se utilizarán para reducir la impedancia de entrada de la fuente en altas frecuencias y asi evitar deformaciones en la señales.

Los leds son prescindibles ya que solo indicará que el circuito esta alimentado.

Luego de realizar el circuito, mediremos los puntos máximos y mínimos del divisor resistivo, por lo que sacaremos y realizaremos las mediciones.
Los valores que sacamos fueron:
Vmáx: 2V
Vmín: -2V

Luego de realizar esta medición conectaremos la entrada Vs a GND para comprobar que el valor este cerca de los cero Volts.

Luego realizaremos una serie de mediciones variando el potenciómetro tomando 5 valores de VS positivos y 5 valores de VS negativos.


VS
VO
1,9
-9,4
1,5
-9,4
1
-9,4
0,7
-9,4
0,3
-4,5
0
0
-0,3
5,1
-0,7
9,5
-1
9,5
-1,5
10,8
-1,9
10,8












Comportamiento en alterna

Ahora desconectaremos el puente J1 y le inyectaremos a una señal senoidal a Vs de 1KHZ, con un tensión menor a los 400mV pico a pico, mostrando la entrada y la salida.




Ahora aumentamos la tensión de entrada hasta los límites máximos y mínimos operativos y vimos que si disminuimos la tensión la señal se recorta


Aumentando la frecuencia del generador vimos que el cociente de R2/R1 deja de responder



Posteriormente cambiamos el LM741 por el TL081 y no notamos una diferencia en cuanto a la amplificación.

Aumentando la ganancia de la entrada vimos que varía en función de la misma, y no depende del amplificador usado.



Amplificador no inversor y Buffer

Luego de realizar el circuito anterior, realizaremos este circuito:


No Inversor

-Vin=Vin
R1 y R2 forman un divisor de tensión, cuya entrada es vout y la salida del divisor es –vin.
O sea:
-Vin = Vin = Vout R1 / (R1+R2)
Ganancia = Av = Vout/Vin = 1+R2/R1
La impedancia de entrada Zin es muy elevada, mientras que la impedancia de salida Zout vale unas décimas de ohm. La señal de salida está en fase con la entrada por ser inyectada por la entrada no inversora.

Ahora realizaremos distintas mediciones inyectando una señal senoidal de 1kHZ variando sus amplitudes.

   
 














Luego lo llevamos al límite del recorte, donde la señal se deformaba



Ganancia Teórica: Vs.(R1+R2)/R2 : 1,06

El A.O se dice que tiene una resistencia de entrada mucho veces superior, por lo que para comprobar que esto era cierto conectamos un Potenciómetro en la entrada y medimos la tensión que caía sobre este, esta era muy baja por lo que toda la tensión caía sobre la entrada.


BUFFER:

Se trata de un amplificador no inversor cuya resistencia R1 vale infinito y R2 vale cero.
Tiene una impedancia de entrada Zin muy elevada, y una impedancia de salida Zout muy pequeña. Por este motivo se utiliza principalmente para aislar dos circuitos, de manera que el segundo no resulte una carga para el primero, pues la impedancia vista será la altísima Zin del operacional. En este caso se dice que U1 sirve para “adaptar impedancias”.
Existen operacionales especiales para utilizarlos como buffers, como el LM310 o el OPA633.
Esto Buffer puede servir para adaptar impedancias, ya que tiene una impedancia de entrada muy alta y una de salida muy pequeña.
Al retirar el resistor R1 y hacer un cortocircuito entre los terminales del resistor R2 vimos que se convertía en un Buffer



miércoles, 22 de mayo de 2013

Entrenador con PIC16F84A



Índice:

Introducción                                                                  
Desarrollo
- Materiales
- Circuito eléctrico
- Armado de las Plaquetas
- Imágenes del Programador
- Pasos antes de su conexión
- Funcionamiento
                                                                  
Conclusiones                                               

Introducción
En esta actividad realizaremos un circuito con el programa KICAD, este circuito será un poco más complejo que el del programador.
Realizaremos un entrenador para  conectarlo al entrenador para programar y probar los programas sencillos que realizaremos con el integrado PIC16F84A.
Utilizaremos el integrado PIC16F84A para realizar las pruebas y programaciones. http://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf

Materiales:
1 Plaqueta epoxi de 10x10 cm.
6 Resistores de 10K
8 Resisores de 390
2 Capacitores de 22pF
1 Capacitor de 100nF
9 Leds 5mm rojos de baja luminosidad
1 Diodo Shottky
1 Zocalo de 18 pines
1 Integrado PIC16F84A
1 Switch de 5
1 RJ12
3 tiras de pines de 3 contactos
3 Jumpers
2 Pulsadores
1 Cristal de 4MHz
1 display 7 segmentos catodo comun
4 Tornillos y 4 tuercas
Acrílico negro.
Separadores plásticos.

Circuito eléctrico


Circuito Impreso.
Lado pista


Serigrafía

Armado de la plaqueta
Plaqueta
1) Confeccionamos el circuito en el KICAD:
Para ello tuvimos que abrir el programa KiCad, y crear un nuevo archivo, y guardarlo en una carpeta donde almacenaremos nuestro archivos.
Presionaremos en el EeSchema (editor de esquema) y copiaremos el esquema del progamador:
ESTE


Luego de hacer el circuito hay que pulsar Annotate Eschematic, que este nombrará automáticamente los componentes, luego presionar el Perform electric rules check (ERC) para corroborar que esté todo bien conectado. Finalmente pulsaremos Generated netlist, para que nos cree una lista de componentes.
Luego presionaremos  Cvpcb (Asosiación Componentes/Módulos) donde tendremos que ver que cada componente este con su respectivo módulo (y coincida en tamaño).
Finalmente Pcbnew (editor de circuitos impresos) donde pulsaremos Read Neatlist y examinaremos y leeremos la netlist, para luego ordenar los componentes y proceder a finalizar la plaqueta.

2) Imprimimos la serigrafía y el circuito del lado pista en una hoja ilustración. Luego lo planchamos 60 segundos en la plaqueta y cortamos el excedente de la plaqueta.

3) Procesamos la plaqueta en el percloruro férrico apróx. 30 minutos, y luego le pasamos virulana para sacarle el excedente de toner. Finalmente le pasamos flux del lado del cobre.

4) Agujereamos la plaqueta:
- Para los sujetores del RJ12 una mecha de 3 mm.
- Para los pines una de 1 mm.
- Para los tornillos una de 3,25 mm.
- Para el resto de los componentes una de 0,8 mm.   
         
5) Luego soldamos cada componente en el lugar correspondiente, para ello nos guíamos en la serigrafía que planchamos en la parte posterior al cobre.
En la soldadura utilizamos estaño 60/40 de 1mm.

6) Con el acrílico medimos con respecto a la plaqueta y cortamos un trozo para poner en la misma, sujetamos el acrílico con tornillos y pusimos separadores entre el lado de cobre y el lado de componentes.

PROBLEMA Y SOLUCIÓN: Al realizar el circuito y probarlo nos dimos cuenta que el circuito base que tomamos estaban mal las conexiones del PGD y PGC, donde debería estar conectado RB7 al PGD y estaba en PGC; y RB6 al PGC y estaba en PGD, nosotros al realizar el circuito utilizamos dos puentes, y estos se conectan en PGD y PGC por lo que solucionar el problema fue muy fácil ya que el puenteado lo invertimos y así se conectarían correctamente los terminales.


Imágenes del programador terminado 





Pines de programación para realizar la programación en protoboard con el programador

Funcionamiento
El funcionamiento del entrenador es programar directamente con el programador y poder realizar y probar programas básicos con los leds y el 7 segmentos.
El entrenador tiene 3 jumpers, en los cuales con uno activaremos los leds o el display, y con los otros dos cambiaremos el led 7 o PGC, y el led 6 y PGD.

Conclusiones
Esta práctica tiene el objetivo de afianzar las herramientas utilizadas para programar, en nuestro caso KICAD, además del diseño y armado de la placa.
El circuito realizado permite programar directamente con el programador al entrenador utilizando el integrado PIC16F84A.