Saludos Amigos.
Estoy construyendo un inductometro por USB, el esquema que estoy utilizando es el siguiente:

Tecnicamente es el que ronda por la red, a excepción de unos pequeñisimos cambios, la idea consiste en medir la frecuencia con el timer0 usando el timer3 y el comparador.
el circuito funciona pero no me da el valor correcto y no se que estoy haciendo mal.
la formula que utilizo es:
Lx= (((1/(2*pi*f))^2)*(1/L))-C
donde C=0.000000001=1nF y L es 0.0001=100uH
el desborde del timer3 es cada 40mS para la toma del muestreo de la frecuencia y la multipico por 25 para que sea 1seg
el codigo en PBP es este:
* la rutina de calibracion no esta habilitada.
bueno el problema es que si mide "Algo" pero no es el valor correcto, creo que estoy mal en las formulas o algo asi por lo que me gustaria que me dieran una ayudada en lo que podria estar mal.
cualquier pregunta que tengan respecto al proyecto no duden en hacerla .
anexo archivos del proyecto.
Estoy construyendo un inductometro por USB, el esquema que estoy utilizando es el siguiente:

Tecnicamente es el que ronda por la red, a excepción de unos pequeñisimos cambios, la idea consiste en medir la frecuencia con el timer0 usando el timer3 y el comparador.
el circuito funciona pero no me da el valor correcto y no se que estoy haciendo mal.
la formula que utilizo es:
Lx= (((1/(2*pi*f))^2)*(1/L))-C
donde C=0.000000001=1nF y L es 0.0001=100uH
el desborde del timer3 es cada 40mS para la toma del muestreo de la frecuencia y la multipico por 25 para que sea 1seg
el codigo en PBP es este:
Código:
@ __config _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
@ __config _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
@ __config _CONFIG2L, _PWRT_OFF_2L & _BOR_OFF_2L & _BORV_3_2L & _VREGEN_ON_2L
@ __config _CONFIG2H, _WDT_OFF_2H & _WDTPS_1_2H
@ __config _CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_OFF_3H
@ __config _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _ICPRT_OFF_4L &_XINST_OFF_4L & _DEBUG_OFF_4L
@ __config _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
@ __config _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@ __config _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
@ __config _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H & _WRTD_OFF_6H
@ __config _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
@ __config _CONFIG7H, _EBTRB_OFF_7H
DEFINE OSC 20
data $3C,$B0
USBBuffer Var Byte[2]
USBBufferCount Var Byte
Freq var word
TS Var Word
Led1 Var PortA.1
Led2 Var PortA.2
Cal Var PortA.5
ADCON1=%00001111
CMCON=%00000001
T0CON=%00101000
T3CON=%10110000
INTCON2.7=1
TrisA=%00001001
TrisB=%11111111
TrisC=%11111111
read 0,TS.highbyte
read 1,ts.lowbyte
gosub cali_freq
usbinit
Main:
gosub DoUSBIn
if usbbuffer[0]=1 then
low Led1:toggle Led2
gosub Calc_Freq
usbbuffer[0]=Freq.lowbyte
usbbuffer[1]=Freq.highbyte
gosub DoUSBOut
endif
USBService
goto Main
Cali_Freq:
High Led1:Low Led2
low cal
High cal
Gosub calc_freq
' while (freq<2000 or freq>2100)
' if freq<2000 then ts=ts+1
' if freq>2100 then Ts=Ts-1
' Gosub calc_freq
' wend
write 0,ts.highbyte:pause 10
write 1,ts.lowbyte :pause 10
low cal
pause 1000
Low Led1:low Led2
Return
Calc_Freq:
IntCON.7=0
IntCON.6=0
T0CON.7=1
T3CON.0=1
PIR2.1=0
TMR0H=0
TMR0L=0
TMR3H=TS.HighByte
TMR3L=TS.LowByte
while PIR2.1=0:wend
Freq.lowbyte=TMR0L
Freq.highbyte=TMR0H
T0CON.7=0
T3CON.0=0
INTCON.7=1
INTCON.6=1
return
DoUSBIn:
USBBufferCount = 1
USBService
USBIn 1, USBBuffer, USBBufferCount, DoUSBIn
return
DoUSBOut:
USBBufferCount = 2
USBService
USBOut 1, USBBuffer, USBBufferCount, DoUSBOut
return
bueno el problema es que si mide "Algo" pero no es el valor correcto, creo que estoy mal en las formulas o algo asi por lo que me gustaria que me dieran una ayudada en lo que podria estar mal.
cualquier pregunta que tengan respecto al proyecto no duden en hacerla .
anexo archivos del proyecto.
Adjuntos
Última edición: