Vistas de página en total

jueves, 6 de octubre de 2011

Proyecto Comunicación Serie

Proyecto de Laboratorio: Comunicación Serie

Funcionamiento:

o     Al conectar la placa se muestra un mensaje de bienvenida en el LCD, durante 5 segundos:


              
                CUBA 2011
                   COMUNICACIÓN SERIE

o 
  •       Luego envia el mismo mensaje a la PC.
  •     Espera recibir un comando desde la PC.
  •     Si recibe un 0, envia el valor  analógico presente en AN0 (entre el 0 analógico y 1023).
  •     Si recibe un 1, envia el estado de la entrada digital DIG1 (un 2 de la DIG2, un 3 de la DIG3, etc.)
  •     Si recibe una A,  cambia el estado de la salida LED0.
  •     Si recibe una B, cambia el estado de la salida LED1, etc.
  •     El LCD debe mostrar el estado de las entradas analógicas y digitales.

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

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:



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: