sábado, 25 de julio de 2009

Tacómetro con PIC16f84A

Para este proyecto nos basamos mucho en el trabajo del ING. FEDERICO ALVAREZ MONTAÑO del TECNOLÓGICO DE ESTUDIOS SUPERIORES DE ECATEPEC . INGENIERÍA ELECTRÓNICA. Al cual le agradecemos mucho.

Proyecto Final

“Tacómetro con PIC16F84A”

Objetivo General:

v Aplicar los conocimientos adquiridos durante el curso de Sistemas Digitales II para realizar un proyecto final en nuestro caso un Tacómetro con PIC16F84A.

Objetivos específicos:

v Visualizar los datos con display LCD de 2 líneas por 16 caracteres

v Realizar un tacómetro con el cual se pueda medir la velocidad de rotación de un motor por medio de pulsos utilizando el pin 3 RA4/TOCKI.

DESARROLLO

El presente proyecto utiliza un microcontrolador PIC 16F84A para determinar la cantidad de revoluciones a la que gira un motor de corriente directa. El circuito está compuesto por los siguientes elementos:

1. Sistema mínimo con el microcontrolador PIC 16F84A

2. Generador de pulsos opto electrónico.

3. Visualización de datos con display LCD de 2 líneas por 16 caracteres


SISTEMA MÍNIMO CON PIC 16F84A

El PIC 16F84A es el corazón del circuito; es el encargado de contar los pulsos a través de la terminal RA4/TOCK1. El PIC 16F84A cuenta el numero de pulsos y los convierte a formato ASCII para enviarlos a través del puerto B al display LCD. La figura siguiente ilustra el sistema mínimo.


GENERADOR DE PULSOS OPTO ELECTRÓNICO

El generador de pulsos está compuesto por un LED infrarrojo y un fototransistor



Como podemos observar de la figura anterior; cuando incide luz a la base del fototransistor, éste se encuentra en saturación y aparece un voltaje de 0 VCC en la terminal RA4 TOCK/IN del PIC 16F84A. Cuando la luz es interrumpida el transistor se halla en corte y se aplica un voltaje de 5 VCC en la terminal TOCK/IN del PIC 16F84A. De tal forma que cuando el disco dentado colocado en el eje de giro del motor interrumpe o permite el paso de la luz, se generan los cambios de voltaje de 0 a 5 VCC. Estos son los pulsos que cuenta el PIC 16F84A, y de ésta forma se determina la velocidad de giro del motor.


VISUALIZACIÓN DE DATOS EN DISPLAY LCD 16x2.

Los datos obtenidos por el PIC 16F84A son procesados y enviados a través del puerto B para ser exhibidos en el display de cristal liquido de 2 líneas por 16 caracteres cada una. La figura siguiente se ilustra la forma como se puede conectar el PIC 16F84A con el display LCD.



DIAGRAMA DE FLUJO


PROGRAMA

;************************************************************************

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE

; PROGRAMA PARA DETERMINAR LA VELOCIDAD DE GIRO DE UN MOTOR EN RPM
ORG 0X00
GOTO START
PORTA EQU 0X05
PORTB EQU 0X06
TMR0 EQU 0X01
PCL EQU 0X02
STATUS EQU 0X03
OPCION EQU 0X81
INTCON EQU 0X0B
PDel0 EQU 0X10
PDel1 EQU 0X11
PDel2 EQU 0X12
PDel01 EQU 0X13
PDel11 EQU 0X14
REG0 EQU 0X24
REG1 EQU 0X23
REG2 EQU 0X22
REG3 EQU 0X21
REG4 EQU 0X20
REGA EQU 0X0A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; SECTOR DE INTERRUPCION
ORG 0X04
GOTO TEST
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; INICIO
ORG 0X50
START
MOVLW B'00010000'
TRIS PORTA ;CONFIGURA RA4 COMO ENTRADA Y RA3 A RA0 COMO SALIDAS
MOVLW 0X00
TRIS PORTB ;CONFIGURA EL PORTB COMO SALIDAS
BSF STATUS,5 ;CAMBIA A BANCO 1
MOVLW B'00111000' ;CONFIGURA EL REGISTRO OPTION COMO CONTADOR Y CON EL
MOVWF OPCION ;PRESCALER ASIGNADO AL PERRO
BCF STATUS,5 ;REGRESA A BANCO CERO
MOVLW B'10000000' ;HABILITA LAS INTERRUPCIONES GIE(NO HABILITA EL TMR0)
MOVWF INTCON ;EN EL CONTROL DE INTERRUPCIONES
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

; PROGRAMA PRINCIPAL
MAIN
CLRW
MOVWF REG0
MOVWF REG1
MOVWF REG2
MOVWF REG3
MOVWF REG4
CALL T6M
BCF PORTA,3 ;RS = 0
BCF PORTA,1 ;RW = 0
CALL INIEX ;INICIALIZA EL LCD
MOVLW 0X80 ;SELECCIONA PRIMER LINEA, PRIMER RENGLON
MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
CALL M1 ;PRIMER MENSAJE
BCF PORTA,3 ;RS = 0
CALL INIEXSC ; INICIALIZA EL DISPLAY SIN CLEAR
MOVLW 0XC0 ;SELECCIONA SEGUNDA LINEA 1ER COLUMNA

;---------

MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
CALL TESE ;MENSAJE "xxxxx DIGITALES2"
CONTA
MOVLW .255
MOVWF TMR0
BSF INTCON,5 ;HABI LITA EL TMR0
CALL T1S ;LLAMA RETARDO DE 1 SEGUNDO
BCF INTCON,5
BCF INTCON,2
CALL LEER
CLRW
MOVWF REG0
MOVWF REG1
MOVWF REG2
MOVWF REG3
MOVWF REG4
GOTO CONTA
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RUTINA DE ATENCION A LA INTERRUPCION
TEST
INCF REG0,1
MOVF REG0,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG0
INCF REG1,1
MOVF REG1,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG1
INCF REG2,1
MOVF REG2,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG2
INCF REG3,1
MOVF REG3,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG3
INCF REG4,1
MOVF REG4,0
XORLW 0X0A
BTFSS STATUS,2
GOTO SALTO
CLRF REG4
SALTO
BCF INTCON,2
BCF INTCON,0
MOVLW .255
MOVWF TMR0
RETFIE
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RUTINA PARA LECTURA DE DATOS

LEER
NOP
WR6
BCF PORTA,3 ;RS = 0
CALL INIEXSC ; INICIALIZA EL LCD SIN CLEAR
MOVLW 0X85 ;SELECCIONA PRIMER LINEA, COLUMNA 6
MOVWF PORTB
CALL HABI
BSF PORTA,3 ;RS = 1
MOVF REG4, 0
CALL TABLA
MOVWF PORTB
CALL HABI
WR7
BSF PORTA,3 ;RS = 1
MOVF REG3,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR8
BSF PORTA,3 ;RS = 1
MOVF REG2,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR9
BSF PORTA,3 ;RS = 1
MOVF REG1,0
CALL TABLA
MOVWF PORTB
CALL HABI
WR10
BSF PORTA,3 ;RS = 1
MOVF REG0,0
CALL TABLA
MOVWF PORTB
CALL HABI
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; TABLA DE CONVERSION, DATOS A CARACTERES ASCI I
TABLA
ADDWF PCL ,1
RETLW "0"
RETLW "1"
RETLW "2"
RETLW "3"
RETLW "4"
RETLW "5"
RETLW "6"
RETLW "7"
RETLW "8"
RETLW "9"
RETLW "?"
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; MENSAJE DE INICIO
M1
BSF PORTA,2
MOVLW "V"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "E"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "L"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW ":"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "R"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "P"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "S"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; MENSAJE
TESE
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "X"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW " "
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "D"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "I"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "G"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
;-----
BSF PORTA,2
MOVLW "I"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "T"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "A"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "L"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "E"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "S"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW "2"
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RUTINA DE INICIALIZACON DEL DISPLAY
INIEX
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X06
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X0E
MOVWF PORTB
CALL T6M
;----
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X01 ;LIMPIA EL DISPLAY
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RUTINA DE INICIALIZACIÓN SIN CLEAR
INIEXSC
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X38
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X06
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
BSF PORTA,2
MOVLW 0X0E
MOVWF PORTB
CALL T6M
BCF PORTA,2
CALL T6M
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RUTINA PARA HABILITAR EL DISPLAY
HABI
BSF PORTA,2 ;PULSO DE SUBIDA EN RA2
CALL T6M ;RETARDO DE 1 MILISEGUNDO
BCF PORTA,2 ;PULSO DE BAJADA EN RA2
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RETARDO DE 6 MILISEGUNDOS
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
T6M
movlw .7 ; 1 s et numero de rep et i c i on (B)
movwf PDel01 ; 1
PLoop11
movlw .213 ; 1 s e t n ume ro de rep e t i c io n (A)
movwf PDel11 ; 1
PLoop21
clrwdt ; 1 c l ear wa t ch d og
decfsz PDel11,1 ; 1 + (1) es e l t iemp o 0 ? (A)
goto PLoop21 ; 2 n o, loo p
decfsz PDel01,1 ; 1 + (1) es e l t iemp o 0 ? (B)
goto PLoop11 ; 2 n o, loo p
PDelL11
goto PDelL21 ; 2 c i c los de lay
PDelL21
clrwdt ; 1 c i c l o de lay
return ; 2+2 Fin.
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RETARDO DE 1 SEGUNDO
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
T1S
movlw 14 ; 1 s e t numero d e re pe t i c io n (C)
movwf PDel0 ; 1 |
PLoop0
movlw .72 ; 1 s e t n ume ro de repe t i c i on (B)
movwf PDel1 ; 1 |
PLoop1
movlw .247 ; 1 s e t nume ro d e re pe t i c io n (A)
movwf PDel2 ; 1 |

;--------

PLoop2
clrwdt ; 1 c le ar wa t c hd o g
decfsz PDel2,1 ; 1 + (1) e s e l t i empo 0 ? (A)
goto PLoop2 ; 2 no , lo op
decfsz PDel1,1 ; 1 + (1) e s e l t i empo 0 ? (B)
goto PLoop1 ; 2 no , lo op
decfsz PDel0,1 ; 1 + (1) e s e l t i empo 0 ? (C)
goto PLoop0 ; 2 no , lo op
PDelL1
goto PDelL2 ; 2 c i c lo s d elay
PDelL2
clrwdt ; 1 c i c lo d e la y
return ; 2+2 Fin.
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; RETARDO DE 1 MINUTO CON EXIBICION AL DISPLAY LCD
T1M
MOVLW .60
MOVWF REGA
LAZO
DECFSZ REGA,1
GOTO Y1
GOTO F1
Y1
CALL T1S
CALL LEER
GOTO LAZO
F1
RETURN
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
END ;DIRECTIVA DE FIN DE PROGRAMA


Si necesitan el .asm o el PDF con el trabajo del Ing. Federico Alvarez pongan su correo para mandarselos, espero os sirva mucho
.