Autor Tema: Ayuda con voltimetro digital  (Leído 8579 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado zhewol

  • PIC10
  • *
  • Mensajes: 2
Ayuda con voltimetro digital
« 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! :-)

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Ayuda con voltimetro digital
« Respuesta #1 en: 02 de Febrero de 2009, 18:45:21 »
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.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado zhewol

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con voltimetro digital
« Respuesta #2 en: 03 de Febrero de 2009, 06:42:15 »
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! :-)

Desconectado juanito71

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con voltimetro digital
« Respuesta #3 en: 15 de Marzo de 2010, 16:50:32 »
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

Desconectado ferna85

  • PIC10
  • *
  • Mensajes: 32
Re: Ayuda con voltimetro digital
« Respuesta #4 en: 18 de Marzo de 2010, 03:21:51 »
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.

Desconectado juanito71

  • PIC10
  • *
  • Mensajes: 2
Re: Ayuda con voltimetro digital
« Respuesta #5 en: 06 de Abril de 2010, 13:15:32 »
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. :-/


 

anything