# Medidor de inductancias



## gfmo2002 (Mar 17, 2008)

He visto ya varios temas respecto a como construir un medidor de inductancias, pero tengo algunas dudas. 

Construí un oscilador colpitts con un fet y me funciona bastante bien, ahora quisiera hacer un detector de cruce por cero o  un tacometro o convertir esa frecuencia a un voltaje y meter esa información al PIC para que con la programación debida pueda desplegar en displays o en una LCD el valor de la inductancia. 

El problema es que realmente no sé como teniendo la señal senoidal del oscilador la pueda meter al PIC; de primero había pensado en el detector de cruce por cero, pero he probado uno con un amp op y no me funcionó; después pensé usar un convertidor de frecuencia a voltaje LM2907 o ECG 995 pero realmente no encuentro algún diagrama ya que nunca he utilizado este(chip).

Me gustaría saber si la idea que tengo podría funcionar y de ser así cuál sería la mejor forma de hacerlo y si alguien tuviera algún diagrama que me pudiera ayudar estaría muy agradecido...


----------



## Eduardo (Mar 17, 2008)

Y a que frecuencia estas trabajando?


----------



## SigmaOrion (Mar 17, 2008)

gfmo2002,

Para darte una mano sería bueno que amplíes el panorama con más datos, como ser:

1) Frecuencia de tu oscilador (preg. de Eduardo).
2) Valor mínimo de inductancia que querés medir.
3) Exactitud de la medición y/o modelo a utilizar.

Estos factores van a cambiar muchísimo el diseño del circuito, por ejemplo, si sólo querés medir inductancia de 1uH o mayores con un oscilador de 5MHz, un PIC y un par de componentes más creo que no hay ningún inconveniente. Si lo que necesitás es medir inductancias del orden de los nH o querés caracterizar capacidades parásitas y demás cosas ya habría que pensar en algo mucho más complejo.
El primer caso es fácilmente realizable y hasta te diría muy sencillo.

Slds...

Mariano Boragno


----------



## gfmo2002 (Mar 17, 2008)

El rango de inductancias varía entre 1uH y 10m aproximadamente, con una tolerancia de 10%, aunque dicha exactitud puede variar un poco...

Las frecuencias según los cálculos y las pruebas que he hecho varían entre 31KHz y 1.5MHz aproximadamente, la señal de salida del oscilador es una senoidal bastante bien definida y dependiendo de la inductancia y el voltaje de alimentación del oscilador que use, el voltaje de salida varía entre mV  hasta 8Vpkk aproximadamente...

Como dijo SigmaOrion, solo necesito medir inductancias en el rango descrito anteriormente, pero lo que tengo duda es que debo hacer entre la salida del oscilador y la entrada del PIC... Las capacidades parasitas y demas no me interesan por el momento... 

Gracias por la ayuda...


----------



## Eduardo (Mar 17, 2008)

Con intercalar entre la salida del oscilador y el PIC un Schmitt trigger es suficiente. 
Entras al PIC por el contador y medis frecuencia,  lo que querias hacer de convertir frecuencia en tension para usar el AD es agregar error inutilmente.

Respecto al error, tene en cuenta que cuando se trata de bobinas que van a trabajar en circuitos sintonizados, la medicion tiene que hacerse en frecuencias cercanas a la de operacion, porque entre las capacidades parasitas y el comportamiento del nucleo, el error en la nductancia medida puede ser bastante mayor del 10%.


----------



## gfmo2002 (Mar 17, 2008)

Gracias por la respuesta Eduardo...

Ahora con respecto de lo del contador del PIC no muy entendí, realmente no soy experto en la utilización del PIC aunque lo he usado un par de veces y sé una que otra cosa, pero usar el contador no es una de ellas, no sería mucha molestia que me ampliaras la información sobre esto...  

Gracias...


----------



## Eduardo (Mar 17, 2008)

Contas pulsos durante un intervalo de tiempo fijo,  ese valor sera proporcional a la frecuencia.


----------



## gfmo2002 (Mar 17, 2008)

Según estaba leyendo eso lo puedo hacer con el Timer0. Yo uso para programar el PIC Simulator IDE y hay un ejemplo en el programa que creo que me podría ayudar, además he buscado en el foro y hay varios temas sobre fecuencímetros o tacometros con PICs y creo que eso me podría ayudar también...


----------



## SigmaOrion (Mar 17, 2008)

Eduardo, la frecuencia del oscilador ya está definida por lo que dice gfmo2002, no entiendo bien para qué medir la frecuencia con el PIC. Quizás pensaste en incluir la inductancia a medir en el colpitts y medir la frecuencia de oscilación para calcular la inductancia?

gfmo2002, sinceramente se me ocurre una manera de medir la inductancia utilizando sólo el PIC, sin necesidad de un oscilador externo, lo que sería deseable porque el PIC te va a dar una frecuencia mucho más estable si está enclavado con un cristal. Acá va la idea, si te interesa puedo darte más detalles:
Podés generar muy fácilmente una onda cuadrada con el PIC de una frecuencia ajustable, la amplitud será siempre 5Vpp. Esta onda se la inyectas diréctamente al inductor a medir con una resistencia de valor conocido en serie (se calcula según frecuencia de operación y valor estimado de inductancia o se va probando para dar mayor exactitud a la medida). La tensión que aparece en la resistencia se mide con la ayuda de un diodo y un capacitor (voltímetro de pico) y se inyecta a una entrada A/D del PIC para medir el valor pico de esta tensión. Este valor va a estar comprendido entre 2.5v y 5v y va a depender de la resistencia agregada, la frecuencia y el valor de la inductancia. Con un cálculo muy sencillo sale el valor de la inductancia medida.

Las ventajas de este circuito son:
1) Se necesita sólo un PIC12Fxxx y muy pocos componente muy baratos adicionales.
2) El oscilador es el mismo PIC, por lo que si se lo hace trabajar con un cristal va a ser muy estable y de frecuencia bien definida.
3) Se pueden medir capacitores también.
4) La tolerancia de la medición va a ser mejor que el 10% si se tiene un poquito de cuidado al hacer la medición.

Si te entusiasma lo seguimos. Slds...

Mariano Boragno


----------



## gfmo2002 (Mar 17, 2008)

SigmaOrion

Pues la idea que yo había pensado era variar la inductancia del oscilador colpitts y detectar las diferentes frecuencias para que por medio de la programación del PIC pudiera mostrar ya sea en una LCD o en unos displays el valor de la inductancia... Esta idea es debido a que el curso que estoy llevando en la Universidad trata sobre osciladores, VCOs, PLLs, etc... Y por eso es la idea del proyecto SIN EMBARGO tu idea me parece muy buena y se me hicieras el favor de ayudarme estaría muy agradecido... Respecto a lo del PIC , yo uso un 16F877A pero con eso creo que no habría problema...

Espero tu respuesta, gracias...

Gabriel Montenegro...


----------



## Eduardo (Mar 17, 2008)

SigmaOrion dijo:
			
		

> Eduardo, la frecuencia del oscilador ya está definida por lo que dice gfmo2002, no entiendo bien para qué medir la frecuencia con el PIC. Quizás pensaste en incluir la inductancia a medir en el colpitts y medir la frecuencia de oscilación para calcular la inductancia?


Bueno, eso es lo que interpreto, el hablo de que queria convertir la frecuencia del Colpitts en tension y de ahi sacar la inductancia.


----------



## gfmo2002 (Mar 18, 2008)

_Eduardo_ dijo:
			
		

> Bueno, eso es lo que interpreto, el hablo de que queria convertir la frecuencia del Colpitts en tension y de ahi sacar la inductancia.



Realmente me interesarían las dos opciones aunque como mencioné, la forma de hacerlo con el temporizador y el contador del PIC junto con el oscilador colpitts sintonizado con la bobina que quiero medir me parece la forma mas adecuada para mi proyecto debido al contenido de la clase, así que si me pudieras ayudar un poco en eso del temporizador y contador del PIC estaría agradecido, ya que he leído un poco y estoy tratando de hacer el programa pero todavía no mucho, sobre todo al programar en el BASIC COMPILER del PIC SIMULATOR IDE...

He visto algunos comandos como por ejemplo:
INTCON.T0IE = 1 ----para activar las interrupciones de TIMER0
INTCON.GIE = True ----para activar todas las interrucpiones no enmascarables
OPTION_REG.T0CS = False  -------para activar la fuente del reloj del Time0 a la instrucción interna del ciclo del reloj

Con lo anterior que está en un programa de ejemplo, puedo hacer "alguna cosa o secuencia" cada vez que haya un flanco positivo por el TOCK1.

Lo que no tengo muy claro es lo del temporizador, para contar esos flancos positivos que entren en el TOCK1 en un tiempo determinado y relacionarlo para que por medio del programa del PIC muestre el valor de la inductancia...

Otra duda es acerca del Schmitt Trigger, ya que nunca he usado uno, pero por lo que leí supongo que cuando el valor de la entrada es mayor que un valor V+ el valor de la salida es un valor determinado (alto por ejemplo) y cuando el valor de entrada es menor que un V- el valor de la salida es otro valor determinado (bajo por ejemplo), entonces supongo que esa variacíon senoidal en la entrada del Schmitt Trigger haría que en la salida haya una entrada "digital" o una señal cuadrada que ingresa al PIC y esos flancos son los que el PIC mediante el contador almacena para el uso que le quiera dar...

Gracias por su ayuda...


----------



## SigmaOrion (Mar 18, 2008)

Eduardo, disculpame, no lo había entendido. En ese caso la mejor forma de hacerlo, claro, es como decís vos.
Respecto a la otra manera, yo estoy trabajando justamente en un medidor vectorial de impedancias, muy sencillito y lo más barato posibile (no se puede hacer milagro con eso tampoco, jaja) pero lo más automatizado posible y basado en un PIC. Cuando tenga algo concreto lo voy a postear en el foro.

Saludos...

Mariano Boragno


----------



## gfmo2002 (Mar 18, 2008)

Estaba probando el circuito del Schmitt Trigger pero tengo algunas dudas, armè un circuito Schmitt Trigger bàsico como el que sale en wikipedia y demàs pero segùn lo que entendì la salida del Schmitt Trigger deberìan ser pulsos, o una señal cuadrada, cuando pruebo mi circuito la señal no es tan cuadrada pero se asemeja (lo suficiente para lo que yo creo que la voy a usar), ahora esta señal tiene un voltaje pico a pico, y no sè si esa señal se pueda meter al PIC, o si le tengo que sumar una componente DC antes para que varìe entre un voltaje y 0v...

Ademàs con lo del temporizador del PIC todavìa no he podido hacer que funcione, solo el contador que c/vez que haya un flanco positivo (o negativo) vaya aumentando una variable (con el Timer0)....


----------



## SigmaOrion (Mar 19, 2008)

Gabriel,

A lo que se refiere Eduardo, si no me equivoco, es a intercalar una compuerta lógica con entrada schmitt triger. Mirá la oja de datos del 74LS14, la serie LS es la más vieja, tenés series más veloces y de menor consumo, pero para tu aplicación no va a hacer gran diferencia.
La hoja de datos está acá: http://www.datasheetcatalog.com/datasheets_pdf/7/4/L/S/74LS14.shtml

Esto se usa para evitar que el PIC cuente ciclos de más por presencia de ruido. Mirá bien la hoja de datos del PIC que usas porque casi todos traen al menos una entrada schmitt trigger, pero ojo con los niveles porque en el PIC no podés superar VCC+0.5 ni ir por abajo de 0V. Con la compuerta esa te asegurás de no quemar ninguna entrada del PIC, cuanto mucho se quema la compuerta que es mucho más barata.
Intentá acomodar el oscilador para que siempre oscile dentro de los límites de alimentación (0v-VCC).

Por otro lado, siempre he programado los PICs en assembler así que con los otros lenguajes no te puedo ayudar pero se puede hacer que uno de los timers internos cuente con un flanco de una pata y con el otro timer podés generar una interrupción en el overflow (cuando pasa de 255 a 0). En la rutina de servicio de la interrupción podés leer el otro timer y sabés cuántos ciclos hubo en ese tiempo, con eso tenés la frecuencia del oscilador.

Si no fui claro (muy probable, perdón, jeje) avisame y lo vemos con más detalle.

Slds...

Mariano Boragno


----------



## gfmo2002 (Mar 19, 2008)

Mariano

Lo que había pensado de primero era variar la amplitud del oscilador para que tuviera una amplitud de 2Vpkpk.

Posteriormente mediante un sumador (con amp op) subir el nivel de la señal del oscilador para que variara entre 0 y 4 V, sumandole a la señal de entrada una componente DC.

La salida de ese sumador meterla a la compuerta Schmitt Trigger y de ahì al PIC.

Podrìa funcionar lo que pensaba hacer?

Y respecto a lo del programa con los timers pues agradecerìa la ayuda, no importanto si fuera con un ejemplo en assembler, porque aunque estoy acostumbrado a programar en BASIC tengo algùn conocimiento bàsico en assembler... Realmente mi problema principal es como configurar los timers al inicio del programa, ya que el programa que habìa pensado era que como alguien me habìa dicho contar los flancos con un timer y generar una interrupcion en un cierto tiempo con el otro timer (temporizador) y leer el valor de la variable del contador, etc...


----------



## SigmaOrion (Mar 19, 2008)

Gabriel,

Respecto del schmitt triger y el Vpp del oscilador, yo no te recomendarías que pases la señal del oscilador por un operacional porque te puede producir atenuación en altas frecuencias. Por ahí te conviene fijar 2.5V con dos resistencias entre +5V y 0V y acoplarle la señal del oscilador directamente con un capacitor de 4.7 ó 10uF en paralelo con un tantalio de 100nF. Con 2Vpp del oscilador como decís arriba estaría perfecto.

Lo del PIC:

Es bastante largo pero ahí va. Bajate el datasheet para seguir lo que voy diciendo de acá http://www.datasheetcatalog.com/datasheets_pdf/1/6/F/8/16F877.shtml

Lo que yo haría (por ahí si leés con detalle encontrás una mejor forma) son los siguientes pasos:
1) Cargar el regitro T1CON con el valor 0x80 (hexa). Esto habilita el TMR1, lo configura como contador y sin división de frecuencia (prescaler en 0).
2) Cargar el registro OPTION_REG con 0x70 para setear el prescaler en 256 (toma una cuenta cada 256 ciclos de instrucción, o sea, 1024 ciclos de reloj). Con esto, y suponiendo un reloj de 20MHz el timer genera un overflow cada 13.1072ms (es tu base de tiempo).
3) Poner en 0 el TMR0.
4) Cargar 0x60 en el registro INTCON. Esto habilita la interrupción de overflow del TMR0 y borra los flags.
5) Poner en 0 el TMR1.
6) Esperar en un lazo a que se genere la interrupción del TMR0.

Cuando se produce el overflow del TMR0 el puntero de instrucción salta a la posición 0x04 de la memoria de programa y ahí se pone un salto a la rutina que se quiere llamar con la interrupción. Esto no sé cómo se hace en basic o en C.
En la rutina de interrupción leés el valor de TMR1 y la frecuencia del oscilador será TMR1/65536*(freq cristal/4). El valor (freq cistral/4) te va a dar la frecuencia del ciclo de instrucción, dividido por 65536 porque el TMR0 contó desde 0 a 256 con un prescaler de 256 (256*256=65536) y TMR1 es el valor leido del timer 1. Esto te da una resolución de aprox. 76Hz con un cristal de 20MHz, midiendo como mínimo 0Hz y como máximo 5MHz.
Podés aprovechar esa misma rutina para mostrar el valor calculado en el display. Acordate antes de salir de la rutina de interrupción (seguramente con la instrucción reti o return) que tenés que volver a setear TMR0 y TMR1 en cero y volver a setear INTCON en 0x60 para que se repita el lazo.

Bueno, creo que eso es todo, lo que esto hace es nada más y nada menos que un frecuencímetro. Si tenés alguna duda preguntame nomás y vemos cómo lo resolvemos.

Espero que te sirva. Slds...

Mariano Boragno


----------



