TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Phako_mx en 16 de Marzo de 2004, 12:59:00
-

Holas espero q me puedan ayudar.El problema es el siguiente, estoy aprendiento todo esto de los pics y en realidad es que por ahora no tengo mucho tiempo para para aprenderlo.Tengo un sensor de temperatura que realize para mi materia de didgitales II, pero esta diseñado para para un Mic8031 y quisiera sabser si alguien me podria ayudar para pasar el mismo programa a un pic16f8777, que por lo q he leido creo q internamente tiene un ADC, bueno espero q halguien pueda ayudarme.
aqui esta el ASM de mi programa con el 8031.
este programa utiliza el P0 y P2 para controlar la memoria y el lach y en el P0 manejo multiplexadamente la parte baja de la memoria y un LCD, en el P1 tengo conectado el ADC0804, en el P3.6 y P2.6 controlo el enable y el control para enviar datos o instrucciones al LCD.
Utilizo un LM35para el sensado de la tem, un ADC0804 para convertir la tem a binario,el MC8031, y un LCD para visualizar la temperatura.




$MOD51
$TITLE(sensor de temperatura)
ORG 0000H
MOV P1,#00H
MOV R0,#10
CALL TIMER
CALL CONFIGLCD
UNO: NOP
MOV A,P1
NOP
MOV P1,#00H
CALL COMPARAR
CALL MENS
CALL SEGUNDO
CALL BORRAR
JMP UNO
SEGUNDO: MOV R2,#255
MOV R3,#255
MOV R4,#16
DECRE: DJNZ R2,DECRE
DJNZ R3,DECRE
DJNZ R4,DECRE
RET
TIMER: MOV R1,#249
TIMER1: DJNZ R1,TIMER1
DJNZ R0,TIMER
RET
CONFIGLCD: MOV A,#34H ;aqui empieso a configurar el LCD
CALL SEND_CMD
MOV A,#0CH
CALL SEND_CMD
MOV A,#06H
CALL SEND_CMD
MOV A,#01H ; CLEAR DISPLAY
CALL SEND_CMD
RET
BORRAR: MOV A,#01H ; CLEAR DISPLAY
CALL SEND_CMD
RET
SEND_CMD: MOV DPTR,#08FFFH ;rutina para enviar una instruccion al lcd
MOVX @DPTR,A
MOV R0,#05H
CALL TIMER
RET
SEND_CHAR: MOVX @DPTR,A ;para enviar datos al LCD
MOV R0,#1
CALL TIMER
RET
MENS: MOV A,#00H
CALL SEND_CMD
MOV A,R7
ADD A,#30H
MOV DPTR,#0C001H
CALL SEND_CHAR
MOV A,R6
ADD A,#30H
MOV DPTR,#0C002H
CALL SEND_CHAR
MOV A,R5
ADD A,#30H
MOV DPTR,#0C003H
CALL SEND_CHAR
MOV A,#223
MOV DPTR,#0C004H
CALL SEND_CHAR
MOV A,#43H
MOV DPTR,#0C005H
CALL SEND_CHAR
RET
COMPARAR: CJNE A,#00H,SALTO ;R5PARA 128 R6PARA67 Y R7PARA1°C
MOV R7,#00H
MOV R6,#00H
MOV R5,#00H
RET ;
SALTO: CJNE A,#02H,SALTO1
MOV R7,#00H
MOV R6,#00H
MOV R5,#01H
RET
SALTO1: CJNE A,#04H,SALTO2
MOV R7,#00H
MOV R6,#00H
MOV R5,#02H
RET ; 2°C
SALTO2: CJNE A,#06H,SALTO3
MOV R7,#00H
MOV R6,#00H
MOV R5,#03H
RET ; 3°C
SALTO3: CJNE A,#08H,SALTO4
MOV R7,#00H
MOV R6,#00H
MOV R5,#04H
RET ; 4°C
SALTO4: CJNE A,#10,SALTO5
MOV R7,#00H
MOV R6,#00H
MOV R5,#05H
RET ; 5°C
SALTO5: CJNE A,#12,SALTO6
MOV R7,#00H
MOV R6,#00H
MOV R5,#06H
RET ; 6°C
SALTO6: CJNE A,#14,SALTO7
MOV R7,#00H
MOV R6,#00H
MOV R5,#07H
RET ; 7°C
SALTO7: CJNE A,#16,SALTO8
MOV R7,#00H
MOV R6,#00H
MOV R5,#08H
RET ; 8°C
SALTO8: CJNE A,#18,SALTO9
MOV R7,#00H
MOV R6,#00H
MOV R5,#09H
RET 9°C
SALTO9: CJNE A,#20,SALTO10
MOV R7,#00H
MOV R6,#01H
MOV R5,#00H
RET 10°C
SALTO10: CJNE A,#22,SALTO11
MOV R7,#00H
MOV R6,#01H
MOV R5,#01H
RET ; 11°C
SALTO11: CJNE A,#24,SALTO12
MOV R7,#00H
MOV R6,#01H
MOV R5,#02H
RET ; 12°C
SALTO12: CJNE A,#26,SALTO13
MOV R7,#00H
MOV R6,#01H
MOV R5,#03H
RET ; 13°C
SALTO13: CJNE A,#28,SALTO14
MOV R7,#00H
MOV R6,#01H
MOV R5,#04H
RET ; 14°C
SALTO14: CJNE A,#30,SALTO15
MOV R7,#00H
MOV R6,#01H
MOV R5,#05H
RET ; 15°C
SALTO15: CJNE A,#32,SALTO16
MOV R7,#00H
MOV R6,#01H
MOV R5,#06H
RET ; 16°C
SALTO16: CJNE A,#34,SALTO17
MOV R7,#00H
MOV R6,#01H
MOV R5,#07H
RET ; 17°C
SALTO17: CJNE A,#36,SALTO18
MOV R7,#00H
MOV R6,#01H
MOV R5,#08H
RET ; 18°C
.
.
.
.
.
.
.
asi hasta 128
SALTO172: CJNE A,#252,SALTO173
MOV R7,#01H
MOV R6,#02H
MOV R5,#05H
RET ; 126°C
SALTO173: CJNE A,#254,SALTO174
MOV R7,#01H
MOV R6,#02H
MOV R5,#06H
RET ; 127°C
SALTO174: CJNE A,#255,SALTO175
MOV R7,#01H
MOV R6,#02H
MOV R5,#07H
RET
SALTO175: RET ; 128°C
END
NOTA:para cualquira q este interesado en este proyecto con gusto le puedo dar toda la informacion para su implementacion.
-
Yo no le recomiendo que busque como pasar un programa para otro. Con el PIC 16f877 puede hacerlo utilizando mucho menos código con el conversor análogo - digital que viene incorporado. Primero tiene que acondicionar la señal de 0 a 5V y luego este se convierte y envía a la LCD. cualquier ayuda digame.
-
Hola
mira que facil aqui te mando un programa en picbasicplus que te entrega por el lcd los valores de tension de ingreso al ad si le conectas una tension variable de 0 a 5 te mostrara de 0 a 1023 en el display con solo agregarle cualquier sensor de temp que sea lineal su tension de salida le efectuas la correcion matematica en lo que muestra el display y listo te mando tambien el .hex es para un 16F877
cualquier informacion suplementaria mandame un privado asi me avivo pues no siempre me acuerdo lo que conteste
Suerte
khasistos
lo siento te lo mando al correo pues no se pueden linkear archivos aqui
-
kasistos... puedes subirlo aquí...
http://miarroba.com/foros/ver.php?id=256746
Un abrazo...
marmatar
-
Pienso que lo más sencillo es utilizar el conversor ADC del PIC, es de 10 bits y su visualización por el LCD es sencilla, hay que seguir la secuencia de pasos para la configuración de ADC; por ejm Tadmín=1.6us (tiempo de conversión por bit) y T=2Tadmín ( tiempo de espera después de la conversión)
Para estar seguros lo pueden probar primero con un potenciómetro y solo estará la rutina de ADC así hice yo y me salió.
Para verlo en el LCD pienso hacer 3 tablas una para las decenas, otra para las unidades y otra para los decimales.
Si quieren utilizar todo el rango del LM35 y con una resolución de 0.1°C se podria hacer esto. Por ejm 30.1 a 30.4 le corresponde la conversión 624, es decir cada valor de conversión del ADC representa varias temperaturas.
Me pueden pedir los archivos si desean, saludos
-
hola que tal!
estoy interesado en realizar un termometro digital con pic pero hasta el moemnto tengo muy poca informacion, quisiera que me pudieras colaborar lo mas que pse pueda sobre este tema:
dojuca@colombia.com
gracias
saludos
medellin-colombia
Escrito originalmente por Renato_
Pienso que lo más sencillo es utilizar el conversor ADC del PIC, es de 10 bits y su visualización por el LCD es sencilla, hay que seguir la secuencia de pasos para la configuración de ADC; por ejm Tadmín=1.6us (tiempo de conversión por bit) y T=2Tadmín ( tiempo de espera después de la conversión)
Para estar seguros lo pueden probar primero con un potenciómetro y solo estará la rutina de ADC así hice yo y me salió.
Para verlo en el LCD pienso hacer 3 tablas una para las decenas, otra para las unidades y otra para los decimales.
Si quieren utilizar todo el rango del LM35 y con una resolución de 0.1°C se podria hacer esto. Por ejm 30.1 a 30.4 le corresponde la conversión 624, es decir cada valor de conversión del ADC representa varias temperaturas.
Me pueden pedir los archivos si desean, saludos
-
COMO ESTA PAKO,
MI PROBLEMA RADICA EN QUE TENGO QUE ENTREGAR UN PROYECTO DE UN CIRCUITO QUE TOME LA TEMPERTURA AMBIENTE Y LA MUESTRE , SI PUEDE AYUDARME SE LO AGRADEZCO MUCHO.
JOSE FERNANDO OPEZ
CUCUTA, COLOMBIA
-
Hola..
yo realice uno.. en lenguaje c, y tiene para cambiar las escalas de centigrados a farenheit, tiene un pequeño menu para poner un rango de temperaturas y asi que el pic active algun dispositivo para calentar o enfriar (resistencia/ventilador), en el lcd se visualizan dos temperaturas ya que cuenta con dos sensores (mi proyecto asi lo requeria) pero si no colocas solo mostrara la temperatura del que este conectado (igual quitar este del programa no es dificil), lo que pasa es que no lo puedo subir y para postearlo el programa es un poquito largo, denme un medio para subirlo.. !
Chao
-
Siempre es bueno ayudar a los compatriotas colombianos no es cierto "ODUKEC"?
Saludos compatriotas picmaniacos: Este es un programa que realizé hace buen tiempo, espero que pueda ayudarles. Me cuentan como les fué.
gfp :-)
Bogotá, Colombia.
;CONEXIONES LCD DE DOS LINEAS:
;RC0=RS (LCD)
;RC1=ENABLE (LCD)
;RC2=
;RC3=
;RC4=D4 (LCD)
;RC5=D5 (LCD)
;RC6=D6 (LCD)
;RC7=D7 (LCD)
;EL PIN "RW" DEL LCD SE CONECTA A TIERRA.
;CRISTAL DE 4 Mhz
LIST P=PIC16F873
ERRORLEVEL 1 , -301
#INCLUDE <P16F873.INC>
CUENTA EQU 0X20
REG1 EQU 0X21
REG2 EQU 0X22
CBYTE EQU 0X23
DT1 EQU 0x24
DT2 EQU 0x25
DT3 EQU 0X26
TACT EQU 0X27
#DEFINE RS PORTC,0
#DEFINE ENABLE PORTC,1
ORG 00
GOTO INICIO
TABLA ADDWF PCL,1
RETLW "T"
RETLW "E"
RETLW "M"
RETLW "P"
RETLW "."
RETLW " "
RETLW "A"
RETLW "C"
RETLW "T"
RETLW "U"
RETLW "A"
RETLW "L"
RETLW " " ;12
RETLW 0
DECO ADDWF PCL,1
RETLW "0"
RETLW "1"
RETLW "2"
RETLW "3"
RETLW "4"
RETLW "5"
RETLW "6"
RETLW "7"
RETLW "8"
RETLW "9"
RETLW 0
INICIO
BCF STATUS,6
BSF STATUS,5
MOVLW 0X8E
MOVWF ADCON1
MOVLW 0XFF
MOVWF TRISA
MOVLW 0X01
MOVWF TRISB
CLRF TRISC
MOVLW 0XC7
MOVWF OPTION_REG
BCF STATUS,5
CLRF PORTC
LCD_INI
MOVLW 0X02
CALL CONTROL
MOVLW 0X28
CALL CONTROL
MOVLW 0X0C
CALL CONTROL
MOVLW 0X06
CALL CONTROL
MOVLW 0X01
CALL CONTROL
CLRF CBYTE
PUB1 MOVF CBYTE,0
CALL TABLA
CALL DATO
INCF CBYTE,1
MOVLW .12
XORWF CBYTE,0
BTFSS STATUS,2
GOTO PUB1
TEMPERATURA
MOVLW 0XC0
CALL CONTROL
CALL ADC
MOVF TACT,0
CALL DIV
MOVLW 0X10
CALL CONTROL
MOVLW 0X10
CALL CONTROL
MOVLW 0X10
CALL CONTROL
MOVLW 0X10
CALL CONTROL
MOVLW 0X10
CALL CONTROL
GOTO TEMPERATURA
DIV MOVWF DT1 ;DATO A SEPARAR
CLRF DT2
CLRF DT3
OPERA1 MOVLW .100
RESTAR1 SUBWF DT1,1
BTFSS STATUS,0 ;DESBORDÓ?
GOTO SUMAR1 ;SI
INCF DT3,1
GOTO RESTAR1
SUMAR1 MOVLW .100
ADDWF DT1,1
OPERA MOVLW .10
RESTAR SUBWF DT1,1
BTFSS STATUS,0 ;DESBORDÓ?
GOTO SUMAR ;SI
INCF DT2,1 ;NO
GOTO RESTAR
SUMAR MOVLW .10
ADDWF DT1,1
MOVF DT3,0
CLRF PCLATH
CALL DECO
CALL DATO
MOVF DT2,0
CLRF PCLATH
CALL DECO
CALL DATO
MOVF DT1,0
CLRF PCLATH
CALL DECO
CALL DATO
MOVLW .223
CALL DATO
MOVLW "C"
CALL DATO
RETURN
;************************
ADC MOVLW 0X81
MOVWF ADCON0
CALL RETLCD
CALL RETLCD
CALL RETLCD
BSF ADCON0,2
CONV BTFSC ADCON0,2
GOTO CONV
BCF PIR1,6
BCF STATUS,6
BSF STATUS,5
MOVF ADRESL,0
BCF STATUS,6
BCF STATUS,5
MOVWF TACT
BCF STATUS,0
RRF TACT,1
MOVLW .2
ADDWF TACT,1
RETURN
RETLCD
MOVLW .3
MOVWF CUENTA
SETUP MOVLW 0xFF
MOVWF REG2
DECRE DECFSZ REG2,1
GOTO DECRE
DECFSZ CUENTA,1
GOTO SETUP
RETURN
RETARDO MOVLW .240
MOVWF CUENTA
LIMPIA CLRF TMR0
BCF INTCON,2
RET BTFSS INTCON,2
GOTO RET
INCFSZ CUENTA,1
GOTO LIMPIA
RETURN
CONTROL BCF RS
GOTO DATO2
DATO BSF RS
DATO2 BSF ENABLE
MOVWF REG1
MOVLW 0x0F
ANDWF PORTC,1
MOVF REG1,0
ANDLW 0XF0
IORWF PORTC,1
CALL RETLCD
BCF PORTC,1
CALL RETLCD
BSF PORTC,1
MOVLW 0x0F
ANDWF PORTC,1
SWAPF REG1,0
ANDLW 0xF0
IORWF PORTC,1
CALL RETLCD
BCF PORTC,1
CALL RETLCD
RETURN
END