La muralla técnica de todo diseñador electrónico que intenta desarrollar un oscilador está compuesta por dos paredes que a veces resultan infranqueables: los límites de frecuencias “máxima y mínima de oscilación” y la amplitud constante en todo el rango de frecuencia de trabajo. Los circuitos convencionales RC o LC se encuentran siempre limitados a una pequeña (y estrecha) porción del espectro para entregar una oscilación a un nivel de tensión de salida constante. Linear Technology comercializa un chip capaz de entregarnos una oscilación variable entre 1Khz y 68Mhz. por pasos ajustables mediante bus I2C. Es decir, con un microcontrolador, un sencillo juego de instrucciones y un LTC6904 puedes lograr un oscilador muy útil para tu banco de experimentación. Es muy sencillo, compruébalo tú mismo.
Disponible en un encapsulado MS8, el LTC6904 de Linear Technology es una solución muy interesante cuando buscamos un oscilador que pueda abarcar un amplio rango de frecuencias útiles para desarrollos de múltiples posibilidades. Con sólo leer las características 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 reparación como en la asistencia al diseño de circuitos de audio. Un poco más allá y hasta los 300Khz, puedes experimentar con ultrasonidos y las conocidas “ondas largas” de radio. Más 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 señal. Cuando cruzamos la barrera de los 30Mhz y nos introducimos en VHF, la situación 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 ningún componente externo más que un clásico capacitor de 100nF acoplado a la alimentación del circuito integrado. Todas las bondades de funcionamiento que puede ofrecer el LTC6904 serían muy largas de enumerar en este artículo y nuestro propósito no es reproducir lo que expresa la hoja de datos del producto sino compartir contigo nuestra experiencia en su implementación. Para esto (como no podía ser de otra manera) utilizamos nuestra placa de pruebas con el 18F2550, montada en el artículo anterior, que haremos debutar con esta aplicación de lujo. De todos modos, tú puedes realizar las prácticas con cualquier otro entrenador o microcontrolador ya que las bases sustanciales, el concepto de diseño y la sencillez de operación 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. Diseña 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 pequeño circuito integrado que consume menos de 5mA @ 5Volts, utilizaremos la misma alimentación que nuestro entrenador y esto será a través del conector USB. El montaje ideado para poder acoplar en forma mecánica esta maravillosa miniatura a nuestro entrenador es algo muy sencillo de realizar. Sólo hay que tener un poco de cuidado, prolijidad y buena voluntad. Tal como mencionamos al comienzo del artículo, 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 señal de oscilación propiamente dicha y a la conexión que posee el chip para determinar su dirección dentro de un bus I2C. Tal como todos recordarán, los circuitos que se conectan a un bus I2C poseen una dirección específica para comunicar sus datos con el microcontrolador al que están acoplados. Es decir, cada dispositivo I2C tiene un “nombre” para enterarse cuándo el microcontrolador decide “conversar” con ellos.
El LTC6904 está diseñado para poder determinar su dirección dentro del bus con sólo cambiar el estado lógico del pin 4 de su encapsulado. De esta manera, colocando este pin a GND (0), obtenemos la dirección 0010111 dentro del bus, mientras que si al mencionado pin lo elevamos a la tensión de alimentación, la dirección pasa a ser 0010110, o sea, sólo cambia el último bit. Estos siete bits están acompañados por un último bit indicador de escritura sobre el LTC6904. Recordemos que sólo escribiremos instrucciones dentro del chip y éste se encargará de ejecutar acciones de acuerdo a las indicaciones enviadas desde el microcontrolador. En ningún 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í están tus instrucciones”. Por supuesto que esto es un modo metafórico de expresar lo que los fríos bits hacen dentro de una comunicación de datos.
Los dos bytes de datos que siguen indicarán la frecuencia que deseamos obtener a la salida. Vale aclarar en este punto uno de los aspectos fundamentales de esta aplicación: el circuito que estamos empleando podrá manejarse y utilizarse obteniendo de él frecuencias preestablecidas que se rigen por parámetros 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 cálculos te podrán ofrecer 10,002Mhz o 9,998Mhz. (cifras seleccionadas al azar), valores que serán siempre útiles para aplicaciones en las que decidas ensayar un circuito a 10Mhz. Aunque te suene extraño, un cristal de cuarzo, por ejemplo, jamás tendrá la frecuencia que expresa en su nomenclatura. Siempre encontrarás valores de oscilación muy próximos a la indicada pero rara vez encontrarás uno que oscile a esa frecuencia en forma exacta. Luego, mantener la frecuencia estable es otra historia y esa es una de las características que destacan a los osciladores basados en cristales de cuarzo. Pero, ¡atención! Ellos sólo 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 explicación sencilla, podemos decirte que el sistema de selección de frecuencia de oscilación tiene dos mandos principales: uno llamado OCT que actúa como un mando “grueso” de sintonía y que está controlado por los cuatro bits más significativos del segundo byte. (Recuerda que el primero decidía la dirección del dispositivo dentro del bus). Un segundo mando principal se denomina DAC y actúa como una “sintonía fina” dentro de cada segmento OCT seleccionado. A esto lo veremos en el siguiente párrafo. 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 oscilación del LTC6904. En la siguiente tabla (extraída de la hoja de datos del dispositivo) se muestran las 16 divisiones y su correspondencia con el número OCT.
Luego, dentro de cada segmento seleccionado con el valor de OCT, pasaremos a la configuración del segundo mando principal (DAC) que está compuesto por una palabra de 10 bits, ubicada justo a continuación 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 oscilación 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, sólo 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 información nos quedan: 4 bits del OCT + 10 bits del DAC + 2 bits de configuración de las salidas. Todo esto equivale a 16 bits, es decir, a 2 bytes. Esos serán los bytes que completarán la instrucción de escritura sobre el chip.
De este modo, nos queda una secuencia tradicional de comunicación entre un microcontrolador y un dispositivo I2C.
- Inicio de comunicación dentro del bus (Start)
- Dirección del dispositivo a comunicar (Address Byte)
- Bytes de instrucciones (en nuestro caso serán dos)
- Fin de la comunicación 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 instrucción. En instalaciones donde las posibilidades de comunicación pueden ser críticas (al límite de lo posible) es bueno utilizar este bit de retorno para garantizar que el dispositivo remoto ha recibido el dato correcto mediante la devolución 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 instrucción hasta lograr un comunicado exitoso. Pero, como dijimos al principio, este no es nuestro caso y podemos obviar la utilización del bit ACK para evitar cargarnos de código innecesario.
Comencemos a programar
Si nuestro objetivo fuera realizar un oscilador fijo para alguna aplicación específica, la tarea sería muy sencilla. Bastaría 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 tamaño de una moneda para poner en marcha este oscilador programable que serviría para ensayos y experimentos de los más variados. ¿Acaso no te ha sucedido que cuando buscas un cristal de cuarzo específico te enfadas al darte cuenta de que no lo tienes y de que encima es de noche y todas las tiendas están cerradas? Sin embargo, nosotros pretendemos algo más amplio: intentamos experimentar (por ahora) con este IC y tratamos de llegar hasta los extremos de oscilación, es decir, hasta cerca de los 60Mhz. (al menos). Una salida fácil entonces sería armar un contador de pasos individuales que incremente de a una unidad OCT + DAC y que nos lleve de un extremo a otro con solo pulsar dos botones. Pensándolo bien, si DAC posee 1024 posiciones y OCT 16, serían 16384 pulsaciones hasta llegar de un extremo a otro o al menos unas 8 mil pulsaciones del botón para alcanzar la mitad del rango de posibilidades. Definitivamente debemos pensar en algo más inteligente y eficaz.
Para esto realizaremos dos sumadores y restadores elementales e individuales: uno para OCT y otro para DAC. Con sólo 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 configuración de salida de la señal de oscilación. 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 estuviéramos manejando un mando de sintonía fina. Lo que parecía complejo, se vuelve un juego de niños al pensar en cómo resolver la operación matemática que nos mostrará la frecuencia obtenida en la salida del LTC6904, en el LCD del entrenador (ideal para aquellos que no posean un frecuencímetro). Caso contrario, nunca sabrás en qué frecuencia está trabajando el circuito.
En lenguaje BASIC (Proton), la potencia se resuelve mediante la instrucción 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 además 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 serían muy complejos de salvar. La operación matemática mostrada se puede resolver con apenas cinco líneas de código. Nosotros, que decidimos mostrar el resultado final de la frecuencia expresado en Khz., le agregamos una sexta línea. Observa el código que te adjuntamos al final del artículo en un bloc de notas o en cualquier editor de textos (si no tienes Proton) y notarás lo sencillo que resulta el trabajo matemático en un lenguaje de programación de alto nivel. Por supuesto que no debatiremos cuál lenguaje de programación 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 diseño de los circuitos que naturalmente deben seguirle. A la salida del chip, el fabricante aconseja mantener conexiones cortas y no “cargar” el circuito con más de dos entradas lógicas (TTL, microcontroladores, etc.). Lo aconsejable entonces es adaptar cualquier tipo de circuito seguidor de señal (buffer) para “aislar” el LTC6904 y permitir su óptimo funcionamiento. Un circuito sencillo sería cualquier puerta lógica de la familia 74HCT para prevenir diferencias de niveles de tensión en aquellos casos en que el oscilador esté alimentado con 3,3Volts y nosotros necesitemos una amplitud de trabajo de 5Volts.
La construcción mecánica que incluye el circuito impreso, desde su diseño hasta la calidad de sus materiales, y el ámbito de trabajo cuidado de manera especial permitirán obtener los parámetros enunciados en la hoja de datos del fabricante. Es decir, trabajar más allá de los 20Mhz no es una tarea sencilla y la radiación de radiofrecuencia hace estragos en los circuitos asociados al oscilador y hasta en el oscilador mismo. En nuestro montaje, más 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. Disfrútalo, has construido el oscilador universal, el que te servirá para aquellas raras aplicaciones en que te preguntarías: ¿Dónde obtengo un cristal de este valor de resonancia?
Linear Technology lo ha hecho fácil. Ha creado el LTC6904 y NeoTeo hoy te lo ha mostrado en funcionamiento gracias a la gentileza de Tiago Velasque de Hitech Componentes, São Paulo, Brasil, quien gentilmente nos ha brindado las muestras para ensayar este magnífico trabajo.
excelente tu articulo estaba buscando algo como esto para un trabajo de electronica
muchas gracias mario
Un cristal a la medida!!. Muy buen articulo amigo Mario.
Saludos
Mario el LTC6904 queda "programado" a la frecuencia que uno elija, pregunto ya que no seria muy conveniente diseñar todo el programador en un circuito donde solo se necesite la fq deseada.
mario: MUY bueno. una pregunta. Se puede multiplicar de alguna manera la frecuencia. Para así llegar a 144.000 a 148.000.?
Que buen CI !!! y que buen ejemplo para su utilización.
Gracias Mario.
Mario. Buenísima la empresa línear. Encontré el LTC6905 – 17MHz to 170MHz Resistor Set SOT-23 Oscillator
http://www.linear.com/pc/productDetail.jsp?navId=H0,C1,C1096,C1096,P7888
con un solo resistor se cambia de frecuencia.
Este no lo conocia , muy bueno.
Me pregunto si es posible adaptarlo a una placa entrenadora de pic , seria interesante.
Un saludo.
Muy interesante Mario… es muy interesante la parte de ultrasonido, que en algunos casos es útil para hacer diagnósticos de mantenimiento preventivo en circuitos eléctricos… aunque es algo que creo se está desarrollado todavía.
Un abrazo.
Hola! muy interesante el articulo, pero estoy buscando un manual para poder hacer un aparato que haga sonidos como los que hacen el nes en 8 bits, lei del secuenciador SID-6581, necesito saber si tienen un manual de construcion de un aparato asi?
Hola, excelente el proyecto, pero donde lo compraron?
saludos