## gfmo2002 (Mar 22, 2008)

Mariano,

Respecto a lo del oscilador ya lo tengo listo, y a la salida del 7414 (Schmitt Trigger) tengo una señal cuadrada (rectangular) con la frecuencia dependiendo del circuito tanque del oscilador, y una amplitud que va desde 0 a 5 v...

Ahora con lo del PIC, tengo la hoja de especificaciones del 16F877A el cual uso y por ejemplo para activar el TMR1, supongo que en el registro T1CON la configuración debería de ser:

bit 0 TMR1ON: Timer1 On bit
	1 = Enables Timer1
bit 1 TMR1CS: Timer1 Clock Source Select bit
	0 = Internal clock (FOSC/4)
bit 2 T1SYNC: Timer1 External Clock Input Synchronization Control bit
	When TMR1CS = 0:
	This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.
bit 3 T1OSCEN: Timer1 Oscillator Enable Control bit
	0 = Oscillator is shut-off (the oscillator inverter is turned off to eliminate power drain)
bit 5-4 T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
	00 = 1:1 prescale value
bit 7-6 Unimplemented: Read as ‘0’

0000 0001 = 0x01 para activarlo, seleccionar el reloj interno y sin prescale...
--------------------------------------------------
Con respecto al OPTION_REG para el TMR0

bit 7 RBPU (negado)
bit 6 INTEDG
bit 5 T0CS: TMR0 Clock Source Select bit
	1 = Transition on T0CKI pin
bit 4 T0SE: TMR0 Source Edge Select bit
	1 = Increment on high-to-low transition on T0CKI pin
	0 = Increment on low-to-high transition on T0CKI pin
bit 3 PSA: Prescaler Assignment bit
	0 = Prescaler is assigned to the Timer0 module
bit 2-0 PS2S0: Prescaler Rate Select bits
	111 TMR0 rate 1:256

0111 0111 = 0x77 para activarlo como contador con un prescaler de 256 y que se incremente en cada transición negativa del pulso TOCK1
--------------------------------------------------
Con respecto al INTCON

bit 7	GIE		0
bit 6	PEIE		1	
bit 5	TMR0IE		1
bit 4	INTE		0
bit 3	RBIE		0
bit 2 	TMR0IF		0
bit 1	INTF		0
bit 0	RBIF		0

0110 0000 = 0x60 para activar la interrupción de TMR0 y borrar las banderas
--------------------------------------------------
Según lo que entiendo al tenerlo configurado de esta forma, el TMR0 contará de 0 a 255 y producirá una interrupción cuando ocurra el overflow, entonces leo el valor de TMR1L y/o TMR1H y según las formulas que escribiste anteriormente podría obtener la frecuencia deseada y ya con eso mostrar el valor de la inductancia.

Este es un diagrama de mi programa:

Dim a As Byte	'declaro las variables
Dim b As Byte
Dim x As Byte
TRISA = 0xff
TRISB = 0x00  'set all PORTB pins as outputs
OPTION_REG = 0x77	'configura TMR0
T1CON = 0x01		'configura TMR1 
TMR0 = 0x00		'borra el registro TMRO
INTCON = 0x20		'configura el registro INTCON 
TMR1H = 0x00		'borra los 8 MSB del registro TMR1
TMR1L = 0x00		'borra los 8 LSB del registro TMR1
funcion:		'Creo el ciclo (lazo)
x = TMR0		'leo el valor de TMR0
PORTB = x		'lo muestro en el puerto B
Goto funcion		'que se repita el ciclo (lazo) indefinidamente
End      
-------
On Interrupt  		'interrupt routine
a = TMR1H		'leo el valor de TMR1
b = TMR1L
AQUI IRIA EL DEMAS PRODECIMIENTO (MOSTRAR EN LOS DISPLAYS Y DEMAS)
TMR1H = 0x00		
TRM1L = 0x00
INTCON = 0x60		'configura el registro INTCON a los valores iniciales (deseados)
Resume      		'regresa al programa principal


