1. NCO
GENERADOR DE RELOJ DE FRECUENCIA VARIABLE ENTRE
10MHz y 20MHz CON UN PASO DE 50KHz
SUBSISTEMAS ELECTRÓNICOS DE
COMUNICACIONES 2010
MARC TENA GIL
JAVIER CAMBRA ENGUIX
2. ÍNDICE
1. Introducción
2. Descripción de la aplicación
3. Diseño general del circuito
4. Bloques del sistema
4.1. Bloque de alimentación
4.2. Reloj de referencia
4.3. NCO
4.4. Filtro elíptico de salida
4.5. Interfaz de comunicaciones
4.6. Programación del microcontrolador
5. Herramientas que nos proporciona el fabricante
6. Conclusiones
7. Bibliografía
3. 1 INTRODUCCIÓN
Un NCO es un oscilador controlado numéricamente que nos permite obtener
frecuencias de salida con una resolución que ningún otro dispositivo es capaz de
proporcionar. Estos dispositivos se usan en aplicaciones donde se necesitan señales de
frecuencia muy exacta y estable.
Al largo del trabajo explicaremos detalladamente el funcionamiento de este dispositivo
que utilizaremos para implementar una aplicación concreta. En este caso nuestra
aplicación será un generador de reloj de frecuencia variable entre 10MHz y 20MHz con
un paso de 50Khz.
Bloque de Alimentación
Reloj de Filtro Elíptico
Referencia NCO de salida
Interfaz de comunicaciones
Esquema de bloques del reloj
2 DESCRIPCIÓN DE LA APLICACIÓN
En la figura se muestra el esquema que seguiremos para implementar dicha aplicación.
Nota de aplicación. Generador de frecuencia de reloj.
4. Nuestro diseño estará compuesto por una interfaz de comunicaciones provista de un
microcontrolador PIC que usaremos para configurar el NCO, un oscilador para crear la
señal de reloj de referencia, un filtro elíptico de séptimo orden que sirve para eliminar
las bandas imagen no deseadas, espurios, jitter, etc. y por último el NCO propiamente
dicho.
En el esquema anterior observamos como la señal senoidal de la salida del filtro
elíptico la volvemos a introducir NCO a través de su comparador con tal de obtener la
señal cuadrada deseada.
3 DISEÑO GENERAL DEL CIRCUITO
Hoja 1 esquemático
5. Hoja 2 esquemático
BLOQUE DE ALIMENTACION
Dependiendo de si la aplicación sería portátil o fija elegiremos una batería o un adaptador de
red para obtener nuestra tensión de referencia.
Sabiendo que fxtal = 20 MHz y por lo tanto la ftrabajo = 6 x 20 MHz = 120 MHz, consultando las
especificaciones proporcionadas por el fabricante en el catálogo hay que alimentar a 3,3 V
para poder colocarle un reloj de entrada de 20 MHz (el máximo especificado es 20,83 MHz). En
caso que al hacer el montaje del circuito, la placa de pruebas no funcionara, habría que
cambiar la tensión de alimentación a 5 V y en consecuencia revisar el diseño en aquellos
puntos que se verían afectados por el cambio.
Dicho reloj tiene que cumplir unos niveles lógicos especificados para que el integrado funcione
correctamente. El nivel alto tiene que ser mayor que 2.3 V y el nivel bajo inferior a 1 V. Queda
especificado pues el margen de ruido que se permite en esta señal de entrada. Para la PIC y los
displays necesitamos 5 V.
La corriente de alimentación necesaria con nuestra configuración del AD 9851 está sobre los
55 mA pero sin exceder los 70 mA; y el rango de potencia disipada se moverá sobre los 200
mW.
En el caso de pensar en una aplicación portátil habría que recurrir al uso de baterías, hemos
elegido un fabricante que nos proporciona un gran rango de diferentes tipos de batería, tanto
en composición como en tensión y corriente de salida.
6. De entre todo el catálogo nos sirve cualquiera que nos proporcione 3.3 voltios y alrededor de
50 mA de corriente. Así pues si utilizamos batería en un principio no creemos necesario ningún
circuito extra para la alimentación. En todo caso diseñar con las notas que proporciona el
fabricante el circuito de carga y de protección contra sobrecalentamientos para evitar posibles
peligros.
Batería Cargador y protección
Boost converter
Lo nombrado nos sirve para la alimentación del AD9851, junto con esta batería sería necesario
utilizar un boost converter para aumentar la tensión a 5V para alimentar la PIC y los displays
(puede que sea necesario tener alguna consideración más ya que es el elemento que más va a
consumir del sistema).
Simplemente comentar que el boost converter es un convertidor de una tensión continua de
entrada a una tensión continua de salido mayor. Utiliza una carga para almacenar la tensión y
dos semiconductores como interruptores (Diodo y transistor). Se le suele añadir bobinas y
condensadores (a modo de filtro) para reducir el rizado a la salida.
7. Otra opción a tener en cuenta es obtener la alimentación de la red para otro tipo de
aplicaciones. El esquema sería el siguiente:
Una primera etapa para conseguir las especificaciones de displays i PIC y una segunda etapa
para la alimentación del NCO.
En la primera encontramos un LM7805 que nos baja la tensión a 5 voltios, y en la segunda un
low dropout regulator para conseguir la tensión de 3,3 voltios.
Hablando un poco más del LDO (low-dropout regulator) es un regulador de tensión continua
que funciona desde tensiones diferenciales entrada salida muy pequeñas. El principal
componente que forma el LDO es un FET de potencia y un amplificador de error diferencial. El
funcionamiento es el de todo regulador de tensión.
RELOJ DE REFERENCIA
OSCILADOR DE REFERENCIA PARA EL RELOJ DEL AD 9851:
Con este bloque lo que se consigue es una base de tiempos muy estable para el NCO, y
aplicando las fórmulas detalladas en el apartado oscilador controlado numéricamente
conseguir las frecuencias deseadas. Este mismo reloj debido a que tiene un fan-out de 10 nos
servirá también para la PIC, ya que justo es la frecuencia de reloj que necesita. Este ha sido
otro de los puntos que nos ha decantado a elegir 20 MHz como frecuencia del gate oscillator.
Para una información detallada del funcionamiento de los cristales osciladores de cuarzo y su
diseño se puede visitar el siguiente enlace:
http://www.huarpe.com/electronica/osc/oscilador-xtal.html
Los catálogos y notas de aplicación se han obtenido del fabricante y se pueden consultar en su
página web que aparece en la bibliografía.
Como hemos nombrado antes la elección del cristal ha sido tomada para aprovechar el filtro
que nos proporciona el fabricante y ahorrarnos su diseño.
El cristal a utilizar va a ser de 20 MHz en una configuración paralela de gate oscillator.
8. Cristal oscilador 20 MHz Gate oscillator
Se ha buscado y elegido para la ocasión un fabricante, del cual consultando en su página web
encontramos un cristal de la frecuencia pedida, además el propio fabricante suministra un
apartado de notas de aplicación de cómo montar el cristal para obtener un oscilador estable.
En el catálogo del cristal aparece un rango de frecuencias de entre los cuales puedes elegir la
frecuencia de oscilación, aunque esto solo es posible para pedidos en masa superiores a 1000
unidades. Quizás si tan sólo se quiere hacer una placa de evaluación habría que indagar un
cristal ya fabricado de 20 MHz y hacer el diseño completo.
El fabricante especifica que la capacidad de carga tiene que ser de 10 pF. También nos
proporciona las derivas con la temperatura, el tiempo, etc.
DISEÑO
Gracias a las notas de aplicación que nos suministra el fabricante en formato pdf es muy
sencillo realizar el diseño del oscilador, así como en caso de que fuera necesario hacer
cualquier estudio sobre la variación de la f con la temperatura y el tiempo en el caso que la
aplicación lo necesite. En nuestro caso no va a ser necesario ya que las variaciones de
temperatura en una posible aplicación de este tipo como pudiera ser para una radio (en el
rango de f correspondiente) no son críticas, y con la precisión obtenida tampoco nos tiene que
preocupar el envejecimiento del cristal.
Capacidad de carga del gate oscillator:
La capacidad parásita (Cstray) está formada por la capacidad con la que el controlador (µP, PIC,
etc.) va a cargar al circuito, así como la capacidad introducida por las patillas del cristal. La
recomendación del fabricante es asumir su valor como 5 pF.
Teniendo entonces que: CSTRAY = 5 pF CL1 = CL2 = 10 pF
**R1 aparece debido a la modelización del cristal, no es un resistor externo.
9. NCO
Este va a ser el bloque más importante de nuestro generador de reloj de frecuencia variable.
Un sintetizador de frecuencia es un dispositivo capaz de generar frecuencias en cierto rango.
Atendiendo a nuestra aplicación cabe mencionar las siglas DDS, que significan síntesis directa
de frecuencia. Una de las aplicaciones del NCO es precisamente ésta, generar valores discretos
de frecuencia en cierto rango con una pureza espectral elevada y con una resolución muy
pequeña, en el rango de los mHz mediante circuitos digitales y conversores digital-analógico
Este tipo de sintetizadores son más caros y algo menos puros que los de síntesis directa
(varios O.L. y multiplicadores) pero nos dan una resolución mejor y una mayor velocidad.
Esquema básico NCO
Donde:
w = anchos del bus de direcciones
b = ancho del bus de datos
n = ancho del bus del acumulador
El fundamento de todo esto es en tener almacenado en la ROM el muestreo de un periodo de
un seno (o coseno) lo más puro posible. Manejando el registro de incremento de fase en el que
se le indica el incremento del contador (con la salida de la cuenta se accede a las posiciones de
memoria de la ROM) se pueden generar un gran rango de frecuencias discretas (variando el
valor almacenado en el registro de fase).
10. Como se puede observar en esta figura, dando valores a la N podemos obtener los senos de las
diferentes frecuencias deseadas. Las dos señales que se aprecian arriba son con N=1 y N=2,
duplicando en el segundo caso la frecuencia respecto del primero.
Normalmente la frecuencia del reloj de referencia que actúa como base de tiempos se obtiene
de un gate oscillator (fCLK).
Después de esta somera descripción de qué es un NCO y su funcionamiento básico, pasamos a
describir más a fondo nuestro NCO, el AD9851 de Analog Devices.
Este circuito integrado utiliza la síntesis digital directa tomando como base un oscilador
controlado numéricamente para obtener una onda sinusoidal. Esta onda sinusoidal digital es
convertida a analógica mediante un convertidor D/A interno de 10 bits de alta velocidad.
También podemos obtener una onda cuadrada de salida con bajo jitter y compatible
TTL/CMOS a partir de la onda sinusoidal gracias al comparador de alta velocidad interno.
La resolución de la frecuencia de salida oscila entre 40 mHz y 180 MHz. La fase de la señal
generada es continua(esto es sencillo de conseguir si al recorrer la ROM tan solo se cambia el
valor del contador y cuando se produce dicho cambio se mantiene el valor del acumulador, no
variando así la fase entre la frecuencia que estamos generando y la que queremos pasar a
generar).
11. El diagrama de bloques funcional y el flujo de señal del AD9851 configurado como generador
de reloj es el siguiente:
Diagrama de flujo del generador de reloj con el AD9851
En el diagrama se puede apreciar el reloj de referencia que construiremos con un gate
oscillator basado en un cristal de cuarzo de 20 MHz.
El DDS que consiste en un divisor digital de frecuencia cuyo incremento de frecuencia se
controla introduciendo una palabra de sintonía). El acumulador de fase es un contador de
módulo variable que incrementa el número guardado cada vez que recibe un pulso del reloj.
Cuando el contador alcanza el fondo de escala se ajusta para que la fase de la señal de salida
del acumulador tenga fase continua. La palabra de ajuste de frecuencia establece el módulo
del contador, el cual determina el tamaño del incremento (∆ Fase) que será añadido al valor
contenido en el acumulador de fase en el siguiente pulso del reloj. Cuanto mayor sea el
incremento a añadir, más rápido llegará el acumulador a fin de cuenta y se ajustará, de forma
que obtendremos una mayor frecuencia a la salida.
Tras ésta síntesis de frecuencia digital se realiza una conversión a analógico, que tras ser
filtrada paso bajo se vuelve a introducir en el comparador integrado en el propio dispositivo
obteniendo a la salida una señal cuadrada.
Pasamos a detallar ahora la relación de la frecuencia de salida con los parámetros de control
que poseemos (se hará otra pequeña reseña especificando valores en el apartado del interfaz
de comunicaciones).
12. Respuesta en frecuencia del sistema
En nuestro sistema la frecuencia del reloj es de 120 MHz y la frecuencia de salida oscila entre
10 y 20 MHz. Como se puede apreciar las frecuencias imagen tienen un valor de energía
relativamente alto, determinado por el factor de roll off de la sinc(x) de la salida cuantificada
del convertidor D/A. De hecho, dependiendo de la relación entre la frecuencia de salida y la
frecuencia del reloj del sistema, la amplitud de la primera frecuencia imagen puede ser la
misma que la del fundamental (cuando fout es la mitad del reloj del sistema).
Normalmente se sitúa un filtro paso bajo entre la salida del convertidor D/A y la entrada del
comparador para suprimir las frecuencias imagen que no están relacionadas harmónicamente
y otras señales espurias que producen jitter. Por todo esto se ha de tener muy en cuenta la
relación entre la frecuencia de salida seleccionada, la frecuencia del reloj del sistema y las
frecuencias imagen, para evitar anomalías indeseadas a la salida.
Una buena regla de diseño que se puede aplicar cuando el AD9851 trabaja como generador de
reloj es limitar la frecuencia fundamental de la salida al 40% de la frecuencia del reloj de
referencia, de esta forma evitamos que se generen señales solapadas que estén demasiado
cerca de la banda de interés de la salida para ser filtradas.
El reloj de referencia de entrada al AD9851 tiene una limitación mínima de 1 MHz cuando el
multiplicador 6X REFCLK no está siendo empleado, y de 5 MHz cuando sí que está en uso. Este
último caso nombrado es el que nos ocupa, teniendo una señal d reloj de 120 MHz que
proviene de un gate oscillator de 20 MHz usando la configuración en x6 obteniendo la
frecuencia final del sistema de 120 MHz. Siendo el peor caso para el aliasing cuando queremos
generar la frecuencia máxima de salida, que son 20 MHz y obteniendo la frecuencia imagen a
100 MHz.
La elección del cristal y el modo x6 no ha sido casual, ya que así podemos emplear el filtro
diseñado por el fabricante en el apartado de aplicaciones.
13. FILTRO ELÍPTICO DE SALIDA
Como se comenta en otros apartados, el filtro elíptico de salida vamos a utilizar el
mismo que emplea el fabricante en su apartado de notas de aplicación.
Respuesta en frecuencia del sistema
Para poder aprovechar el diseño hemos elegido un cristal de 20 MHz pensando en habilitar el
modo x6 que lleva incorporado el AD9851. Como podemos ver nuestra frecuencia imagen más
cercana y por lo tanto la más molesta quedaría a 100 MHz, que está aproximadamente 30 MHz
por encima de la frecuencia de corte del filtro de ejemplo. Nos vamos a evitar pues cualquier
problema debido al aliasing; pero faltaría ver si nos puede molestar el jitter o cualquier otro
espurio que pueda caer en nuestra zona de trabajo. Haciendo uso de las herramientas que nos
proporciona el fabricante en su web vemos que puede que tengamos alguna señal molesta,
pero vemos que su amplitud está sobre los 40 dB por debajo del nivel de nuestra señal, cosa
que significa que la señal interferente es aproximadamente 10000 veces más débil que la
nuestra, por lo que en un principio tampoco tiene que preocuparnos mucho. Además en el
catálogo del circuito integrado se recomienda como un buen criterio de diseño que la
frecuencia máxima de salida no sea superior al 40 % de la señal de reloj del sistema; en
nuestro caso siendo el reloj de 120 MHz la recomendación queda en no generar señales de
salida superiores a 48 MHz, frecuencia que queda bastante lejos de los 20 MHz que vamos a
tener nosotros como máximo.
A continuación se presentan dos figuras con el esquema eléctrico del filtro y una simulación
del mismo.
15. INTERFAZ DE COMUNICACIONES
Como primer paso vamos a explicar cómo funciona la interfaz de comunicaciones del AD9851 y
después explicaremos la solución que hemos adoptado para ello.
PROTOCOLO DE PROGRAMACIÓN
Para programar el AD9851 existen dos modos:
- Serie asíncrono.
- Paralelo asíncrono.
En nuestro diseño empleamos un modo de carga paralelo por lo tanto sólo vamos a detallar la
utilización de éste.
EL protocolo consiste en cargar los 40 bits que necesita el AD9851 para configurarse y saber
qué frecuencia tiene que generar.
Control carga paralela
El integrado dispone de un bus de 8 líneas para cargar los datos en 5 iteraciones de un byte
cada una, controlada por las señales W_CLK (reloj para almacenar en los registros internos los
datos) y la señal FQ_UD que valida los datos para que sean transferidos de los registros y
validando los datos.
Cronog
rama carga paralela de registros internos
Pasamos a explicar mejor cómo funciona el protocolo:
Se puede configurar solamente la palabra W0 y no tener que cargar los 5 bytes. En nuestro,
caso esto serviría en caso de querer dejar el dispositivo en bajo consumo usando el 6º bit de
esta palabra; el 7º siempre tiene que ser 0 para el modo de carga paralelo y el último será un 1
16. o 0 dependiendo de si vamos a habilitar el multiplicador interno (x6) de frecuencia (En nuestro
caso sí lo vamos a utilizar, por lo tanto estará a 1). Comentar que los 5 primeros bits de W0 son
sirven para indicar la fase de la señal de salida.
La mayoría de veces el uso que se va a hacer es de la carga de todas las palabras, así pues
vamos a describir este proceso:
Mientras la línea FQ_UD se encuentra a nivel bajo, por el pin de W_CLK le vamos a pasar la
señal de reloj y por D0-D7 a golpe de reloj los 5 bytes necesarios. Tras esto se tiene que
afirmar la línea FQ_UD para transferir los datos de los registros internos y que se haga efectivo
el cambio de frecuencia pasado un tCF (18 ciclos del reloj del AD9851). Esto lo hace dejando el
puntero de nuevo en W0 y transfiriendo palabra por palabra los datos para hacer efectivo el
cambio de f.
A partir de aquí y una vez hecha esta última transferencia, W_CLK es ignorada a no ser que se
produzca un RESET o que se produzca un nivel alto en la línea FQ_UD en cuyo caso se inicializa
el puntero a W0 y se espera la llegada de la siguiente carga de datos.
Existen otros ciclos como el de RESET general , poner en estado de reposo, recuperarse del
reposo, etc. que pueden ser útiles pero no son de interés para la elaboración de esta memoria.
Especificaciones temporales
**Habría que considerar el estudio de tiempos.
Una vez explicado cómo hay que transferir los datos al CI, pasamos a detallar qué bits hay que
enviarle para generar las frecuencias deseadas.
17. fXTAL = 20 MHz; Modo x6 activadofsys_clk = 120 MHz
fMÁX_OUT = 20 MHz phase_MÁX = 715827882
fmín_OUT = 10 MHz phase_mín = 357913941
El escalón de frecuencia es 50 KHz unitario = 1789569
**Hay que tener en cuenta que los valores se han truncado para que sean enteros aunque el error cometido no es superior a las
milésimas de hercios, que no va a suponer ningún problema para la aplicación.
En esta segunda parte vamos a explicar la solución adoptada para resolver este apartado.
La interfaz de comunicaciones nos servirá para configurar nuestro dispositivo. Hay muchas
formas de implementar la interfaz. Nosotros hemos elegido una basada en una serie de
microswitches que nos servirán para configurar la frecuencia de reloj que queremos que
nuestro sistema nos proporcione.
Hemos dotado al sistema de 4 displays de 7 segmentos donde podremos visualizar la
frecuencia , 2 bloques de microswitches y un microcontrolador PIC que será el encargado de
interpretar las órdenes introducidas por los microswitches proporcionando el valor que
cargaremos en el registro del AD9851 utilizando la carga paralelo de dicho dispositivo.
En la siguiente figura podemos ver un esquema general de la interfaz del dispositivo con un
ejemplo grafico de cómo se deben introducir los datos. En nuestro diseño nos valemos de 4
circuitos integrados 7447 que servirán para decodificar el valor BCD introducido mediante los
switches y proporcionado las excitaciones adecuadas para iluminar los LEDS.
Esquema de la interfaz de comunicaciones
18. En la figura anterior podemos observar que tenemos un botón de reset. Este es el reset del
sistema y va conectado tanto al microcontrolador como al NCO.
La forma de configurar la frecuencia es la siguiente. De los dos bloques de microswitches, el
primero controla las dos cifras de la izquierda, es decir, los MHz. El segundo bloque controla
las dos cifras de la derecha, donde la última cifra solo tendrá como valor 0 o 5, ya que la
resolución de nuestro sistema es de 0.05MHz.
La forma de introducir los datos será posicionando los switches de forma que en binario
representen el número que queremos introducir.
El display1 sólo representara 1 o 2, para configurar utilizamos los dos primeros switches del
bloque1.
El display2 representara valores entre el 0 y el 9, introduciremos dicho valor mediante los
switches del 3 al 6 del bloque1, ambos inclusive.
El display3 también representara valores del 0 al 9, introduciendo el valor en este caso usando
los switches 1 a 4 del bloque 2.
Finalmente, el último display se controla con el switch 5 del bloque 2, de forma que la posición
cero del switch corresponderá al 0, mientras que la posición 1 del switch representará el 5.
HERRAMIENTAS QUE NOS PROPORCIONA EL FABRICANTE
El fabricante del NCO, en este caso Analog Devices nos facilita la tarea a la hora de utilizar el
dispositivo. Si entramos en su página web de podemos encontrar distintas herramientas y
aplicaciones que nos ayudan tanto en la implementación como en el diseño del circuito.
-Placas de evaluación y kits de desarrollo.
En apartados anteriores hemos expuesto la interfaz de comunicaciones que hemos
desarrollado para nuestra aplicación concreta de generación de frecuencia de reloj entre
10MHz y 20MHz.
Analog Devices nos proporciona ya una placa de evaluación configurable de distintas formas
para poder implementar la aplicación concreta que necesitemos. Esta placa de evaluación la
podemos implementar comprar directamente al fabricante o implementarla nosotros mismos,
y para ellos nos proporciona tanto el diseño del esquemático como el diseño de los distintos
planos de la PCB.
19. En las siguientes figuras mostramos los diseños que Analog Devices nos propone.
Esquemático general del diseño
20. Vistas de las PCB
Podemos observar que esta placa de evaluación carece de ningún dispotivo que nos permita
programar el DDS. Esta tarea la llevaremos a cabo utilizando el software que Analog Devices
nos proporciona en su página web. Una vez instalado nos permite comprobar que el
dispositivo se encuentra correctamente conectado a nuestro PC. Podremos conectar el
dispositivo mediante el puerto de comunicaciones paralelo.
Software 1
21. Una vez dentro del software podemos observar la interfaz que observamos en la siguiente
figura.
Software 2
Esta interfaz nos permite insertar frecuencias discretas o bien hacer barridos de frecuencia con
el paso que le indiquemos. Observamos también los distintos bloques, como es el caso de
External Clock, donde indicamos la frecuencia del reloj de referencia, el botón del
multiplicador interno x6, el botón de carga y de reset, así como el modo de comunicación que
vamos a usar, serie o paralelo, con sus correspondientes palabras de configuración.
En definitiva es una herramienta que nos proporciona gran versatilidad de uso a nuestro
dispositivo, y que nos puede ahorras muchas horas de trabajo y diseño.
22. –Herramienta, software y modelos de simulación.
Aparte de las herramientas de control que acabamos de mencionar, Analog nos proporciona
un par de herramientas que nos pueden ayudar para diseñar el circuito, y que nos avisan si
estamos diseñando algo de forma incorrecta.
La primera de estas herramientas es el ADIsimDDS. Esta herramienta nos permite ver el
espectro de las señales que genera este dispositivo, así como la forma de la señal de salida del
dispositivo, según la frecuencia que deseamos obtener y el reloj de referencia que utilicemos.
Esta aplicación también calcula el valor de la palabra de bits que hay que enviar al DDS para la
frecuencia deseada.
En las dos siguientes figuras mostramos los ejemplos de frecuencia mínima ( 10 MHz) y
máxima (20 MHz).
Herramienta web 1
23. Herramienta web 2
Por último, la siguiente aplicación sirve para calcular el valor de las resistencias RSet y Rload así
como para ver las palabras que debemos utilizar para configurar el DDS, tanto si usamos
comunicación serio, o comunicación paralelo.
Herramienta web 3
24. PROGRAMACION DEL PIC
El PIC, como todos los procesadores y microcontroladores tiene su propio lenguaje de
programación en ensamblador, no obstante esto puede llegar a ser poco práctico cuando los
programas adquieren una cierta complejidad.
Normalmente se opta por programar en lenguajes de alto nivel como C.
El programa que hemos desarrollado para esta aplicación en concreto es el siguiente.
#include <16f873.h> //PIC a utilizar
#include <math.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP //órdenes para el programador
#use delay (clock=20000000) //Fosc=20MHz
#use standard_io(B)
#use fixed_io(a_inputs=RA0,RA1,RA2,RA3,RA4) //A0,A1,A2,A3,A4,a5 como entradas en porta
#use fixed_io(b_inputs=RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7) //B0,B1,B2,B3,B4,B5,B6,B7 como entradas en porta
#use fixed_io(c_outputs=RC0,RC1,RC2,RC3,RC4,RC5,RC6,RC7,RC8)
int fclock=20000000;
int N=0; //variables globales
byte F,F1,F2,F3,F5,w0,w1,w2,w3,w4
void main(void){
set_tris_a(0xFF); //port_a como entrada
set_tris_b(0xFF); //port_b como entrada
set_tris_c(0x00); //port_c como salida
do{
F1=RA1*1+RA0*2; //convierto valores del display1 a binario
F2=RA2*1+RA3*2+RA4*4+RA5*8; //convierto valores del display2 a binario
F3=RB0*1+RB1*2+RB2*4+RB3*8; //convierto valores del display3 a binario
F4=RB4*5; //convierto valores del display4 a binario
F=F1+F2+F3+F4; //sumo todos los valores
F=F*10000; //multiplico por 10000 para quedarme con un valor de F en MHz
N=(F*pow(2,32))/fclock; //Obtengo N, a partir de la formula del NCO
W4_bin=(N%256)*256; //Descompongo la palabra de bits
w3_bin=(N%65536)*256;
w2_bin=(N%16777216)*256;
w1_bin=(N%4294967296)*256;
W0=9;
if(RB6=0){ //Si FQ_UD=0
delay_ms(10)
output_c(w0); //Envío palabra por puerto C
delay_ms(5);
output_high(R7); //CLK=1
delay_ms(10);
output_low(R7); //CLK=0
delay_ms(5);
output_c(w1); //Envío palabra por puerto C
delay_ms(5);
output_high(R7); //CLK=1
delay_ms(10);
output_low(R7); //CLK=0
delay_ms(5);
output_c(w2); //Envío palabra por puerto C
25. delay_ms(5);
output_high(R7); //CLK=1
delay_ms(10);
output_low(R7); //CLK=0
delay_ms(5);
output_c(w3); //Envío palabra por puerto C
delay_ms(5);
output_high(R7); //CLK=1
delay_ms(10);
output_low(R7); //CLK=0
delay_ms(5);
output_c(w4); //Envío palabra por puerto C
delay_ms(5);
output_high(R7); //CLK=1
delay_ms(10);
output_low(R7); //CLK=0
delay_ms(5);
While(TRUE); //INFINITO
}
La forma de trabajar con el PIC será, convertir este código en C a código .hex en ensamblador,
hay diversos programas gratuitos que realizan esta función.
Finalmente, con otro segundo programa, y utilizando una placa de programación para PICS que
se puede obtener en cualquier tienda de electrónica, por internet, o directamente fabricarlo,
enviaremos el programa .hex a la memoria del PIC. Debemos tener en cuenta que los
programas deben tener un tamaño que sea capaz de albergar la memoria del PIC.
26. Vamos a describir brevemente una utilidad y montaje para la programación arriba
mencionada.
Programador de la PIC
Con este circuito montado en una PCB y un programa como el que podemos observar en la
figura de la siguiente página se programa la PIC.
27. Captura del software para programar la PIC
CONCLUSIONES
BIBLIOGRAFIA:
Transparencias de la asignatura Subsistemas Electrónicos de Comunicaciones.
http://www.huarpe.com/
http://www.micropik.com/pag_ci_cristales_cuarzo.htm
http://www.ecsxtal.com/
http://www.todorobot.com.ar
http://www.ukai.com/baterias-industriales