Vistas de página en total

miércoles, 24 de agosto de 2011

Ejercicios del Capítulo 9

Descargas:
ASM:
- Indexado_02.asm
- Ejercicios Cap. 9.DSN (Para probarlo en Proteus)

C:
-Indexado_02.c
-Indexado_02.h

En ASM:

;====================================================================
; Nombre del archivo: Indexado_02.asm
;====================================================================
; Descripción:
;
; Controla el nivel de un depósito de líquido. Utiliza (entre
; paréntesis las líneas del microcontrolador a la que se han
; conectado):
;
; * Tres sondas detectoras: SV, Sonda de Vacío (RA0); SLL, Sonda de
; LLenado (RA1); SR, Sonda de Rebose (RA2).
; * Dos bombas de agua: B1 (RB5), B2 (RB6).
; * Cinco indicadores: Vacio (RB0), Llenandose (RB1), Lleno (RB2),
; Rebose (RB3), Alarma (RB4).
;
; Su funcionamiento:
;
; * Cuando ninguna de las sondas está mojada se entiende que el
; depósito está vacío y se accionarán las dos bombas. El indicador
; "Vacio" se iluminará .
; * Cuando el nivel del líquido toque la sonda de vacío "SV" seguirá
; llenándose el depósito con las dos bombas. El indicador
; "Llenandose" se ilumina.
; * Cuando el nivel del líquido toca la sonda de llenado "SLL", para
; la bomba B2, quedando B1 activada en modo mantenimiento. El
; indicador "Lleno" se ilumina.
; * Si el nivel del líquido moja la sonda de rebose "SR" se apaga
; también la bomba B1, quedando las dos bombas fuera de servicio.
; El indicador "Rebose" se enciende.
; * Cuando se produce un fallo o mal funcionamiento en las sondas de
; entrada (por ejemplo que se active la sonda de rebose y no active
; la de vacío) se paran las dos bombas. El indicador "Alarma" se
; ilumina.
;====================================================================
; Descripción del Hardware:
;
; 1 --------------16
; SR -> |RA2 °|_| RA1| <- SLL
; |RA3 RA0| <- SV
; |RA4 OSC2| XTAL
; R10 K a Vdd |/MCLROSC1| XTAL
; GND |VSS VDD| 5V
; Vacío <- |RB0 RB7|
; Llenandose <- |RB1 RB6| -> Bomba2
; Lleno <- |RB2 RB5| -> Bomba1
; Rebose <- |RB3 RB4| -> Alarma
; 9 --------------10
;
; Frecuencia del oscilador externo: 4MHz (XT)
;====================================================================
; Autores: Kevin Garro y Jorge Palacio
; Fecha: 28/08/11 Versión:0.1
;====================================================================
LIST p=PIC16F84A
INCLUDE
__CONFIG _WDT_OFF & _PWRTE_ON & _CP_OFF & _XT_OSC
ERRORLEVEL -302
;====================================================================
; Definiciones y Equivalencias
;====================================================================
#DEFINE BANK0 bcf STATUS,RP0 ; Cambio al banco 0
#DEFINE BANK1 bsf STATUS,RP0 ; Cambio al banco 1
;====================================================================
; Declaración de Variables
;====================================================================
CBLOCK 0x0C
ENDC
;====================================================================
; Vectores
;====================================================================
ORG 0x000 ; Vector de Reset
clrw
goto Main
;====================================================================
; Servicio de Interrupción
;====================================================================
ORG 0x004 ; Vector de Interrupción
retfie
;====================================================================
Main
;====================================================================
BANK1
movlw b'11111'
movwf TRISA ;todo el PORTA como entrada
clrf TRISB ;todo el PORTB como salida
BANK0
;====================================================================
; Programa principal
;====================================================================

INICIO
movf PORTA,W
andlw b'111'
addwf PCL,F
goto VACIO
goto LLENANDOSE
goto ALARMA_1
goto LLENO
goto ALARMA_2
goto ALARMA_3
goto ALARMA_4
goto REBOSE

VACIO
movlw b'01100001'
goto SALIDA

LLENANDOSE
movlw b'01100010'
goto SALIDA

ALARMA_1
movlw b'00010000'
goto SALIDA

LLENO
movlw b'00100100'
goto SALIDA

ALARMA_2
movlw b'00010000'
goto SALIDA

ALARMA_3
movlw b'00010000'
goto SALIDA

ALARMA_4
movlw b'00010000'
goto SALIDA

REBOSE
movlw b'00001000'

SALIDA
movwf PORTB
goto INICIO

;====================================================================
END





En C:


#include