Supongo que con este programa podría contar el número de pulsos que aparecen en RA4 o T0CKI y cuando estos produzcan un overflow en el TMR0 en la rutina de interrupción podría ver el tiempo que se llevó en el TMR1 y así calcular la frecuencia de ese tren de pulsos mediante las formulas escritas anteriormente...

Gracias por la ayuda, espero tu respuesta...


----------



## SigmaOrion (Mar 22, 2008)

Gabriel,

Te pido mil disculpas por la equivocación arriba, te pasé los valores de los registros mal y quizás por eso interpretaste mal cuál registro era para qué.
Lo que yo quise hacer es usar TMR1 para contar flancos del oscilador colpitts y usar TMR0 como la base de tiempo, de esta manera, al ser TMR1 de 16bits, lográs mayor precisión en la medición de la frecuencia. Veamoslo con las fórmulas que puse arriba:
1) Supongo cristal del PIC a 20MHz.
2) TMR0 tiene un prescaler x 256, así que va a tardar en dar la vuelta 256x256=65536 ciclos de instrucción (acordate que la base de tiempo interna del PIC es la frecuencia de reloj/4). Con esto tenemos que se genera un overflow cada 65536x4/20MHz=13.1072ms
3) TMR1 cuenta ciclos del colpitts que queremos medir.
5) Cuando el overflow suceda tenemos TMR1 ciclos del colpitts en 13.1072ms, lo que significa que nuestro colpitts oscilaba a TMR1/(13.1072ms) Hz.
6) El TMR1 tendrá un valor entre 0 y 65535 lo que nos da un mínimo de 0Hz y un máximo de 5MHz con un paso de 76.29364531Hz. Esa es la precisión de nuestra frecuencia, bastante bien, no?

Ahora supongamos que usamos los timers al revés. De esa forma el TMR1 generará un overflow cada determinado tiempo, supongamos que no usamos prescaler como pusiste arriba. Así tendremos un overflow de TMR1 cada 13.1072ms también pero nuestro TMR0 sin prescaler habrá contado como máximo 255 ciclos teniendo un mínimo de 0Hz y un máximo de 19.455kHz con la resolución de 76.294Hz. Si seteamos un prescaler de 256 en TMR0 para aumentar el rango de frecuencias podemos contar de 0Hz a 5MHz pero nuestro paso es de 19.455kHz!

Entonces qué valores seteamos en los registros? Si no me vuelvo a equivocar sería:
T1CON=0x07 : Habilita TMR1, lo setea como contador externo (pin RC0) y no lo sincroniza con el reloj.
OPT_REG=0x07 : Habilita TMR0, le asigna prescaler de 256 y lo usa como contador interno.
INTCON=0xA0 : Habilita sólo la interrupción TMR0 overflow (PEIE no lo habilito porque es para otras cosas).

Respecto del programa, está perfecto, yo creo que andaría muy bien. Lo único que no entendí es para qué copiás el TMR0 al PORTB todo el tiempo en el lazo, pero no tiene incidencia en el funcionamiento del programa así que no está mal.

Dale nomás que ya lo tenés! Cualquier duda avisame y si me equivoqué en algo (espero que no, ya lo revisé dos veces) te pido disculpas por adelantado.

Slds...

Mariano Boragno


----------



## gfmo2002 (Mar 26, 2008)

Mariano

Realmente te agradezco toda la ayuda que me has dado, y pues con la última configuración que me diste de los registros pude hacer que funcionara el programa y que me generara la interrupción y asi poder ver la frecuencia. Ahora tengo un problema debido a que tengo dos registros de 8 bits, TMR1H y TMR1L, y no sé como unir esos dos registros en un registro de 16 bits o en una palabra para poder despúes dividirla dentro el tiempo del TMR0. Yo recuerdo que en assembler existe una opción para esto por ejemplo con el registro AL y AH (solo por mencionar algo parecido), pero realmente no estoy muy seguro de como hacerlo...

Voy a probar ya el circuito físico y les cuento que tal...


----------



## SigmaOrion (Mar 26, 2008)

Gabriel,

