Capítulo 8. Fabricación y puesta en marcha
Contenido de este capítulo
Introducción
Este capítulo habla sobre temas relacionados con la implementación del
hardware, desde las compras de componentes hasta la fabricación y puesta en
funcionamiento de la placa.
Fabricación de la placa
Alternativas de fabricación
Llegada la etapa de la construcción de la placa en donde montar los
componentes, nos planteamos tres posibilidades para llevar a cabo dicha tarea:
- Protoboard
- Circuito impreso (PCB)
- Placa universal
Protoboard
El Protoboard, o tableta experimental, es una herramienta que nos permite
interconectar elementos electrónicos, ya sean resistencias, condensadores,
semiconductores, etc, sin la necesidad de soldar los componentes.
El protoboard esta lleno de orificios metalizados -con contactos de presión- en
los cuales se insertan los componentes del circuito a ensamblar.
Se conocen en español como "placas de prototipos" y son esencialmente unas
placas agujereadas con conexiones internas dispuestas en hileras, de modo que
forman una matriz de taladros a los que podemos directamente "pinchar"
componentes y formar el circuito deseado. Como el nombre indica, se trata de
montar prototipos, de forma eventual, nunca permanente, por lo que probamos y
volvemos a desmontar los componentes, quedando la protoboard lista para el
próximo experimento.
Cada agujero de inserción está a una distancia normalizada de los demás, lo que quiere decir que un circuito integrado encajará perfectamente.
Tienen la ventaja de ser de rápida ejecución, sin necesidad de soldador ni
herramientas, pero los circuitos que montemos deberán ser más bien sencillos,
pues de otro modo se complica en exceso y las conexiones pueden dar lugar a
fallos, porque la fiabilidad de las mismas decrece rápidamente según aumenta el
número de éstas.
Fig 8.1 Protoboard
Esta opción si bien puede ser simple y rápida de llevar a cabo, consideramos
que es poco prolija y puede traer complicaciones de falso contacto,
interferencia, entre otros problemas.
Circuito impreso (PCB)
El circuito impreso esta constituido por una placa aislante, en una o en sus
dos caras, de conductores planos metalizados cuyo objeto es asegurar las
conexiones eléctricas entre el conjunto de los componentes electrónicos
dispuestos en su superficie.
El término normalizado que designa a este componente es placa impresa, pero en
uso común se emplea circuito impreso. Igualmente, en inglés el término Printed
Circuit Board es de uso corriente, mientras que printed circuit se emplea
prácticamente solo para referirse a la técnica de la fabricación de una placa
impresa.
Existen distintos tipos de circuitos impresos, de simple capa (llamado de una
sola cara), de doble capa, multicapa, flexible, rígido, flexorígido, de
agujeros metalizados, etc.
El circuito impreso puede ser la mejor opción si ya se conoce y se tiene
probado el circuito, donde no se permiten cambios fácilmente, pero todas las
conexiones son seguras, y mas aptas para trabajar a alta velocidad.
Sin embargo esta opción la descartamos ya que si bien tiene muchas ventajas, no
nos permite hacer modificaciones fácilmente, y creemos que para una etapa de
prueba no es la mejor solución.
Además, esta solución implica un costo mayor. Más aún, en los principios del
diseño del PCB (que luego hemos postergado), hemos observado una alta
complejidad en la distribución de las pistas, necesitándose una placa doble
faz, con puentes y jumpers, pero aún así, no estamos seguros de que quepa todo
el circuito en una placa doble faz.
Fig 8.2 Circuito Impreso
Fig 8.3 PCB
Tal como se puede observar en la imagen, un circuito impreso no es mas que una
placa plástica (que puede ser de fenólico o pertinax), sobre la cual se dibujan
"pistas" e "islas" de cobre las cuales formaran el trazado de dicho circuito,
partiendo de un dibujo en papel, ya sea creado por una persona o por un
ordenador.
Para empezar se debe decidir el material que se va a utilizar. Si se trata de
un circuito donde hayan señales de radio o de muy alta frecuencia tendremos que
usar una placa virgen de pertinax, que es un material poco alterable por la
humedad. De lo contrario, para la mayoría de las aplicaciones, una placa de
fenólico es suficiente.
Cada trazo o línea se denomina pista, la cual puede ser vista como un cable que
une dos o mas puntos del circuito. Cada círculo o cuadrado con un orificio
central donde el terminal de un componente será insertado y soldado se denomina
isla.
Cuando se compra una placa de circuito impreso virgen ésta se encuentra
recubierta completamente con una lámina de cobre, por lo que, para formar las
pistas e islas del circuito habrá que eliminar las partes de cobre sobrantes.
Además de pistas e islas sobre un circuito impreso se pueden escribir leyendas
o hacer dibujos. Esto es útil, por ejemplo, para señalar cual terminal es el
positivo, hacia dónde se inserta un determinado componente o incluso como marca
de referencia del fabricante.
Para que las partes de cobre sobrantes sean eliminadas de la superficie de la
placa se utiliza un ácido, el Percloruro de Hierro o Percloruro Férrico. Este
ácido produce una rápida oxidación sobre metal haciéndolo desaparecer pero no
produce efecto alguno sobre plástico. Utilizando un marcador de tinta
permanente o plantillas Logotyp podemos dibujar sobre la cara de cobre virgen
el circuito tal como queremos que quede y luego de pasarlo por el ácido
obtendremos una placa de circuito impreso con las pistas que se pretendían.
Placa universal
El circuito impreso universal para prototipos, también conocido como _UPCB
(Universal Printed Circuit Board)_, es un circuito impreso de uso general
diseñado a partir de la estructura básica del protoboard, esta placa facilita
el montaje de aplicaciones electrónicas sin requerir la etapa de diseño y
fabricación de un circuito impreso especifico.
El circuito impreso universal para prototipos esta fabricado con importantes
recursos tecnológicos que garantizan aplicaciones de mejor desempeño y
presentación, entre las principales características técnicas se encuentran:
- Capa de blindaje en cobre para evitar interferencias.
- Pads recubiertos de estaño-plomo, evita oxidación y garantiza una soldadura de máxima calidad.
- Película de antisoder verde que recubre el cobre en las áreas donde no se debe soldar protege de la oxidación y de cortocircuitos.
- Hueco de 3mm para tornillo permite un eficaz anclaje al chasis o caja contenedora.
- Circuito impreso de fibra de vidrio provee máxima resistencia al impacto y a torsiones.
Fig 8.4 Placa Universal en detalle
Fig 8.5 Placa Universal
La placa universal tiene las ventajas de un protoboard, ya que es versátil y
permite cambios fácilmente, y las de un circuito impreso, con la facilidad de
la colocación de los componentes y pistas de cobre para soldar. Esta placa es
muy permisiva en cuanto a las conexiones, ya que al tratarse de cables, éstos
pueden hacer cruces entre sí que no se podrían realizar en un circuito impreso.
También nos permitió realizar cambios en cuanto a conexiones cuando
encontrábamos un funcionamiento erróneo, o por ejemplo cuando habíamos elegido
una salida del microcontrolador que no permitía el tipo uso que se precisaba.
Proceso de fabricación
Habiendo ya decidido que la opción sería construir sobre una placa universal, a continuación detallamos nuestro proceso de construcción.
- Materiales
- Disposición de componentes
- Realización, prueba y experiencia
Materiales
Básicamente los materiales que se precisan en esta etapa son:
- UPCB (placa universal)
- Zócalos
- Cables y buses
Hemos utilizado las placas universales que se consiguen hoy en plaza, ya que
son de buena calidad y es lo estándar para estos casos. Nos han dado muy buen
resultado, con excepcion de alguna pista que se corta o se suelta por la
presión de los cables al torcerlos, o al desoldar y volver a soldar en el mismo
pad (isla).
Los zócalos los creímos necesarios ya que permiten soldar y dejar previsto el
lugar de los mismos, sin que el mismo componente se encuentre en el lugar. Más
aún, esto nos permite no tener que soldar el componente en si, sino que éste se
coloca a presión en el zócalo. Además, el hecho de utilizar zócalos tiene como
ventaja fundamental la facilidad de colocación y extracción del componente,
como también su reemplazo.
Fig 8.6 Zócalo
Existe un tipo de zócalo diferente y especial que es el
ZIF (Zero Insertion
Force). Estos zócalos no requieren de fuerza para la inserción del componente,
sino que se coloca dentro del zócalo y luego se presionan las patas del mismo
moviendo una palanca que tiene en uno de los extremos.
Esto permite de forma simple y sin riesgos colocar o extraer el componente del
zócalo. En nuestro caso, lo vimos sumamente útil para el microcontrolador, el
cual es uno de los componentes más delicados y con frecuencia se saca y se
vuelve a colocar para su programación.
Fig 8.7 Zócalo ZIF
Para realizar las conexiones entre los componentes hemos utilizado cables
obtenidos del UTP Categoría 5e. Este tipo de cable esta muy probado en la
industria y es muy flexible en cuanto a su torsión y a su facilidad de soldado.
Fig 8.8 Cable UTP Cat5e
Los buses los hemos cableado con cables del tipo
flat, los cuales son
específicos para este tipo de conexiones.
Fig 8.9 Cable Flat
Disposición de componentes
La distribución de los componentes en la placa tuvo que ser pensada basándose en dos características:
- velocidad a la que trabajan los componentes
- facilidad de conexión entre sí
Esto quiere decir que los componentes que trabajan a alta velocidad, como ser
la memoria y el conversor, deberían estar lo mas cerca posible.
Así mismo, los buses son de más fácil conexión cuando los componentes tienen
una distribución de patas similar y se encuentran juntos.
Dado que la cantidad de componentes no nos permitía colocarlos todos en una
misma placa, hemos tenido que separarlo en dos placas. Esto implica tener que
decidir qué bloques o componentes colocar juntos en una misma placa y cuales
no.
Como mencionamos antes, una de las pautas para esta decisión es la velocidad de
trabajo de cada bloque.
Basándonos en esto, decidimos que toda la parte de control del sistema estaría
en una placa y la parte de alta velocidad en la otra.
La distribución entonces fue la siguiente:
- Placa de captura y alta velocidad:
- Buffers de entrada
- Conversor AD
- Memorias
- Lógica adicional
- Placa de control:
- PIC
- Contador
- Buffer bidireccional
- Lógica adicional
En cuanto a la primer placa, ésta se dedica exclusivamente a la captura y
almacenamiento de los datos, con la sola excepcion de los contadores. En ella
también se encuentra una mínima lógica adicional, como ser algunas compuertas,
qué deben de estar en la misma placa ya que de lo contrario éstas señales
deberían ir a la otra placa y luego volver, aumentando el recorrido y las
posibilidades de interferencias.

Fig 8.10 Placa de adquisición: conversores - memorias - entrada - compuertas
En cuanto a la ubicación de los contadores, por un tema de espacio tuvieron que
ser colocados en la segunda placa.
Dado que el diseño esta localizado en que el microcontrolador solamente realice
tareas de control, ninguna de las señales que éste controla son de tan alta
velocidad como las que se manejan en la etapa de captura.

Fig 8.11 Placa de control: pic - buffers - contadores - compuertas
Realización, prueba y experiencia
Esta fue una de las etapas más tediosas y lentas del proceso, ya que hubo que soldar muchos cables y cada uno de ellos tuvo que ser hecho a medida.
Hubo que prestar mucha atención en que las soldaduras sean buenas, que no hayan
corto-circuitos, como así también, tener precaución con el soldador de no
quemar el recubrimiento aislante de los cables, ya que así también se podrían
producir falsas conexiones.
Una vez planeada la ubicación de los componentes dentro de la placa, se colocan
primero los zócalos de los integrados, y luego a partir de ellos se comienza
con el soldado de los cables para interconectar como corresponde a cada uno de
los componentes. Aquí hay que tener especial cuidado en no confundir los pines
de los circuitos integrados, ya que eso puede provocar un mal funcionamiento,
un corto circuito, o incluso la ruptura de algún componente.
Luego hay que interconectar las dos placas, ya sea con buses (cable flat para
buses de datos) o con cables individuales, los que suelen ser de control, a
excepción de la señal de reloj y las alimentaciones.
Una vez finalizada la construcción de las placas, hay que hacer una prueba
exhaustiva de las conexiones. Este punto es necesario e imprescindible, ya que
como mencionamos, una mala conexión puede provocar un mal funcionamiento, un
corto circuito, o incluso la ruptura de un circuito integrado, siendo este
último caso el peor.
El precio de cada componente y especialmente la disponibilidad de los mismos
nos obligaba a estar seguros de su correcta ubicación y conexión antes de
colocarlos y ponerlos en funcionamiento.
Como es normal, en la etapa de prueba hemos encontrado errores y cortos. Esto
era de esperarse, ya que con tantos cables y circuitos integrados, resulta poco
probable cometer un error. Vale aclarar que esto no hubiese pasado si
hubiésemos optado por la opción de utilizar una placa impresa (PCB), ya que la
misma tiene todas las conexiones hechas en pistas de cobre, aunque no nos
hubiese permitido realizar los cambios que hemos hecho sobre la marcha.
La conclusión que podemos sacar de haber trabajado de la forma en que lo hemos
hecho es que la elección del tipo de placa fue la correcta, ya que es mucho más
seguro y confiable que trabajar en un protoboard, y a la vez no es tan
restrictiva como una placa impresa.
También como critica constructiva podemos decir que se podría haber comenzado
con la construcción antes de lo que lo hemos hecho. Una vez que se tienen
definidos los componentes que se van a usar, ya se está en condiciones de
comenzar a colocar los zócalos en las placas. Luego a medida que se van
definiendo las conexiones, se van soldando los cables. Nosotros hemos comenzado
con la construcción una vez que teníamos definidas todas las conexiones. Aún
así, y como hemos comentado previamente, tuvimos que realizar cambios de
conexiones sobre la marcha, y aquí es donde demuestra la ventaja la placa
universal sobre el PCB.

