Está en la página 1de 11

LTC6904: Oscilador de 1Khz. a 68Mhz.

(I2C)
ELECTRNICA
etiquetas: tutoriales
http://www.neoteo.com/ltc6904-oscilador-de-1khz-a-68mhz-i2c/

La muralla tcnica de todo diseador electrnico que intenta desarrollar un oscilador est compuesta
por dos paredes que a veces resultan infranqueables: los lmites de frecuencias mxima y mnima
de oscilacin y la amplitud constante en todo el rango de frecuencia de trabajo. Los circuitos
convencionales RC o LC se encuentran siempre limitados a una pequea (y estrecha) porcin del
espectro para entregar una oscilacin a un nivel de tensin de salida constante. Linear
Technologycomercializa un chip capaz de entregarnos una oscilacin variable entre 1Khz y
68Mhz. por pasos ajustables mediante bus I2C. Es decir, con un microcontrolador, un sencillo juego
de instrucciones y unLTC6904 puedes lograr un oscilador muy til para tu banco de
experimentacin. Es muy sencillo, comprubalo t mismo.
Disponible en un encapsulado MS8, el LTC6904 de Linear Technology es una solucin muy
interesante cuando buscamos un oscilador que pueda abarcar un amplio rango de frecuencias tiles
para desarrollos de mltiples posibilidades. Con slo leer las caractersticas de frecuencias posibles
de funcionamiento nos damos cuenta de que estamos ante un gigante. El segmento inicial desde
1Khz hasta los 20-22Khz. puede ser muy til para trabajar en BF, ya sea en la reparacin como en la
asistencia al diseo de circuitos de audio. Un poco ms all y hasta los 300Khz, puedes
experimentar con ultrasonidos y las conocidas ondas largas de radio. Ms arriba y en la mejor parte
del campo experimental, puedes atravesar todo el espectro de las ondas medias, donde transmiten
las emisoras de AM, y de las ondas cortas, capaces de alcanzar una cobertura mundial con su seal.
Cuando cruzamos la barrera de los 30Mhz y nos introducimos en VHF, la situacin deja de ser
interesante para transformarse en imperdible y digna de experimentar.

El LTC6904 es un oscilador integrado en un solo chip que logra alcanzar una frecuencia de trabajo
de hasta 68Mhz sin ningn componente externo ms que un clsico capacitor de 100nF acoplado
a la alimentacin del circuito integrado. Todas las bondades de funcionamiento que puede ofrecer el
LTC6904 seran muy largas de enumerar en este artculo y nuestro propsito no es reproducir lo que
expresa la hoja de datos del producto sino compartir contigo nuestra experiencia en su
implementacin. Para esto (como no poda ser de otra manera) utilizamos nuestra placa de
pruebas con el 18F2550, montada en el artculo anterior, que haremos debutar con esta aplicacin
de lujo. De todos modos, t puedes realizar las prcticas con cualquier otro entrenador o
microcontrolador ya que las bases sustanciales, el concepto de diseo y la sencillez de operacin
que ofrece el LTC6904 permiten lograr un funcionamiento excepcional hasta con un elemental
16F84A. Lo mismo vale para el circuito impreso donde se coloca el oscilador. Disea tus propias
placas, experimenta una y otra vez hasta encontrar el mejor funcionamiento y el rendimiento
ptimo. De eso se trata, de que t lo hagas mejor.

Gracias a que vamos a trabajar con un pequeo circuito integrado que consume menos de 5mA @
5Volts, utilizaremos la misma alimentacin que nuestro entrenador y esto ser a travs del conector
USB. El montaje ideado para poder acoplar en forma mecnica esta maravillosa miniatura a nuestro
entrenador es algo muy sencillo de realizar. Slo hay que tener un poco de cuidado, prolijidad y
buena voluntad. Tal como mencionamos al comienzo del artculo, utilizaremos el conector I2C de
nuestro entrenador (RB0 y RB1 del 18F2550) y del lado opuesto, en la placa donde montaremos el
LTC6904, dispondremos de pines dedicados a la salida de la seal de oscilacin propiamente dicha
y a la conexin que posee el chip para determinar su direccin dentro de un bus I2C. Tal como todos
recordarn, los circuitos que se conectan a un bus I2C poseen una direccin especfica para
comunicar sus datos con el microcontrolador al que estn acoplados. Es decir, cada dispositivo
I2C tiene un nombre para enterarse cundo el microcontrolador decide conversar con ellos.

El LTC6904 est diseado para poder determinar su direccin dentro del bus con slo cambiar el
estado lgico del pin 4 de su encapsulado. De esta manera, colocando este pin a GND (0),
obtenemos la direccin 0010111 dentro del bus, mientras que si al mencionado pin lo elevamos a
la tensin de alimentacin, la direccin pasa a ser 0010110, o sea, slo cambia el ltimo bit. Estos
siete bits estn acompaados por un ltimo bit indicador de escritura sobre el LTC6904. Recordemos
que slo escribiremos instrucciones dentro del chip y ste se encargar de ejecutar acciones de
acuerdo a las indicaciones enviadas desde el microcontrolador. En ningn caso leeremos dato
alguno desde el dispositivo por lo que este bit es inalterable y siempre ser igual a cero (0). De este
sencillo modo, nos queda armado el primer byte que enviaremos al bus, el que le dir al LT6904 A ti
te hablar y aqu estn tus instrucciones. Por supuesto que esto es un modo metafrico de
expresar lo que los fros bits hacen dentro de una comunicacin de datos.

Los dos bytes de datos que siguen indicarn la frecuencia que deseamos obtener a la salida.
Vale aclarar en este punto uno de los aspectos fundamentales de esta aplicacin: el circuito que
estamos empleando podr manejarse y utilizarse obteniendo de l frecuencias preestablecidas que
se rigen por parmetros tabulados muy sencillos de comprender y de implementar dentro del
programa de nuestro entrenador. Es decir, tal vez no puedas elegir 10Mhz exactos sino que las
tablas y los clculos te podrn ofrecer 10,002Mhz o 9,998Mhz. (cifras seleccionadas al
azar), valores que sern siempre tiles para aplicaciones en las que decidas ensayar un circuito a
10Mhz. Aunque te suene extrao, un cristal de cuarzo, por ejemplo, jams tendr la frecuencia que
expresa en su nomenclatura. Siempre encontrars valores de oscilacin muy prximos a la indicada
pero rara vez encontrars uno que oscile a esa frecuencia en forma exacta. Luego, mantener la
frecuencia estable es otra historia y esa es una de las caractersticas que destacan a los osciladores
basados en cristales de cuarzo. Pero, atencin!Ellos slo pueden entregarte una frecuencia
nica. El LTC6904 es capaz de brindarte la frecuencia que t desees con una estabilidad
menor al 1% hasta 68Mhz. Te parece poco?
Para brindar una explicacin sencilla, podemos decirte que el sistema de seleccin de frecuencia de
oscilacin tiene dos mandos principales: uno llamado OCT que acta como un mando grueso de
sintona y que est controlado por los cuatro bits ms significativos del segundo byte. (Recuerda
que el primero decida la direccin del dispositivo dentro del bus). Un segundo mando principal se
denominaDAC y acta como una sintona fina dentro de cada segmento OCT seleccionado. A esto
lo veremos en el siguiente prrafo. Regresando a los cuatro bits del mando OCT, vemos que
forman una tabla de 16 posiciones (0 15) para dividir en segmentos todo el espectro de
oscilacin del LTC6904. En la siguiente tabla (extrada de la hoja de datos del dispositivo) se
muestran las 16 divisiones y su correspondencia con el nmero OCT.

Luego, dentro de cada segmento seleccionado con el valor de OCT, pasaremos a la configuracin
del segundo mando principal (DAC) que est compuesto por una palabra de 10 bits, ubicada justo a
continuacin de los cuatros bits que forman el OCT. Estos 10 bits permiten dividir el bloque elegido
en 1024 posiciones (0 1023) o valores de frecuencia de oscilacin de salida. Todo esto se
completa con dos bits finales que se utilizan para configurar el modo de salida que utilizaremos en
los pines 5 y 6. En nuestro ejemplo, slo conectaremos la salida CLK y bastar colocar ambos bits
en cero para obtener salida til desde el pin 6 del LTC6904. Entonces, juntando toda esta
informacin nos quedan: 4 bits del OCT + 10 bits del DAC + 2 bits de configuracin de las
salidas. Todo esto equivale a 16 bits, es decir, a 2 bytes. Esos sern los bytes que completarn la
instruccin de escritura sobre el chip.

De este modo, nos queda una secuencia tradicional de comunicacin entre un microcontrolador y un
dispositivo I2C.

Inicio de comunicacin dentro del bus (Start)


