viernes, 17 de febrero de 2023

ARRL DX CW 2023

 

Se viene en éste fin de semana el concurso internacional ARRL DX CW edición 2023 organizado por la ARRL. Éste concurso es uno de los mas importantes en el año, tanto por significado histórico, por nivel de convocatoria y también por otorgar puntaje para un número de eventos, entre ellos el WRTC.

Como siempre que hay un concurso cada uno se prepara como mas le gusta o le ha dado resultado.

A mi me ha dado resultado tratar de hacer pronósticos, siquiera aproximados, de la propagación con los que planear en que banda voy a participar. Una vez hecha esa elección el pronóstico me dá una idea de como planear los momentos de actividad, las paradas y los descansos.

Siendo un concurso de 48 horas, cuyo objetivo es comunicar con la mayor cantidad de estaciones de USA y Canadá, su duración está fuera de mis posibilidades reales de una participación completa en modo "single operator" por lo que seguramente hará una elección de "single band", ésto hace que se pueda aspirar a un resultado competitivo con una cantidad menor de horas de participación.

Para quienes participen en "multiband" o estén planeando una participación "multioperador" el pronóstico puede ayudar a planear los cambios de banda y la cantidad de operadores que deben estar disponibles.

El pronóstico es realizado con el método de analizar la frecuencia relativa de los spots en DX-Cluster como un predictor de nivel de actividad y por lo tanto de propagación, ambas cosas no son lo mismo pero es una necesaria aproximación.

El método lo he utilizado en los últimos 10 años por lo que puedo evaluar que pronostica con razonable aproximación el comportamiento de las bandas como para ser una herramienta útil de planeamiento, el resultado en el concurso mismo es por supuesto otra historia que depende de muchos factores. Sin embargo siempre es necesario hacer la aclaración que muchos operadores simplemente encienden su radio y participan "leyendo" la propagación tal como la encuentran.

La propagación es un fenómeno aleatorio que involucra energías de escala cósmica y cuyos mecanismos son comprendidos solo en forma superficial, por eso es probable que cualquier pronóstico esté equivocado, aún así algunos serán útiles y espero que éste lo sea.

La lectura es sencilla, las frecuencias se calculan relativas a cada banda con la actividad en la misma dentro de las 24 horas consideradas lo que dá la frecuencia denominada "mejor hora para la banda", ésta indicación será de interés a quienes participen en "single band", los colores en la gama del verde implican buenas condiciones de apertura mientras que la migración al rojo indican ausencias de propagación, siendo los amarillos y ocres estados intermedios.

Para los que participen en modo "multibanda" el cuadro que seguramente representará mas interés es el denominado "mejor banda para la hora", la frecuencia se calcula en éste caso entre todos los contactos de una determinada hora entre todas las bandas, obteniendo la que tiene mayor intensidad en esa hora. La representación de colores es la misma que en el caso anterior.

Para calcular las frecuencias se usa una mezcla entre los spots del Reverse Beacon Network y los del cluster manual el que en mi caso es el de Rick (LU9DA) (proporción 70-30%) usando reportes en éste caso hechos o indicando estaciones LU-CX con K-VE.

El pronóstico tiene sesgos importantes que deben ser comprendidos. El primero y principal es que, como se dijo, la propagación es un fenómeno aleatorio. Pero mas alla de eso también pueden ocurrir diferencias entre distintas semanas (éstos datos reflejan spots colectados el 11 y 12 de Febrero) respecto a las zonas solares con perturbaciones geoactivas. Finalmente, el componente social de la propagación, puede haber condiciones electromagnéticas pero ocurrir en horarios en que no hay operadores para aprovecharlas. Esto último es menos probable que pase en un concurso grande como el que nos ocupa, por lo que el pronóstico tiende a ser mas confiable en bandas altas (diurnas) que en bandas bajas (nocturnas).  

El concurso es una actividad de radio, en el que la gente participa para entretenerse o divertirse, ojalá que sea divertido para todos y que todos los que participen alcancen sus objetivos, cualesquiera que éstos sean.

martes, 7 de febrero de 2023

Proyecto ADX-rp2040


En la entrada anterior compartí la historia inicial del proyecto ADX-rp2040, naciendo como una evolución de mejoras para el firmware ADX original, el darse cuenta que la arquitectura Arduino no permite grandes agregados, la búsqueda de un reemplazo utilizando el Raspberry Pi Pico (rp2040) con ese propósito y los esfuerzos para generar una versión común para ambos.
El esfuerzo resultó esteril en cuanto a resultados por lo que terminé con cierta frustración luego de varios meses de trabajo. 
Pero a poco de pensar sobre la cuestión me di cuenta que era solo una cuestión táctica sobre el camino elegido (que resultó incorrecto) y no estratégica (utilizar un procesador rp2040).
En efecto, la plataforma rp2040 que mueve la placa Raspberry Pi Pico es un orden de magnitud mas poderosa que la plataforma Atmel328p que mueve la Arduino; carece entonces de sentido hablar en términos de agregar funciones que no entran bien en una placa (o directamente no entran) y tener que restringirse en las dos placas con una implementación híbrida cuyoo único propósito es mantener compatibilidad.
La esencia del proyecto es contar con un transceiver "simple" para HF que sea capaz de operar en FT8 (u otros modos digitales de baja señal) siendo alimentado por el audio generado por el programa WSJT-X (u otro similar) corriendo en una PC convencional.
Como comenté en la entrada anterior la portabilidad del código se logra adoptando las librerías de Earle Philhower (ver entrada anterior) denominado tambien "Arduino pico core" por lo que el firmware de ADX compila con modificaciones muy menores para el procesador rp2040.
Hay solo dos modificaciones significativas, ambas devienen de diferencias en la arquitectura de hardware. Una, la ausencia de EEPROM en el rp2040, tiene una solución mas o menos a mano, las librerías del Arduino pico core preveen formas de emular memoria EEPROM en memoria Flash (con algunas limitaciones) de tal manera que las instrucciones relacionadas con EEPROM compilen y operen correctamente. La segunda diferencia, mucho mas significativa, es la ausencia de una interrupción que permita contar cruces por cero de una señal analógica en el rp2040.
Eso afortunadamente estaba resuelto desde el "fallido" proyecto PDX, y de cuatro formas diferentes, por lo que solo era cuestión de elegir.
Y en efecto, como parte de una filosofía diferente en el cual muchas opciones eran alternativamente incluidas o excluidas mediante configuración, esta implementación hace estrictamente lo que hace el firmware original del ADX (tomando como base el correspondiente a ADX_UnO_1.1) sin alternativas u opciones de ningún tipo, con la excepción de aquellas partes del código que debían cambiarse por diferencias de arquitectura. La razón para tomar la versión de firmware ADX_UnO_1.1 en lugar de la previamente adoptada ADX_QUAD_V1.1 es que el primero tiene menos dependencias de hardware al no tener que soportar la placa QUAD (multibanda) e implementandose en un diseño monobanda, el cual es mas simple. Eso lleva a un código extremadamente simple, tan conciso como el original de ADX. Se sigue requiriendo adaptar el método de conteo de frecuencia, central al funcionamiento del firmware, para lo cual se toma ventaja de una característica única de la arquitectura rp2040 que consiste en disponer además del procesador principal (de dos nucleos) de 16 procesadores RISC independientes (PIO) capaces de almacenar programas cortos (firmware) pero potentes especializados en operaciones de I/O. Ese firmware se "carga" automáticamente a poco de arrancar el procesador mediante una serie de instrucciones especiales. Esos procesadores a traves de ciertos recursos de comunicación entre procesos pueden interactuar con el código principal De esa forma un procesador PIO (Peripherical I/O) se encarga de medir el tiempo entre pulsos consecutivos en la entrada para que luego el programa principal con una cuenta simple pueda calcular la frecuencia y con ello operar las etapas de RF para lograr la síntesis directa de la señal PSK.
El código resultante lo denominé ADX-rp2040 (sitio Github) y mi compromiso es mantener al mismo con funcionalidades similares al ADX de base operando en la plataforma Arduino, pero sin funciones adicionales (bueno, no muchas mas al menos). 
La única diferencia a ese criterio es que  el firmware ADX tiene una función de "calibración" del DDS (Si5351) que permite con la ayuda de instrumentos establecer cual es la corrección que debe realizarse en un chip en particular para que su frecuencia se exacta, la diferencia puede ser de unas pocas decenas de Hz. El ADX logra eso colocando una salida del Si5351 (CLK2) no utilizada con otro propósito en 1 MHz, y luego ir manualmente variando lentamente la frecuencia hasta que externamente se detecte que la frecuencia es realmente 1 MHz, a la corrección necesaria para lograr esa condición se la graba en EEPROM y se la aplica cada vez que arranca el código. En ADX-rp2040 es mucho mas facil directamente medir la frecuencia del CLK2 con el procesador rp2040 (dada su mayor potencia) por lo que no son necesarios instrumentos externos, simplemente en modo calibración el firmware puede hacer toda la operación e ir realizando las correcciones de manera que el error sea +/-2 Hz en forma automática.
Ahora bien, el firmware es todo lo parecido al original de ADX que es materialmente posible, pero el hardware tiene que ser modificado respecto a una placa ADX para funcionar correctamente.
La principal diferencia es obviamente que el Atmel328p y el rp2040 no son compatibles pin por pin, por lo que hay hacer un ruteo general de puertos. La segunda diferencia es que la placa Arduino se alimenta con +12Vcc y un regulador interno provee los +5Vcc para que opere el procesador, esa misma tensión es aprovechada para que el resto de la lógica de la placa funcione pues su consumo es suficientemente bajo para que eso sea posible. El rp2040 funciona con +3.3Vcc y debe ser alimentado por +5Vcc por lo que es necesario un regulador de tensión externo para bajar de +12Vcc a +5Vcc y de alli alimentar al procesador. Finalmente, los puertos de I/O requieren lógica de +3.3Vcc y no de +5Vcc, por lo que hay que tomar medidas para que no lleguen tensiones incorrectas, afortunadamente los tres botones push que tiene la placa ADX pueden ser alimentados con "pull-up" interno con lo que con solo no poblar las resistencia externas de pull-up. Finalmente, la forma de contar frecuencia se beneficia mucho con disponer de pulsos mas netos (mas "cuadrados") que la señal de audio senoidal, de esta forma pasado un umbral se hace innecesario la calibración de los niveles de medición y para ello por lo que se utiliza un comparador con ese propósito de forma que la señal sea encendido o apagado en forma neta. En realidad se usan dos, seleccionables, uno simple basado en MOSFET y otro mas sofisticado basado en comparador. Ambos funcionan muy bien.
Finalmente está la tarea de construir el transceiver. Obviamente que puede encararse como un proyecto de complejidad media simplemente cableando las conexiones de todo el circuito; pero uno de los grandes atractivos del proyecto ADX es su simplicidad, la que en buena medida se basa en disponer de una placa de circuito impreso relativamente económica que se puede mandar a fabricar para luego simplemente poblar unos cuantos componentes mas o menos simples y tener un circuito que salvo errores mayores sale andando siempre. Está también la cuestión de contemplar a quien ya tiene una placa ADX, realmente no tiene gran incentivo para construir una placa como la necesaria para operar el firmware ADX-rp2040 para hacer mas o menos lo mismo que puede hacer con el ADX. Obviamente que la solución de fondo es hacer una placa completamente nueva que evolucione desde la ADX original con los cambios necesarios. Pero al mismo tiempo al ADX-rp2040 es un primer paso en un proyecto mas ambicioso y por lo tanto es probable que vaya mutando con el tiempo. Resultó una idea interesante hacer una "placa-hija" (daughterboard) como la mostrada en la foto, donde toda la circuitería adicional se solucione en ella y que presente un pinout idéntico al del Arduino Nano. Por lo que es posible enchufar la misma en una placa ADX estandar y operar el firmware ADX-rp2040. Es decir una forma de acceder al nuevo procesador y eventualmente a su camino de evolución protegiendo el trabajo hecho hasta el momento con la placa ADX. El diseño de esa placa lo realizó Barb (WB2CBA) y los archivos de diseño para su construcción (Gerber) se encuentran disponibles en el sitio GitHub del proyecto ADX-rp2040.  Si luego, en el tiempo, el diseño prospera y se estabiliza quizás exista una masa crítica de interesados en una placa que sea nativa del rp2040, lo que implica sacar el diseño circuital del Arduino Nano y agregar lo que tiene la placa original del daughterboard (¿ADX+?).
El proyecto empieza a tomar forma, lo suficiente para poner manos a la obra y comenzar la siguiente fase, el RDX.




lunes, 6 de febrero de 2023

Habíase una vez .... El comienzo del ADX-rp2040

 

En entradas anteriores comenté distintas alternativas del proyecto ADX cuyo autor es Barb (WB2CBA), empezando por su estudio e implementación iniciales, luego modificaciones a su firmware para finalmente explorar los límites de la placa en frecuencias superiores a las originalmente concebidas por su autor. Es un proyecto muy interesante con el cual tuve la oportunidad de hacer varios experimentos, los que oportunamente fueron documentados en entradas previas de éste blog.
Al introducir nuevas funciones o modificaciones de las anteriores en el firmware fui también modificando el "estilo" base en el que está escrito, simplemente por una cuestión de experiencia sobre que constituye código robusto y que no lo es. Al mismo tiempo fui agregando funciones que objetivamente creía conveniente realizar. Aplicando prácticas mas o menos establecidas de evolución de productos e integración de funciones tuve la precaución de codificar las modificaciones con una técnica llamada "control de configuración" donde el código puede modificar su comportamiento en función de directivas externas en tiempo de compilación. De esa manera incluyendo una directiva del estilo de "#define CAT 1" puedo hacer que todos los segmentos de código relacionados con la implementación del CAT sean incluidos o excluidos. Haciendolo con todas las modificaciones es posible ir agregando las distintas funciones una por una y en cualquier orden sin que interaccionaran entre si, condición que técnicamente recibe el nombre de "alta cohesión y bajo acoplamiento" de funciones. El resultado es un código mas extenso y mas complejo, no solo porque hace mas cosas sino porque también existe una infraestructura de código para gestionar las alternativas de configuración. Habiendo puesto el código resultante en el dominio público (como ADX_QUAD_V1.5) encontré rápidamente que había un inconveniente fundamental. Hay demasiadas versiones de firmware independientes entre sí, sin la mas minima coordinación entre sí; situación que rápidamente hace que las funciones sean incompatibles entre si y que no se sepa cual hay que tomar de base para agregar alguna función. Al mismo tiempo, y casi completamente en dirección opuesta, los usuarios habituales de la plataforma ADX no apoyaban el incremento de complejidad y preferían claramente un código relativamente escaso en funciones pero pequeño tal como el original de ADX. Llegué entonces a la conclusión que no valía la pena el esfuerzo de trabajar en una versión mas grande y compleja, que agregaba funciones que no siempre eran entendidas para que (pues el firmware original no las tiene) y que además no era tenida en cuenta como base para agregar nuevas funciones, debido a ésto último no justifica el esfuerzo de trabajar en una cosa así. 
En realidad esa versión se trataba de una función de referencia no ya para que fuera utilizada por toda la comunidad ADX existente sino que además era la plataforma para plantear la migración a un procesador mas potente.  El procesador elegido es el ARM rp2040, corazón de la placa Raspberry Pi Pico. 
Siendo que se trata de un procesador casi un orden de magnitud mas potente que el original del Arduino
En efecto, al agregar unas pocas funciones al firmware original ADX rápidamente se llega al límite de memoria que puede manejar un procesador Atmel328p, corazón del Arduino Nano, por lo que es dificultoso agregar mayor complejidad (mayor cantidad de código). Por lo que por mas que las funciones se agreguen incrementalmente deja de tener sentido una base común si lo fundamental solo funciona en una plataforma. Es una manera de limitar o restringir, artificialmente, ambas.
Se intentó hacer un esfuerzo mancomunado para "portar" el código de referencia ADX_QUAD_V1.5 a uno nuevo, denominado PDX (Pico Digital Transceiver) el cual esencialmente requiere una placa igual a la ADX pero con una placa Raspberry Pi Pico en lugar de una Arduino Nano, todo el resto idéntico.
El esfuerzo, significativo, implicaba no solo lograr que el firmware ADX pudiera funcionar en un procesador distinto, con una arquitectura distinta sino que en su esencia se mantuviera un solo código para ambas placas (ADX y PDX).
El firmware ADX está desarrollado utilizando el Arduino IDE (Integrated Development Environment) mientas que el ambiente de desarrollo para Raspberry Pi Pico está basado en el IDE Eclipse utilizando un conjunto de librería llamados el Pico-SDK (Software Development Kit), ambos incompatibles como habría de suponerse.
Eso se superó parcialmente gracias al enorme trabajo de Earle Philhower III, quien creo una serie de librerías (link) que una vez instaladas en un Arduino IDE (instrucciones) permite compilar indistintamente para un Arduino a para una multitud de placas basadas en el procesador rp2040. 
El nivel de implementación es excelente, la mayor parte de la librerías que funcionan en Arduino también lo hacen bajo éste ambiente, aunque hay algunas variantes en aquellas caracteristicas que son diferentes entre un Atmel328p y un rp2040 a nivel de hardware.
Una diferencia en particular es que la forma de medir la frecuencia en el firmware ADX utiliza interrupciones y comparadores en hardware que el rp2040 no tiene, por lo que no es directamente portable.
La solución fue bastante trabajosa e implicó desarrollar en forma independiente cuatro diferentes formas de realizar la medición de forma de medir cual es la mejor; siguiendo con las caracteristicas de configuración mencionadas los cuatro métodos podían ser configurados independientemente.
Este enfoque de trabajo implica una coordinación muy precisa pues cualquier modificación para una arquitectura tiene que ser propagada para la otra, y teniendo en cuenta que un firmware está difundido y el otro está en desarrollo implica en ocasiones liberar en forma desbalanceada (incluir una modificación selectivamente en una plataforma y no en la otra). El esfuerzo para hacer eso es enorme.
Por su parte todas las nuevas funciones que se agreguen en la nueva plataforma (PDX) requiere un cierto grado de "retrocompatibilidad" a las correspondientes en el firmware "base" (ADX). Por ejemplo, rápidamente surgió para que ponerle LED o "push button" toda vez que la nueva placa probablemente tuviera un LCD TFT display, sin embargo sin ellos el ADX no funciona.
El proyecto entró en un circulo vicioso, por un lado la comunidad existente ADX no convergía a utilizar al versión 1.5 del firmware para ninguna actividad y la comunidad desarrollando el PDX no veía la
necesidad (y el esfuerzo adicional) de mantenerse compatible con ADX, generandose continuamente segmentos de código en violación a esa condición, completaba el escenario cierta disfuncionalidad en los acuerdos de metodología de trabajo entre el grupo de desarrolladores.
La situación se hizo insostenible, y luego de no pocas frustraciones anuncié entonces que retiraba del dominio público a la versión ADX_QUAD_V1.5, cosa que hice efectivamente y también discontinué todo el código desarrollado para PDX hasta ese momento (el cual mayormente tenía contribuciones mias).
Pero, el proyecto era demasiado lindo para terminar así, y había invertido una cantidad enorme de tiempo para llegar a ese punto. Juntando los pedazos nació el proyecto ADX-rp2040, pero eso es historia para la próxima entrada.






sábado, 31 de diciembre de 2022

HNY 2023!


Este ha sido un año muy especial, en el que han ocurrido grandes cambios en mi vida personal. Cambios algunos que acompañan la vida misma, otros que son las respuestas que todos encontramos para mantenernos en movimiento. Y eso me ha mantenido alejado de tener una frecuencia de escritura en éste blog con un gran número de proyectos interesantes en los que estuve involucrado y actividades de radio que he podido realizar.

He participado en concursos, he realizado investigaciones, he desarrollado proyectos de hardware y software y muchas otras actividades interesantes.

Pero es un poco tarde para intentar ponerme al dia justo ahora, el último dia del año. Ya el 2023 con un poco de suerte, y algo de disciplina para tomarme el tiempo de generar documentación de lo hecho, lograré volcar en éste medio resumenes de las actividades que voy realizando. 

Desde hace mas de 20 años (primero en lu7hz, luego aquí como lu7did y ahora como lu7dz) solo resta a esta altura celebrar, todo lo relevante para éste blog se ha dicho en el año que se está yendo, y lo que no se pudo decir se dirá en el próximo.

Finalmente, y ahora si,  cuando termine el dia de hoy en el lugar que cada uno de nosotros esté levantemos las copas y pensemos mucho en nuestros planes futuros  mientras lo hacemos, junto a nuestros afectos. No sabemos si tendremos futuro, pero si lo hay... ¡que no nos encuentre sin planes!




domingo, 17 de julio de 2022

El ADX no pregunta cuantas bandas son, ¡sino que vayan viniendo! ... ¡ahora 10 metros!

 

El Arduino Digital Transceiver (ADX, Transceptor Digital basado en Arduino), diseño originalmente de Barb (WB2CBA) ha sido en el último par de meses el objeto de mi tiempo de experimentación, tal como se da cuenta en entradas anteriores de éste blog.

No es para menos, se trata de un diseño muy sencillo, fácilmente reproducible, flexible, que anda muy bien y da muy buenos resultados.

Aprovechando que la tirada mínima de placas era de cinco (5) hice hasta ahora varios, uno de ellos para desarrollar el firmware, otro para operar en la estación y un tercero para llevar a cabo el experimento que comento en ésta entrada.

He trabajado bastante en desarrollar una versión experimental del firmware que soporta una serie de funciones que en el software original no están contempladas, tales como un watchdog de transmisión, manejo optimizado de la memoria EEPROM, soporte de CAT (TS480 e IC746), posibilidad de operar en CW, capacidad de tener una terminal de configuración y otras funciones. El firmware original  está configurado para soportar cuatro bandas, a saber 40,30,20 y 17 metros. La placa en si es monobanda, pues depende de un filtro pasa bajos que permite la operación en clase E de alta eficiencia y el mismo es óptimo para solo una banda. 

Sin embargo la idea es que se puedan enchufar varios filtros según la banda que se opere. Es un juego un poco peligroso porque si bien la placa tiene protección para impedir emitir sin el filtro (los +12V de la etapa de salida se canalizan por el filtro, por lo que si no está la misma no recibe alimentación). No hay sin embargo control que el filtro enchufado sea consistente con la banda que se está operando, cuestión que está recibiendo cierto grado de discusión entre quienes estamos participando en el desarrollo y mejoras del firmware. Otro participante del esfuerzo de desarrollo, Alan (AG7XS) está por su parte trabajando en filtros multibanda. Barb, por su parte está llevando adelante una "daughter-board" llamada QUAD que funciona como un filtro seleccionable de 4 bandas que puede ser controlado por software. Mientras tanto la frecuencia máxima a la que se supone opera el ADX es 17 metros (18 MHz), dejando fuera las bandas de 15,10 y ... ¿6 metros?. No hay, aparte del filtro, ningún limitante en la cadena de transmisión con la posible excepción del integrado 244, tanto el módulo Si5351 que se utiliza como DDS como los transistores de salida BS170 pueden operar perfectamente en bandas mas altas. 

Sin embargo, en recepción el integrado CD2003GP es dudoso que pueda trabajar a frecuencias tan altas, después de todo es un receptor AM de bajo costo utilizado como receptor de conversión directa. La hoja de datos exhibe mediciones en 1 MHz, infiriendo que sea ésta la frecuencia típica de uso. Sin embargo, mi razonamiento es que ese chip es también un receptor de FM (88-110 MHz) por lo que es improbable que los receptores de AM y FM tengan parámetros de chip tan diferentes. Así que me lancé a construir una versión para 10 metros. El primer punto fue diseñar un filtro adecuado a esa frecuencia. Partí de valores aproximados que me compartió Barb pero les pegué un retoque con el programa de cálculo de filtros de salida para amplificadores clase E (link), los valores son muy parecidos.  

Al ponerlo a funcionar inmediatamente se iluminó la recepción con muy buena captura de señales (comparando con WSJT-X corriendo en una PC grande y una antena Yagui), primer conclusión, al CD2003GP le da el cuero para operar en 10m (y por transitiva en 15m), muy buena noticia porque eso significa que el transceiver puede (en recepción) cubrir toda la gama de bandas de HF. En transmisión, luego de una falla provocada por uno de los transistores de salida en corto, con algo menos de excitación proveniente del 244 aún así se puede operar con 1 a 2W de potencia de salida. Mas que muy suficiente para tener una cobertura y operación global. De hecho, en el primer día de operación pude hacer con comodidad con esa potencia baja estaciones de EU y NA, quizás mas a la noche si la propagación acompaña algo de JA.

Queda picando ahora comprobar si también llega a 6 metros, no tengo duda alguna que la cadena receptora andará bien. Tengo, si, mis duda con la transmisora por el comportamiento del 244 como excitador. Supongo que eso puede ser compensado por los menores requerimientos de potencia que tiene la "banda mágica" cuando se abre. ¡No queda mas remedio que probarlo!


FT8 Radio y (tr)uSDX, ¡un duo dinàmico!

Hace algún tiempo, en entradas anteriores, comenté el curioso derrotero que siguió el diseño (tr)uSDX de Manuel (DL2MAN) como evolución del transceptor "open source" uSDX, el cual a su vez deriva del diseño QCX-SSB de Guido (PE1NNZ), el cual se basa en el transceptor archifamoso QCX de Hans Summers (G0UPL).

El proyecto en si tiene pros y cons, por un lado es un refinamiento del diseño "sandwich" previo de Manuel, al cual se lo ha miniaturizado aún mas para incorporar increíbles 5 bandas en un diseño poco mas grande que un mazo de cartas.

El mismo proporciona alrededor de 3W de potencia, al menos en 40 metros pues no lo probé en el resto de las bandas, y sigue la interfaz clásica del QCX-SSB con dos botones y un dial/pulsador. En teoría puede operar en USB/LSB/CW/AM/FM y  da soporte a CAT (Kenwood TS480) por medio de un puerto serie-USB. Su gran "con" es que se trata de un proyecto no necesariamente con fines de lucro, pues se puede obtener en kit por un costo nominal, pero si cerrado pues su firmware no es público. Si bien el transceiver viene ya programado con un firmware actualizado las actualizaciones subsecuentes hay que hacerlas recurriendo a una clave provista con el aparato (que hay que enviar a Guido, para que el retorne una clave de activación). Todo muy alambicado y posiblemente inútil.

Pero bueno, para probarlo se me ocurrió hacerlo en FT8, modo en el cual estoy dedicando la mayor parte de mi tiempo de experimentación para construir el firmware experimental del transceptor ADX (ver entradas anteriores sobre ese proyecto).

Pero en lugar de conectarlo a la placa Raspberry Pi que utilizo como controlador de mi estación digital para generar FT8 a partir del programa WSJT-X quise seguir los pasos de Adam (K6ARK), un entusiasta de las operaciones tipo SOTA, quien en un reciente video en su canal de YouTube (link) utilizó al transceptor (tr)uSDX junto a una aplicación para el teléfono celular (Android) denominada FT8 Radio desarrollada por Dhiru Kholia (VU3CER).

La misma es capaz de procesar las señales de audio FT8 proveniente del transceiver y de generarlo, con lo que puede operarse FT8 sin otro recurso, como es altamente probable que uno tenga que llevar un teléfono celular de todas formas baja drásticamente lo necesario para operar portátil.

El programa tiene un registro de llamadas algo rústico, pero creo que suficiente pues permite exportar a formato ADIF para procesarlo en otro lugar. La interfaz de manejo es intuitiva aun que un poco engorrosa, pero suficientemente ágil como para permitir operar FT8 sin problemas.

El aplicativo soporta algunos protocolos CAT, entre ellos (aparentemente) el del TS480 pues dice funcionar con el transceptor uSDX, pero no he logrado que funcione aún. No obstante se puede operar perfectamente utilizando el transceptor activado por VOX. Completa la configuración un adaptador "Y" de plug 3.5" para celular de 5 polos a dos jack de audio 3.5" stereo.

Como todo diseño que se precie el "maiden QSO" lo hice con la estación de Juan (LU5MBB) quien llamaba general en el momento de la prueba, a pesar de una banda concurrida, una antena dipolo rígido y solo 1W de potencia pudimos hacer rápidamente QSO con un sustentable -4 dB de reporte.

La intención última es poder hacer funcionar éste programa con el transceiver ADX, pero por el momento el control VOX "zapatea" un poco y el teléfono celular parece no poder entregar suficiente señal por lo que seguramente la clave estará en operarlo por CAT, resta alguna experimentación.

¡Realmente es una combinación fantástica y muy facil de usar!


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.

martes, 31 de mayo de 2022

"Antípodas, pibe..."


Muchas veces conecto situaciones técnicas, operativas e incluso vivenciales con momentos y enseñanzas que pasé con quienes fueron mis mentores en la radio.

 He referido en muchas oportunidades que quizás ahora me es relativamente sencillo hilvanar conceptos técnicos relativamente complejos, pero una cosa es hacerlo ahora con mas de 45 años de experiencia profesional y otros tantos de formación académica superior. Una historia muy diferente era cuando empezaba en radio, tenía 12 años y no sabía absolutamente nada del tema, quizás con la excepción que si sabía que me gustaba. La mayor parte de mis maestros y mentores de entonces han fallecido y no puedo repetirle las gracias, pero al menos puedo a partir del reconocimiento intentar proveer aunque sea un poco de lo que ellos me dieron con entradas como ésta, que ojalá inspire a otros que estén empezando (o no tanto) como en su momento me inspiraron a mi.

Cuando empecé en radio tenía un equipo valvular de AM de unos 25W, que funcionaba en 80 metros (3.5 MHz) adosado a una antena algo precaria por limitaciones de espacio; por entonces mi actividad era mayormente local (50 Km o menos) con, ocasionalmente contactos en el rango de 500 a 1000 Km en días de muy buena propagación.

Leía revistas de radio donde hacían pronósticos de propagación donde las coberturas globales ocurrían en bandas a las que no tenía licencia (ni equipo) para acceder como 20 o 15 metros; ocasionalmente había pronósticos de propagación de alguna distancia (Sudamérica, Sud-Africa) para la banda de 40m donde mi equipo si podía operar con algunas modificaciones que con el tiempo hice aunque la licencia me permitió operar allí bastante tiempo después. En ningún caso escuché estaciones de las distancias pronosticadas ni en 80 metros ni en 40 metros. Pasarían varios años antes que pudiera tener un equipo se SSB, empezara a hacer telegrafía y pudiera tener una antena decente.

Con el tiempo, las mejoras de equipo, el pulido de habilidades operativas y  el creciente dominio de CW pude disfrutar de alcances como los que antaño en mi niñez indicaban los pronósticos, hoy es rutinario tener abundantes contactos con Japón, Corea, China y Rusia Asiática en CW, incluso con baja potencia. Con el tiempo he podido completar no uno sino varios DXCC en distintas modalidades, e incluso completar mas de 100 países en un solo fin de semana durante un CQ WW en el "peak" de propagación pasado.

Volviendo a mi niñez cuando le preguntaba a Don Ernesto Stellini (LU5EZ,SK) cual era el mejor logro que se podía lograr en radio el me decía "Antípodas, pibe...". El había sido recordman sudamericano en la banda de pre-guerra de 56 MHz, antecesora de la hoy banda de 50 MHz, en su contacto con Nueva Zelanda. Antípodas en términos geográficos es el "opuesto" geográfico, es decir donde llegaríamos si caváramos un imaginario túnel desde donde estamos saliendo en el lado opuesto de la Tierra. Para los americanos Australia o Nueva Zelandia es antípodas, pero para nosotros si hiciéramos ese túnel imaginario emergeríamos en algún lugar de China. Pero, detalles geográficos al margen, antípodas tiene el significado general de ser el complementario a 180 en longitud de donde estamos. Y ciertamente allí si caen Australia, Nueva Zelandia y Lejano Oriente.

Para mi, desde esos ecos lejanos cada vez que trabajo países en las "antípodas" tiene un sabor especial, es un logro especial. Hay veces que es mas difícil que otros, de hecho en mi experiencia siempre ha sido mas difícil contactar países en la franja de longitudes que incluye Asia Central, India y Océano Indico que se extiende hasta la península arábiga y Medio Oriente. Un poco por cuestiones de población pues hay muchos paises en esa región donde hay muy pocos aficionados pero también por propagación, no hay camino solar en en 10m y no hay camino obscuro bandas mas bajas. Los contactos siempre son en alguna ventana en 20 o 15 metros, breves ventanas en las que hay que estar muy atentos o en ocasiones de camino largo sobre el polo Norte. Tal es así que operé por primera vez en mi vida paises como Bangla Desh, Sri Lanka y Nepal cuando operé años atrás como estación VU en uno de mis viajes a la India.

Nuevamente, los ecos de los recuerdos no saben de dificultades técnicas y "antípodas" siempre tiene un sabor especial. 

Lo experimento en la tradicional apertura en 40 metros CW con JA de nuestro amanecer en otoño y primavera, o en el atardecer tardío o primera noche en 10 metros CW también con JA también en CW; a pesar de las horas extrañas que implican siempre hago un momento para disfrutar esas ventanas, siempre breves.

La exploración de los reportes de señales en FT8 tanto en 40 metros como en 10 metros cuenta también una historia de aperturas mas largas que en CW, sobre todo con JA, VK y ZL donde he tenido la oportunidad de contactar muchas veces recientemente en 40 metros FT8.

Al poner en funcionamiento el transceiver ADX (comentado en otra entrada) en 40 metros tenía expectativas de poder cubrir con el a nivel pais y regional, 2000 Km o menos, tiene, después de todo un receptor muy sencillo y lo he ajustado para una potencia de salida de algo menos de 2W. Para mi sorpresa cuando se produce la apertura he tenido oportunidad de trabajar Nueva Zelandia, cuando pude contactar con Andy (ZL1VAH), poco después de las 4am hora local (0713Z). No se con que potencia transmite Andy, pero su reporte de -18 dB SNR para mi señal implica que tendría que haber usado +24 dB mas de potencia para poder sostener el mismo contacto en SSB, ésto es debería haber utilizado 2 KW de potencia o 1 KW y una antena direccional (a tiro de mi estación en éste momento), mientras que en CW podría haberlo hecho con 100W (mucho mas a tiro de mi estación).

Como sea cuando se completó el contacto, con un transceiver fruto de intensa experimentación que construí con mis manos, de solo 2W de potencia sobre una antena dipolo rígido, con firmware adaptado por mi me transporté 50 años al pasado y sentí la misma sensación que entonces, solo faltaba Don Ernesto diciendo "Antípodas, pibe..." y tenía razón, la sensación de logro es enorme.

 



miércoles, 18 de mayo de 2022

Il vero ADX ...Transceptor minimalista para señales débiles en HF

El proyecto ADX es una iniciativa que está, creo, destinada a causar una huella en los proyectos que gustan a los experimentadores.  El ADX (Arduino Digital Transceiver) diseñado por Barb (WB2CBA), prolífico autor para diseños derivados del concepto uSDX (link) en particular el denominado MoNo, tiene atractivos que rayan con lo imposible de evitar. En palabras de su autor como un diseño simple de adquirir sus partes, simple de construir y simple de calibrar y que sea muy económico. Demasiado bueno para ser cierto. Pero ésta vez lo es. El proyecto es discutido en cierto detalle en sitio GitHub (link), en el blog de Barb (link) y en un artículo en QRZ News (link). El diseño es realmente muy simple, la cadena receptora gira alrededor de un chip CD2003GP que es un integrado pensado para realizar radios de AM y FM económicas, al cual se le utiliza el segmento de AM para implementar un receptor de conversión directa. Como oscilador local se utiliza una de las salidas de un módulo DDS implementado alrededor del chip Si5351. Como parte del concepto de simplificación en vez de usar el chip Si5351, el cual tiene un formato SMD y requiere cierto acondicionamiento de señales, se utiliza directamente un módulo comercial el cual básicamente hay que proveerle alimentación (+5V/GND), dos señales I2C de control (SDA/SCL) y extraerle la señal de RF a partir de una de tres entradas (CLK0/1/2). Para poder controlar al chip se utiliza una placa Arduino Nano el cual configura al DDS para que emita una señal de oscilador local por su puerto CLK1. En éstas condiciones la cadena receptora toma las señales, las demodula y el resultado se entrega en el puerto de audio de salida. Es un receptor muy simple, un poco mas sofisticado que el de un Pixie donde la conversión directa se logra en el mismo transistor de salida operandolo en baja señal y mas simple que un chip de propósito general como el Si4732.

En transmisión el controlador programa al DDS para que la señal del oscilador sea emitida por el puerto CLK0 (apagando CLK1 y el receptor), la señal es amplificada por un buffer 74HC244 (en algún momento en el pasado experimenté con un transmisor de CW basado en ese concepto, link), pero para obtener una potencia un poco mas alta se recurre a tres transistores BS170 en paralelo, con lo que puede obtenerse una potencia del orden de los 3-5W dependiendo del ajuste y la antena.

Este tipo de diseño de salida se está transformando en standard, se utilizan muchos transistores económicos tipo MOSFET de los que usualmente se utilizan para baja señal (podría utilizarse también el 2N7000 que es mas fácil de conseguir, al menos para bandas bajas de HF dada su capacidad de entrada). Los transistores MOSFET funcionan mejor en paralelo que los correspondientes bipolares y no requieren de realimentación negativa para compensar sus diferencias. Se operan, además, en clase E de alta eficiencia, tan alta eficiencia que no es necesario ni siquiera poner un disipador a los transistores (aunque eso requiere que siempre tengan una carga apropiada pues su capacidad de disipar potencia en exceso es limitada). Para operar en clase E es necesario construir un tanque de salida que además del consabido funcionamiento como filtro pasa bajos ofrezca los valores correctos de impedancia reflejada. Terry (WA0ITP) provee un calculador para éste tipo de circuitos (link). No me imagino que salvo para equipos extremadamente simples utilicemos otro tipo de amplificador que no sea de éste tipo, algunos recursos de como funciona (link1, link2). Este tipo de amplificador sirve para señales que no tengan información de amplitud, sin embargo tal como se utiliza en el diseño uSDX se puede subsanar eso con una modulación simultanea de la amplitud.

El diseño de Barb solo utiliza el tanque de salida como único circuito sintonizado de todo el transceptor, y si bien no ofrece mecanismos de conmutación entre diferentes tanques para diferentes bandas utiliza un sistema de filtros "enchufables" de manera que se tenga que enchufar el correcto para cada banda; eso lo hace muy simple pero también bastante peligroso, hay una protección para evitar que el equipo se ponga en modo transmisión sin el filtro enchufado, la alimentación de +12V le llega a la etapa de salida a través del filtro por lo que si no está no hay potencia de salida. Sin embargo es mucho mas facil emitir con el filtro de la banda equivocada, y dependiendo de la ROE que tenga en esa banda el resultado puede no ser bueno para la etapa final. Lo realmente novedoso de éste diseño, optimizado para modos digitales de baja señal como FT8, FT4, JS8Call y WSPR, es como genera la señal. 

Generar una señal de, por ejemplo, FT8 es realmente simple y requiere muy poca potencia de procesamiento, básicamente se tiene un mensaje a transmitir, se lo codifica con el algoritmo redundante para generar el mensaje y se lo emite cambiando periódicamente la frecuencia de acuerdo al símbolo a transmitir. Las variaciones entre símbolos son suficientemente lentas para que cualquier procesador, por pequeño que sea, no tenga dificultades en programar los cambios de frecuencia en un DDS. Hay múltiples diseños disponibles de emisores WSPR usando tanto el AD9850 como el Si5351 con ésta técnica. Sin embargo, para transmitir en FT8, con mensajes cambiantes, hay dos alternativas. O se genera un programa capaz de codificar completamente el mensaje (como hago en el proyecto OrangeThunder) o se procesa de alguna manera la señal de audio proveniente de una PC o una Raspberry Pi corriendo el programa WSJT-X. El enfoque utilizado por el transceiver uSDX es procesar la señal de audio en forma digital de forma de extraer las componentes de fase y amplitud de la misma y utilizar una técnica muy ingeniosa para modificar la frecuencia del DDS Si5351 y la amplitud de la señal de salida de manera de tener una emisión lineal, capaz de generar cualquier modo (SSB, CW, FM, etc). Como el uSDX también utiliza un procesador Arduino Nano hacer semejante procesamiento en un procesador de 16 MHz de clock (20 MHz en el uSDX) requiere exprimirlo al máximo, cosa que Guido (PE1NNZ) consiguió.

Sin embargo, ya en el kit QDX de QRPLabs (Hans Summers, G0UPL), el enfoque para un transceptor especializado en modos digitales es otro, en vez de procesar digitalmente la señal de entrada para obtener su fase y su amplitud se puede descartar lo segundo pues no es necesario en modos digitales. La fase y la frecuencia son magnitudes "hermanas", teniendo la una se obtiene la otra por integración o diferenciación según de cual se trate. Entonces puedo medir la frecuencia de la señal de audio de entrada, la cual estoy razonablemente seguro en modos digitales que es un tono puro y no una señal compleja, y con el resultado de la medición cambiar la frecuencia del DDS por encima de una frecuencia base (por ejemplo 7.074 MHz para FT8 en 40m). A éste modo de generar la señal se lo denomina síntesis directa de SSB.

A pesar que el mensaje es corto (menos de 15 segundos) ésta forma de medición es muy eficiente computacionalmente y el procesador puede, utilizando interrupciones por nivel y los Timer disponibles, realizar muchas mediciones por cada segundo, de hecho millones de ellas. De hecho puede obtener unas 10 mediciones por cada microsegundo, lo que mas que dá un buen margen para muestrear una señal cuyo ancho de banda máximo es de 3 KHz (según el teorema del muestreo deberían obtenerse mas de 6000 muestras por segundo, en la práctica se obtienen muchas mas).

Hans comparte el algoritmo en el manual del transceptor QDX (link pag 57), sin embargo Barb extrae el algoritmo de una publicación de Burkhard Kainka (DK7JD) en su blog titulado Geführte FSK-Modulation mit Timer1 Caption" (Modulación FSK utilizando el Timer1) el cual incluye el algoritmo para utilizando el TIMER1 del procesador ATMega382p medir con mucha precisión la frecuencia del tono de entrada. Básicamente se configura que ocurra una interrupción cada vez que la señal tiene un cruce por cero y se utiliza el timer en su modo mas veloz (16 MHz) para contar cuantos pulsos de clock hubo entre interrupciones sucesivas, al hacerlo de ésta manera se puede conocer la frecuencia con resolución de fracciones de Hz, más que suficientes para operar FT8. Burkhard encuentra necesario utilizar un filtro pasabajos para justamente evitar que ruidos que pudieran estar presentes en la salida de audio del PC por encima de la frecuencia de corte generen aliases. El transceptor funciona muy simplemente, ni siquiera utiliza alguna forma de PTT, básicamente si detecta que hay un todo de audio se pone en modo transmisión, opera con un sistema VOX bien simple. El circuito es un transceptor solamente, por si mismo es incapaz de generar las señales de audio en modos FT8 u otros, tampoco de decodificarlas, para eso hay que usar una PC corriendo el programa WSJT-X y alguna placa de sonido para recibir y emitir las señales de audio necesarias. He probado tanto con una PC de escritorio, como una tableta como una placa Raspberry Pi, anduvo excelente con todas como era de esperar.

El resto de la implementación hace juego con la simplicidad conceptual, el transceptor asume que puede trabajar en 4 modos (FT8,FT4,JS8 y WSPR) en cada banda y pueden programarsele hasta 4 bandas; el firmware original viene configurado para 40,30,20 y 17 metros. Barb dice en la documentación que el cree que el chip CD2003GP puede ser limitado para funcionar en bandas mas altas, pero creo que eso hay que probarlo aceptando que habrá una degradación de funcionamiento pero evaluando si aún así la performance no es buena. En transmisión con el filtro de salida adecuado la cadena transmisora no tiene limitante alguno, en recepción habrá que ver hasta donde llega el chip receptor sin degradarse profundamente. El chip está especificado para AM para operar en el entorno de 1 MHz, será cuestión de probar. Para operar el transceptor se disponen de 4 leds que se multiplican para indicar el modo y la banda. Al comenzar parpadea el correspondiente a la banda en que se encuentra y al completar la inicialización queda prendido en el modo en que se encuentra. Dos pulsadores permiten cambiar el modo en forma cíclica, y mediante una combinación poner al transceptor en modo "cambio de banda". Completa la austera interfaz de usuario un led y un pulsador para poner e indicar modo transmisor manual.  

La construcción es simple, aunque no es tan simple como si fuera un kit, pues todas los componentes deben ser comprados y en algunos casos adaptados respecto a lo que se consigue. El elemento mas crítico es la placa de circuito impreso, que si bien no es muy complicada requiere un fabricante. En éste caso la envie a JLCPCB donde luego de subir los archivos Gerber correspondientes (disponibles en el sitio GitHub de WB2ADX) los mismos son validados y enviados a producir. El costo es muy bajo, al punto que el envio es mas caro (o comparable) a la construcción. Los módulos e integrados se consiguen por correo en los portales de compras y toda la minutería en casas de electrónica bien surtidas. Tuve, curiosamente, alguna dificultad en los conectores de audio pero terminé consiguiéndolos en una casa del centro de Buenos Aires. Ansioso como estaba de construir el transceptor, de experimentar su algoritmo de emisión mas que nada, hice pruebas adaptando el firmware a una placa del proyecto Pixino, el cual básicamente se trata de un módulo generador uSDX utilizando una placa Pixie como cadena de RF (discutido en una entrada anterior de éste blog en Pixino y su adaptación para ADX).

