Vistas de página en total
jueves, 22 de septiembre de 2011
miércoles, 14 de septiembre de 2011
Hola Mundo en LCD 16x2
A continuación mostramos el programa de ASM para hacer que aparezcan las palabras "Hola Mundo" en un LCD de 16x2 (16 caracteres y 2 lineas):
Principal
call LCD_Inicializa
call Retardo_1ms
movlw 'H'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw 'l'
call LCD_Caracter
movlw 'a'
call LCD_Caracter
movlw ' '
call LCD_Caracter
movlw 'M'
call LCD_Caracter
movlw 'u'
call LCD_Caracter
movlw 'n'
call LCD_Caracter
movlw 'd'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
goto $
include <LCD_4BIT.inc>
include <RETARDOS.inc>
;====================================================================
END
Principal
call LCD_Inicializa
call Retardo_1ms
movlw 'H'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
movlw 'l'
call LCD_Caracter
movlw 'a'
call LCD_Caracter
movlw ' '
call LCD_Caracter
movlw 'M'
call LCD_Caracter
movlw 'u'
call LCD_Caracter
movlw 'n'
call LCD_Caracter
movlw 'd'
call LCD_Caracter
movlw 'o'
call LCD_Caracter
goto $
include <LCD_4BIT.inc>
include <RETARDOS.inc>
;====================================================================
END
sábado, 3 de septiembre de 2011
Actividad 4 - Amplificadores Operacionales (1° Parte)
Esta actividad está compuesta por 2 partes:
1° Parte: Amplificador Inversor:
Primero tuvimos que hacer el siguiente circuito en el protoboard:
Así es como nos quedo el circuito ya armado:
1° Parte: Amplificador Inversor:
Primero tuvimos que hacer el siguiente circuito en el protoboard:
Así es como nos quedo el circuito ya armado:
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;
}
}
}
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;
}
}
}
martes, 2 de agosto de 2011
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:

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":
Etiquetas:
Actividad 3,
Astable,
Desafío,
Descargar,
Monoestable,
MPLAB,
Osciloscopio,
PIC12F683
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.
Etiquetas:
Actividad 3,
Astable,
Descargar,
Monoestable,
Osciloscopio,
PCB,
PIC12F683
Suscribirse a:
Entradas (Atom)