Direccin del dispositivo a comunicar (Address Byte)
Bytes de instrucciones (en nuestro caso sern dos)
Fin de la comunicacin dentro del bus (Stop)
A esos 4 simples comandos se les puede agregar la posibilidad que brinda todo componente esclavo
dentro de un bus I2C de utilizar el bit ACK (Acknowledge). Este bit es regresado desde el circuito
esclavo hacia el microcontrolador para indicarle que ha recibido la instruccin. En instalaciones
donde las posibilidades de comunicacin pueden ser crticas (al lmite de lo posible) es bueno utilizar
este bit de retorno para garantizar que el dispositivo remoto ha recibido el dato correcto mediante la
devolucin de un ACK. Si el microcontrolador, luego de un tiempo prudencial de espera, no obtiene
una respuesta desde el componente remoto, puede volver a enviar la instruccin hasta lograr un
comunicado exitoso. Pero, como dijimos al principio, este no es nuestro caso y podemos obviar la
utilizacin del bit ACK para evitar cargarnos de cdigo innecesario.

Comencemos a programar
Si nuestro objetivo fuera realizar un oscilador fijo para alguna aplicacin especfica, la tarea sera
muy sencilla. Bastara con un sencillo PIC 12F675 (en encapsulado SMD) conectado al LTC6904,
con un conector ICSP (para cambiar la frecuencia de trabajo de acuerdo a la necesidad), en una
placa del tamao de una moneda para poner en marcha este oscilador programable que servira
para ensayos y experimentos de los ms variados. Acaso no te ha sucedido que cuando buscas un
cristal de cuarzo especfico te enfadas al darte cuenta de que no lo tienes y de que encima es de
noche y todas las tiendas estn cerradas? Sin embargo, nosotros pretendemos algo ms amplio:
intentamos experimentar (por ahora) con este IC y tratamos de llegar hasta los extremos de
oscilacin, es decir, hasta cerca de los 60Mhz. (al menos). Una salida fcil entonces sera armar un
contador de pasos individuales que incremente de a una unidad OCT + DAC y que nos lleve de un
extremo a otro con solopulsar dos botones. Pensndolo bien, si DAC posee 1024 posiciones y OCT
16, seran 16384 pulsaciones hasta llegar de un extremo a otro o al menos unas 8 mil
pulsaciones del botn para alcanzar la mitad del rango de posibilidades. Definitivamente debemos
pensar en algo ms inteligente y eficaz.

Para esto realizaremos dos sumadores y restadores elementales e individuales: uno para OCT y
otro para DAC. Con slo cuatro pulsadores conectados a pines libres del puerto C del entrenador,
podremos avanzar a frecuencias alejadas en pocos pasos. OCT incrementar de a una unidad, es
decir, 00010000 00000000 a la vez. Por su parte, DAC lo har en una unidad equivalente a
00000000 00000100 a la vez. Recuerda que los dos ltimos bits quedan siempre en cero para
mantener la configuracin de salida de la seal de oscilacin. OCT y DAC suman o descuentan
sobre una variable nica (DATOS) sus valores unitarios. Por lo tanto, con dos pulsadores
avanzamos (o retrocedemos) a grandes saltos y con otros dos pulsadores nos movemos como si
estuviramos manejando un mando de sintona fina. Lo que pareca complejo, se vuelve un juego de
nios al pensar en cmo resolver la operacin matemtica que nos mostrar la frecuencia
obtenida en la salida del LTC6904, en el LCD del entrenador (ideal para aquellos que no posean un
frecuencmetro). Caso contrario, nunca sabrs en qu frecuencia est trabajando el circuito.

En lenguaje BASIC (Proton), la potencia se resuelve mediante la instruccin POW y el resto de las
operaciones se hacen muy sencillas gracias a la posibilidad de utilizar variables del tipo FLOAT que
alcanzan valores entre -1e37 hasta +1e38 y permiten adems trabajar con hasta 8 decimales.
En este tipo de operaciones, la potencia de un lenguaje de alto nivel nos resuelve problemas que de
otro modo seran muy complejos de salvar. La operacin matemtica mostrada se puede resolver
con apenas cinco lneas de cdigo. Nosotros, que decidimos mostrar el resultado final de la
frecuencia expresado en Khz., le agregamos una sexta lnea. Observa el cdigo que te adjuntamos

