Foros ZackYFileS

Foros ZackYFileS (http://foros.zackyfiles.com/index.php)
-   PROGRAMACIÓN Microcontroladores: PICs , AVRs. (http://foros.zackyfiles.com/forumdisplay.php?f=437)
-   -   pic 16f84 problema (http://foros.zackyfiles.com/showthread.php?t=597683)

wolwaiar 05/02/2009 00:57

pic 16f84 problema
 
Hola, estoy progranando en emsamblador y necesito pasar de una señal anañogica a una digital para visualizarla por rs232, pero me salen rombos y cosas raras y donde la tendion de la bateria una d, si alguien puede echarle un vistazo a ver si tengo algo mal lo agradeceria, gracias.


LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

PCF8591_DIR_ESCRITURA EQU b'10011110'
PCF8591_DIR_LECTURA EQU b'10011111'
ENTER EQU .13
;
; ZONA DE CÓDIGOS ********************************************************************

ORG 0
Inicio
call RS232_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

call I2C_LeeByte ; Lee la entrada analógica.
call Visualiza ; La visualiza.
call Retardo_10s
call RS232_LineasBlanco ; La primera lectura es incorrecta y por lo tanto

Principal1 ; la desecha.
call I2C_EnviaStart
movlw PCF8591_DIR_ESCRITURA
call I2C_EnviaByte
movlw b'00000001'
call I2C_EnviaByte
call I2C_EnviaStop
;
call I2C_EnviaStart
movlw PCF8591_DIR_LECTURA
call I2C_EnviaByte
call I2C_LeeByte

call I2C_LeeByte
call Visualiza1
call Retardo_10s
call RS232_LineasBlanco
goto Principal0

; 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.

CBLOCK
Auxiliar
ENDC

Visualiza
call RS232_LineasBlanco
movwf Auxiliar ; Lo guarda.
movlw MensajeTension ; Visualiza la tensión deseada.
call RS232_Mensaje
movf Auxiliar,W ; Recupera el dato a visualizar y lo
call BIN_a_BCD
; call RS232_EnviaDato ; pasa a BCD.
movf BCD_Centenas,W ; Visualiza las centenas que corresponden a las unidades de voltios.
call RS232_EnviaDato
movf BCD_Decenas,W ; Visualiza las decenas que corresponden a las
call RS232_EnviaDato ; décimas de voltios.
movf BCD_Unidades,W ; Visualiza las unidades que corresponden a las
call RS232_EnviaDato ; centésimas de voltios.
retfie
;------------------------------
;Subrutina "Visualiza1"
;

CBLOCK
Auxiliar1
ENDC

Visualiza1
call RS232_LineasBlanco
movwf Auxiliar1
movlw MensajeTemperatura
call RS232_Mensaje
movf Auxiliar1,W
call BIN_a_BCD
movf BCD_Centenas,W
call RS232_EnviaDato
movf BCD_Decenas,W
call RS232_EnviaDato
movf BCD_Unidades,W
call RS232_EnviaDato
retfie

Mensajes
addwf PCL,F
MensajeTension
DT "Tension Bateria(V): ", 0x00
MensajeTemperatura
DT "Temperatura(Centigrados):",0x00

INCLUDE <BUS_I2C.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
END

rina 28/03/2013 18:33

ostia... pero el problema que el 16f84 no dispone de ningun terminal A/D
lo mas que puedes acer es comprovar el tiempo que tarda en cargar un condensador a partir de una resistencia.
tendrias que currarte unn circuito aparte oscilador calibrado al voltage de carga de bateria.

bamos su una bateria de 12v cargada tenria que dar una tension de 12.2V y bacia unos 10,6V. pongmos que te tienes que curar un circuito que mande un pulso mas corto cuando tiene menos voltage y mas largo al tener algo mas, espues tandsolo es medir el largo del pulso con el pic.
para calibrarlo y que sea vastante preciso tansolo es eliminar por ejemplo 10v de la lectura de la bateria y si tal amplificarla x2 el restante para tener una referencia mas amplia del estado de la bateria. y reflejarsela al pic en un largo de unn pulso que mandaras cada x milisegundos

ma_chavez 16/05/2013 02:09

[QUOTE=wolwaiar;3683030]Hola, estoy progranando en emsamblador y necesito pasar de una señal anañogica a una digital para visualizarla por rs232, pero me salen rombos y cosas raras y donde la tendion de la bateria una d, si alguien puede echarle un vistazo a ver si tengo algo mal lo agradeceria, gracias.


LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x0C
ENDC

PCF8591_DIR_ESCRITURA EQU b'10011110'
PCF8591_DIR_LECTURA EQU b'10011111'
ENTER EQU .13
;
; ZONA DE CÓDIGOS ********************************************************************

ORG 0
Inicio
call RS232_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

call I2C_LeeByte ; Lee la entrada analógica.
call Visualiza ; La visualiza.
call Retardo_10s
call RS232_LineasBlanco ; La primera lectura es incorrecta y por lo tanto

Principal1 ; la desecha.
call I2C_EnviaStart
movlw PCF8591_DIR_ESCRITURA
call I2C_EnviaByte
movlw b'00000001'
call I2C_EnviaByte
call I2C_EnviaStop
;
call I2C_EnviaStart
movlw PCF8591_DIR_LECTURA
call I2C_EnviaByte
call I2C_LeeByte

call I2C_LeeByte
call Visualiza1
call Retardo_10s
call RS232_LineasBlanco
goto Principal0

; 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.

CBLOCK
Auxiliar
ENDC

Visualiza
call RS232_LineasBlanco
movwf Auxiliar ; Lo guarda.
movlw MensajeTension ; Visualiza la tensión deseada.
call RS232_Mensaje
movf Auxiliar,W ; Recupera el dato a visualizar y lo
call BIN_a_BCD
; call RS232_EnviaDato ; pasa a BCD.
movf BCD_Centenas,W ; Visualiza las centenas que corresponden a las unidades de voltios.
call RS232_EnviaDato
movf BCD_Decenas,W ; Visualiza las decenas que corresponden a las
call RS232_EnviaDato ; décimas de voltios.
movf BCD_Unidades,W ; Visualiza las unidades que corresponden a las
call RS232_EnviaDato ; centésimas de voltios.
retfie
;------------------------------
;Subrutina "Visualiza1"
;

CBLOCK
Auxiliar1
ENDC

Visualiza1
call RS232_LineasBlanco
movwf Auxiliar1
movlw MensajeTemperatura
call RS232_Mensaje
movf Auxiliar1,W
call BIN_a_BCD
movf BCD_Centenas,W
call RS232_EnviaDato
movf BCD_Decenas,W
call RS232_EnviaDato
movf BCD_Unidades,W
call RS232_EnviaDato
retfie

Mensajes
addwf PCL,F
MensajeTension
DT "Tension Bateria(V): ", 0x00
MensajeTemperatura
DT "Temperatura(Centigrados):",0x00

INCLUDE <BUS_I2C.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <BIN_BCD.INC>
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
END[/QUOTE]

Estas queriendo programar un PIC16F84 ???

No parece

el programa esta escrito para otro dispositivo eso de pasar una señal analogica a digital requiere el uso de convertidor A/D o utilizar referencia con comparadores

covrita 16/08/2013 22:36

El F84A no contiene hardware para usar con el protocolo I2C, quizas vaya por ahi el problema (puede ser que este codigo que pones sea para un 877? )


La franja horaria es GMT +2. Ahora son las 22:58.

Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate