Archives par mot-clé : wspr

Point sur la propagation, le traffic et les QSL à la mi-juin

Capture WSPR XV4Y 20m 11 juin 2013 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/06/wspr_20m_11juin2013 NULL.jpg)Nous sommes bel et bien passés dans une propagation d’été avec la bande qui s’ouvre de plus en plus tard pour moi. Difficile aujourd’hui de faire des QSOs avec l’Europe avant 21h locales (14h UTC) sur 15 mètres et si les conditions sont défavorables comme ces derniers jours à cause du vent solaire important et du faible nombre de tâches solaires, alors il vaut même mieux que je passe la soirée devant la télé ou un bon bouquin. Les bandes des 12 et 10 mètres n’ouvrent plus jamais plus loin que le moyen orient. Il devrait y avoir en principe des possibilités de communications avec l’Amérique du Sud, mais trop peu d’OM là-bas pour faire des statistiques convenables.

Capture WSPR 20m 13 juin 2013 XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/06/WSPR_20m_13juin2013 NULL.jpg)Pendant deux nuits j’ai fait une petite étude de la propagation avec WSPR sur la bande des 20 mètres et elles confirment le ressenti. L’Europe se fait entendre tardivement (rien de probant avant 17h UTC) et les stations d’Amérique du Nord sont fort peu nombreuses à pouvoir réussir une communication. Entre les deux captures du 11-12 juin (ci-dessus) et du 12-13 juin (ci-contre) on voit nettement la dégradation des conditions vers l’Europe. Les bandes basses quant à elles sont inutilisables à cause des orages qui se font entendre en permanence pendant la saison des pluies.