al final del artculo en un bloc de notas o en cualquier editor de textos (si no tienes Proton) y notars
lo sencillo que resulta el trabajo matemtico en un lenguaje de programacin de alto nivel. Por
supuesto que no debatiremos cul lenguaje de programacin es mejor. En este ejemplo que hoy te
traemos, podemos ver que en BASIC el trabajo es muy sencillo. El resto es costumbre, comodidad y
lo que supimos aprender.
Las recomendaciones finales para trabajar con este tipo de circuitos hablan de su montaje y el
diseo de los circuitos que naturalmente deben seguirle. A la salida del chip, el fabricante aconseja
mantenerconexiones cortas y no cargar el circuito con ms de dos entradas lgicas (TTL,
microcontroladores, etc.). Lo aconsejable entonces es adaptar cualquier tipo de circuito seguidor de
seal (buffer) para aislar el LTC6904 y permitir su ptimo funcionamiento. Un circuito sencillo
sera cualquier puerta lgica de la familia 74HCT para prevenir diferencias de niveles de
tensin en aquellos casos en que el oscilador est alimentado con 3,3Volts y nosotros necesitemos
una amplitud de trabajo de 5Volts.
La construccin mecnica que incluye el circuito impreso, desde su diseo hasta la calidad de sus
materiales, y el mbito de trabajo cuidado de manera especial permitirn obtener los parmetros
enunciados en la hoja de datos del fabricante. Es decir, trabajar ms all de los 20Mhz no es una
tarea sencilla y la radiacin de radiofrecuencia hace estragos en los circuitos asociados al oscilador y
hasta en el oscilador mismo. En nuestro montaje, ms all de los 20Mhz observamos inconvenientes
propios de un montaje que no tiene todos los recaudos necesarios para trabajar a frecuencias
elevadas, dentro de la banda de VHF. Por ltimo, vale decir que este mismo circuito viene para
trabajar mediante SPI y su nomenclatura es LTC6903. Disfrtalo, has construido el oscilador
universal, el que te servir para aquellas raras aplicaciones en que te preguntaras: Dnde obtengo
un cristal de este valor de resonancia?
Linear Technology lo ha hecho fcil. Ha creado el LTC6904 y NeoTeo hoy te lo ha mostrado en
funcionamiento gracias a la gentileza de Tiago Velasque de Hitech Componentes, So Paulo, Brasil,
quien gentilmente nos ha brindado las muestras para ensayar este magnfico trabajo.
Hoja de datos:LTC6904
Tiago VelasqueHitech Componentes
Programa de prueba:Download
Device 18F2550
Xtal = 48

'DEFINO EL PIC
'DEFINO EL CRISTAL

DelayMS 100
CMCON = 7
All_Digital = TRUE

'PEQUEO RETARDO PARA ESTABILIZAR LA ALIMENTACIN


'APAGO LOS COMPARADORES
'HAGO TODO DIGITAL

LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.2
LCD_ENPin = PORTB.3
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0

'SETEO EL LCD 16X2 PARA 4 CABLES

Declare SDA_Pin PORTB.0


Declare SCL_Pin PORTB.1
Declare Slow_Bus=On

'DECLARO CUALES PINES DEL PIC VAN A SER


'SDA Y SCL CON UN BUS DE MENOS DE 8 MHZ

Declare Float_Display_Type = LARGE

Dim FREC As Float


Dim parteUNO As Float
Dim parteDOS As Float
Dim parteTRES As Float
Dim
Dim
Dim
Dim
Dim

DATOS As Word
DAC
As Word
OCT
As Byte
MSDATA As DATOS.HighByte
LSDATA As DATOS.LowByte

'OBTENIENDO "OCT"
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

OCTUNO As DATOS.12
OCTDOS As DATOS.13
OCTTRES As DATOS.14
OCTCUATRO As DATOS.15
unooct As Byte
dosoct As Byte
tresoct As Byte
cuatrooct As Byte

'
' LOS CUATRO BITS QUE FORMAN OCT
'
'
'
' ESOS CUATRO BITS TRANSFORMADOS A DECIMAL
'
'

'OBTENIENDO "DAC"
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim

DACONCE As DATOS.11
DACDIEZ As DATOS.10
DACNUEVE As DATOS.9
DACOCHO As DATOS.8
DACSIETE As DATOS.7
DACSEIS As DATOS.6
DACCINCO As DATOS.5
DACCUATRO As DATOS.4
DACTRES As DATOS.3
DACDOS As DATOS.2
dosdac As Byte
tresdac As Byte
cuatrodac As Byte
cincodac As Byte
seisdac As Byte
sietedac As Byte
ochodac As Byte
nuevedac As Byte
diezdac As Word
oncedac As Word

'IGUAL QUE CON EL OCT SEPARO CADA BIT


'Y LUEGO LOS TRANSFORMO A DECIMAL

