TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: zhewol en 02 de Febrero de 2009, 16:38:02
-
Hola a todos! :)
Es la primera vez que escribo en un foro asi que disculpad las molestias si no me entero bien.
Tengo que hacer un proyecto de un voltimetro digital a través de un PIC16F84 o PIC16F88, con las siguientes especificaciones:
• Impedancia de entrada mínima 5MΩ
• Se podrá seleccionar que la medida se haga en V o mV. La selección se hará
mediante dos botones o bien un conmutador.
• La medida se representará en tres displays de 7 segmentos, además habrá un led que
indicará si la medida es V o mV.
• El rango de medida irá desde 5V hasta 20mV
El PIC debe de estar programado con lenguaje ensamblador. Sobre todo quiero ayuda con esto, no se ni como programarlo :? :? :?
Si alguien me puede ayudar con alguna de estas cuestiones se lo agradeceria muchisimo, es que no se ni como empezar y es un proyecto para clase... :shock: :? :shock: :?. Muchas gracias! :-)
-
Hacer un proyecto con microcontroladores no es dificil ni mucho menos pero debes entender que lleva tiempo.
Aprender asm (uno de los lenguajes mas dificiles porque es de bajo nivel) es fácil pero complicado a la vez. Es como saber ajedréz; es fácil saber como mueven las piezas pero jugarlo bien es otra cosa.
Para alguien que no tiene NADA de idea de programar en asembler o es su primera vez con los pics... yo diría que un proyecto de este tipo puede llevarte entre 1 y 3 meses, dependiendo de tu inteligencia, voluntad y tiempo.
No creo que nadie aqui te dé la solución mágica de un proyecto exactamente igual al que pides. Puede que alguien tenga un ejemplo de voltímetro como el que tu quieres pero SEGURO que tendrás que modificarlo. Y como lo harás si no sabes lo que haces?
Si tienes tiempo te recomiendo una página donde hay muchos ejemplos con 16f84: http://www.msebilbao.com/tienda/software.php
El curso uno es para los 16f84
Mira si ahi hay algo que te sirva para ir entendiendo algo de asembler. Sino empieza a buscar tutoriales de 16f84 en asm.
-
Muchas gracias!Me empezare a mirar esos ejemplos, he echado un vistazo por encima y seguro que me sirven, por lo menos para familiarizarme con el ensamblador.
Segire esperando mas aportaciones, de todas formas se que nadie me dara el 100% de lo que quiero, claro. Gracias Pibe! :-)
-
Hola a todos espero que sea este el sitio adecuado para la siguiente consuta.
Bueno el problema es el siguiente:
Estoy haciendo un voltimetro de dos canales con el pic16f84a y el pcf8591
Utilizo los canales ain0 y ain3,Funciona todo muy bien pero cuando uno de los canales indistintamente cae por debajo de 1,25vcc el otro canal sin tocarlo tambien cae. visualizando en los dos canales la misma tension, si subo por encima de 1,25Vcc el canal que no e tocado se restaura marcando la tension real, pero el lio viene cuando uno de los canales le bajo la tension a 0Vcc entonces el otro canal que no e tocado se queda colgado.
No entiendo lo que me esta pasando,por favor si alguien puede ayudarme se lo agradeceria.
Gracias.
;**************************************** I2C_ADC_01.asm ******************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; El microcontrolador lee constantemente la entrada analógica ANI0 del PCF8591 y
; visualiza la tensión en la pantalla del módulo LCD.
;
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C
Auxiliar
Auxiliar1
ENDC
PCF8591_DIR_ESCRITURA EQU b'10011110'
PCF8591_DIR_LECTURA EQU b'10011111'
;
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
Inicio
call LCD_Inicializa
Principal
call I2C_EnviaStart ; Va a configurar el PCF8591.
movlw PCF8591_DIR_ESCRITURA ; Apunta al dispositivo.
call I2C_EnviaByte
movlw b'00000000' ; Carga la palabra de control utilizando la
call I2C_EnviaByte ; entrada AIN0 en modo simple.
call I2C_EnviaStop ; Termina la configuración
;
call I2C_EnviaStart ; Comienza a leer.
movlw PCF8591_DIR_LECTURA ; Apunta al dispositivo.
call I2C_EnviaByte
call I2C_LeeByte ; La primera lectura es incorrecta y por lo tanto
; la desecha.
call I2C_LeeByte ; Lee la entrada analógica.
movwf Auxiliar
call I2C_EnviaStop
call Visualiza ; La visualiza.
call I2C_EnviaStart ; Va a configurar el PCF8591.
movlw PCF8591_DIR_ESCRITURA ; Apunta al dispositivo.
call I2C_EnviaByte
movlw b'00000011' ; Carga la palabra de control utilizando la
call I2C_EnviaByte ; entrada AIN3 en modo simple.
call I2C_EnviaStop ; Termina la configuración
;
call I2C_EnviaStart ; Comienza a leer.
movlw PCF8591_DIR_LECTURA ; Apunta al dispositivo.
call I2C_EnviaByte
call I2C_LeeByte ; La primera lectura es incorrecta y por lo tanto
; la desecha.
call I2C_LeeByte ; Lee la entrada analógica.
movwf Auxiliar1
call I2C_EnviaStop
call Visualiza1 ; La visualiza.
goto Principal
; Subrutinas "Visualiza" ----------------------------------------------------------------
;
; Visualiza el valor que se le introduce por el registro de trabajo W en formato de tensión.
; Hay que tener en cuenta que el PCF8591 del esquema trabaja con una resolución de
; LSB=10mV, el valor de entrada será 10 veces menor que la tensión real expresada en
; milivoltios. Así por ejemplo, si (W)=147 el valor de la tensión será igual a:
; VAIN = LSB x Digital = 10 x 147 = 1470 mV = 1,47 V, que es lo que se debe visualizar
; en la pantalla.
;
; En conclusión:
; - Las centenas del valor digital corresponden a las unidades de voltio.
; - Las decenas del valor digital corresponden a las décimas de voltio.
; - Las unidades del valor digital corresponden a las centésimas de voltios.
Visualiza
call LCD_Linea1 ; Se sitúa al principio de la primera línea.
movlw MensajeTension ; Visualiza la tensión deseada.
call LCD_Mensaje
movf Auxiliar,W ; Recupera el dato a visualizar y lo
call BIN_a_BCD ; pasa a BCD.
movf BCD_Centenas,W ; Visualiza las centenas que corresponden a las
call LCD_Nibble ; unidades de voltios.
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf BCD_Decenas,W ; Visualiza las decenas que corresponden a las
call LCD_Nibble ; décimas de voltios.
movf BCD_Unidades,W ; Visualiza las unidades que corresponden a las
call LCD_Nibble ; centésimas de voltios.
movlw MensajeVoltios
call LCD_Mensaje
return
Visualiza1
movwf Auxiliar ; Lo guarda.
call LCD_Linea2 ; Se sitúa al principio de la primera línea.
movlw MensajeTension ; Visualiza la tensión deseada.
call LCD_Mensaje
movf Auxiliar1,W ; Recupera el dato a visualizar y lo
call BIN_a_BCD ; pasa a BCD.
movf BCD_Centenas,W ; Visualiza las centenas que corresponden a las
call LCD_Nibble ; unidades de voltios.
movlw '.' ; Visualiza el punto decimal.
call LCD_Caracter
movf BCD_Decenas,W ; Visualiza las decenas que corresponden a las
call LCD_Nibble ; décimas de voltios.
movf BCD_Unidades,W ; Visualiza las unidades que corresponden a las
call LCD_Nibble ; centésimas de voltios.
movlw MensajeVoltios
call LCD_Mensaje
return
Mensajes
addwf PCL,F
MensajeTension
DT "Tension: ", 0x00
MensajeVoltios
DT " V. ", 0x00
INCLUDE <BUS_I2C.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
END
-
Hola, a menos que sea un requisito ineludible, no veo razón de agregar un ADC externo. Existen PIC que traen incorporados ADC.
De todos modos, puedes intentar agregar un retardo entre la lectura de uno y otro canal. Trata de quitar todos los ruidos, sobre todo si estas ensayando sobre un protoboard.
Recomiendo que lean la nota de aplicacion AN557 y AN546, que se encuentran publicadas an la pagina de microchip.
-
Hola a todos y perdon por el retraso.
Estoy utilizando el pic16f84a y el pcf8591 por que estoy comenzando en este mundillo y el libro más aparente que
e encontrado es el del ejemplo que e puesto me gustaria, si alguien es tan amable de podeme ayudar con el problemilla que tengo.
Muchas gracias a todos. :-/