La modificación del firmware terminó resultando mas grande que lo que esperaba, pero me dio la oportunidad de familiarizarme con el código, adaptarlo un poco a mis preferencias de estilo (concepto vago e indefinible que todos los que desarrollamos software tenemos pero fallamos en explicar) y agregar algunas funciones que creo son de utilidad. De ese esfuerzo quedó una versión propia del firmware que fue la que terminé de adaptar cuando construi la placa real ADX.

La construcción empieza como en cualquier kit, inventariando los componentes y midiéndolos uno por uno para asegurar que tengan valores correctos, tengan la continuidad (o discontinuidad) que deban tener y que son adecuados para la placa.

Luego es una cuestión mayormente de preferencias, las que en mi caso implican soldar primero resistencias y capacitores, midiendo cada uno antes de soldarlo, asegurando que las conexiones sean buenas (si, una por una, demasiadas horas buscando fallas por soldaduras frias me lo enseñaron de la peor forma que eso es lo que se debe hacer). Luego los transistores y diodos. Luego los zócalos, módulos, leds, pulsadores y conectores. Finalmente las bobinas.

Aqui debo decir que cometí un error de juicio cuando mandé a hacer las placas pues omití mandar a fabricar las correspondientes al filtro de salida (el cual es una pequeña placa "daughter board"), su costo es insignificante y construirlas sobre una placa de impreso universal asegurando buenas conexiones, evitando acoples indeseados y con buena masa es mas complicado de lo que parece. De hecho el tiempo para el "debug" inicial el grueso del tiempo se lo llevó problemas en éste módulo, donde además de purito milagro no quemé los transistores de salida. Al respecto creo útil aportar que el problema de quemar los transistores de salida no es el costo, son realmente económicos aunque no tan fáciles de encontrar al menos en Argentina en éstos dias. El problema es reemplazarlos, porque justamente instalarlos bien implica soldarlos bien, que fluya la soldadura y sea firme. Bueno, una vez que se consigue una buena soldadura no es facil revertirla, en todo caso la placa no aguantaría creo demasiados ciclos de soldar y des-soldar. Asi que, hay que evitar equivocarse mucho.

Una vez terminado hice algunas mediciones básicas, tensiones mayormente, que dieron correctas y le hice un flash del firmware al Arduino Nano. Primera sorpresa, el Arduino quedaba bloqueado en el arranque. Error de firmware con la implementación propia del "watchdog", solucionado. Luego no prendían los led en la secuencia correcta, nuevamente problema de firmware en su implementación propia (en la de WB2CBA andaba bien). Luego encontré que parecía funcionar pero no recibía ni transmitía, error del firmware nuevamente en como se configuraba el clock del Si5351. En cada uno de éstos defectos el proceso era observar si en el firmware original también ocurría y si no lo hacía era obvio que se trataba de algún problema en la implementación propia.