Me alegra mucho que hayas podido hacer andar el programa. A lo que vos te referís con AL y AH supongo que será al 80x86 de intel (el de la PC) que combina estos registros en el AX. Esto en el PIC16F no existe porque es un microprocesador de 8 bits y sólo maneja estos registros. De todas maneras no es muy complicado (yo he calculado raices cuadradas, eso sí que es feo).
La cuenta que hay que hacer es f=TMR1*76.294 (con cinco cifras significativas para no agregar error al resultado), y lo que el multiplicador es fijo, el algoritmo es sencillo, no son más que rotaciones de registros y sumas.

Igualmente si lo vas a hacer en basci creo que no necesitás todo esto, podés hacer la cuenta directamente definiendo la variable F como de 24 bits y hacer:

F = TMR1H*256+TMR1L
F = F*76.29394531

Y asunto solucionado, el basic se ocupa de todo, en F tenés la frecuencia.

Yo nunca programé un micro en basic, así que si esto no es posible y hay que hacerlo de una forma parecida al assembler lo vemos. *** La cosa sería hacer la cuenta por partes tomando en cuenta que 76.294 =aprox= 64+8+4+1/4+1/32+1/128+1/256+1/1024, dejando un error de solo 2Hz en el peor de los casos. Estas cuentas son sencillas porque son todas potencias de 2 lo cual el micro siempre maneja bien. ***

Slds...

Mariano


----------



## gfmo2002 (Mar 27, 2008)

Mariano

Creo que me expliqué mal la última vez, pero ya logré lo que preguntaba, bueno mas o menos...

Lo que pasa es que no sabía como guardar TMR1H como los 8 bits mas significativos y TMR1L como los 8 bits menos significativos de una variable que declaré como "palabra" (16 bits), y lo del registro AH y AL solo era una forma de tener una referencia, debido a que cuando usé el micro había hecho algo similar, al final era sencillo:

dim y as word   'declaro y como palabra (16 bits)
y.HB = TMR1H   'el High Bank de y va a ser igual a TMR1H
y.LB = TMR1L    'el Low Bank de y va a ser igual a TMR1L
------------------
Ya simplifiqué mi formula para mostrar el valor de la inductancia directamente del TMR1 y queda así: L = 4.99049507 *10³ / (TMR1)² y la de la frecuencia con la formula que pusiste arriba.

Pero como me mencionaste anteriormente para la frecuencia tengo que declarar una variable de 24 bits (de tipo long en basic), pero el problema que tengo es que cuando trato de compilar el programa en basic me aparece el siguiente error: "Support for 32-bit variables not enabled" y no he podido encontrar la opción para habilitar el uso de las variables de 32 bits, no sé si me podrás ayudar en esto...

Gracias

Gabriel


----------



## SigmaOrion (Mar 27, 2008)

Gabriel,

Buenísimo que hayas solucionado, perdón por la mala interpretación.
Respecto de las variables de 32 bits la verdad no te puedo ayudar porque nunca usé Basic para programar microprocesadores, siempre lo hice en assembler.
Sin embargo me gustaría que me digas qué Basic usás por dos motivos:
1) Para buscar información a ver si te puedo dar una mano.
2) Sería bueno que me empiece a meter en el tema porque a veces programar en assembler lleva mucho tiempo y es ineficiente.

Slds...

Mariano


----------



## gfmo2002 (Mar 29, 2008)

Mariano

Primeramente la versión de Basic que uso: Basic Compiler del programa PIC SIMULATOR IDE versión 6.34. Lo de programar en assembler es cierto que es más tardado pero por un parte se ve más interesante ya que uno controla casi todo, y por lo tanto supongo que se llega a tener más dominio y a aprender más acerca de los registros y demás...

Igual lo que se me ocurrió (solución temporal con fines de prueba) para no usar palabras de 32 bits era dividir la frecuencia por 10³ por ejemplo, y colocar como que fuera la escala de megas por ejemplo, no se si me explico, pero cuando el resultado de la variable fuera 3000, en realidad debido a la división sería 3000000, aunque se perdería exactitud en la medición; además al medir inductancias que me dieran valores menores que 1000 de frecuencia entonces el resultado sería 0.algo (aunque no creo que utilice ese tipo de inductores por el momento) similar pasaría con el cálculo de las inductancias solo que en vez de dividir, multiplicaría... Una pregunta y según lo que he probado (simulado) es que depende los comandos que use para calcular los valores de las formulas, el valor de la variable que contiene el resultado me va aproximando al entero más próximo sino estoy mal...