void main(){

while(1){

switch(input_a()){

case 0:
output_b(0b01100001);
break;
case 1:
output_b(0b01100010);
break;
case 2:
output_b(0b00010000);
break;
case 3:
output_b(0b00100100);
break;
case 4:
output_b(0b00010000);
break;
case 5:
output_b(0b00010000);
break;
case 6:
output_b(0b00010000);
break;
case 7:
output_b(0b00001000);
break;

}

}

}

domingo, 31 de julio de 2011

Actividad 3 - Astables - Monoestables (Desafío)

En esta parte de la actividad vamos a variar los tiempos del astable y del monoestable a partir de los programas fuente que utilizamos anteriormente.

Para modificar el astable, abrimos el archivo AST_40K.asm (Descargar de acá) y vamos hasta la parte del programa principal:


Notamos que está dividido en 2 partes casi iguales, el tiempo en estado en alto, y el tiempo en estado en bajo. La primera parte comienza con la instrucción "bsf" que, debido a que el integrado esta funcionando a 8 MHz, dura 0,5 us. Esto ocurre porque cada instrucción, excepto las de salto de programa, duran 4 ciclos de reloj, por lo tanto: 1/8.000.000 Hz = 0,125 us -> 0,125 us x 4 = 0,5 us.
Después siguen 12 instrucciones iguales, "goto $+1". La instrucción "goto $" produce un salto a la misma posición de programa donde se encuentra en ese momento, pero agregandole "+1" salta a la siguiente instrucción. Como son instrucciones de salto duran el doble que una instrucción normal (1 us).
En esta primera parte tenemos en total 1 instrucción de 0,5 us y 12 de 1 us, lo que nos da una duración de 12,5 us. Aqui obtuvimos el estado en alto de nuestra señal astable, cuyo período será de 25 us, que es igual a una frecuencia de 40 KHz.
Si por ejemplo queremos cambiar la frecuencia a la mitad, todo lo que tenemos que hacer es duplicar las instrucciones de las 2 partes para que el período sea de 50 us:


Así obtuvimos que los tiempos de estado en alto y bajo fue de aproximadamente 24 us:



El período fue de aproximadamente 50 us, con una frecuencia de 20 KHz:


Y la señal tenía una tensión de 5 V:



En el caso del monoestable, abrimos el archivo MST_5s.c (Descargar de acá) y vamos a la linea que dice "delay_ms (5000)":


Antes obteníamos una señal que duraba 5 segundos (5000 ms), pero vamos a cambiara a 1 segundo, así que cambiamos el "5000" por "1000":


Así obtenemos una señal monoestable que dura 1 segundo, con una tensión de 5 V:

sábado, 23 de julio de 2011

Actividad 3 - Astables - Monoestables (3° Parte)

3° Parte - Astable y Monoestable con uC:

Lo primero que debemos hacer es, con el PIC12F683 y una tensión Vcc de 5 V regulados, armar el siguiente circuito:


Aqui tenemos el circuito armado en el protoboard:



Con el circuito armado, ahora grabamos el microcontrolador con el ejecutable AST_40K.hex y, con el microcontrolador en el circuito, medimos con el osciloscopio los tiempos y los valores de tensión de salida. Nuestro objetivo es conseguir una señal de 40 KHz.

Obtuvimos que los tiempos de estado en alto y en bajo son iguales (aproximadamente 12,5 us):


El período es aproximadamente igual a 25 us, lo que nos da una frecuencia de 40 KHz, que era lo que queríamos conseguir:


La tensión de salida es igual a 5V:


Ahora que terminamos con el astable, proseguimos a grabar el microcontrolador con el ejecutable MST_5s.hex, y a continuación medimos con el osciloscopio los tiempos y los valores de tensión de salida.

Esta vez obtuvimos una señal que duraba 5 segundos, como queríamos:


Y la señal tenía una tensión de 5 V:


Despues tuvimos que diseñar una placa impresa que midiera menos de 30 mm x 30 mm (Descargar de acá):


Finalmente, ¿qué ventajas y desventajas tiene el uso de microcontroladores en el diseño?

El uso del PIC12F683 en el diseño nos dio mejores resultados que usando el 555. Esto ocurre porque este último depende de capacitores y resistencias para darnos los valores de salida que deseamos. Otra de las ventajas del PIC es que si no necesitamos más el circuito podemos sacarlo de ahi y usarlo en otro lado.
La principal desventaja del PIC es su costo, ya que para un circuito tan simple como este tal vez nos convenga usar el 555, que es mas barato, aunque no tan preciso. Otra desventaja es que para variar el tiempo de salida que nos da el PIC hay que cambiar el programa y grabarlo de nuevo.

martes, 14 de junio de 2011

Cómo grabar Microcontroladores PIC

Para poder programar microcontroladores PIC necesitamos contar con un grabador, como éste, el Programador Picstart Plus de Microchip:


CÓMO CONECTAR EL PICSTART PLUS A LA PC

Antes que nada tenemos que colocar a nuestro microcontrolador en el programador (con la marca que nos muestra dónde está la pata 1 hacia arriba). Luego debemos conectar el programador en el puerto COM 1 de nuestra PC con un cable del tipo DB9, y además debemos conectarlo a una fuente de 9V 1A (el LED de "Power" debería encenderse).


CÓMO PROGRAMAR CON EL PICSTART PLUS
Iniciamos el MPLAB, y en menú "Programmer" vamos a "Select Programmer" y elegimos "PICSTART Plus":


En cualquier momento podemos comprobar qué programador está seleccionado chequeando la barra inferior a la izquierda:


Luego, vamos al menú "Programmer" y después a "Settings...":


Entonces, en la ventana que nos abre, vamos a la pestaña "Communications" y comprobamos que esté marcado el puerto que vamos a usar:


A continuación, volvemos al menú "Programmer" y elegimos "Enable Programmer" (Activar Programador):


Ahora vamos al menú "File" y elegimos "Import...":


Buscamos el archivo con extensión HEX (es el archivo que el MPLAB nos generó previamente cuando finalizamos nuestro programa), y presionamos en "Abrir":


Finalmente
vamos, por última vez, al menú "Programmer", y elegimos "Program", para programar al microcontrolador:


Ahora esperamos a que termine de grabar nuestro microcontolador y lo retiramos, listo para usarlo.

NOTA IMPORTANTE:

Tanto el programa como el programador que usamos están hechos específicamente para programar microcontroladores PIC (de la empresa Microchip).

jueves, 9 de junio de 2011

Actividad 3 - Astables - Monoestables (2° Parte)

2° Parte - Monoestable:

Primero debemos hacer el circuito en el Proteus (Descargar de acá):


Despues tuvimos que cambiar los valores de las resistencias y capacitores para llevar el tiempo de activación a la salida a 5s. Nosotros estuvimos cambiando resistencias en el simulador hasta que encontramos que obteníamos 5s cambiando la resistencia R1 de 10KOhm por una de 47KOhm, y dejábamos los demás componentes iguales.

Entonces ahora comprobamos los valores de los capacitores y las resistencias con el Puente RLC Digital de banco. Obtuvimos los siguientes valores:

R1 = 48,57 KOhm
R2 = 9,8 KOhm
R3 = 327,3 Ohm
C1 = 109,05 uF

Luego procedimos al armado del circuito en el protoboard:


A continuación, se ordenan los valores que obtuvimos con el simulador y en el protoboard:


Simulador (R1=10K) Simulador (R1=47K) Protoboard
T de estado en alto 1,10 s 5,15 s 5,72
Vsal máx 5 V 5 V 5 V
Vsal mín 0 V 0 V 0 V


Finalmente, diseñamos una plaqueta del astable el Protel (Descargar de acá):

Actividad 3 - Astables - Monoestables (1° Parte)

Esta actividad está compuesta por 3 partes:

1° Parte - Astable:

Primero debemos hacer el circuito en el Proteus (Descargar de acá):


Advertencias:
* Ir a propiedades del Contador en modo Frequency (Frecuencia), para que muestre la frecuencia generada por el astable.
* Establecer la condición inicial del capacitor, editando la etiqueta del conductor "Wire Label" (IC=0), haciendo click derecho sobre el cable que llega al capacitor.

Despues tuvimos que cambiar los valores de las resistencias y capacitores hasta obtener una frecuencia de 40KHz. Nosotros estuvimos cambiando resistencias en el simulador hasta que encontramos que obteníamos los 40KHz cambiando las resistencias de 68KOhm y 39KOhm por 2 de 1,2KOhm, y dejábamos los capacitores de 10nF.

Nota:
Cuando conectamos el pin de Reset a masa, en el osciloscopio se obtiene una lectura de 0V.

Entonces ahora comprobamos los valores de los capacitores y las resistencias con el Puente RLC Digital de banco. Obtuvimos los siguientes valores a 40KHz:

C1 = 10,212 nF
C2 = 10,881 nF
R1 = 1,184 KOhm
R2 = 1,185 KOhm

Luego procedimos al armado del circuito en el protoboard:


A continuación, se ordenan los valores que obtuvimos con el simulador y en el protoboard:


Simulador (1KHz) Simulador (40KHz) Protoboard
T de estado en alto 750 us 17,5 us 15,6 us
T de estado en bajo 250 us 7,5 us 8,4 us
Período 1000 us 25 us 24 us
Frecuencia 1 KHz 40 KHz 41,7 KHz
Vsal máx 5 V 5 V 4,64 V
Vsal mín 0 V 0 V 0 V
Ciclo de trabajo 75% 70% 65%

Finalmente, diseñamos una plaqueta del astable el Protel (Descargar de acá):