DATOS = 0
BStart
BusOut %00101110
BusOut MSDATA
BusOut LSDATA
BStop

'INICIO EL CONTACTO A TRAVES DEL BUS I2C


'ESCRIBO LA DIRECCIN
'ESCRIBO EL MSDATABYTE (HIGHBYTE DEL WORD)
'ESCRIBO EL LSDATABYTE (LOWBYTE DEL WORD)
'TERMINO EL CONTACTO A TRAVES DEL BUS I2C

DelayMS 5
Print At 1,1," Entrenador PIC "
Print At 2,1," 18F2550 NeoTeo "
DelayMS 3000
Print At 1,1,"practicando con "
Print At 2,1,"LT6904 de LINEAR"

'DE ESCRITURA
'PRESENTACIN

DelayMS 3000
Print At 1,1,"generador I2C de"
Print At 2,1," 1Khz a 68Mhz "
DelayMS 3000
COMIENZO:
DATOS = 0
TRABAJA:
If
If
QUE
If
If

OCTUNO = 1 Then unooct = 1:Else:unooct = 0:End If


OCTDOS = 1 Then dosoct = 2:Else:dosoct = 0:End If
'CONTROLO EL VALOR DE LOS BITS
FORMARN OCT
OCTTRES = 1 Then tresoct = 4:Else:tresoct = 0:End If 'Y LES DOY UN VALOR DECIMAL
OCTCUATRO = 1 Then cuatrooct = 8:Else:cuatrooct = 0:End If

OCT = unooct + dosoct + tresoct + cuatrooct 'OBTENGO "OCT"


If DACDOS = 1 Then dosdac = 1:Else:dosdac = 0:End If
If DACTRES = 1 Then tresdac = 2:Else:tresdac = 0:End If
If DACCUATRO = 1 Then cuatrodac = 4:Else:cuatrodac = 0:End If
If DACCINCO = 1 Then cincodac = 8:Else:cincodac = 0:End If
If DACSEIS = 1 Then seisdac = 16:Else:seisdac = 0:End If
BITS
If DACSIETE = 1 Then sietedac = 32:Else:sietedac = 0:End If
DE dac
If DACOCHO = 1 Then ochodac = 64:Else:ochodac = 0:End If
If DACNUEVE = 1 Then nuevedac = 128:Else:nuevedac = 0:End If
If DACDIEZ = 1 Then diezdac = 256:Else:diezdac = 0:End If
If DACONCE = 1 Then oncedac = 512:Else:oncedac = 0:End If

'LO MISMO HAGO CON LOS


'QUE FORMARN EL VALOR

DAC = dosdac + tresdac + cuatrodac + cincodac + seisdac + sietedac + ochodac + nuevedac


+ diezdac + oncedac
parteUNO = Pow 2,OCT
parteTRES = DAC/1024
parteTRES = 2 - parteTRES
parteDOS = 2078 / parteTRES
FREC = parteUNO * parteDOS
FREC = FREC/1000
BStart
BusOut %00101110
BusOut MSDATA
BusOut LSDATA
BStop
DelayMS 5
Print At 1,1,"
Print At 2,1,"
DelayMS 100

'HAGO EL CLCULO DE LA FRECUENCIA SEGN LA


'FRMULA DE LA HOJA DE DATOS

'INICIO EL CONTACTO A TRAVES DEL BUS I2C


'ESCRIBO LA DIRECCIN
'ESCRIBO EL MSDATABYTE
'ESCRIBO EL LSDATABYTE
'TERMINO EL CONTACTO A TRAVES DEL BUS I2C
Frecuencia
"
",Dec FREC,"Khz

ESPERA:
If PORTC.0 = 0 Then
DATOS = DATOS + %0000000000000100
DelayMS 150
CORRESPONDIENTE
GoTo TRABAJA
End If

"

'DETECCIN DE BOTONES PULSADOS Y ACCIN

If PORTC.2 = 0 Then
DATOS = DATOS + %0001000000000000
DelayMS 150
GoTo TRABAJA
End If
If DATOS > %1111111111111100 Then GoTo COMIENZO
If PORTC.1 = 0 Then
DATOS = DATOS - %0000000000000100
DelayMS 150
GoTo TRABAJA
End If
If PORTC.6 = 0 Then
DATOS = DATOS - %0001000000000000
DelayMS 150
GoTo TRABAJA
End If
If DATOS < %0000000000000100 Then GoTo COMIENZO
DelayMS 10
GoTo ESPERA

'REINICIA EL CICLO

También podría gustarte