También estaba leyendo acerca del uso de una LCD para mostrar el resultado, espero hacer funcionarla también para que tenga más presentación el proyecto...

Gracias...

Gabriel


----------



## troniks89 (Dic 1, 2009)

Que tal gfmo2002. Soy de Mexico(san luis) estoy en finales de proyectos. Y me pidieron un Medidor de inductancias. He encontrado infinidad de proyectos pero con diferentes pics y con diferentes lenguajes de programacion. Se trabajar con 
basic y el pic16f877a. Ya tengo el oscilador colpits http://www.unicrom.com/Tut_osciladores_LC.asp estoy
 utilizando el de OA. Ojala me puedas ayudar con el codigo completo y el circuito de tu oscilador que utilizaste, saludos.


----------



## Willy Larenas (Ene 1, 2012)

Estimado amigo:
Me podrías dar el circuito colppits que usaste ó para 20 Mhz?
Gracias


----------



## DOSMETROS (Feb 1, 2018)

La medición de inductancias es importante para hacer sus propios inductores especialmente cuando usted mismo enrolla la bobina (bricolaje). Un circuito adaptador de medición de inductancias será útil, ya que puede medir la inductancia utilizando el voltímetro digital del tester (DVM). Éste circuito cuesta mucho menoso en comparación con un Inductómetro comprado. Aquí está el diagrama esquemático del circuito:



El circuito es muy simple, contiene solo un regulador de voltaje y unas compuertas NAND 74HC132. Éste adaptador medidor de inductancia proporciona dos rangos de medición, rango bajo para medir valores de inductor de 3uH a 500uH, y rango alto para 100uH a 5mH. Calibrar este medidor de inductancia es fácil. Primero necesita calibrar el offset cero. 

Conecte su tester (DVM) a la salida de éste circuito y seleccione un rango de 200 mV, ajuste la calibración del cero para obtener lectura de cero Volts en su tester (DVM). Para calibrar el rango bajo, elija un inductor conocido alrededor de 400uH. Seleccione el rango de 2V para su tester (DVM). Mida el inductor y calibre la banda baja para obtener 1 mV por UH. Por ejemplo, si usa 450uH, debe ajustar el potenciómetro de calibración baja para obtener una lectura de 450mV en su tester (DVM). Para calibrar el rango alto, cambie el rango del circuito adaptador a alto, y úselo para medir un inductor conocido con valores alrededor de 5 mH. Calibre la rango alto para dar una lectura de 100 mV por 1 mH. [Fuente: Marc Spiwak]

*Enjoy *


----------



## pandacba (Feb 1, 2018)

Sacado de Popula Electronics? o de Radio Electronis?


----------



## DOSMETROS (Feb 1, 2018)

De la web , ahí dice la fuente original : [Fuente: Marc Spiwak]


----------



## hell_fish (Feb 2, 2018)

Buenas tardes. Los condensadores estan en microfaradios? Es decir 0.1uF 0.01uF y 0.001uF? Gracias por el aporte!


----------



## Daniel Lopes (Feb 2, 2018)

hell_fish dijo:


> Buenas tardes. Los condensadores estan en microfaradios? Es decir 0.1uF 0.01uF y 0.001uF? Gracias por el aporte!


!SI!.
Att,
Daniel Lopes.


----------



## Manuel1987 (Nov 6, 2019)

Éste circuito con la nand si es funcional?


----------



## jack35 (Nov 7, 2019)

Manuel1987 dijo:


> Éste circuito con la nand si es funcional?


Yo lo he probado hace un tiempo y es funcional, armalo, y veras que funciona muy bien y es bastante lineal su respuesta.
Lo bueno es que no hay nada que programar y mides directamente con tu voltímetro.
Y tambien se puede hacer para medir condensadores de valores pequeños(de 1pf a 2.2uF en 2 gamas de selección) que los multimetros normalmente no pueden leer (abajo de los 20-30nF)


----------

