Artículos
Medidor ADC infrarrojo por RS232 - Página 3
- Detalles
- Categoría: Artículo
- Publicado el Sábado, 21 Marzo 2009 08:47
- Escrito por Santiago Villafuerte
- Visto: 52484
Circuito Receptor y RS232
El circuito empleado para la recepción emplea el módulo infrarrojo TSOP1738 y un MAX232N que adapta los voltajes TTL recibidos por el TSOP1738 a voltajes de ±8.5V, que son los necesarios para realizar una conexión con el puerto RS232 de una PC.
La comunicación realizada es solo de recepción de parte de la PC ya que no se implementó la transmisión hacia el pic.
Programa en ensamblador del PIC16F877A
A continuación se muestra el programa completo del pic, compilado con MPLAB 8.0.
LIST P=16f877a
__config B'11111100111001'
;CRISTAL 4MHz
;FUSIBLES CONFIGURADOS EN MPLAB (CONFIG BITS)
;OSCILADOR XT, NO WDT, POWER UP TIMER, NO LVP, NO CODE PROTECT
include "p16f877a.inc"
;Santiago Villafuerte
;Septiembre 2008
;Programa que obtiene la medición de lo que esté conectado
;en la terminal RA0 mediante el ADC.
;Posteriormente toma los 10 bits que el ADC genera y
;los envía por el puerto serie TX.
;La transmisión infrarroja se logra generando una portadora de
;38kHz gracias al PWM y conectando un led emisor infrarrojo
;entre las terminales RC2 y RC6 con su resistencia de 330ohms.
;La recepción se hace en una computadora con puerto serie y
;conectando un MAX232 junto con un TSOP1738 para demodular la
;señal infrarroja, todo esto a una velocidad de 2400bps, que es
;el ancho de banda que recomienda el fabricante del TSOP1738
;TERMINALES
;Salida PWM a 38kHz -> RC2
;Salida TX -> RC6
;Entrada ADC -> RA0
;CALCULOS PWM
;f=38kHz
;Tpwm=26.3157us
;duty time= 13.1578us
;Tpwm=(PR2+1)4 Tosc PRtm2
;Tpwm=(25+1)(4)(1/4MHz)(1)=26us
;fpwm=1/26us=38.461kHz
;duty time=CCP Tosc PRtm2
;duty time=52(1/4MHz)(1)=13us
;Res=[log(4MHz/38.461KHz)/log 2]=6.7bit=6bit
;52d=0x34=110100b O.K.
;VARIABLES
CONTEO EQU 0X20
ORG 0X0000
;CONFIGURA ENTRADAS Y SALIDAS
;TRISC
BSF STATUS,RP0 ;BANCO 1
MOVLW B'10111011' ;RC2 Y RC6 SALIDA
MOVWF TRISC
;TRISA
MOVLW B'11111111' ;RA0 ENTRADA
MOVWF TRISA
;CONFIGURA ENTRADAS ANALÓGICAS Y ADC
MOVLW B'10001111' ;JUST DER,F0SC/32,RA0 VREF +A3 Y -A2
MOVWF ADCON1
BCF STATUS,RP0 ;BANCO 0
MOVLW B'10000001' ;F0SC/32,CANAL A0,ADON
MOVWF ADCON0
;CONFIGURA TIMER 0 PARA SUBRUTINA DE RETARDO
BSF STATUS,RP0 ;BANCO 1
MOVLW B'11010111' ;T0CS INTERNO, TOSE ALTO A BAJO
MOVWF OPTION_REG ;PRESCALER EN TMR0 Y 1:256
;CONFIGURA PWM
MOVLW D'25'
MOVWF PR2
BCF STATUS,RP0 ;BANCO 0
MOVLW B'00001101' ;DUTY = B'00001101 00'=52D
MOVWF CCPR1L
MOVLW B'00000100' ;1:1 POST, TM2 ON, 1:1 PRE
MOVWF T2CON
MOVLW B'00001111' ;DUTY = B'00001101 00',PWM
MOVWF CCP1CON
;CONFIGURA RS232
BSF STATUS,RP0 ;BANCO 1
MOVLW D'25' ;25 GENERA 2403.84bps
MOVWF SPBRG
BCF TXSTA,SYNC ;HABILITA MODO ASINC
BCF STATUS,RP0 ;BANCO 0
BSF RCSTA,SPEN ;SERIAL PORT ACTIVADO
BSF STATUS,RP0 ;BANCO 1
BSF TXSTA,TXEN ;HABILITA TRANSMISION
BCF STATUS,RP0 ;BANCO 0
;ESPERA 3 SEGUNDOS APROX PARA QUE SE ESTABILICE EL ENCENDIDO
CALL RETARDO
CALL RETARDO
CALL RETARDO
;ENVIA NOMBRE POR TX
; MOVLW D'9' ;9 CARACTERES
; MOVWF CONTEO
;LEETABLA CALL TABLA ;COPIA LETRA
;TXBUF BTFSS PIR1,TXIF ;VERIFICA SI PUEDE ESCRIBIR EN BUFFER
; GOTO TXBUF
; MOVWF TXREG
; DECFSZ CONTEO,F ;SIG. LETRA
; GOTO SIG2 ;TABLA PENDIENTE
; GOTO SIG ;TABLA TERMINADA
;SIG2 MOVF CONTEO,W
; GOTO LEETABLA
;SIG CALL RETARDO
;TOMA LA MEDICION DE VOLTAJE EN RA0 Y LA ENVIA POR RS232
CICLO_INF BSF ADCON0,GO ;INICIA MEDICION
AD_ESPERA BTFSC ADCON0,GO
GOTO AD_ESPERA
BCF PIR1,ADIF ;LIMPIA BANDERA AD
MOVF ADRESH,W ;COPIA LOS 2 BITS MS DE LA MEDICION
MOVWF TXREG
TXBUF2 BTFSS PIR1,TXIF ;VERIFICA SI PUEDE ESCRIBIR EN BUFFER
GOTO TXBUF2
BSF STATUS,RP0 ;BANCO 1
MOVF ADRESL,W ;COPIA LOS 8 LSb DE LA MEDICION
BCF STATUS,RP0 ;BANCO 0
MOVWF TXREG
CALL RETARDO ;ESPERA 960ms
GOTO CICLO_INF ;CICLO INFINITO
;///////////////////////////////////////////////////////////////
;SUBRUTINA DE TIEMPO DE 960ms
RETARDO MOVLW D'15' ;15 X 64ms = 960ms
MOVWF CONTEO
CICLO MOVLW D'06' ;GENERA 64ms
MOVWF TMR0
CICLO2 BTFSS INTCON,T0IF ;ESPERA EL DESBORDE
GOTO CICLO2
BCF INTCON,T0IF ;LIMPIA BANDERA
DECFSZ CONTEO,F ;BRINCA SI YA ES CERO
GOTO CICLO
RETURN
END