Après un mois de mai très favorable au DX (4 nouveaux pays contactés contre 2 en avril mais 9 en mars!), je savais que le mois de juin serait plus calme. En revenant d’un petit voyage familiale sur l’île de Phu Quoc fin mai, je me suis donc décidé à ressortir mon transceiver Bitx “fait maison” (http://xv4y NULL.radioclub NULL.asia/2011/07/08/bitx-17-et-maintenant-jt65/) pour faire un peu de traffic JT65 sur 20 mètres avec 3 Watts. Une première soirée a été perdue à retrouver mes marques et réglages pour faire fonctionner correctement le logiciel et la radio. Ensuite le bilan est correct avec plusieurs QSO avec l’Amérique du Nord mais les stations les plus nombreuses était les JA. En effet il est difficile de gérer un “pile-up” avec JT65HF et les stations les plus puissantes (ou les plus proches) l’emportent toujours. Le rythme trop lent des échanges (en moyenne 5 minutes pour un QSO) a eu vite raison de ma patience et au bout de 3 soirées je remettais le Bitx sur l’étagère et retrouvait plaisir à faire de la CW “manuelle”.

Sur un autre registre, j’ai essayé d’utiliser deux coupons IRC que j’avais sous la main et qui ne sont valable que jusque la fin d’année. En effet, bien que mon QSL manager soit clairement indiqué, il y a toujours des OMs qui ne lisent pas ou plus simplement ne comprennent pas les indications. Je me retrouve donc en moyenne avec 20 cartes directes par an à répondre. Quand les OMs ont pris la peine de mettres 2$ ou 2 IRC, je me dois de répondre même si j’ai bien dit de passer par le QSL manager.

IRC (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/02/IRC NULL.jpg)Je suis donc allé au bureau de poste de mon arrondissement, et après les avoir retourné dans tous les sens la guichetière et sa chef me disent en gros “Oui oui on te crois, mais nous on a pas la machine pour les prendre, il faut que tu ailles au bureau central.”. Comme j’avais des colis à faire partir à l’étranger (des kits que je vends dans la boutique (http://xv4y NULL.radioclub NULL.asia/boutique/)) j’attends quelques jours supplémentaires et je fais un saut au bureau de poste central de ma ville (1,3 M d’habitants tout de même). La préposée aux colis me connais bien et mes colis partent en un clin d’oeil malgré toute la paperasse nécessaire pour les douanes.

Je passe ensuite à sa voisine plus jeune (mais moins souriante) qui se charge du courrier international. Je lui explique que j’ai cinq lettres à faire partir au tarif normal dont deux que je veux payer avec les IRC. Elle me tend une enveloppe vide et me dis “Met les dedans”. Je lui demande pourquoi en réexpliquant bien qu’il s’agit de coupons réponses internationaux de l’Union Postale Universelle et que ceux-ci sont valables au Viêt-Nam pour envoyer du courrier. Voulant montrer qu’elle a appris anglais au cours du soir elle me répond “No no no” et là je me fâche tout rouge : “Ne me dis pas NON, tu peux me dire que tu ne sais pas faire, tu peux me dire que tu ne connais pas ces coupons, mais je sais ce que je dis”. Voyant que le ton monte, la voisine (celle des colis) vient s’interposer et après une rapide explication avec sa collègue me dis “Oui oui je sais ce que c’est. Ca fait très longtemps qu’on a en a pas eu entre les mains. Il faut que je vois ma chef mais elle n’est pas là, est-ce que cette fois-ci tu peux payer en liquide, la prochaine fois on cherchera pour les prendre”. Ca j’accepte comme explication, et j’ai réglé mes deux QSL pour le Japon (15 000₫ contre 23 000₫ pour l’Europe). Au passage il a aussi fallu que j’explique à la petite jeune que la Serbie était en Europe et que Germany c’était l’Allemagne… mais je reste avec mes IRC.

La balise WSPR de G4JVF

(http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/03/wsprddr2 NULL.jpg)Balise WSPR XV4Y par G4JVFPhilipp de G4JVF a construit une balise WSPR autour de mon kit avec DDS (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=33) et d’un amplificateur 5W de Kits and Parts (http://kitsandparts NULL.com/qrp_amp2 NULL.php).

L’ensemble produit entre 5W sur 80 mètres et 800mW sur 15 mètres où l’ampli commence s’essouffler… Dans tous les cas la puissance est largement suffisante pour être reçu dans le monde entier. L’utilisation avec les maigres 10mW du DDS permet même quelques reports de réception à courte distance.

Philipp a réalisé une adaptation dans le boîtier très propre qui lui permet de retirer le LaunchPad pour procéder à des mises à jour du firmware très facilement. Il a pour cela du déporter certaines commandes et boutons en façade.

Filtre Passe-bas G4JVF (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/03/lp1 NULL.jpg)Comme vous le voyez sur les photos, il a aussi réalisé un filtre passe-bas commutable pour différentes bandes HF. A ce sujet, ni lui ni moi n’avons encore eu l’occasion de regarder la sortie de l’amplificateur à l’oscilloscope, mais le signal du DDS étant propre et le PA loin d’être saturé, il se peut que sur les bandes haute au moins aucun filtre ne soit vraiment nécessaire.

Balise WSPR agile DDS autonome XV4Y par G4JVF (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/03/wsprddr2 NULL.jpg)En tous cas merci à Philippe de me faire partager son retour d’expérience. C’est là où un kit “ouvert” comme celui que je propose à son intérêt, car largement modifiable et permettant de faire évoluer le logiciel interne en fonction des besoins des OM. Je viens d’ailleurs d’y ajouter la gestion de plusieurs QTH (indicatifs et QRA locator) pour un OM qui passe la moitié de l’année en Thaïlande et l’autre aux USA.

Divers nouvelles : kits et e-mails

Ecran LCD kit balise WSPR DDS (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/01/100B3380 NULL.jpg)Depuis ce week-end je suis très occupé à préparer, tester et empaqueter les kits WSPR à DDS qui m’ont été commandé ces dernières semaines. Pas mal de boulot en perspective car les commandes sont toutes personnalisées (indicatifs, locator, fréquences… différents pour WSPR suivant chaque OM) et certaines comportent des options (écran LCD et DDS AD9851 au lieu du 9850). Pour bien faire j’ai encore noté des problèmes de qualité (mauvais contact) sur les écrans LCD et il faut que je les tests bien un par un. Demain il faudra que je fasse toute la paperasse administrative et si tout va bien tout partira par la poste demain après-midi ou au plus tard mercredi, et devrait sortir du pays avant le nouvel an vietnamien (Tét)!

Autre mauvaise nouvelles du lundi, l’adresse e-mail que j’utilisais pour mes correspondances relatives à la radio ne marche plus. C’était une adresse free.fr que j’utilisais depuis presque 20 ans, mais Free à du se rendre compte que je n’étais plus client chez eux depuis un bail… A partir de maintenant tout passe sur une nouvelle adresse chez mon hébergeur professionnel, j’espère juste qu’aucun message important ne sera perdu en route…

WSPR-X et WSPR-15

WSPR-X par K1JT (http://wsprnet NULL.org/drupal/node/3891)Joe K1JT vient d’annoncer une nouvelle version de son logiciel d’étude de la propagation. Il utilise encore une fois un mode “signaux faibles” mais ajoute cette fois-ci le nouveau WSPR-15 avec une durée de transmission de 15 minutes au lieu des 2 minutes du mode WSPR normal. Le gain est d’environ 9dB permettant de détecter des signaux 37dB en dessous du bruit dans une bande passante de 2500 Hz! Ce mode n’est pas prévu pour les bandes HF car l’écart entre symboles est de seulement 0,183 Hz, moins que l’effet Doppler ressenti sur la plupart des transmissions HF. Son but est d’expérimenter des transmission à longue distance (DX) sur VLF (137 et 427 KHz) ou MF (160 mètres).

Contrairement au versions actuelles de WSPR (2.11 et 3.01 pour le multi-fréquence) il est écrit en C++ en utilisant le framework Qt. Il ne supporte actuellement pas les modes I/Q permettant de l’utiliser avec un SDR type SoftRock. Le manuel d’utilisation est ici (http://www NULL.physics NULL.princeton NULL.edu/pulsar/K1JT/WSPR-X_Users_Guide NULL.pdf), et la dernière release (r2960) prêt à installée ici (http://www NULL.physics NULL.princeton NULL.edu/pulsar/K1JT/WSPRX_07r2960 NULL.exe).

Balise QRP pour le 80 mètres

Schéma émetteur 1,5W 3,5 MHz (http://www NULL.vk2zay NULL.net/article/172)Toujours à la recherche d’un schéma d’amplificateur QRP éprouvé pour des balises QRSS et WSPR (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=33), je suis tombé sur ce sympathique montage de VK2ZAY (http://www NULL.vk2zay NULL.net/article/172) permettant de sortir 1,5W sous 13,8V sans adaptation d’impédance exotique. Rustique et n’utilisant que des composants simples, il a le mérite de pouvoir être réalisé en une après-midi avec des fonds de tiroirs.

Point intéressant, Alan justifie son choix de 2 transistors 2N7000 en parallèle face à un seul transistor équivalent ou à un IRF510. Les différences de performance minimes et la température de fonctionnement donne rapidement priorité au premier choix sans éliminer les autres qui peuvent s’avérer intéressant suivant les cas. Dès que j’ai le temps je vais essayer de le réaliser mais avec 1 seul Bs170 qui en principe chauffe moins que le 2N7000 et ne l’alimentant que sous 9V pour sortir un peu moins de puissance.

Nouvelles des kits, balise WSPR à DDS et page téléchargements

Je viens de mettre en ligne une page avec quelques fichiers à télécharger (http://xv4y NULL.radioclub NULL.asia/boutique/docs/) pour le kit SpectroScope audio. Vous y trouverez pour l’instant le manuel utilisateur, les librairies nécessaires à la compilation des sources avec l’environnement Arduino et le code source la mini station météo. J’y ajouterai bientôt les librairies que j’ai écrites pour le MSP430 avec Energia.

Balise WSPR AD9850 et MSP430 (http://xv4y NULL.radioclub NULL.asia/2012/12/17/nouvelles-des-kits-balise-wspr-a-dds-et-page-telechargements/100_3338/)A part ça j’ai bien avancé ces derniers jours sur la balise QRSS / WSPR avec DDS 9850. Il reste encore pas mal de travail mais comme vous pouvez le voir j’ai un prototype pleinement fonctionnel sur le banc d’essai. Ce soir il devrait être relié à une antenne mais sans PA les reports risquent d’être limité par les 40mW du DDS. Le kit final comportera un écran graphique, un DDS et des boutons permettant de le reprogrammer comme générateur de signal ou comme VFO au besoin. L’ensemble des composants et logiciels fonctionnent bien mais j’ai du mal à faire cohabiter la génération de la séquence WSPR et le pilotage de l’écran LCD dans les faibles 512 octets de SRAM du MSP430G2553. J’y travaille…

J’ai aussi reçu mon StellarPad mais je ne l’ai pas encore sorti de sa boîte. Chaque chose en son temps. J’avoue ne pas avoir de projet précis qui nécessite toute la puissance d’un tel processeur. Je vais faire quelques en portant des programmes existants mais pour l’instant ce n’est pas une priorité.

Amplificateur QRP 5W pour CW ou QRSS

J’ai toujours dans mes cartons un projet de balise QRSS ou WSPR flexible à base de micro-contrôleur et de DDS. Malheureusement, un de mes colis de composant est toujours bloqué par les douanes bien que j’ai fourni tous les documents nécessaires et leurs traductions. D’autres expédiés après sont arrivés, mais il me manque certains composants pour finir les kits Spectroscope Audio qui m’ont été commandé. Comme je n’aime pas me disperser de trop, j’ai retardé tous les autres projets de kits (station météo, générateur de balise WSPR et balise agile à DDS y compris). J’ai aussi des échantillons qui me sont arrivés (écran graphique, transceiver 2,4 GHz…) mais je ne veux pas commencer à les tester avant de finir les projets en cours. Le problème c’est qu’on va s’acheminer tout doucement vers la mi-décembre et que je vais commencer à avoir beaucoup de travail aux chambres d’hôtes, j’espère ne pas cumuler trop de retard.

Kits and parts 5W PA universel (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/11/qrp_2 NULL.jpg)Tout cela pour dire que je pensais développer mon propre PA classe E à base de Bs170 pour la balise QRSS (http://xv4y NULL.radioclub NULL.asia/2012/10/22/amplificateur-qrp-en-classe-d-e-et-f/) mais je crois que je vais changer mes priorités. Je me suis donc mis à rechercher quels étaient les kits disponibles sur le marché capable de sortir environ 1W pour quelques milliwatts en entrée. La classe E choisie pour des raisons d’élégance plus que de contraintes énergétique réelle n’avait plus de raison d’être non plus. Je suis tombé (assez rapidement car le connaissant déjà en fait) sur le kit amplificateur CW 5W proposé par kits and parts (http://kitsandparts NULL.com/qrp_amp2 NULL.php). Il est proposé à 18$ mais doit être accompagné d’un ou plusieurs filtre passe-bas (http://kitsandparts NULL.com/univlpfilter NULL.php) coûtant 8$, port non compris. Kits and Parts a très bonne réputation et les circuits proposés sont éprouvés, je pense que ce sera la meilleure solution pour tout le monde.

Propagation et traffic en mode “hiver”

WSPR XV4Y 20m 22Nov2012 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/11/WSPR_XV4Y_20m_22Nov2012 NULL.jpg)Ca y est, les conditions de propagation sont définitivement passées en mode hivernal. La bascule s’est faite plutôt abruptement autour de la CME qui a touché la Terre la semaine précédente. A partir de maintenant je peux laisser tomber le 15 mètres vers l’Europe en soirée, plus rien à espérer sur cette bande si tard. Par contre le 20 mètres redevient exploitable comme le montre la session WSPR que j’ai fait la nuit dernière. Le problème c’est que sur 20 mètres les conditions sont plus changeantes à ce moment du cycle solaire et que mon antenne offre moins de gain.

Le bon côté c’est qu’avec la forte activité solaire que l’on a eu ces derniers jours, le 10 mètres s’ouvre facilement vers l’Amérique du Nord et du Sud. En particulier le matin vers 8h heure locale, 01:00 utc, j’ai pu faire de nombreux QSO. Chez moi je souffre toutefois de beaucoup beaucoup de QRM sur 10 mètres et le trafic est très fatiguant sur cette bande. Si je suis insomniaque, je vais aussi pouvoir faire de beaux QSO avec ces mêmes destinations autour de minuit heure locale sur 10 mètres (17:00 utc), c’est toujours surprenant de voir cette bande ouverte si tard alors qu’une heure auparavant tout semblait mort.

Je commence aussi à pouvoir faire des QSO sur 80 mètres. J’ai déjà contacté 5 stations des USA dont une présente dans le log de 2011. Comme la saison des pluies n’est pas terminée la bande reste très bruyante et les QSO demande beaucoup de patience. Ca devrait s’améliorer à partir de mi-décembre. L’avantage du 80 mètres c’est que le lever de soleil chez eux se fait entre 20h-21h ici, ça me permet de faire du trafic DX à des heures qui n’empiètent ni sur la vie familiale ni sur le travail. Pour faire des QSO avec l’Europe sur cette bande il faut que ce soit à mon lever de soleil, soit vers 5h30 heure locale (22:30 utc) ce qui est moins pratique. J’essayerai toutefois de me lever tôt une fois ou deux dans la saison, le matin le bruit est beaucoup plus faible ce qui permet d’engranger plus de QSO.

Balise WSPR autonome avec MSP430 – le code source

[GTranslate]

Un kit pour ce circuit de générateur de balise WSPR sera bientôt disponible (http://xv4y NULL.radioclub NULL.asia/boutique/?slug=product_info NULL.php&products_id=30).

Ca m’a pris plus de temps que prévu pour publier le code source de mon générateur WSPR à MSP430 pour la balise QRSS de QRP Labs. Le programme “en production” est stable et fonctionne plusieurs jours d’affilée sans problèmes avec de bons reports (spots) sur WSPR. Le problème vient d’un bogue dans le mode debugging justement, les sorties sur port série sensées aidées à la mise au point ne fonctionne pas bien. Ce bogue résulte à la fois d’un problème de l’IDE Energia (au niveau du compilateur certainement) et d’une utilisation trop importante de la SRAM quand je compile le programme en incluant la librairie Serial. Difficile à résoudre, j’ai passé plusieurs jours à essayer d’optimiser les variables et l’utilisation de la RAM mais sans succès. Je vous livre donc le code “tel que” en sachant que le bogue n’est pas gênant en production.

Pour modifier votre balise QRSS en balise autonome WSPR rien de bien compliqué. Il faut construire un petit circuit selon le schéma ci-dessous. En utilisant un LaunchPad les circuits des LED, contacteurs et quartz sont déjà présents. Il faut y ajouter de quoi :

  • alimenter le MSP430G2553 du LaunchPad en 3,3V
  • créer une tension analogique à 4 niveaux grâce à une échelle R-2R à partir des sorties P2.1 et P2.2
  • alimenter en +5V l’étage PA de la balise uniquement quand c’est nécessaire grâce à un transistor BC548 (ou équivalent) connecté sur la sortie P2.0

Schéma générateur balise autonome WSPR à MSP430 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/WSPR_balise_schéma NULL.png)

Sur le circuit de la balise par elle-même, rien de compliqué. Les modifications sont résumées sur le schéma suivant et consiste à :

  • Retirer le micro-contrôleur ATTiny8
  • Récupérer le +5V, la masse et le contrôle de la LED “varicap” sur le connecteur DIL8
  • Dessouder la patte +5V du potentiomètre de polarisation (bias) du transistor FET du PA pour la connecter sur le transistor BC548
  • Procéder à un nouvel alignement de la puissance de sortie du PA,
  • Procéder à un nouvel alignement de l’excursion en fréquence (shift) pour qu’elle soit au total de 6Hz
  • Procéder à un nouveau réglage de la fréquence pour être dans la bande WSPR (autour de 10 140 200 Hz sur 30 mètres)

Modifications de la balise QRSS QRP Labs pour WSPR - XV4Y (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/Kit-WSPR-Mod-balise NULL.jpg)

Pour compiler le code il vous faut bien entendu un LaunchPad avec un MSP430G2253 (http://xv4y NULL.radioclub NULL.asia/2012/04/27/les-micro-controleurs-msp430-de-texas-instruments/). L’environnement de développement Energia correctement installé sur votre micro-ordinateur. La bibliothèque RTC que j’ai développée (http://xv4y NULL.radioclub NULL.asia/2012/05/22/bibliotheque-rtc-pour-le-msp430/) doit aussi être installée dans le répertoire de vos documents Energia. Il vous faut ensuite modifier les paramètre d’indicatif (callsign), de carré Locator et de puissance. Ni la compilation ni le téléchargement ne doivent produire d’erreurs. Une fois le LaunchPad programmé, je vous conseille de placer en position ouverte tous les cavaliers (jumpers) reliant le circuit de programmation-émulation au micro-contrôleur.

L’utilisation du programme par lui même est simple. Vous le mettez sous tension, les deux LEDs rouges et jaunes du LaunchPad vont clignoter alternativement assez rapidement. Le générateur est mode “attente de synchro” et transmet une séquence de test durant au total 30 secondes permettant de vérifier les différentes fréquences symboles et l’extinction du PA.

Ensuite, en utilisant une horloge précise (celle de votre GPS, horloge DCF-77 ou ordinateur synchronisé par NTP), vous appuyez sur le bouton S2 du LaunchPad juste quand l’horloge passe à la seconde zéro d’une minute paire.

Le générateur se met alors en mode “balise” et va transmettre tout de suite une première séquence WSPR. La séquence finie la LED jaune se met à clignoter très rapidement. Si vous appuyez sur le bouton S2 à ce moment, la balise passera à nouveau en émission à la prochaine minute paire. Sinon, elle passera en émission aléatoirement suivant le paramètre que vous avez donné, par défaut le taux est de 20% (tx_rate = 5).

Chez moi, l’horloge reste bonne pendant au moins 72 heures. Après cela elle prend environ une seconde de retard, ce qui suffit à faire que les stations les plus lointaines ne décodent plus la séquence WSPR. La remettre à l’heure ne prend que quelques minutes. L’expérience du GPS montre que sauf à partir dans des solutions complexes et coûteuses (http://www NULL.oe1ifm NULL.at/index NULL.php?option=com_content&view=article&id=49&Itemid=56), atteindre une meilleure stabilité effective reste difficile.

/* WSPR Static Generator for MSP430G2553
 * Code for Energia 008
 
 * By Yannick DEVOS - XV4Y - May-October 2012
    http://xv4y.radioclub.asia/

    Copyright 2012 Yannick DEVOS under GPL 3.0 license
    Any commercial use or inclusion in a kit is subject to author approval
 
 * Based on code by DH3JO Martin Nawrath for WSPR sequence encoding

====
 * Ouput on 2 bits PinA and PinB
 * PTT_key output allows to turn on/off the TX PA while sending
 * Mirror on LED1 and LED2 du LaunchPad for testing
 * Output to Serial for testing
 * Using an R-2R ladder it makes the G0UPL/G0XAR beacon frequency shift

====
Revision history :
v1.00    2012-10-18
         First release

====
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download a copy of the GNU General Public License at <http://www.gnu.org/licenses/>
*/

// Here modify to your taste or needs

#define PTT_key 8
#define wsprPinA 10
#define wsprPinB 9
#define LEDPinA 14
#define LEDPinB 2
#define StartBtn 5

const char call[] = "XV4Y ";
const char locator[] = "OK20";
const byte power = 20;
const char tx_rate = 5;

// Be carefull, this is only for debugging.
// If you enable this in production, the clock will drift to much (5 seconds in 10 minutes)
//#define SERIAL_OUT_INFO

// This is in case you use a MSP430 that does not have Hardwart UART. TimerSerial works great but bring a lot of clock drift. Replace each "Serial" object call in the code by mySerial.
/*
#ifdef SERIAL_OUT_INFO
#include <TimerSerial.h> 
TimerSerial mySerial;
#endif
*/

// Here under don't touch anything unless you know what you do

#include <legacymsp430.h>
#include <sRTC.h> // Library for RTC clock with MSP430

const char SyncVec[162] = {
  1,1,0,0,0,0,0,0,1,0,0,0,1,1,1,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0,0,0,0,0,0,1,0,
  1,1,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,1,0,1,0,1,0,
  0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,1,0,0,0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,0,
  0,0,0,1,1,0,1,0,1,1,0,0,0,1,1,0,0,0
};

boolean force_send = 1;  // The first time the beacon is turned on it will send a sequence
byte symbol, bb, begin_sec;
int begin_chunk;

byte c[11];                // encoded message

byte sym[170];             // symbol table 162
byte symt[170];            // symbol table temp
unsigned long n1;          // encoded callsign
unsigned long m1;          // encodes locator

#ifdef SERIAL_OUT_INFO
#endif
RealTimeClock myClock;

//******************************************************************
// Defining pins mode
// Encoding the WSPR sequence

void setup() {
  pinMode(PTT_key, OUTPUT);
  pinMode(wsprPinA, OUTPUT);
  pinMode(wsprPinB, OUTPUT);
  pinMode(LEDPinA, OUTPUT);
  pinMode(LEDPinB, OUTPUT);
  pinMode(StartBtn, INPUT_PULLUP);

  #ifdef SERIAL_OUT_INFO
  Serial.begin(9600);
  Serial.println("\n* MSP430 WPSR beacon"); 
  #endif

  digitalWrite( PTT_key, LOW );
  digitalWrite( wsprPinA, LOW );
  digitalWrite( wsprPinB, LOW );

  digitalWrite( LEDPinA, HIGH );
  digitalWrite( LEDPinB, HIGH );

  prepare_sequence();

  #ifdef SERIAL_OUT_INFO
  Serial.println("* Wait clock is set. Sending test sequence.");
  #endif
  begin_chunk = myClock.RTC_chunk;
  begin_sec = myClock.RTC_sec;
  while(digitalRead(StartBtn)) {
    // This is for blinking LED fast
    if ((myClock.RTC_chunk-(begin_chunk+15))%60==0)
      digitalWrite( LEDPinA, HIGH );
    if ((myClock.RTC_chunk-(begin_chunk+30))%60==0)
      digitalWrite( LEDPinB, HIGH );
    if ((myClock.RTC_chunk-(begin_chunk+45))%60==0)
      digitalWrite( LEDPinA, LOW );
    if ((myClock.RTC_chunk-(begin_chunk+60))%60==0)
      digitalWrite( LEDPinB, LOW );
    
    // We also send a test sequence to help calibrate the transmitter
    if ((myClock.RTC_chunk-(begin_chunk+0))%240==0) 
      send_test(begin_sec);

   };
  randomSeed(myClock.RTC_chunk);
  myClock.Set_Time(0,0,0);
};

//******************************************************************
// Here starts the actual sequence sending

void loop() {
  #ifdef SERIAL_OUT_INFO
  Serial.print("Time:");
  Serial.print(myClock.RTC_min, DEC);
  Serial.print(":");
  Serial.print(myClock.RTC_sec, DEC);
  Serial.print(".");
  Serial.println(myClock.RTC_chunk, DEC);
  #endif

  digitalWrite( PTT_key, LOW );

  digitalWrite( wsprPinB, LOW );
  digitalWrite( LEDPinB, LOW );

  digitalWrite( wsprPinA, LOW );
  digitalWrite( LEDPinA, LOW );

  begin_chunk = myClock.RTC_chunk;
  
  #ifdef SERIAL_OUT_INFO
  Serial.println("* Waiting 1st sec of even mins.");
  #endif

  while (!(myClock.RTC_sec==1 && (myClock.RTC_min%2)==0)) {  // We start each first second of even minutes
    if ((myClock.RTC_chunk-(begin_chunk+10))%20==0) digitalWrite( LEDPinA, HIGH );
    if ((myClock.RTC_chunk-(begin_chunk+20))%20==0) digitalWrite( LEDPinA, LOW );
    if (!digitalRead(StartBtn)) force_send = 1;  // Pressing the button while in wait mode force the sequence to start next time
  };
  
  if (random(tx_rate+1)==tx_rate || force_send) {  // In order to minimize band occupation, randomly start the transmission depending on tx_rate
    force_send = 0;
    digitalWrite( PTT_key, HIGH );
    send_sequence();
    #ifdef SERIAL_OUT_INFO
    Serial.println("\n* End");
    #endif
  } else {
    // If not, we wait around 1 sec so we don't go through this too early...
    digitalWrite( PTT_key, LOW );
    begin_chunk = myClock.RTC_chunk;
    while ( ((256+myClock.RTC_chunk-begin_chunk)%256)<220 ) {
      delay(0);
    };
  };
};

/* Functions declaration
 * This code by DH3JO
 * KHM 2009 /  Martin Nawrath
 * Kunsthochschule fuer Medien Koeln
 * Academy of Media Arts Cologne
*/


//******************************************************************
// normalize characters 0..9 A..Z Space in order 0..36
char chr_normf(char bc ) {
  char cc=36;
  if (bc >= '0' && bc <= '9') cc=bc-'0';
  if (bc >= 'A' && bc <= 'Z') cc=bc-'A'+10;
  if (bc == ' ' ) cc=36;

  return(cc);
}

//******************************************************************
void encode_call(){
  unsigned long t1;

  // coding of callsign
  n1=chr_normf(call[0]);
  n1=n1*36+chr_normf(call[1]);
  n1=n1*10+chr_normf(call[2]);
  n1=n1*27+chr_normf(call[3])-10;
  n1=n1*27+chr_normf(call[4])-10;
  n1=n1*27+chr_normf(call[5])-10;

  // merge coded callsign into message array c[]
  t1=n1;
  c[0]= t1 >> 20;
//  t1=n1;
  c[1]= t1 >> 12;
//  t1=n1;
  c[2]= t1 >> 4;
//  t1=n1;
  c[3]= t1 << 4;
}

//******************************************************************
void encode_locator(){

  unsigned long t1;
  // coding of locator
  m1=179-10*(chr_normf(locator[0])-10)-chr_normf(locator[2]);
  m1=m1*180+10*(chr_normf(locator[1])-10)+chr_normf(locator[3]);
  m1=m1*128+power+64;

  // merge coded locator and power into message array c[]
  t1=m1;
  c[3]= c[3] + ( 0x0f & t1 >> 18);
//  t1=m1;
  c[4]= t1 >> 10;
//  t1=m1;
  c[5]= t1 >> 2;
//  t1=m1;
  c[6]= t1 << 6;

}
//******************************************************************
// convolutional encoding of message array c[] into a 162 bit stream
void encode_conv(){
  int bc=0;
  int cnt=0;
  int cc;
  unsigned long sh1=0;

  cc=c[0];

  for (int i=0; i < 81;i++) {
    if (i % 8 == 0 ) {
      cc=c[bc];
      bc++;
    }
    if (cc & 0x80) sh1=sh1 | 1;

    symt[cnt++]=parity(sh1 & 0xF2D05351);
    symt[cnt++]=parity(sh1 & 0xE4613C47);

    cc=cc << 1;
    sh1=sh1 << 1;
  }

}

//******************************************************************
byte parity(unsigned long li)
{
  byte po = 0;
  while(li != 0)
  {
    po++;
    li&= (li-1);
  }
  return (po & 1);
}

//******************************************************************
// interleave reorder the 162 data bits and and merge table with the sync vector
void interleave_sync(){
  int ii,ij,b2,bis,ip;
  ip=0;

  for (ii=0;ii<=255;ii++) {
    bis=1;
    ij=0;
    for (b2=0;b2 < 8 ;b2++) {
      if (ii & bis) ij= ij | (0x80 >> b2);
      bis=bis << 1;
    }
    if (ij < 162 ) {
      sym[ij]= SyncVec[ij] +2*symt[ip];
      ip++;
    }
  }
}

// This code by Yannick DEVOS XV4Y 2012

//******************************************************************
// Compute and initialize the sequence
void prepare_sequence() {

  encode_call();
  #ifdef SERIAL_OUT_INFO
  Serial.print("call: ");
  Serial.print(call);
  Serial.print(" ");
  Serial.print(n1,HEX);
  Serial.println(" ");
  #endif

  encode_locator();
  #ifdef SERIAL_OUT_INFO
  Serial.print("locator: ");
  Serial.print(locator);
  Serial.print(" ");
  Serial.print(m1 << 2,HEX);
  Serial.println(" ");
  for (bb=0;bb<=10;bb++){
    Serial.print(c[bb],HEX);
    Serial.print(",");
  }
  Serial.println("");
  #endif

  encode_conv();
  #ifdef SERIAL_OUT_INFO
  Serial.println("");
  for (bb=0;bb<162 ;bb++){
    Serial.print(symt[bb],DEC);
    Serial.print(".");
    if ( (bb+1) %32 == 0) Serial.println("");
  }
  Serial.println("");
  #endif

  interleave_sync();
  #ifdef SERIAL_OUT_INFO
  Serial.println("Channel symbols :");
  for (bb=0;bb<162 ;bb++){
    Serial.print(sym[bb],DEC);
    Serial.print(".");
    if ( (bb+1) %32 == 0) Serial.println("");
  }
  Serial.println("\nEnd of init.");
  #endif

};

//******************************************************************
// Function to send the test sequence
void send_test(char begin_sec) {
    if ((myClock.RTC_sec-(begin_sec+0))%30==0) {
      digitalWrite( PTT_key, LOW );
      digitalWrite( wsprPinA, LOW );
      digitalWrite( wsprPinB, LOW );
      #ifdef SERIAL_OUT_INFO
      Serial.println("* TX Low, Send 00 *");
      #endif
    }

    if ((myClock.RTC_sec-(begin_sec+6))%30==0) {
      digitalWrite( PTT_key, HIGH );
      digitalWrite( wsprPinA, LOW );
      digitalWrite( wsprPinB, LOW );
      #ifdef SERIAL_OUT_INFO
      Serial.println("* TX High, Send 00 *");
      #endif
    }

    if ((myClock.RTC_sec-(begin_sec+12))%30==0) {
      digitalWrite( PTT_key, HIGH );
      digitalWrite( wsprPinA, HIGH );
      digitalWrite( wsprPinB, LOW );
      #ifdef SERIAL_OUT_INFO
      Serial.println("* TX High, Send 01 *");
      #endif
    }

    if ((myClock.RTC_sec-(begin_sec+18))%30==0) {
      digitalWrite( PTT_key, HIGH );
      digitalWrite( wsprPinA, LOW );
      digitalWrite( wsprPinB, HIGH );
      #ifdef SERIAL_OUT_INFO
      Serial.println("* TX High, Send 10 *");
      #endif
    }
    
    if ((myClock.RTC_sec-(begin_sec+24))%30==0) {
      digitalWrite( PTT_key, HIGH );
      digitalWrite( wsprPinA, HIGH );
      digitalWrite( wsprPinB, HIGH );
      #ifdef SERIAL_OUT_INFO
      Serial.println("* TX High, Send 11 *");
      #endif
    }

};

  
//******************************************************************
// Function to send the sequence
void send_sequence() {
  for (bb = 0; bb < 162; bb++) {
    symbol = sym[bb];

    #ifdef SERIAL_OUT_INFO
    Serial.print(" ");
    Serial.print(symbol%10, DEC);
    #endif

    digitalWrite( wsprPinB, (symbol >> 1) );
    digitalWrite( LEDPinB, (symbol >> 1) );

    digitalWrite( wsprPinA, (symbol & 1) );
    digitalWrite( LEDPinA, (symbol & 1) );
    begin_chunk = myClock.RTC_chunk;
    while ( ((256+myClock.RTC_chunk-begin_chunk)%256)<175 ) {
      delay(0);
    };
  };
};


//******************************************************************
// Interruption for the RTC clock
interrupt(TIMER1_A0_VECTOR) Tic_Tac(void) {
  myClock.Inc_chunk();		      // Update chunks
};

Balise WSPR autonome avec MSP430 – suite

Générateur balise autonome WSPR LaunchPad MSP430 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/100_3289 NULL.jpg)

[GTranslate]

J’ai retravaillé un peu sur ma balise WSPR autonome (http://xv4y NULL.radioclub NULL.asia/2012/05/11/balise-autonome-wspr-avec-msp430/) construite autour de l’émetteur QRSS de G0UPL/G0XAR (http://www NULL.hanssummers NULL.com/qrsskit NULL.html). D’une part j’ai mis le montage “au propre” sur un circuit imprimé de prototype, d’autre part j’ai implémenté la commande de polarisation du PA ce qui permet de ne pas être en émission constamment et de n’envoyer la séquence WSPR qu’une fois sur quatre de manière aléatoire par exemple.

Le code du générateur lui-même a été optimisé pour générer une séquence de test durant  la phase d’attente de synchronisation de l’horloge. Cela permet de vérifier que les différentes valeurs binaires sont envoyées avec la bonne excursion en fréquence (6Hz au total) et que la fréquence de travail désirée est bien la bonne. La durée de chaque valeur est de 5 secondes, plus longue que durant la séquence WSPR, ce qui facilite les réglages.

Générateur balise autonome WSPR LaunchPad MSP430 deux platines séparées (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/09/100_3290 NULL.jpg)Après quelques cafouillages dus à une erreur de câblage, les 3 premières soirées ont été très concluantes. Les reports sur 30 mètres viennent de Thaïlande, des Philippines, du Japon et d’Australie (environ 6000km). Avec les 90mW de la balise de G0UPL c’est tout ce que je peux espérer de mieux surtout à cette saison. En modifiant le circuit du PA j’en ai profité pour remplacer le 2N7000 par un Bs170. Le 2N7000 chauffait anormalement même s’il n’a jamais failli. Avec le Bs170, la dissipation autorisée est plus importante et il ne chauffe plus du tout… Je vais donc essayer d’augmenter la tension d’alimentation de l’´émetteur pour atteindre 9V et les 200mW en émission. J’espère que cela ne posera pas de difficultés pour l’oscillateur et l’étage buffer qui ne seront plus à leur point de fonctionnement optimal, sinon il me faudra charcuter un peu le circuit et ajouter un régulateur supplémentaire.

Reports WSPR 30m 29 septembre 2012 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2012/10/WSPR_balise_MSP430 NULL.jpg)Il me reste encore quelques petits détails à régler sur le code micro-contrôleur mais je publierai l’ensemble des informations (y compris le schéma) sur une page dédiée d’ici quelques semaines. En attendant n’hésitez pas à me poser des questions si vous en avez.