Esto se debe a que utilicé una técnica de configuración que preserva el código original, de tal manera que el mismo sea (potencialmente) posible de consolidarse con el firmware original. Consiste en "eliminar" los segmentos de código que no se desean o agregar los que si se desea con condicionales de compilación (#define/#ifdef/#ifndef) de tal manera que el agregado o quita de una función "#define" agrega o quita segmentos de código enteros al momento de la compilación. La misma técnica la utilizo para configurar no utilizar los LED, agregar el CAT, utilizar o no la EEPROM, activar el watchdog y asi sucesivamente. El progreso de éste proyecto puede seguirse en el "fork" del proyecto original en mi sitio GitHub (link) el cual por ahora es independiente del mantenido por Barb, aunque está sincronizado con él de tal manera de posibilitar, en algún futuro y si las circunstancias así lo permiten, hacer un "merge" en un único sitio open source.

Obviamente al utilizar la técnica se cometen errores, sea eliminando o agregando partes que no se deben (o fallar al hacerlo) con lo que al compilar el código pueden aparecer "novedades" (bugs). Una vez despulgado el firmware de éste tipo de problemas pude evaluar que funcionalmente andaba bien, haciendo un contacto con la estación de María (LU2EIC), que es mi estación, al hacerlo compruebo que la señal de FT8 anda bien. Solo que no tiene potencia. Revisando con un osciloscopio la cadena de emisión identifico el problema de potencia es por una mala soldadura en el filtro tanque de salida, al corregirla sale andando todo muy bien y puedo hacer el "maiden QSO" (el QSO inaugural de todo proyecto), al igual que en los barcos todo un acontecimiento.

Queda mucho por experimentar, porque de eso se trata una plataforma tan sencilla y maleable, el grueso de lo cual es a traves de versiones del firmware. Primero viene habilitar todas las funciones adicionales que ya incluí en la prueba con la placa Pixino (EEPROM, watchdog y CAT) de a una para validar que funcionan bien. La principal función y la que todo el mundo está esperando es poder operar éste transceptor con CAT. Luego hay algunas modificaciones que creo importante hacer respecto a poder limitar los cambios de banda por firmware (con algún pin por hardware) e implementar la capacidad de CW. Para ésto último es necesario poder sintonizar, para lo cual los comandos no son ágiles con la interfaz actual ni es posible saber en que frecuencia se encuentra el transceptor. Obviamente agregar hardware tipo un rotary encoder o un display OLED es posible aunque agregaría complejidad a un diseño cuyo principal encanto es su simplicidad. Sin embargo el transceptor Pixie es funcional sin ninguna de las dos cosas, o sea que básicamente algo que permita subir o bajar la frecuencia en pasos de 100 Hz con alguna indicación de donde está (por ejemplo usando los cuatro leds) puede ser suficiente. El manipulador es posible adaptarlo con modificaciones muy simples a la placa. El resto es todo firmware.

Luego vendrá hacerle con la impresora 3D alguna clase de "casa" para no estar utilizando la placa directamente; el proyecto viene con unas placas impresas para usar a modo de "tapas" por encima y debajo de la placa propiamente dicha, pero no me terminan de convencer como solución. En resumen, un fantástico proyecto que no dudo en recomendar para experimentadores de toda la gama de experiencia que quieran pasar un buen rato.


miércoles, 27 de abril de 2022

Pixino con cariño es ADX

 

En una entrada anterior comenté sobre el proyecto Pixino, básicamente un diseño uSDX pero que como etapas de RF utiliza, en recepción y transmisión, un kit Pixie de bajo costo. La larga lista de ventajas y desventajas que tiene éste enfoque fue discutida en ese artículo, pero baste decir que es un proyecto que requiere mucho ajuste y experimentación, sobre todo del firmware QCX-SSB, por lo que es muy divertido.

En ese artículo referí al pasar sobre el proyecto ADX de Barb (WB2CBA), que es una variante diferente pero en el mismo sentido. Es decir, un transceiver de modos digitales usando una estrategia similar a la utilizada por el transceptor QDX de QRPLabs creado por Hans Summers (G0UPL). La principal similitud consiste en la generación de la señal PSK de FT8 (y otros modos digitales) no por el mecanismo convencional de SDR sino por la combinación de conteo con síntesis de frecuencia. El receptor de QDX es un supeheterodino compacto mientras que Barb utiliza un chip CD2003GP (chip receptor de AM/FM de bajo costo) el cual permite implementar un receptor de conversión directa. Se puede generar FT8 de muchas formas, con un transceptor convencional de SSB, con un transceptor simple de DSB (D4D de CRKits), por técnicas de SDR (uSDX) y por síntesis directa (QDX, ADX, entro otros).  

La estrategia de Barb es minimalista, el transceptor es tan de propósito específico que ni siquiera tiene otra forma de visualizar su funcionamiento que no sea con tres leds y como todo control tiene tres pulsadores que permiten seleccionar banda y modo; asignándole una frecuencia fija a cada uno de los modos FT8, FT4, JS8 y WSPR. El resultado es un transceptor super sencillo pero aún así muy potente, en un video demostración en YouTube Barb trabaja antípodas (circuito W-VK) en 20 metros desde su auto con uno de ellos. En su versión actual la implementación carece de cualquier otra facilidad (CAT, otros modos, etc) aunque Barb admite que podría incluirlos en versiones futuras del software.

Es un proyecto tan simple que entusiasma hacerlo, tanto la documentación de armado, como los circuitos y el firmware están disponibles. De hecho, en una revisión rápida pude verificar que los componentes, con excepción de la placa, los tengo o puedo conseguirlos con cierta facilidad localmente. La placa, para la cual están disponible los archivos Gerber para reproducirla, puede ser enviada a cualquier fabricante con esa información. Y por cuestiones de costo ese fabricante suele ser de China (por ejemplo JLCPCB). No obstante, y exceptuando que se quiera pagar USD $65.- de flete por 5 placas de USD $1 cada una hay que esperar bastante para que lleguen, en el entorno de 60-70 dias usualmente (muchos de los cuales se consumen en la aduana y correo locales, misterios de la logística global).

Asi que mi primer impulso fue construir el proyecto pero sobre una placa experimental de propósito general, soldando "cablecitos" a la vieja usanza. La ventaja es que al no tener ni visor LCD16X2, ni encoder rotativo la cantidad de lineas necesarias es muy pequeña, por lo que es relativamente facil de armar.

Mientras consideraba entrarle de esa forma me di cuenta que para poder usar directamente el transceiver Pixino en realidad necesitaba hacerle una sola modificación; re-localizar el pin de la placa Arduino Nano donde se conecta el encoder rotativo, pues es a esos pines los que el ADX usa para ingresar y procesar el audio. Por lo que decidí ordenar las placas y mientras llegan dar los primeros pasos con el firmware usando Pixino. Y alli fue.

Es interesante entender como funciona el transceiver. En receptor el firmware comanda al módulo DDS Si5351 para que provea la señal de oscilador local a un receptor de conversión directa; como no tiene forma de cambiar la frecuencia ni sintonizar solo basta un botón para que ciclicamente vaya cambiando las cuatro frecuencias de las bandas base de FT8, FT4, JS8 y WSPR. La placa ADX es realmente monobanda, pero prevee la posibilidad de enchufar diferentes filtros pasa-bajos. Al mismo tiempo se prevee en el firmware configurar hasta 4 bandas, sin modificaciones estas son 40,30,20 y 15 metros. O sea que la operación es trabajar en una banda definida y poder cambiarla a otras tres, pero en cada cambio hay que manualmente cambiar el filtro de salida. La recepción en si la hace un chip CD2003GP del cual se utiliza la etapa de RF y el mezclador para obtener un receptor de conversión directa. Es chip es extremadamente económico, pero los reportes indican que funciona muy bien. Barb indica que ese rendimiento decae por encima de los 21 MHz por lo que el transceiver, en principio, no se puede usar en 17, 10 y 6 metros, o al menos se pierde sensibilidad al hacerlo. No hay nada en el firmware que con los ajustes del caso no permita probar, solo hay que hacer el filtro pasa-bajos correspondiente a la salida para cada banda (y configurarla como parte del esquema cíclico de cambio). En que banda está el transceiver y en que modo lo indica mediante sendos LED a modo de interfaz de usuario, el firmware prevee hasta 4 bandas.

En recepción es ingenioso pero no es demasiado diferente de un Pixie, ambos son conversión directa. Sin modificaciones adicionales el kit Pixie está pensado para 40 metros y es bastante menos agil en banda desde el punto de vista filtro pasa bajos de salida.

En transmisión la técnica empleada está descripta en el transceptor QDX como se dijo, pero es implementada en la placa Arduino en forma bastante sencilla. A diferencia del transceptor uSDX no se hacen procesamientos de señal sofisticados para detectar amplitud y fase que luego puedan ser empleados para modificar en tiempo real la fase del DDS (operando en el límite del procesador y el DDS para hacerlo, realmente Guido (PE1NNZ) logró algo cercano a lo imposible). En éste enfoque, en cambio, lo que se hace es medir la frecuencia de entrada de la señal de audio por un método relativamente simple de cruce por cero, y una vez detectada esa frecuencia desplazar la frecuencia del DDS en la misma magnitud. Para un receptor de SSB es inmaterial si la señal se generó mediante un proceso de modulación "convencional" de SSB, por técnicas de SDR  o por éste método; observa una señal que varía en frecuencia al ritmo de una señal de audio que recupera y entrega a un programa como el WSJT-X para demodular. La medición de frecuencia es suficientemente "lenta" para no requerir recursos de procesamiento especiales. Básicamente se configura el Timer1 de la placa Arduino de tal manera que sea alimentado por el clock del procesador (16 MHz) y contar cuantos "ticks" ocurrieron entre dos cruces sucesivos por cero de la señal de entrada; parece algo muy "rápido" pero aún para un procesador tan lento es una lentitud glacial. Cada "tick" del reloj insume 1/16 microsegundos, mucho menos que la velocidad necesaria mínima de 1 microsegundo. La medición de frecuencia resulta entonces con una precisión mejor que 1 Hz lo que es mas que lo necesario para modular correctamente una señal FT8 (y mas aún WSPR). Una vez detectada la frecuencia de la señal de entrada simplemente se altera la frecuencia del DDS Si5351. por encima de la frecuencia base que requiera un dado modo. Por lo demás la señal del DDS se amplifica primero con una serie de compuertas digitales 74HC244 y finalmente con una salida en clase E lograda por 3 transistores BS170 de bajo costo operando en clase E. Nuevamente, el transceptor Pixie, aunque menos eficiente por operar en clase C no es muy diferente, la señal del DDS se alimenta al transistor que es el oscilador en el kit, y que deja de serlo al no instalar el cristal y conectar con el DDS en cambio, para luego resultar amplificado. En el caso del Pixie es necesario utilizar una señal PTT para que fisicamente pase la etapa de salida de funcionar como un mezclador a hacerlo como un amplificador de salida de potencia (dando 1W con suerte).

Dado que las diferencias no son tantas me largué entonces a hacer el proyecto. Me encontré con cierta dificultad en reemplazar los tres "switches" físicos que tiene el ADX por un tres switches virtuales que operan en realidad como niveles analógicos sobre un solo puerto. Hay operaciones como presionar dos switches simultaneamente que no son tan triviales de lograr. Pero usando el "pulsado largo" en reemplazo del "pulsado simultaneo" lo pude ajustar. El firmware ADX es tan simple que solo prevee operar con VOX, no tiene ningún circuito físico para encendido del transmisor. Si hay audio transmite y si no lo hay recibe, bien simple.


Con la idea general de hacerle algunos agregados al firmware original también aproveché a cambiar ligeramente la estructura del código para hacerlo mas facil. Implementé también algunas funciones que Barb había indicado que podían ser útiles en el futuro tales como mas bandas y CAT. También un "watchdog" siempre útil en los transmisores que exigen mucho la etapa de salida para el caso que algún problema en el software deje "clavado" el transmisor en encendido.

Hice todas las modificaciones en un branch público pero derivado del original del firmware ADX (técnicamente lo llama "fork") por lo que quizás en un futuro pueda integrarse con el código original (técnicamente se llama "merge" a ésta acción).

Todavía hay algunas funciones que requieren desarrollo, pero con la ansiedad propia de todos los proyectos en cuanto tuvo en funcionamiento lo básico lo puse a comunicar. Y para mi sorpresa rápidamente hizo los "maiden QSO" (equivalente al "maiden voyage" de los barcos, su viaje inaugural) en forma exitosa, cubriendo 600 Km de distancia a media tarde en 40 metros. Nada mal para 300 mW (ver el log WSJT-X adjunto).

Ahora resta completar el firmware y esperar la placa para armar una versión mas robusta, lo que tengo ahora es una placa experimental para desarrollar a modo de prototipo con pocas chances de sobrevivir ser puesta en un móvil.

Dos proyectos al precio de uno, nada mal.