Fig 8.12 Placa completa del prototipo
La foto anterior muestra ambas placas y sus interconexiones. Vale recalcar que
la desprolijidad en el cableado entre las placas (claramente notoria) será
solucionado con la construcción del circuito impreso.
Carcaza
La compra de la carcaza fue una de las tareas realizadas al final del proceso
de fabricación, ya que ésta solo aporta una mejora estética (y no funcional) al
prototipo
En consecuencia, tuvimos que decidir rápidamente entras las alternativas
disponibles en plaza. Optamos por una carcaza de plástico por su flexibilidad a
la hora de realizar perforaciones para colocar los controles.

Fig 8.13 Carcaza del osciloscopio

Fig 8.14 Conectores BNC del osciloscopio
Compra de componentes
La compra de los componentes no es una etapa en si, sino que es una tarea
previa a la fabricación.
Una vez que se decide por el uso del cierto componente, el acto que le sigue es el de averiguar dónde se puede comprar y a qué precio.
Aquí es donde uno se encuentra con las siguientes dificultades:
En nuestro diseño usamos muchos componentes que no se encuentran en plaza en el
mercado uruguayo. Si bien unos cuantos los hemos conseguido en Uruguay, al
haber disponibilidad de los mismos en otros países y a mejor precio, nos hemos
planteado la posibilidad de comprarlos en el exterior por una cuestión de
costos.
Una vez que habíamos decidido la utilización del PIC como controlador
principal, compramos uno para poder comenzar con las pruebas.
En cuanto a los componentes que no se conseguían en Uruguay, consideramos
Argentina y Estados Unidos como posibles proveedores de los mismos, dado que
contamos con facilidades en estos dos países para comprar lo que precisemos y
luego traerlo.
Aprovechando la ocasión de que teníamos que comprar ciertos componentes en
Estados Unidos por la falta de disponibilidad en Uruguay y Argentina, hemos
decidido también comprar ciertos componentes que se conseguían en Uruguay, pero
en el exterior tenían un costo menor, como por ejemplo el PIC.
En el caso del PIC, el primero que compramos lo compramos en Uruguay, pero
luego hemos comprado otros 2 mas en Estados Unidos, aprovechando que ya
teníamos que hacer una compra de otros componentes.
Esto nos da cierta ventaja en cuanto a la facilidad para conseguir componentes
que de otra forma serían casi imposibles o muy costosos. Sin embargo esto trae
aparejado un problema, que es la demora.
En cuanto a las compras en Argentina, nos resultaba más fácil que con las de
Estados Unidos, ya que contábamos con una persona que viajaba constantemente,
con una frecuencia de una vez cada dos semanas en promedio, lo que nos permitía
traer componentes con poco tiempo de demora.
De todas maneras, hubieron compras que eran necesarias hacerlas en Estados
Unidos, y aquí es cuando se vio demorado el proyecto. No siempre era posible
contar con una persona que viaje cuando el proyecto lo precisaba, sino que
había que coordinar el proyecto con estos viajes, y además, no siempre esta
persona podía traer estos componentes, con lo cual tuvimos demoras de hasta
casi dos meses en la espera de éstos.
Sin embargo, la forma en la que hemos procedido la creemos correcta. Siempre se
tiene la posibilidad de recurrir a un Courier de entrega rápida y directa,
pero es claro que esto insume un costo mayor, el cual tratamos de evitar. Como
lección podemos decir que hubiese sido mejor poder prever los componentes con
mas anticipación, y así realizar las compras y traslados con tiempo y evitar
que el proyecto se demore.
Depuración por hardware
La posibilidad de depurar por hardware es una herramienta fundamental en la
etapa de implementación.
Esta herramienta nos permite verificar y ejecutar
paso a paso el programa
cargado en el microcontrolador. Nos permite también monitorear diferentes
variables, contenidos de memoria, o estados de las patas del PIC.
La conexión del ICD2 se realiza a través de un cable de 6 hilos. Para facilitar
la conexión, utilizamos un cable con conectores RJ12 en sus extremos, y zócalos
en las placas.

