miércoles, 29 de junio de 2022

Y dale con el ADX.....

 

El desarrollo de proyectos lleva su tiempo, y el transceptor ADX diseñado por Barb (WB2CBA) no es una excepción. La concepción y funcionamiento del proyecto fue ya descripto en entradas anteriores con cierto detalle, pero a modo de resumen se trata de un transceptor mono banda que permite operar en modos digitales en general, y en los modos digitales de baja señal (FT4,FT8,JS8 y WSPR) en particular. Su firmware, la esencia de su funcionamiento, es abierto y permite un grado considerable de experimentación al basarse en la plataforma Arduino.
La experimentación tiene algo de repetición, se va entendiendo cual es la mejor solución para un determinado problema intentando muchas veces diferentes alternativas. En ocasiones luego de varios intentos se logra una alternativa que funciona bien. Algunas veces incluso ninguna alternativa funciona.
La primer prueba de concepto fue adaptar el firmware para funcionar con una placa que es esencialmente otro transceptor, el uSDX o mi variante experimental el Pixino. Luego hice una versión con cableado punto a punto hasta que finalmente llegaron las placas que mandé a hacer en China. Ya con ellas construí una primer versión para 40 metros, que luego de algunos experimentos me las arreglé para dañar severamente y que hoy utilizo como placa de desarrollo. Seguida de otra placa para 40 metros que es la que hoy utilizo en la estación para operar FT8 en la banda de 40 metros con excelentes resultados. Mientras tanto le puse esfuerzo al proyecto mas allá de la construcción de transceptores en tres áreas, las que tienen un grado de desarrollo diferente. 
La que mas esfuerzo recibió y mas avance tiene es las mejoras de firmware (microcódigo, el software que controla la placa), el que es un programa para placa Arduino Nano. La placa tiene una interfaz muy simple, básicamente 4 LED que indican normalmente el "modo", en realidad como la placa no define el modo indican la frecuencia dentro de la banda en la que transmiten (que es distinta para cada modo) y tres switches tipo "botón" normalmente abierto. Uno para subir (UP), otro para bajar (DOWN) y el tercero para poner la placa en transmisión (TX) manualmente. Un quinto LED indica cuando la placa está en modo transmisión. La placa opera mediante un control VOX por lo que cuando detecta que hay señal de audio se pone en modo transmisión y cesa cuando no hay mas señal de audio. De esa forma la transmisión es controlada por el programa que realmente genera la señal del modo, normalmente WSJT-X corriendo en otra computadora. En realidad se puede usar cualquier programa que genere la señal a transmitir y la haga disponible por la placa de sonido. En mi estación uso una Raspberry Pi Modelo 3B con ese propósito, y la opero desde cualquier otra máquina de la casa o celular mediante el programa Real VNC Viewer. Muy práctico y conveniente, de hecho he podido desplegar una estación completamente remota en Mar del Plata con ésta configuración, lo que me permite hacer muchos experimentos de propagación. Sin embargo, a poco de experimentar con la placa resulta evidente que la misma se puede beneficiar, sobre todo en las condiciones que la uso, mediante un control CAT. Si bien la placa está diseñada para soportar 4 bandas y el firmware permite configurar 4 juegos de frecuencias diferentes en forma correspondiente en la realidad la placa es mono banda, pues solo permite un filtro de salida y es mecánicamente enchufable. Si bien no hay inconveniente en tener diferentes "filtros enchufables" para distintas bandas no es una configuración viable para la operación remota. Aun así sería conveniente poder cambiar de "modo" o frecuencia dentro de la banda correspondiente al filtro disponible, y para eso es necesario dar soporte a algún protocolo CAT. Al mismo tiempo surgen rápidamente otras mejoras que se hacen evidentes al operar la placa con el firmware original. Una de ellas de índole práctica es cambiar la estrategia de grabación de EEPROM, pues ante cualquier cambio se graba toda la configuración. Eso no es necesariamente incorrecto, la interfaz de botonera no invita a muchos cambios. Pero al colocar una interfaz CAT por cada cambio que se haga en algún parámetro, incluyendo la frecuencia, generaría una grabación de EEPROM. Las placas Arduino tienen un chip de EEPROM que soporta varias decenas de miles de ciclos de escritura, pero se agotan con sorprendente rapidez si se está permanentemente grabando sobre ella. Por eso le agregué un algoritmo que la configuración es bajada a EEPROM luego de varios segundos que se hizo el último cambio. También, para una placa que en algunas aplicaciones funciona sin atención (por ejemplo en recepción, como monitor de banda) es importante que si tiene algún problema que "cuelgue" al firmware ésto no implica que la placa queda en un estado inestable o impredecible; para evitar eso es necesario utilizar servicios de "watch dog timer (WDT)" que tiene por hardware el procesador ATMega328P. Al hacer ambas modificaciones aproveché para que el código en su conjunto fuera mas genérico y pudiera programarse con facilidad para cualquier banda de HF. El conjunto de las modificaciones las liberé como un firmware 1.2e (con "e" de experimental, link). En principio el CAT emula a un Kenwood TS480, es una versión adaptada del existente en el firmware del uSDX, y tuve algunos problemas de atiempamiento para que funcionara correctamente con WSJT-X, sin embargo funciona correctamente con FLRig y éste puede ser utilizado como un servidor para que WSJT-X utilice el protocolo CAT correspondiente. Es decir, las modificaciones en FLRig  provenientes del transceptor se reflejan en WSJT-X y viceversa. EL disponer de una interfaz CAT no solo tiene la ventaja de cambiar la frecuencia, sino también eventualmente el modo (para el soporte de CW) y hasta encender o apagar el transmisor sin depender de un control VOX. Adicionalmente ésta versión de firmware explora otros modos digitales. Si bien el método de generación de señal utilizado por el transceptor ADX es una traslación lineal de frecuencia en respuesta a una señal de audio (se mide la frecuencia de audio y se desplaza una portadora piloto en dicha frecuencia) la misma no modula amplitud y por lo tanto no puede utilizarse para fonía (SSB), o se puede utilizar con una distorsión inaceptablemente severa (suena como una señal de SSB muy comprimida y con muchos "splatters"). Si, en cambio, debería poder ser utilizada para transmitir en cualquier modo digital donde la amplitud no sea relevante, por ejemplo CW, RTTY, PSK31 e incluso SSTV (sin audio). Esto tiene dos vertientes, por un lado que el firmware acomode la generación desde el punto de vista interfaz de usuario del modo y la otra es el modo mismo. Para implementar CW tomé un camino simplista, el manipulador vertical en paralelo con el botón TX y cuando se encuentra en ese modo la portadora es desplazada 600 Hz para dar el "shift" propio de una señal de CW, revirtiendo el desplazamiento al pasar a recepción. En principio la interfaz permite un manipulador vertical solamente y el desplazamiento puede ser cambiado pero al momento de compilar el firmware por lo que es fijo durante su operación. El grueso del trabajo se insume en definir una elaborada interfaz que permite transmitir alguna idea a quien opera la placa sobre en que frecuencia está (arriba o abajo relativo a la frecuencia QRP de cada banda).
Para implementar todas esas funciones aproveché e hice cambios en la modularidad del código para que las distintas funciones fueran mas estructuradas y permitieran cambios con mayor facilidad (cada cambio o función se hace en una sola parte del código). La versión experimental con todos éstos cambios implementados puede encontrarse como 1.2e en el siguiente link. Este enfoque de implementación es aún incompleto pues el CW se genera con un ataque y decaimiento brusco y genera algunos "clicks" que hay que eliminar en versiones futuras. Hay varias alternativas en discusión, una es un pequeño circuito adicional y la otra utilizar PWM para moderar el crecimiento del frente con cada manipulación.
Posteriormente, trabajando en equipo con Barb (WB2CBA) y Alan (AG7XS) desarrollé una versión nueva del código denominada 1.3e (link) donde se agregan tres funciones, mejoras en la implementación de CAT que permiten al programa WSJT-X configurarse como utilizando directamente un Kenwood TS480, disponibilidad de un pulso (preliminarmente en la linea D5) para activar un ATU al cambiar de banda y la posibilidad de soportar una placa QUAD con filtros finales para 4 bandas de manera que se selecciones el filtro adecuado para cada banda.
Finalmente una versión adicional denominada 1.4e (link) se agrega en forma opcional el formato CAT correspondiente al ICOM 746, el cual es mas veloz y eficiente para una plataforma pequeña. El mismo es mutuamente exclusivo con el correspondiente al TS480, al momento de compilar el firmware se elige uno u el otro.
Semejante nivel de modificaciones en el firmware se llevaron casi todo el tiempo disponible, pero aún así hay otras dos áreas de progreso.
Una es relacionado con la caja, es conveniente que una vez que se concluye la placa y se la empieza a utilizar en la estación como un equipo mas tenga alguna forma de cubierta; el diseño básico del ADX provee archivos Gerber (placas impresas) para la tapa y el fondo de manera de cubrir la placa propiamente dicha; pero tontamente no las pedí al hacerlo con las placas originales. Pero en forma cruda es posible pasar un formato Gerber (placa) a un formato STL (printer 3D) y es lo que hice para ambas tapas, el proyecto todavía preliminar puede obtenerse en Thingiverse (link).
La otra área de modificación consiste en explorar el uso de la placa original en la banda de 10 metros. Originalmente el firmware del ADX viene programado para las bandas de 40,30,20 y 17 metros. La hipótesis subyacente es que quizás el chip receptor (CD2003GP) no sea adecuado para frecuencias mas altas. Después de todo es, en esencia, un receptor de AM para banda media de bajo costo y su especificación solo habla de su comportamiento en 1 MHz. Sin embargo, ese chip es al mismo tiempo un receptor de FM comercial, por lo tanto su tecnología constructiva es difícil que tenga muchas diferencias entre una función y otra. De ser eso posible el ADX podrá ser utilizado en 15,12 y 10 metros, quizás incluso habría que probar en 6 metros aunque no sé que tanta actividad en FT8 hay en esa banda. Para eso construí una placa de filtro para 10 metros e hice algunos experimentos en 10 metros, los que resultaron satisfactorios en cuando a la sensibilidad. No es una gran sorpresa, incluso con un deterioro debido a la frecuencia el menor ruido de 10 metros y el margen de señal-ruido que tiene el modo FT8 deben ser suficientes para obtener una performance aceptable; queda todavía bastante por probar y todo empieza por construir una placa especializada en 10 metros de forma de probarla en forma continua.
Muchas cosas interesantes, poco tiempo para dedicarles.