jueves, 17 de diciembre de 2009

Código en CCS del Tp Final.

#include "PCronos.h"

int contador = 0;
long time[6];
long int cuenta = 0;

#int_TIMER0
void TIMER0_isr()
{
set_timer0(136);
cuenta++;
/* printf("T"); */
}

#int_EXT
void EXT_isr()
{
if (contador<= 6) {
time[contador] = cuenta;
}
contador++;
printf("E");
}


void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
set_timer0(136);
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER0);

set_tris_a(0x10);
set_tris_b(0x01);
printf("Cronometro para PC \n\r");
contador = 0;
while (1){

if (contador == 0) {

printf("Presione S para comenzar a realizar la medicion \n\r" );

while(getch() != 'S');
enable_interrupts(GLOBAL);

printf("\n\rOK\n\r");
contador++;
}
else if (contador > 5){
disable_interrupts(GLOBAL);
printf("\n\r");
for(contador = 1; contador < 6; contador++){
printf("%Lu\n\r", time[contador]);
}

printf("\n\r");
printf("%Lu\n\r", time[2] - time[1]);
printf("%Lu\n\r", time[3] - time[2]);
printf("%Lu\n\r", time[4] - time[3]);
printf("%Lu\n\r", time[5] - time[4]);

contador = 0;
cuenta = 0;
printf("Preparado para una nueva medicion \n\r");

}

}
}


#include <16f84a.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A4,bits=8)

miércoles, 25 de noviembre de 2009

TP 12 !

La consiga de este TP es crear un programa capaz de activar una salida con una frecuencia de 500Hz, la misma se comandará desde una entrada.

Codigo Assembler

;********************************************************************
; Nombre del archivo: TestStarter.asm
;********************************************************************
; Descripción:
; ------------
; Este software sirve para verificar el funcionamientos de la
; placa Starter.
; Enciende y apaga los leds conectados al PORTB en una secuencia
; determinada por el programa, siempre y
; cuando se active mediante un "1" la llave conectada en RA0.
;
;********************************************************************
; Hardware:
; ---------
; Placa Starter
; XTAL: 4MHz
;********************************************************************
; Autores: VMMB Fecha: 18/11/09 Versión:1.0
;********************************************************************
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

RAM EQU 0x0C
FLASHROM EQU 0x000

SW_0 EQU 0
SW_1 EQU 1
;********************************************************************
; Variables
;********************************************************************
CBLOCK RAM
var_1
var_2
var_3
w_temp
status_temp
ENDC
;********************************************************************
; MACROS (Sustituyen una o más lineas de código por un nombre)
;********************************************************************
; Macros usadas para este programa

LEDS_OFF MACRO
clrf PORTB
ENDM

LEDS_ON MACRO
movlw b'11111111'
movwf PORTB
call delay_200ms
LEDS_OFF
call delay_200ms
ENDM

LED_1 MACRO
movlw b'00000001'
movwf PORTB
ENDM

LED_2 MACRO
movlw b'00000010'
movwf PORTB
ENDM

LED_3 MACRO
movlw b'00000100'
movwf PORTB
ENDM

LED_4 MACRO
movlw b'00001000'
movwf PORTB
ENDM

LED_5 MACRO
movlw b'00010000'
movwf PORTB
ENDM

LED_6 MACRO
movlw b'00100000'
movwf PORTB
ENDM

LED_7 MACRO
movlw b'01000000'
movwf PORTB
ENDM

LED_8 MACRO
movlw b'10000000'
movwf PORTB
ENDM

LED_1y3 MACRO
movlw b'00000101'
movwf PORTB
ENDM

LED_2y4 MACRO
movlw b'00001010'
movwf PORTB
ENDM

LED_3y5 MACRO
movlw b'00010100'
movwf PORTB
ENDM

LED_4y6 MACRO
movlw b'00101000'
movwf PORTB
ENDM

LED_5y7 MACRO
movlw b'01010000'
movwf PORTB
ENDM

LED_6y8 MACRO
movlw b'10100000'
movwf PORTB
ENDM

LED_7y1 MACRO
movlw b'01000001'
movwf PORTB
ENDM

LED_8y2 MACRO
movlw b'10000010'
movwf PORTB
ENDM

LED_1y2 MACRO
movlw b'00000011'
movwf PORTB
ENDM

LED_3y4 MACRO
movlw b'00001100'
movwf PORTB
ENDM

LED_5y6 MACRO
movlw b'00110000'
movwf PORTB
ENDM

LED_7y8 MACRO
movlw b'11000000'
movwf PORTB
ENDM



; Macros usadas para guardar los registros W y STATUS al momento
; de llegar una interrupción

PUSH MACRO
movwf w_temp
swapf STATUS,W
movwf status_temp
ENDM


POP MACRO
swapf status_temp,W
movwf STATUS
swapf w_temp,F
swapf w_temp,W
ENDM

;********************************************************************
; Vectores
;********************************************************************
ORG FLASHROM
clrw
goto Inicio ; de Reset

ORG 0x004
goto Isr ; de Interrupción

;********************************************************************
Inicio
;********************************************************************

; Configuro los puertos I/O
BANK1
movlw b'11111'
movwf TRISA
clrf TRISB
BANK0
;********************************************************************
; Programa principal
;********************************************************************

Loop_1
;LEDS_OFF
LEDS_ON
goto Loop
Loop
btfss PORTA,SW_0
goto Variacion_1
goto Variacion_2

Variacion_1
btfss PORTA,SW_1
goto Loop_1
goto SECUENCIA_1

Variacion_2
btfss PORTA,SW_1
goto SECUENCIA_2
goto SECUENCIA_3

SECUENCIA_1
LED_1
call delay_200ms
LED_2
call delay_200ms
LED_3
call delay_200ms
LED_4
call delay_200ms
LED_5
call delay_200ms
LED_6
call delay_200ms
LED_7
call delay_200ms
LED_8
call delay_200ms
goto Loop


SECUENCIA_2
LED_1y3
call delay_200ms
LED_2y4
call delay_200ms
LED_3y5
call delay_200ms
LED_4y6
call delay_200ms
LED_5y7
call delay_200ms
LED_6y8
call delay_200ms
LED_7y1
call delay_200ms
LED_8y2
call delay_200ms
goto Loop


SECUENCIA_3
LED_1y2
call delay_200ms
LED_3y4
call delay_200ms
LED_5y6
call delay_200ms
LED_7y8
call delay_200ms
goto Loop


;********************************************************************
; Subrutinas
;********************************************************************
; Delays
;
delay_200ms
;499994 cycles
movlw 0x03
movwf var_1
movlw 0x18
movwf var_2
movlw 0x02
movwf var_3
delay_200ms_0
decfsz var_1, f
goto $+2
decfsz var_2, f
goto $+2
decfsz var_3, f
goto delay_200ms_0

;2 cycles
goto $+1

;4 cycles (including call)
return

;********************************************************************
; Servicio de Interrupción
;********************************************************************
Isr
PUSH

; Aca se escribe el Servicio de Interrupción

POP
retfie
;********************************************************************
END ;Directiva que indica la finalización del pgm


Simulación


jueves, 19 de noviembre de 2009

Pasos a seguir para realizar el TP

En esta parte del blog vamos a explicar cuales son los pasos a seguir para poder realizar este TP.
Lo primero que vamos a hacer es explicar como realizar la plaqueta:
Para diseñar dicha plaqueta usaremos un programa llamado PROTEL SE99 que sirve para hacer un esquemático del circuito y luego el PCB (circuito impreso). Acá les dejamos un tutorial para aprender a usarlo igualmente les recomendamos realizar varias practicas mas sencillas para agilizar su uso. Una vez creado el PCB lo imprimimos en una hoja de papel fotográfico o papel ilustración, para transmitir el PCB a la placa por medio del método de transferencia térmica. Una vez terminado este paso la placa la procesamos en ácido Percloruro Férrico para que quite el cobre sobrante quedando solo las islas y pistas. Realizado este procedimiento pasamos a marcar la placa con una punta de trazar para que sea mas efectivo el momento de agujerear. Hechos todos los agujeros limpiamos con la virulana las pistas para que quede sin ningún tipo de suciedad el cobre, así pasamos contacflux (barniz protector de flux orgánico) ayudando que el cobre no se oxide, para un buen secado se recomienda dejar la placa 20 horas en reposo. Montamos los componentes de menor a mayor tamaño ordenadamente y comenzamos las respectivas soldaduras. Así finalizamos la primer etapa de este proyecto que es la realización de la placa.

¿Cuál es el uso de este TP?

El uso de este TP es para una demostración en el laboratorio de fisica de 3º año de la escuela, en la practica de movimiento rectilineo uniforme (MRU). Esta practica se lleva a cabo por medio de un carrito que avanza sobre una pista inclinada el cual va a pasar por los sensores que estan en ese lugar haciendo que, cuando el carrito pase por el primer sensor comienze la cuenta arrojando tiempo parciales cada vez que pasa por un sensor hasta el ultimo que es el que finaliza dicha cuenta.

¿De qué trata el TP Final?

El TP final consiste en un módulo que acciona una cuenta de cronómetro por medio de un sensor que dispara el contador y 3 sensores que dan tiempos parciales hasta que se activa el ultimo sensor el cual finaliza la cuenta. Estos valores parciales y finales se muestran en la PC, que se conecta al módulo por medio de un cable serial.

miércoles, 18 de noviembre de 2009

¿Cómo conectamos el MAX232?

Comunicacion microcontrolador al pc por transimición de dato serie.

Para la comunicacion Microncontrolador - PC utilizamos el dispositivo MAX 232.
El MAX232 es un adaptador de tensión TTL a niveles adecuados para transmisión de dato serie. Por ejemplo si querés comunicar un microcontrolador con la pc necesitas llevar los 5v del micro a las tensiones con la que trabaja el puerto serie de tu pc. Con la configuración de pines que viene en el datasheet de este dispositivo podemos hacer que el circuito se conecte al puerto serial para la transmisión de datos.

En lógica TTL un 1 lógico equivale a 5V, en RS232 a -12V.
En lógica TTL un 0 lógico equivale a 0V, en RS232 a 12V.
Acá esta el datasheet