Fig 8.15 Pinout del conector RJ12 del ICD2
Tabla 8.1 Pines del conector RJ12 del ICD2
Descripción de los pines:
- GND - Voltaje de referencia.
- Vdd - Tensión de alimentación positiva. Esta alimentación es la que energiza al microcontrolador.
- Vpp - Tensión de programación. Debe conectarse al puerto MCLR del PIC. Este voltaje debe ser superior a Vdd para que el microcontrolador ingrese al modo de programación.
- PGC - Señal de reloj de la transmisión de datos serie.
- PGD - Línea de datos. Esta conexión es bidireccional, y permite la comunicación de dos vías entre el PIC y la interfaz de programación
Para poder entrar en el modo
debug es necesario realizarlo desde el programa,
el MPLAB. Allí, seleccionando las opciones correspondientes, se programa al PIC
con una versión "modificada" del programa original. Esta modificación, hecha
automáticamente por el software, contiene las rutinas necesarias para poder
realizar el depurado
on-line, ya que de tratarse de la operación normal del
PIC, éste ejecutaría el programa de forma normal, sin interrupciones ni
posibilidad de monitoreo. Una vez finalizado el proceso de depurado, se debe
volver a programar el microcontrolador con la versión
normal del programa.
Hemos incluido estas conexiones en nuestro equipo, permitiendo el depurado _en
linea_ del mismo. Nos da la posibilidad de una conexión simultánea del ICD2 y
el ordenador con la placa.
La ventaja fundamental es que podemos observar el comportamiento del sistema
cuando este se encuentra conectado al PC y ejecutando las operaciones
solicitadas. Nos ha facilitado la detección de errores tanto de programación
como de hardware.
Corriendo paso a paso las instrucciones, pudimos verificar si el puerto de
control del PIC efectivamente estaba realizando las operaciones solicitadas, y
si los componentes conectados a él también lo hacían.
Puesta en funcionamiento
La puesta en funcionamiento del equipo fue progresiva. Consideramos fundamental
colocar los componentes de a uno por vez e ir probando las conexiones y su
funcionamiento. Hay que prever que puedan existir errores en la placa aún
teniendo en cuenta las etapas de fabricación y prueba. Esta forma de proceder
tiene como objetivo la preservación de los componentes, la mayor facilidad en
la detección de errores, y la aislación de problemas.
Una vez que se tienen todas las conexiones hechas, y el circuito encargado de
generar la señal de reloj esta listo, procedimos primero a colocar el
microcontrolador. Luego de ver que éste se encontraba funcionando y teníamos
comunicación con él, comenzamos a colocar el resto de los componentes.
Primero fueron las compuertas discretas. Esto ha sido así, debido a que para
poder colocar el resto de los componentes, se precisan listas las señales de
control. Luego colocamos el buffer bidireccional. A través de él, podíamos
medir y comprobar si efectivamente el bus de entrada/salida se encontraba
funcionando correctamente, como así también las señales de control
involucradas.
Para evitar interferencias y especialmente para hacer que los cables que
conectaban las dos placas no actuasen de antenas, decidimos colocar los
amplificadores de entrada, pero no alimentarlos. Es decir, las señales
analógicas de entrada que también se encontraban conectadas al microcontrolador
se encontraban flotantes y sobre un recorrido largo de cable. Al colocar los
amplificadores pero no alimentarlos, realmente no se estaban utilizando estos
circuitos, pero si servían para reducir la interferencia posible. Las
conexiones de tierra estaban hechas entre las dos placas desde el principio, y
así también para todos los componentes de cada placa.
El siguiente paso fue colocar los contadores. Estos contadores son controlados
por el PIC, y su señal de reloj puede provenir tanto desde el cristal como
desde una señal de control del PIC, la cual tiene como objetivo tener una señal
de reloj mas lenta y configurable.
Una vez que comprobamos el buen funcionamiento del contador, probamos la
función de
presetear el contador, es decir, darle un valor de contador desde
el cual éste debe comenzar a contar. Aquí se probó por completo el
funcionamiento del bus bidireccional, ya que a través de éste se realiza la
operación de carga del contador. Aquí nos hemos encontrado con un problema, que
es que la carga del
preset del contador se realiza sincrónicamente, es decir,
cuando recibe un pulso de reloj. Para el contador de los bits menos
significativos esto no sería un problema ya que la señal de reloj es
controlada. Pero para el segundo contador, el de los bits más significativos,
esto era un problema ya que en realidad la señal de reloj que éste recibe
proviene del contador que lo precede (contadores en cascada). Este problema y
su solución están explicados en la siguiente sección:
Problemas.
A continuación procedimos a colocar las memorias. Este paso fue crucial, ya que
las memorias eran los primeros componentes que se colocaban en la placa de
adquisición. Hasta este momento se había trabajado con una sola placa, y este
era el momento de probar la segunda placa. Aquí había que comprobar la
alimentación, si existían corto circuitos, caídas de tensión, interferencias,
etc. Por suerte tuvimos un resultado muy positivo. Salvo algún problema de
falso contacto (más bien producido por los zócalos, ver:
Problemas con los zócalos), hemos tenido
un excelente resultado. Así hemos logrado conectarnos satisfactoriamente con la
segunda placa, la de alta velocidad, la de captura y adquisición. Cabe aclarar
que para realizar este paso fue necesario conectar la alimentación de la placa
en cuestión, ya que si bien la conexión de tierra estaba hecha, no así la de
tensión.
Al conectar la alimentación de la placa de adquisición automáticamente el
amplificador de entrada comenzó a funcionar. Esto no es problema ninguno, y
sólo optamos por no dejar
flotando la entrada del amplificador y conectarla a
tierra. Como siguiente paso, conectamos los conversores. Este momento marca un
punto especial en el proyecto, y la prueba del hardware. Aquí es donde se va a
apreciar si todos los componentes logran trabajar en armonía y logran
comunicarse con facilidad. Al igual que en algún otro caso anterior, hemos
tenido problemas con las conexiones, pero como adicional, hemos verificado
también el correcto funcionamiento de la memoria, ya que ahora podíamos
comprobar con mayor confianza los datos que se guardaban y que se leían. Aquí
detectamos un error en las señales de control de la memoria, ya que no se
estaba realizando correctamente el procedimiento para su lectura (Ver la
siguiente sección).
Finalmente una vez solucionados los problemas detectados, a través de la
interfaz de consola que nos provee el osciloscopio, obtuvimos muestras que
coincidían con lo esperado. Es decir, que cuando la entrada se colocaba a
tierra, se obtenían valores todos cercanos a cero (posibles ruidos, etc), y
cuando utilizamos una señal cuadrada de un generador, obteníamos valores
coherentes, o sea, una serie de valores altos, luego otra serie de valores
bajos, y así sucesivamente.
Consideramos muy satisfactorio el proceso de fabricación de la placa, en el
cual obtuvimos pocos errores y fallas, y consumió poco tiempo llevarlo al
funcionamiento deseado.
Para estas pruebas utilizamos un reloj de 8 megaciclos, el cuál es el mínimo
posible para que funcionen todos los componentes, pero la velocidad esta lejos
del objetivo final. Es natural suponer que a menor velocidad las cosas
funcionen mejor, y en caso de que existan problemas, sean mas fácil
detectarlos, o mismo al comprobar el funcionamiento de los componentes. La
intención es que una vez que se logre hacer funcionar el equipo correctamente a
esta velocidad, se irá incrementando la velocidad del reloj y así cada vez
acercarnos más a la velocidad de trabajo propuesta como objetivo (40 Mhz).
Problemas de funcionamiento
NAND no oscila
En una de las primeras etapas del circuito, la etapa osciladora va directamente
conectada hacia el microcontrolador, pero a su vez va conectada en paralelo a
una NAND (funcionando como NOT). En algún momento durante la construcción y
prueba de la placa, esta compuerta tenía como salida la señal de reloj,
obviamente invertida. Luego, más avanzado el proceso de colocación de
componentes y prueba, observamos que ya su salida no oscilaba, sino que se
mantenía constante con valor cero. Buscando los posibles orígenes de este
problema, vimos que su entrada estaba funcionando perfectamente, y que todos
los circuitos así también lo hacían. Sin embargo, habría que seguir
investigando, ya que el problema no radicaba en un componente defectuoso, sino
como producto de cambios que podríamos haber hecho en la placa en la etapa de
prueba y detección de errores.
Observamos como la amplitud de la señal de reloj podía ser mayor o menor, pero
aún no encontrábamos el parámetro que hacía que esto cambie. Al medir las
tensiones de la amplitud de dicha señal y comparándolas con las
especificaciones de la compuerta, vimos que efectivamente se trataba de un tema
de amplitudes. Ésta señal no tenía la amplitud suficiente para que la compuerta
detecte un cambio de estado en su entrada.
Más específicamente, las mediciones daban valores de
1.5v a 4v para la
amplitud de la señal de reloj como entrada de la compuerta. Luego, en la hoja
de datos de ésta, se tiene como especificación que _V.high (min) = 2.0v y un
V.low (max) = 0.8v_. Dado que la tensión del oscilador nunca era menor que
1.5v, queda claro que la compuerta entonces nunca detectaría un cambio de
estado en su entrada.
Realizando modificaciones en los bits de configuración del PIC logramos hacer
que estas amplitudes cambien, o mejor dicho, sean más cercanas a cero. Sin
embargo no llegamos a lograr que bajen de 1v. Por otra parte, si
desconectábamos la NAND como carga del circuito oscilador, éste tenia
amplitudes entre
0.6v y 3.8v. Esto implica que las amplitudes tienen relación
directa con la carga y las impedancias que dicho circuito tiene.
Hasta hemos probado quitarle una resistencia de 1M ohm que el oscilador tenía,
la cual en ciertos documentos hemos visto, pero en otros no estaba incluida. Al
quitarle esta resistencia, y sin tener la carga adicional de la compuerta, la
amplitud tenia una variación entre
0.3v y 3.4v. De todos modos, al volver a
conectar la compuerta, estas amplitudes volvían al mismo estado detectado al
principio, sin lograr que la compuerta funcione.
Finalmente, detectado que se trataba de un problema de impedancias y no de
configuración, decidimos probar de obtener la señal y cargar al oscilador en la
otra pata que este tiene. Es decir, el circuito oscilador tiene dos bornes de
conexión, entre los cuales se encuentra el cristal y componentes adicionales.
Estas dos patas van conectadas al PIC en sus puertos OSC1 y OSC2. Durante toda
esta etapa estuvimos obteniendo la señal de reloj del puerto OSC1, pero llegado
este punto, optamos por probar conectar en el puerto OSC2.
Aquí se resuelve el problema. Evidentemente el puerto OSC1 no esta preparado
para tener cargas en paralelo y el puerto OSC2 sí.
Las amplitudes obtenidas ahora son entre
-0.2v a 4.8v. Esto es más que
suficiente para que la NAND opere correctamente.
Además, ya casi no se observan diferencias cuando se conecta la NAND, es decir,
que efectivamente se trataba de un tema de cargas, y de las características de
cada puerto.
El siguiente problema que detectamos es que la salida de la NAND, la cual sería
una señal cuadrada (se trata de un componente digital, por mas que su entrada
sea analógica), pero ésta se encontraba considerablemente distorsionada. Dicha
señal, si bien tenia la misma frecuencia y ostentaba ser lo esperado, era muy
curvada y no parecía ser tanto una señal digital cuadrada.
No sabemos si es un tema de velocidad, si es que la gran amplitud de la señal
de entrada genera este comportamiento, o si es que se debe utilizar una
compuerta del tipo
schmidt-trigger.
A continuación se puede observar el comportamiento al cual hacemos referencia.
Esta imagen es una foto tomada del osciloscopio con el cuál hemos trabajado.

Fig 8.16 abajo el oscilador, arriba la salida de la NOT (NAND)
Para entender un poco mejor la razón por la que al conectarse a una de las dos
terminales de oscilación el circuito no funcionaba pero con el otro terminal
sí, hemos hecho una búsqueda un poco mas exhaustiva en la documentación del
PIC. Allí encontramos el siguiente diagrama:
Fig 8.17 Bloque de entrada del oscilador
Esto podría ser la explicación al problema, ya que el puerto OSC1 esta configurado como la entrada de un buffer, y por lo tanto con alta impedancia, mientras que el terminal OSC2 es una salida, pudiendo provocar incompatibilidades al intentar conectarlo en paralelo con otros componentes.
Este comportamiento, y en especial la forma de onda no tan perfecta (cuadrada) no nos ha generado problemas desde este punto en adelante, sin embargo luego hemos visto con el osciloscopio que esta señal habría mejorado, y creemos que esto es debido al avance que ha habido en la conexión de los componentes. Es decir, hasta que no hemos logrado hacer funcionar correctamente esta compuerta nos hemos visto imposibilitados de avanzar con la conexión y prueba del resto de los componentes. Al haber solucionado este tema, es que hemos continuado conectando el resto del circuito. Es así que avanzada un poco más la implementación del circuito hemos observado que el comportamiento mencionado había mejorado aún más.
De todos modos consideramos importante estudiar las cargas que puede tener esta compuerta (NAND), para poder corroborar si es que se trataba de un tema de sobrecarga.
Esta compuerta estaba cargada con los siguientes componentes:
- 2 entradas de NAND (igual compuerta, una en control de memoria y otra en adquisición)
- 2 entradas de reloj de los conversores A/D
Las salidas de las NAND tienen las siguientes características:
Fan Out:
I(OH) = -1mA ; I(OL) = 20mA
Las entradas de las NAND:
Fan Out:
I(IH) = 20uA ; I(IL) = -0.6uA
Características eléctricas en continua:
I(IH) = 5uA ; I(IL) = -0.6mA
Y finalmente, las entradas de los conversores A/D:
I(IH) = 5uA ; I(IL) = 5uA
Este estudio demuestra que las salidas de la compuerta NAND son ampliamente
capaces de poder manejar los 4 componentes que tienen en su salida.
Otros problemas de oscilación
El oscilador también ha presentado otro problema. Cuando el circuito se
encontraba conectado a la placa ICD2 (programador y depurador), oscilaba
perfectamente. Sin embargo, al conectar el equipo al puerto USB del PC,
encontramos un funcionamiento errático, donde en ciertas ocasiones oscilaba y
en otras no. Hemos buscado las razones de este comportamiento, pero realmente
nos ha costado. Hemos pensado en que podía ser un tema de interferencias,
consumo de corriente del puerto USB, malas conexiones, etc.
Finalmente la razón de este comportamiento no radicaba en un problema de
hardware, sino de los bits de configuración del PIC. Específicamente provenía
de la configuración del oscilador en estos bits. Aquí se debe especificar con
qué oscilador se trabaja, el tipo, la velocidad, etc. Al configurar
correctamente estos bits, no ocurrió nuevamente este comportamiento.
Retardo de contador lleno
Durante el proceso de prueba de funcionamiento de los contadores, observamos
que estos no se detenían cuando llegaban a su máxima cuenta.
En el diseño se contempla que cuando ambos contadores llegan a su cuenta
máxima, un pulso es generado en la pata FULL (contador lleno) del contador
mayor, y este pulso es detectado por el microcontrolador generando una
interrupción de alta prioridad. Esta interrupción, entre otras tareas, detiene
el contador. Al tratarse de una interrupción, se podría decir que se obtiene
uno de los tiempos de respuesta más bajos posibles. Sin embargo, esta respuesta
no es inmediata, sino que consume un cierto tiempo de procesamiento.
Las mediciones dieron los siguientes resultados:
- Corriendo el contador a 8Mhz y el PIC a 24Mhz, el retardo desde que el contador se llena hasta que es detenido es de 16 cuentas (16 ciclos de 8Mhz).
- Corriendo el contador a 8Mhz y el PIC a 48Mhz, el retardo baja a la mitad, retardo de 8 ciclos de 8Mhz.
8Mhz -> 125 ns
24Mhz -> 41.6 ns
48Mhz -> 20.8 ns
16 ciclos a 8Mhz -> 2us
8 ciclos a 8Mhz -> 1us
2us a 48Mhz -> 48 ciclos
1us a 24Mhz -> 48 ciclos
Haciendo algunas cuentas, se llega a que el retardo que tiene el
microcontrolador en atender la interrupción y detener el contador es de 48
ciclos.
De acuerdo a la velocidad a la que corra el contador, y a la que se ejecuten
las instrucciones del PIC, este tiempo cambia, y se puede observar en las
mediciones obtenidas.
Es evidente que sólo se pueden mejorar estos tiempos vía software (o firmware),
pero en principio esto no implica un problema.
El único efecto que esto produce es que se sobreescriban las
n muestras (16,
8, o bien, la cuenta que resulte de los 48 ciclos del PIC) obtenidas y
guardadas en memoria. Teniendo una memoria de gran tamaño, y siendo tantas las
muestras que se toman de la señal de entrada, creemos que la citada cantidad no
es relevante y puede despreciarse. El único cuidado que hay que tener es el de
no tenerlas en cuenta y considerarlas como muestras no validas, descartándolas
y suponiendo el resultado los valores guardados a partir de la muestra número
n.
Inserción de zócalos
Los circuitos integrados seleccionados para componer el sistema completo fueron
en su mayoría de encapsulado DIP, lo que facilita enormemente su uso,
especialmente en placas universales (ver:
Fabricación). Sin embargo los
conversores y las memorias no las pudimos obtener en este tipo de encapsulado.
Los conversores TLC5540 de Texas Instruments tienen un encapsulado SOIC-24.
Para este componente debimos comprar un zócalo adaptador de SOIC-24 a DIP-24.
Afortunadamente este tipo de encapsulado (frente al SOJ) es de mas fácil
soldadura, y el zócalo adaptador calzó perfecto en los zócalos DIP estándar,
con los cuales construimos la plaqueta.
Las memorias Cypress CY7C-109B tiene encapsulado SOJ-32 y debimos comprar
zócalos adaptadores de SOJ-32 a DIP-32. Sin embargo en este caso nos
encontramos con un gran problema. El zócalo adaptador (en su parte DIP) tenía
una distancia entre sus lineas paralelas de 400-mil (1 mil = 1/1000" -> 400-mil
= 0.4" = 10.16mm), mientras que la separación standard es de 300-mil (7.62mm).
O sea, en la fabricación de la plaqueta, hemos dispuesto a todos los
componentes es zócalos DIP standard, y luego a medida que llegaba el momento de
colocarlos, el zócalo ya se encontraba soldado. Ahora, si tenemos ya soldado e
instalado un zócalo de 300-mil y tenemos que colocar en él un componente con
separación de 400-mil, está claro que no va a ser posible. Dado que
consideramos más complicado y con posibilidad de error el cambiar el zócalo de
la placa, ya que este ya se encontraba soldado (con todas las conexiones
adyacentes también soldadas) optamos por construir (en primera instancia) un
adaptador "casero" de DIP-32@400-mil a DIP-32@300-mil.
Esto al principio provocó fallas intermitentes en la conexión desde el
integrado hacia las pistas de cobre, pero se solucionó ajustándolo mejor y
haciendo mas presión sobre los componentes. Resulta evidente que estos zócalos
deben de reemplazarse por sus correspondientes, pero la solución optada ha sido
por cuestiones de tiempos y facilidad.
Preseteo de contadores
Los contadores que hemos seleccionado tienen la funcionalidad de
presetearlos, es decir, cargarle un valor predefinido al contador y luego
éste comenzará a contar a partir de dicho valor. El procedimiento de carga de
dicho valor es sincrónico, es decir, que una vez que se pone el valor deseado
en las patas correspondientes y la señal de carga esta seteada, se debe dar un
pulso en la señal de reloj para que dicha carga tenga acción. A diferencia de
los componentes asincrónicos, los cuales una vez que en el puerto de control se indica la carga del valor de preseteo, no requieren de un pulso de reloj para llevar la acción a cabo.
Esto no sería un problema para el contador de los bits menos significativos, ya
que la señal de reloj de este componente esta controlada por el PIC. Sin
embargo, el diseño de contadores en cascada, lo que permite aumentar la
cantidad de bits del contador, hace que la señal de reloj del contador más
significativo sea controlada por el contador de los bits menos significativos.
Este proceso hace que cada vez que el contador mas chico llega a la última
cuenta (el último numero antes de volver a cero), dé un pulso en su pata de
FULL (contador lleno), y esta es la que hace que el contador mayor aumente en
1 su cuenta.
Como vimos, el contador mayor esta controlado en cuanto a su sincronismo y
señal de reloj por el contador menor, y esto complica el proceso de preseteo,
ya que no tenemos forma directa de controlar la señal de reloj de dicho
contador (recordar que son sincrónicos).
Entonces la solución que hemos encontrado para resolver este problema es
haciendo que cada ciclo de preseteo de contadores cargue en el contador menor
el mayor valor posible, luego cargarle al contador mayor el valor deseado (esto
no ocurrirá hasta un nuevo pulso de reloj), y posteriormente enviar un pulso de
reloj al contador mayor para que este avance en su cuenta. Dado que lo habíamos
cargado con el máximo valor posible en su cuenta, un nuevo pulso de reloj hará
que este vuelva a cero y de un pulso en su señal de
contador lleno. Esta
señal es la que controla el reloj del contador mayor, y por consiguiente aquí
se producirá la carga efectiva de los datos en este contador, ya que como hemos
dicho, este contador es sincrónico y realiza las operaciones en cada pulso de
reloj.
Finalmente se carga al contador menor con el valor deseado y se termina con el proceso de preseteo.
Si bien esta solución no sería la ideal a primera vista, consideramos que una solución que se pueda hacer por software, en vez de realizar cambios en el hardware, es mejor y más fácil de llevar a cabo.
Control de lectura de memoria
La memoria tiene varias formas de ser operada y controlada, diferentes señales
proveen combinaciones diferentes qué hacen que el componente accione como se
espera. Por ejemplo, podríamos decir que puede ser controlada por la pata de
lectura, la de escritura, o la de habilitación. De acuerdo con qué
configuración se esté utilizando, entonces dichas señales deben de tener cierto
valor para el funcionamiento correcto.
Habiendo tales diferencias, hemos cometido un error de diseño sobre cómo
debería ser la señal de lectura.
Mientras probamos el funcionamiento de la placa observamos un funcionamiento en
este componente que no coincidía con el esperado. Al depurar en tiempo real qué
es lo que estaba ocurriendo, detectamos que el problema tenía origen
exactamente en el comportamiento de la memoria frente a lo que las señales de
control suponían. Aquí entonces revisando más a fondo las formas de control
detectamos que la señal de lectura estaba invertida, y por lo tanto, la
solución inmediata fue la de eliminar una de las compuertas NOT (hecha con
NAND) del camino de control de dicha señal.
Una vez realizado este cambio, la memoria funcionó tal como se esperaba.
Cambio de elección de patas del PIC
Mientras se comprobaba el funcionamiento de todos y cada uno de los
componentes, detectamos que alguna de las veces que un componente no actuaba
como se esperaba el problema provenía del microcontrolador. El PIC no realizaba
lo que se le solicitaba. Ciertas patas del PIC que debían cambiar de valor no
lo hacían, incluso al depurar en tiempo real por hardware.
Algunos de estos comportamientos anómalos se debían a una mala definición o programación de los puertos de entrada/salida del microcontrolador. Sin embargo otros casos se debían a la mala elección por nuestra parte, donde por ejemplo ciertos puertos utilizados para interrupciones no podían ser utilizados como patas de control standard.
En estos casos, debimos recablear las señales buscando algún otro puerto
disponible en el PIC. Esto implica tener que desoldar un cable, extraerlo, y
volver a colocar otro de las medidas necesarias y entre el viejo componente y
el nuevo puerto del PIC. Esta operación hay que realizarla con sumo cuidado ya
que los procesos de desoldar y volver a soldar pueden provocar cortes de
pistas, corto circuitos, y otros problemas.
Una vez que realizamos los cambios correspondientes, y se ha reprogramado el
microcontrolador con la nueva configuración, el funcionamiento fue óptimo.
Aquí es donde vuelven a aparecer las ventajas de utilizar una placa universal
en vez de un circuito impreso. La acción de hacer un cambio de último momento
en la selección de puertos implica que la conexión entre un componente y otro
cambie de recorrido, tenga un destino diferente, que el camino sea otro. Esto
en una placa impresa podría ser imposible de llevar a cabo, a menos que se
utilicen cables para reemplazar la pista de cobre. Nuevamente consideramos como
buena la elección de utilizar una placa universal.
Conexión simultánea al ICD2 y al puerto USB
La mayor ventaja del ICD2 es poder depurar lo que está pasando en la placa directamente sobre el hardware, lo cual, en contraste con una simulación, es un excelente recurso para encontrar problemas en el funcionamiento.
Al programar la placa, ésta queda por defecto en modo reset (el MPLAB la deja configurada así). Por lo tanto una vez programada la placa se debe sacar del modo reset yendo a
Programmer -> Release from reset. Esto hace que la placa corra simultáneamente conectada al puerto USB y al ICD2.
Para poder depurar el funcionamiento es necesario seleccionar el modo Debugger en lugar de Programmer, y luego ejecutar el programa yendo a Debugger -> Run (también pulsando la tecla F9).
Problemas de programación del ICD2
En repetidas oportunidades encontramos dificultades al programar el PIC, esto
era en la etapa de verificación de la programación.
Es decir, el proceso de programación consta de la verificación del dispositivo
y la conexión, luego se programa por completo el dispositivo, y finalmente se
hace una verificación del contenido.
Cuando existe una diferencia entre lo programado y lo verificado, puede ser o
bien que haya sido mal programado, o que el proceso de verificación no se haya
completado correctamente. Dado que después de una programación no satisfactoria
el dispositivo no funcionaba, es claro que la falla estaba en la etapa de
programación.
Varias veces hemos tratado de encontrar la raíz del problema, pero sin poder
llegar a ninguna conclusión.
De hecho, se podría decir que habíamos encontrado una forma de hacer que vuelva
a su funcionamiento normal, y era reiniciando el PC y reconectando todos los
equipos. Esto nos hizo suponer que se trataba de un problema en el PC, o mejor
dicho, de algún inconveniente con el puerto USB.
Sin embargo, mas adelante descubrimos que el problema radicaba en el regulador
de tensión del ICD2. Luego de un largo periodo de operación este componente
recalentaba y producía el mal funcionamiento. Creemos que una de las posibles
razones de que el regulador aumente su temperatura es la calidad de la fuente
de alimentación que utilizamos. Luego de detectado el problema lo resolvimos añadiéndole un disipador al regulador de tensión, y también colocamos un ventilador disipador próximo a él para asegurarnos que funcione correctamente.
Calibración
Una vez que el osciloscopio estuvo funcionando, fue necesario realizar la
calibración del equipo.
La computadora ya podía obtener los valores de las mediciones, por lo que
restaba hacer los cálculos correspondientes para asignarles un valor correcto a
dichas tensiones y a los tiempos equivalentes entre las muestras obtenidas,
teniendo en cuenta los parámetros de captura del osciloscopio para cada modo de
captura distinto.
La etapa de entrada tiene un potenciómetro multivuelta de alta precisión para
cada canal que permite ajustar el nivel de tensión media de los mismos antes de
entrar al conversor analógico digital. Con este potenciómetro nos aseguramos
que ambos canales tengan el nivel correcto de tensión media, encontrándose
exactamente en el medio de la excursión del conversor.
Luego realizamos varias mediciones con señales de laboratorio conocidas,
generadas con un generador de funciones. Las señales utilizadas fueron de
diferentes formas de onda, y de diferentes tensiones y frecuencias (utilizando
todo el rango posible). Estas señales fueron medidas con nuestro osciloscopio y
con un osciloscopio profesional.
Finalmente, al obtener las mediciones, realizamos los cálculos correspondientes
para que nuestro equipo muestre los valores de tensión correspondientes. Al
mismo tiempo realizamos las mediciones de tiempos, corroborando el tiempo entre
muestras de acuerdo a las diferentes velocidades y diferentes tipos de
muestreo. De esta forma se realizó la calibración del prototipo.
Especificaciones finales
A continuación se presenta una tabla con el resumen de las especificaciones
finales del osciloscopio, según el prototipo armado.
| Especificación | Valor |
| Resolución vertical | 8 bits |
| Conexión a la PC | USB 1.1 (USB 2.0 compatible) |
| Velocidad máxima de muestreo | 8 MSPS |
| Entradas | 2 canales con entradas BNC |
| Rangos de tensión | ±40 V |
| Precisión de tensión | 3% |
| Tamaño del buffer | 64K |
| Impedancia de entrada | 1 MΩ |
| Alimentación eléctrica | 9V DC |
| Consumo de potencia | 5-7W |
| Dimensiones | 240mm x 180mm x 75mm |
| Software | Windows 98/2000/XP Linux Mac (no probado) |
| Aislación | Mo dispone de aislación eléctrica |
| Señal de calibración | No dispone de señal de calibración |
Tabla 8.1 Especificaciones finales del osciloscopio
Cada una de las especificaciones es limitada o definida por un componente
particular, a saber:
- Resolución vertical - limitada por todo el sistema, ya que todos los componentes son de 8 bits
- Conexión con la PC - Limitada por el PIC puesto que solo trabaja a USB1.1
- Velocidad máxima de muestreo - Limitado por la frecuencia del oscilador (en este caso, un cristal de 8 Mhz). Sino sería limitado por la frecuencia máxima de trabajo del ADC (40 Mhz).
- Precisión de tensión - definido por el error en el ADC (± 1 LSB) más un error (estimado) en la etapa de entrada
- Tamaño del buffer - limitado por las memorias
- Impedancia de entrada - definido por la impedancia de entrada de los amplificadores operacionales de entrada
- Alimentación eléctrica - definido por el regulador 7805
- Consumo de potencia - definido a partir del consumo de todos los componentes activos. Ver Capítulo 4. Hardware
- Dimensiones - definido por el tamaño de la carcaza
- Software - definido por las características del lenguaje python
Compatibilidad con puntas de atenuación
Es muy corriente que las puntas de medición para osciloscopios tengan la
posibilidad de atenuar grandes señales de entrada. Esta característica se
incluye para poder medir señales de gran amplitud. De este modo, la misma punta
de medición atenúa 10 veces a la señal, para que ésta cumpla con los rangos de
entrada del osciloscopio y pueda ser medida. Esta es una práctica muy común y
la mayoría de los osciloscopios y puntas de medición ya vienen con esta esta
capacidad.
En nuestro caso, entendemos que agregar esta funcionalidad resulta trivial,
puesto que solo bastaría con modificar el software agregándole un selector
X1/X10 (y realizando las cuentas correspondientes) de la misma forma que hoy
posee un selector para habilitar o deshabilitar la etapa de entrada (ver
).
Estudiando hojas de datos de diferentes puntas de medición, observamos que
en general éstas requieren una impedancia vista de entrada hacia el
osciloscopio de 1 MΩ lo cual se cumple en nuestro prototipo.
Referencias
- Microchip MPLAB (programador y depurador del PIC18F4550)
- Microchip MPLAB C18 (compilador C para el PIC18F4550)
- Figuras