SYN115 jako nadajnik ARDF (fox) na pasmo 70 cm

DIY

Proste i tanie nadajniki radiowe mają sporo zalet, jak np. niski stopień złożoności oraz rozsądne koszty zakupu. (…) Ostatnimi czasy eksperymentowałem z samodzielnie wykonanymi nadajnikami na 2 metry, będącymi niczym innym jak oscylatorem na kwarcach 48 MHz w układzie Pierce’a:

Banalnie prosty układ – mikrokontroler pozwala na uzyskanie prymitywnej modulacji FM/AM, włączając lub wyłączając nadajnik odpowiednio często. Kondensator w szeregu z rezonatorem kwarcowym pozwala podjechać kilka kHz w górę z częstotliwością, ale nie za mocno – overtonowy kwarc niechętnie zmienia swoją fabryczną częstotliwość pracy. Moc na wyjściu to niecałe -20 dBm na interesującym nas paśmie UKF – więcej na 48 MHz. Pobór prądu to ok. 2-3 miliampery. Z anteną typu dipol, taki nadajnik słychać w płaskim, lekko zalesionym terenie na ok. 300 m, słuchając na ręczniaku z małą anteną. Napięcie zasilania – od 2 do kilkudziesięciu V.

Podstawowe wady w/w układu, to brak możliwości regulacji częstotliwości w sensownym zakresie oraz niewielka moc. Przeprojektowując układ na oscylator Collpittsa i stosując lepszy tranzystor, dodając obwody pasmowe, pewnie dałoby się uzyskać lepszą elastyczność strojenia, większą moc i sprawność – kosztem złożoności konstrukcji. W Internecie nie ma zbyt wiele źródeł inspiracji, a proces eksperymentatorski jest dość powolny. Podobne układy tworzone są często przez… biologów – którzy wykorzystują je do śledzenia zwierząt, ale brakuje im solidnej, inżynierskiej ręki osoby dobrze zaznajomionej z technikami konstrukcji w. cz.

BUY

Klubowy kolega SQ3NIK podesłał mi link do ciekawych modułów nadawczych na pasmo ISM 433 MHz, wykorzystujących układ scalony SYN115.

W odróżnieniu od “klasycznych” nadajników ISM, tutaj od razu w oczy rzuca się oscylator kwarcowy o częstotliwości 13,56 MHz. Większość modułów ISM, które spotykałem do tej pory, zbudowana była na “pastylkowym” oscylatorze, który cechował się bardzo słabą stabilnością, jak i totalnym brakiem możliwości przestrajania. Ten układ jest niczym innym jak powielaczem częstotliwości *32 (13,56 * 32 = 433,92) wykorzystującym PLL. Niewątpliwą zaletą jest koszt – ok. 2 PLN za sztukę, tj. całą płytkę, odpowiadającą przykładowej aplikacji układu SYN115 z noty katalogowej.

Pierwszą rzeczą którą zrobiłem po otrzymaniu płytek, było sprawdzenie możliwości przestrajania. Odlutowałem jedną nogę kwarcu i w szereg z nią podłączyłem trymer – okazało się, że bez problemu mogę odstroić urządzenie z fabrycznej częstotliwości 433,960 MHz aż do 434,250 – prawie 300 kHz! Odpowiednio zmniejszając pojemność da się uzyskać jeszcze większą zmianę, aż do ok. 0,5 MHz.

Niemiłym zaskoczeniem była natomiast moc wyjściowa. Widząc pobór prądu w okolicach 12-14 mA, spodziewałem się, że układ da na wyjściu moc zbliżoną do tego co jest napisane w PDFie, czyli ~10 mW (+10 dBm). Niestety, trzy zmierzone sztuki na wyjściu produkowały tylko -10 dBm (0,1 mW), sto razy mniej niż oczekiwałem. Sprawność na poziomie 0,3% to także nie jest rewelacja. Tymbardziej dla urządzenia, które ma być zasilane bateryjnie i zostawione w jakiejś lokalizacji terenowej, żeby ktoś wyposażony w kierunkową antenę mógł je znaleźć.

Pierwsze próby ustalenia “o co chodzi” zacząłem od wylutowania elementów L/C służących za dopasowanie/filtr i obejrzenia wyjścia za pomocą analizatora widma. Okazało się, że bez filtra, na wyjściu udało się uzyskać +5 dBm, czyli 3 miliwaty. Zmiana o 15 dB, w teorii (czyli: w pustej przestrzeni) powinna zwiększyć zasięg ponad pięciokrotnie. Dokładniejsza analiza wykazała, że wartości elementów tworzących filtr w nocie katalogowej nie są przewidziane dla wyjścia 50 Ohm, ale dla małej anteny w postaci ścieżki na PCB.

Pozbycie się filtru, oprócz zwiększenia mocy na pożądanej częstotliwości, zwiększyło też emisję harmonicznych – sygnały na 868 i 1296 MHz zbliżają się do -10 dBm, czyli tylko ~-15 dBc.

Układ SYN115 przewidziany jest do pracy w “europejskim” paśmie ISM 433, jak i w amerykańskim odpowiedniku na 315 MHz. Podmieniając kwarc z 13,56 na 13,5 MHz, układ ochoczo pracuje na 432 MHz. Częstotliwość można zwiększać, umieszczając (coraz to mniejszą) pojemność w szeregu z kwarcem, aż do ok. 432,500 – choć wtedy układ staje się dość czuły na otoczenie, a indukcyjności wyprowadzeń elementów zaczynają odgrywać widoczną rolę.

Sterowanie częstotliwością za pomocą pojemności można wykorzystać do zrealizowania prostego modulatora FM. Elementem zmiennej pojemności może być np. dioda krzemowa – popularna 1N4001. Pojemność złącza P-N jest zależna od przyłożonego do diody napięcia:

Włączając taką diodę w szereg z rezonatorem kwarcowym, możemy wykorzystać ją jako przestrajaną pojemność:

Układ jest banalnie prosty, ale działa – pozwala na przykład na realizację transmisji SSTV, podając audio z komputera. Działa.

Nie można wymagać przesadnie wiele od gotowego urządzenia kosztującego mniej niż puszka słodzonej, gazowanej wody, ale warto pamiętać o kilku podstawowych wadach i ograniczeniach:

  • niska sprawność energetyczna – jeśli chcielibyśmy wykorzystać SYN115 jako nadajnik ARDF, to należy zapewnić mu sensowne źródło energii, gdyż niestety, zamiana prądu DC na RF odbywa się z bardzo niewielką sprawnością
  • emisja harmonicznych – na poziomie -10 dBm, warto zadbać o dodatkowy filtr – dla przyzwoitości, bo jednak przy tak małej mocy, szansa na zakłócenie czegokolwiek jest dość nikła, ale nie zerowa, plus – nie można i nie wypada
  • moim zdaniem największa wada – szum fazowy; układ oprócz generowania fali nośnej, generuje też szerokopasmową górkę szumu, o mocy ok. -30 dBc rozciągającą się wokół częstotliwości środkowej

Producent twierdzi, że wartości szumu fazowego powinny być lepsze niż -70 dBc w odległości 100 kHz i -80 dBc dla 1000 MHz, ale jak widać, to nie pierwszy raz kiedy datasheet ma mało wpsólnego z rzeczywistością. Nie podejrzewam reszty układu (oprócz samego scalaka) o wytwarzanie tak spektakulatnej górki szumu, bo tam nie ma zbytnio jak i czego zepsuć.

W praktyce i prostymi słowami: układ, oprócz pożądanego sygnału, generuje też szerokopasmowe zakłócenia o mocy o pięć eSów niższej, powodując zakłócenia dla innych użytkowników eteru. Z tego powodu, nie zalecam umieszczania nadajników zbudowanych w oparciu o SYN115 w wysokich lokalizacjach ani stosowania dobrych anten – szczególnie, jeśli zamierzamy nadawać sygnał o wysokim współczynniku wypełnienia.

Do małego nadajnika zawieszonego na drzewie – nada się w sam raz, tymbardziej, że rozmieszczenie kilku sztuk na sąsiednich kanałach to kwestia tylko dobrania kilku kondensatorów. Praktyczne testy SYN115 ogołoconego z filtra wyjściowego, z anteną 1/4 lambda na parapecie pierwszego piętra, modulowanego on/off, dały odbiór na dystansie ponad 1000 metrów, bez widoczności optycznej – za to z kilkoma solidnymi, 5-piętrowymi blokami po drodze, tak więc +5 dBm ~= 3 mW to wystarczająca moc do zabawy w szukanie nadajnika na ograniczonym terenie.

73 / SQ3SWF

Posted in Bez kategorii | Comments Off on SYN115 jako nadajnik ARDF (fox) na pasmo 70 cm

Dziś w klubie…!

Frekwencja dopisała, szkoda że frekwencje (ang. frequency) radiowe w naszym klubowym QTH są ostatnio bardzo hałaśliwe. QRM skutecznie utrudnia (ale bynajmniej nie uniemożliwia) nawiązywanie łączności dalekosiężnych.

Oprócz miliona tematów dyskusyjnych, na stole radiowym można było obejrzeć, dotknąć, sprawdzić, posmak.. nie, aż tak to nie. Yaesu FTM-500DE, czyli japońską nowość na 2/70, z prawdziwym podwójnym VFO, repeaterem crossband, podwójnym głośnikiem (z regulacją fazy audio), odpinanym panelem, odbiorem airbandu, APRS, GPS, C4FM, WIRES-X (z którego ponoć ktoś kiedyś skorzystał) – no po prostu wszystko, co może mieć radio UKF.

Oprócz tego, dzielny kurier (na “I”) dostarczył do mnie 10 zamawianych płytek AIOC (tnx SP5CMD), czyli interfejsu USB-audio dla ręczniaków, opartego o STM32. Na miejscu przylutowałem złącza jack (3,5 oraz 2,5 mm) do wszystkich płytek i zaprogramowałem je domyślnym firmwarem. Pierwsze przemyślenia odnośnie tego urządzenia opisałem na GitHubie.

Posted in Bez kategorii | Comments Off on Dziś w klubie…!

ICOM HM-56 / HM-56A – naprawa mikrofonu (microphone fix)

Od jednego z klubowych kolegów nabyłem niedawno transceiver UKF Icom IC-3220H. Fajny sprzęt, nienajgorszy odbiornik (jak na radio po trzydziestce), 36 pamięci, skaner, prawdziwy full-duplex.

Niestety, wyszedł jeden problem – radio sporadycznie zaczynało samoistnie nadawać. Sytuacja ustępowała po odłączeniu mikrofonu, łatwo więc wydedukować, że źródło problemu znajdowało się gdzieś pomiędzy 8-pinowym gniazdem, a ustami operatora.

Najgorszy rodzaj problemu to taki, który występuje sporadycznie. Pierwszy winowajca, czyli wtyczka mikrofonu, został rozebrany, sprawdzony i wykluczony – brak zwarć, luty w porządku, szukamy dalej.

Po rozkręceniu (wyposażonego we własny procesor do nadawania DTMF) mikrofonu, moim oczom ukazała się płytka, na której jeden z kondensatorów elektrolitycznych (C7), brzydko mówiąc, wykitował, zabierając ze sobą rezystor R14:

Przed wymianą – wizualnie uszkodzony C7 i rezystor R14 (prawy górny róg)

Po konstulacji z doktorem Google, okazało się, że problem jest znany i nawet producent wydał w roku 2004 stosowne oświadczenie w swoim biuletynie technicznym, co prawda używając dość dziwnych jednostek – mf (milifarady?!).

W serwisie eBay można za kwotę ok. $30 zakupić kit pasujących kodensatorów do wymiany:

Nie lubię płacić 24 zł za jeden kondensator, zastąpiłem więc elektrolity kondensatorami ceramicznymi o pasujących wartościach, 22 uF zastępując parą 2x 10 uF równolegle. Wymieniłem też skorodowany rezystor R14 (470 kOhm).

Tak prezentuje się płytka po wlutowaniu nowych elementów i lekkim wyczyszczeniu:

Po takim zabiegu radio nadaje tak jak powinno, tzn. wtedy i tylko wtedy, kiedy operator używa przycisku PTT. Z tego co moje (obdarzone tylko *podstawowym słuchem muzycznym) ucho odbiera, różnicy w wychodzącym audio nie ma, aczkolwiek rzut oka na schemat mikrofonu pokazuje, że te kondensatory mają udział głównie w generowaniu tonów DTMF – na czym mi osobiście mało zależy.

Kondensatory elektrolityczne to niestety zmora starej elektroniki, a cieknący z nich elektrolit potrafi uszkodzić inne pobliskie elementy, jak i samą płytkę drukowaną.

/ de SQ3SWF

* podstawowy słuch muzyczny – rozróżnia kiedy grają, a kiedy nie.

Posted in Bez kategorii | Comments Off on ICOM HM-56 / HM-56A – naprawa mikrofonu (microphone fix)

Inżynieria wsteczna AVR, część druga

Beacony na 3 cm i 23 cm nauczyły się już piszczeć nowym znakiem i lokatorem, na placu boju pozostała tylko radiolatarnia na pasmo 13 cm (2,3 GHz). W trakcie dzisiejszego spotkania w klubie, z Pavlem SP3MC przystąpiliśmy do działania.

Sprawa była, a przynajmniej wydawała się być bardziej skomplikowana – mikrokontroler w tym beaconie sterował syntezerem częstotliwości na układzie LMX2320, a nie tylko “kluczował” stopień mocy.

Początek był standardowy – identyfikacja połączeń pomiędzy pinami attiny2313 a złączem goldpin, wpinka programatorem USBasp, odczyt flasha za pomocą avrdude.

Pierwszy, oczywisty rzut oka niestety nie ujawnił żadnych stringów w dumpie. Wytoczyliśmy więc cięższą artylerię w postaci avr-objdump i Ghidry.

Ważną rzeczą było dla nas ustalenie czy kluczowanie CW odbywa się za pomocą sterowania syntezą, czy też jest realizowane na końcówce mocy. Rzut oka na PCB uwidocznił idący do sekcji PA przewód oznaczony jako “PTT”. Za pomocą woltomierza ustawionego w tryb pomiaru przejścia (beeep) szybko ustaliliśmy, że kluczowanie jest realizowane w “analogowy” sposób. Uf!

Analizując zdeasemblowany kod, przez dłuższą chwilę gapiliśmy się na tą sekcję. Jeśli coś miało realizować nadawanie, to musiał być ten fragment, ale w żaden prosty i logiczny sposób nie mogliśmy przełożyć tych instrukcji na CW.

Małym przełomem (z perspektywy czasu aż ciężko uwierzyć że nie wpadliśmy na to od razu) było odkrycie, że cała pierwsza sekcja (0x142 - 0x16c) powtarza się dokładnie od adresu 0x172. Z pewnością jest to fragment odpowiedzialny za nadawanie znaku, a dwie identyczne sekcje rcall niżej – lokatora.

Pozostało rozebrać więc fragment nadający znak na części pierwsze. Wołanych jest 21 funkcji, co jak bardzo dobrze zauważyl Pavel, zgadza się z ilością symboli (kropek i kresek) w telegraficznej reprezentacji ciągu “SR3YOR”. Tak czy siak, telegrafia ma dwa symbole, a wołane są cztery funkcje…

0x228 (A)   .
0x228 (A)   .
0x254 (B)   .
0x228 (A)   .
0x23e (C)   _
0x254 (B)   .
0x228 (A)   .
0x228 (A)   .
0x228 (A)   .
0x23e (C)   _
0x26a (D)   _
0x23e (C)   _
0x228 (A)   .
0x23e (C)   _
0x26a (D)   _
0x23e (C)   _
0x23e (C)   _
0x26a (D)   _
0x228 (A)   .
0x23e (C)   _
0x254 (B)   .

Po rozpisaniu kropek i kresek obok wywołań funkcji szybko staje się widoczne, że funkcja “A” (0x228) nadaje kropkę, a “B” (0x254) kropkę i przerwę pomiędzy literami, analogicznie działają funkcje “C” i “D” dla kresek.

Bogatsi o tą wiedzę (i zaskoczeni pomysłowością autora kodu) przystąpiliśmy do modyfikacji kodu za pomocą hexedytora. Należało zmienić wartości skoków dla instrukcji rcall, tak aby litery w lokatorze układały się w nową wartość. Nie jest to czynność odkrywcza, a wskazówki dostarczane przez avr-objdump wystarczą aby szybko wyliczyć nowe wartości. Przykładowo, spójrzmy na instrukcję:

 15c:   65 d0           rcall   .+202           ;  0x228

Znajduje się ona w pamięci pod adresem 15c, skąd skaczemy pod adres 0x228, czyli:

>>> hex((0x228 - 0x15c)//2)
'0x66'

Uzyskaną wartość 0x66 należy pomniejszyć o jeden i uzyskujemy naszą pożądaną instrukcję maszynową: 65 d0.

Chcąc skoczyć spod tego samego adresu (15c) w inne miejsce, np. 26a, należy obliczyć offset, tak samo jak wyżej:

>>> hex((0x26a - 0x15c)//2-1)
'0x86'

Zamieniamy więc 65 d0 na 86 d0 i pięknie – wywołanie funkcji nadającej kropkę zamieniło się w wywołanie funkcji kreska-z-pauzą. Przy edycji plików HEX należy pamiętać o przeliczeniu checksum na końcu każdej linii. Po zaprogramowaniu procesora zmienionym wsadem zaczął on, oczywiście, nadawać nowy lokator.

/de SQ3SWF

Posted in Bez kategorii | Comments Off on Inżynieria wsteczna AVR, część druga

SP3YOR na SN7L @ JO70SS (znów)

W tym roku działania teamu contestowego SN7L po raz kolejny wsparła klubowa ekipa w składzie Daniel SP3BJD, Władek SP3CET, Wojtek SQ3OOE, Olgierd SQ3SWF. Siódmy okręg reprezentowali dumnie Maciej SP7TEE, Wojtek SP7HKK, Zbyszek SP7MTU i Janek SQ7AEC.

W środowy wieczór dotarliśmy na miejsce z Poznania. W Szklarskiej odbyliśmy tzw. “sen nocny”, po którym, z samego rana, udaliśmy się na obowiązkowe uzupełnienie zapasów w znanym sklepie z owadem w logo. Następnie szybkie pakowanie przyczepki, która z Maciejem i ekipą (w samochodzie, nie w przyczepce) pojechała na górę, a my, ludzie z “3” w znaku, udaliśmy się na szczyt Szrenicy najbardziej szlachetną metodą zdobywania górskich szczytów: na własnych nogach.

Po zaledwie dwóch godzinach wypełnionym rozkoszowaniem się górskim powietrzem i słuchaniem sporadycznych narzekań odnośnie wyboru złej metody zdobywania szczytu, znaleźliśmy się na górze. Niezwłocznie przystąpiliśmy do prac – wyniesienie (z garażu) i rozniesienie rur, rozwinięcie i przygotowanie okablowania, a także przemieszczenie zimowych zapasów drewna opałowego. Mając gotową infrastrukturę, rozpoczęliśmy stawianie masztów.

Zachodni system 2×8, tzw. “drzewo”, przez złośliwych nazywane “drewnem”

W tym roku pracowaliśmy na czterech zestawach antenowych, każdy składający się z dwóch 8-elementowych anten yagi w pionowym stacku. Wszystko odbyło się bez większych problemów, oprócz jednego zestawu, który po złożeniu wykazywał całkiem niezłe dopasowanie (<-20 dB), a po podniesieniu do pionu dramatycznie słąbe (~ -4 dB).

Przewody wychodzące ze splitera do anten zostały zastąpione rezystorami 50 Ohm, a pomiar powtórzony. Ku zdziwieniu – problem słabego dopasowania występował nadal. Jeśli sztuczne obciążenie nie wykazuje dobrego dopasowania, to coś jest nie tak, a tym czymś zazwyczaj jest to, co zostało pomiędzy analizatorem, a sztucznym obciążeniem. W naszym przypadku był to wtyk typu “N” na końcu kabla pomiędzy PA a spliterem – po odkręceniu dekielka naszym oczom ukazały się cienkie druciki pochodzące z oplotu kabla koncentrycznego. W odpowiednim położeniu, drucik zwierał gorącą żyłę do masy. Usunięcie intruza dało natychmiastową poprawę.

Intruz, który psuje dopasowanie.
Systemy wschodnie, “schronisko” i “kamienie”

W czwartek udało nam się zmontować cztery maszty, a jeden uruchomić w pełni, tzn. zainstalować i podłączyć wzmacniacz. Podłączanie reszty zostawiliśmy sobie na piątek rano. Pogoda nie dokuczała szczególnie mocno (a na Szrenicy potrafi, oj, potrafi…), wszystko szło dobrze, aż do ostatniego systemu. Z jakiegoś powodu zasilacz Flatpack 48V stwierdził, że nie będzie dawał napięcia wyjściowego, co stanowczo zasygnalizował czerwoną diodą “Alarm”. Wizualna inspekcja wnętrzności urządzenia nie dała żadnych wskazówek na temat potencjalnego uszkodzenia. Obserwacja w termowizji pokazała kilka elementów które grzały się trochę bardziej niż powinny – a może nie, ciężko powiedzieć bez drugiego, sprawnego urządzenia obok. Próby serwisu polegającego na wyczyszczeniu PCB z grubej warstwy kurzu, niestety, nie zmieniły zachowania zasilacza, pozostała więc podmiana na inny.

Korzystając z sieci kontaktów, rozpoczęliśmy poszukiwania właściciela podobnego sprzętu, który byłby chętny go użyczyć lub odsprzedać. Znalazło się wielu chętnych kolegów UKFowców, niestety wymagałoby to transportu z dość odległych w Polsce miejsc. Na nasze szczęście, okazało się że mieszkający w Szklarskiej Porębie Darek SP6SYO dysponuje stosownym zasilaczem i zgodził się go pożyczyć. Monika (żona Macieja) odebrała zasilacz od Darka i wwiozła go wyciągiem pod szczyt (w deszczu!) po czym ja, autor tych słów, w bohaterskiej wspinaczce, na własnych plecach wniosłem go… ostatnie 60 metrów do schroniska.

System południowy “taras”

Napięcie darowanego zasilacza firmy Benning było trochę zbyt wysokie. Po szybkiej nauce języka niemieckiego (Einstellungen – “ustawienia”) połączonej z googlowaniem udało się ustawić odpowiednią wartość, a urządzenie trafiło do puszki ze wzmacniaczem.

Pozostały czas upłynął na zabawie i przyjemnościach, odbyliśmy też mały spacer do Łabskiej Boudy, gdzie boleśnie przekonaliśmy się, że poranne wstawanie nie popłaca. Na miejsce dotarliśmy o 11, a restauracja startuje od 12. Zamiast świeżych knedliczków i kompotu mandarynkowego, musieliśmy zadowolić się jedzeniem z bufetu.

Zawody jak zawody, polegają głównie na robieniu łączności i na tym się skupiliśmy. Warunki były dość “płaskie”, tzn. bez niespodziewanych duktów tropo i sporadyków. Udało się zrobić Anglików (G4ZAP/p) na CW, Włosi ładnie grzmieli, przy wielu QSO – świadomie bądź nie – wspomogliśmy się samolotami. Aktywność była chyba trochę mniejsza niż w poprzednich latach, w SP zdecydowanie mniejsza niż w zawodach wrześniowych.

SQ7AEC & SP3CET

Kenwood TS-850, a raczej to co z niego zostało po tym jak przeszedł przez warsztat Maćka SP7TEE, przez całe zawody sprawował się znakomicie. Jedynym potknięciem była telegrafia, która wymaga włączonego full-BK – inaczej wychodzący sygnał brzmi fatalnie, tzn. kropki i kreski zlewają się w ciągłe sygnały. Poinformowali mnie o tym.. Anglicy, za pomocą czatu ON4KST, że słyszą, ale nic nie rozumieją. Jeden guzik i szybko udało się skompletować pełną wymianę: raportów, numerów, lokatorów.

O godzinie 16:00 w niedzielę, standardowo przystąpiliśmy do szybkiego składania. Ekipa była liczna, więc nie zajęło to zbyt wiele czasu. A przynajmniej tak mi doniesiono – bo około 17:30 rozpocząłem zejście i przed 22:00 zameldowałem się w Poznaniu. / SWF

Posted in Bez kategorii | Comments Off on SP3YOR na SN7L @ JO70SS (znów)

Odświeżenie YOR-beaconów, czyli inżynieria wsteczna AVR, lekcja 1.

“Klubowe” beacony mikrofalowe (23, 13 oraz 3 cm) wybierają się do nowego, trochę wyższego niż dach bloku QTH. Żeby wszystko było legalne, poprawne i zgodne ze sztuką, należało wymienionym urządzeniom zaktualizować oprogramowanie keyerów, aby przedstawiały się odpowiednim znakiem (SR3YOR) oraz nowym lokatorem.

Beacony na 3 i 23 cm to konstrukcje “klasyczne”, tzn. schemat blokowy urządzenia żywcem przypomina “nadajnik telegraficzny na jedno pasmo” z egzaminu na uprawnienia amatorskie.

Źródłem sygnału jest generator kwarcowy, którego sygnał jest wielokrotnie powielany, filtrowany i wzmacniany, aż do uzyskania odpowiedniej częstotliwości i mocy wyjściowej. Kluczowanie odbywa się poprzez włączanie i wyłączanie stopnia mocy (dla 23 cm) lub delikatną zmianę częstotliwości generatora za pomocą napięcia (3 cm – nadaje sygnał CW-FSK).

W paśmie 3 cm zastosowano kwarc o częstotliwości 108,009 MHz co pomnożone 96 razy produkuje sygnał w okolicy 10 368 MHz – dostępny jest trymer do precyzyjnego dostrajania, a o stabilność temperatury (i częstotliwości) dba OCXO wg. G8ACE, utrzymujące stałe 60°C.

Układy kluczujące w obydwu urządzeniach są względnie proste, bo ich zadaniem jest tylko wytworzenie przebiegu on/off odpowiadającego telegraficznej reprezentacji znaku i lokatora.

3 cm

Na pierwszy ogień weźmy beacon na 3 cm, z keyerem wykonanym przez SP3FYK i zaprogramowanym przez SP5MX.

Serce urządzenia to leciwy (a jeszcze niedawno całkiem nowy, w porównaniu do 2051…) mikrokontroler attiny2313. Wygodnie wyprowadzone złącze ISP kusi żeby podłączyć doń programator i zobaczyć co w beaconie piszczy.

Za pomocą programu avrdude odczytałem pamięc flash urządzenia:
avrdude -c usbasp -p t2313 -U flash:w:3cm.hex:i
i zabrałem się za jej analizę. Mógłbym oczywiście bardzo małym nakładem pracy napisać swój program, w końcu to tylko ustawianie stanu HIGH oraz LOW na danym pinie, ale w ramach zabawy stwierdziłem, że przerobię to co już siedzi w mikrokontrolerze.

Tak prezentuje się surowy program. Zanim sięgniemy po deasembler, warto wizualnie ocenić zawartość pamięci – moją uwagę natychmiast przykuły ciągi “2D” i “2E” w pierwszej połowie zrzutu – odpowiadają one znakom ‘-‘ i ‘.’:

>>> chr(0x2d), chr(0x2e)
('-', '.')

To nie może być nic innego jak telegrafia. Zamieńmy więc wszystkie wystąpienia 2D na myślniki, 2E na kropki a 00 na spacje (global search-and-replace):

Cały alfabet telegraficzny w formie tablicy. Super, czyli gdzieś w kodzie musi znajdować się funkcja które iteruje po ciągu znaków i dla każdego wywołuje funkcję nadającą. To pozwala domniemywać, że gdzieś w pamięci musi znajdować się ciąg tekstowy, LUB, ewentualnie, szereg liczb określający pozycję w tablicy które tworzą znak i lokator. Tekst w pliku binarnym najłatwiej znaleźć za pomocą polecenia strings, ale żeby móc go użyć, trzeba przekonertować nasz plik .hex na format binarny:

objcopy -I ihex -O binary 3cm.hex 3cm.bin

➜  strings 3cm.bin 
..--.-
.-.-.
--..---....-.-.-.--..-.
(....)
-.--
--..
sr3xhy sr3xhy sr3xhy jo82lj jo82lj jo82lj 

Voila – mamy co chcieliśmy. Pozostało tylko znaleźć interesujący nas tekst w pliku .hex i podmienić go na nowy.

>>> ''.join([hex(ord(x))[2:] for x in 'sr3xhy'])
'737233786879'

Zaznaczone na niebiesko bajty w pliku .hex (6A i 23) to sumy kontrolne – należy przeliczyć je, aby program avrdude nie zgłosił błędu przy programowaniu. Użyłem pluginu do edycji plików intel hex do VS Code i zrobiłem to jednym kliknięciem. Pozostało wgrać zmieniony program:

avrdude -c usbasp -p t2313 -U flash:w:3cm.hex:i

I zgodnie z oczekiwaniami – dioda led na keyerze zaczęła mrugać w takt nowego znaku i lokatora.

23 cm

Tu jest gorzej. Narzędzie strings nie zwraca żadnych “oczywistych” rezultatów, tak samo rzut oka na plik hex. Czas spojrzeć na program w postaci zdeasemblowanej:

avr-objdump -D -m avr 23cm.hex | less

Podstawowym punktem zaczepienia może być oczywiście fakt, że kluczowanie CW odbywa się za pomocą jakiegoś pinu procesora. Sterowanie pinami odbywa się za pomocą instrukcji sbi i cbi, które muszą występować listingu asemblera:

 3b6:   08 95           ret
 3b8:   95 9a           sbi     0x12, 5 ; 18
 3ba:   a0 e6           ldi     r26, 0x60       ; 96
 3bc:   8d 91           ld      r24, X+
 3be:   9c 91           ld      r25, X
 3c0:   5b d0           rcall   .+182           ;  0x478
 3c2:   95 98           cbi     0x12, 5 ; 18
 3c4:   a0 e6           ldi     r26, 0x60       ; 96
 3c6:   8d 91           ld      r24, X+
 3c8:   9c 91           ld      r25, X
 3ca:   56 d0           rcall   .+172           ;  0x478
 3cc:   08 95           ret
 3ce:   95 9a           sbi     0x12, 5 ; 18
 3d0:   a2 e6           ldi     r26, 0x62       ; 98
 3d2:   8d 91           ld      r24, X+
 3d4:   9c 91           ld      r25, X
 3d6:   50 d0           rcall   .+160           ;  0x478
 3d8:   95 98           cbi     0x12, 5 ; 18
 3da:   a0 e6           ldi     r26, 0x60       ; 96
 3dc:   8d 91           ld      r24, X+
 3de:   9c 91           ld      r25, X
 3e0:   4b d0           rcall   .+150           ;  0x478
 3e2:   08 95           ret

W powyższym fragmencie widać dwie funkcje (pomiędzy ret i ret), które ustawiają stan wysoki a następnie niski na pinie 5 portu “D” – czyli 0x12, zgodnie z dokumentacją attiny2313.

Poszukajmy w kodzie odwołań do tych funkcji, czyli skoków pod adresy 0x3b8 oraz 0x3ce:

 29e:   08 95           ret
 2a0:   8b d0           rcall   .+278           ;  0x3b8
 2a2:   95 d0           rcall   .+298           ;  0x3ce
 2a4:   94 d0           rcall   .+296           ;  0x3ce
 2a6:   93 d0           rcall   .+294           ;  0x3ce
 2a8:   9d d0           rcall   .+314           ;  0x3e4
 2aa:   08 95           ret
 2ac:   90 d0           rcall   .+288           ;  0x3ce
 2ae:   84 d0           rcall   .+264           ;  0x3b8
 2b0:   8e d0           rcall   .+284           ;  0x3ce
 2b2:   98 d0           rcall   .+304           ;  0x3e4
 2b4:   08 95           ret
 2b6:   80 d0           rcall   .+256           ;  0x3b8
 2b8:   8a d0           rcall   .+276           ;  0x3ce
 2ba:   7e d0           rcall   .+252           ;  0x3b8
 2bc:   7d d0           rcall   .+250           ;  0x3b8
 2be:   92 d0           rcall   .+292           ;  0x3e4
 2c0:   08 95           ret
 2c2:   85 d0           rcall   .+266           ;  0x3ce
 2c4:   84 d0           rcall   .+264           ;  0x3ce
 2c6:   8e d0           rcall   .+284           ;  0x3e4
 2c8:   08 95           ret

Mamy tutaj kilka funkcji. Jeśli przyjęlibyśmy, że funkcja spod 3b8 nadaje kropkę, a 3ce kreskę, to składa się to w telegraficzne literki “J”, “K”, “L”, “M”, a z dużym prawdopodobieństwem 3e4 oznacza po prostu czekanie. Czas spojrzeć więc skąd wołane są w/w funkcje…

 15a:   cc d0           rcall   .+408           ;  0x2f4
 15c:   c1 d0           rcall   .+386           ;  0x2e0
 15e:   ec d0           rcall   .+472           ;  0x338
 160:   aa d0           rcall   .+340           ;  0x2b6
 162:   98 d0           rcall   .+304           ;  0x294
 164:   c2 d0           rcall   .+388           ;  0x2ea
 166:   3e d1           rcall   .+636           ;  0x3e4
 168:   9b d0           rcall   .+310           ;  0x2a0
 16a:   af d0           rcall   .+350           ;  0x2ca
 16c:   08 d1           rcall   .+528           ;  0x37e
 16e:   dd d0           rcall   .+442           ;  0x32a
 170:   a2 d0           rcall   .+324           ;  0x2b6
 172:   96 d0           rcall   .+300           ;  0x2a0
 174:   37 d1           rcall   .+622           ;  0x3e4

Pomijając funkcję pauzy (3e4), mamy więc odwołania do adresów 2f4 2e0 338 2b6 294 2ea 2a0 2ca 37e 32a 2b6 2a0. Użyjmy krótkiego skryptu w pythonie do zobaczenia, które funkcje są wywoływanie – nie będziemy tego sprawdzać ręcznie, w końcu to aż 12 znaków…

#!/usr/bin/python3

f = open('23cm.asm').read().splitlines()

for addr in ['2f4', '2e0', '338', '2b6', '294', '2ea', '2a0', '2ca', '37e', '32a', '2b6', '2a0']:
    prin = False
    out = ""
    for l in f:
        if l.startswith(f" {addr}") or prin:
            prin = True
            out += "-" if "0x3ce" in l else '.' if "0x3b8" in l else ""
        if 'ret' in l:
            prin = False

    print(out)

Odpalmy:

➜  python3 parse.py 
...
.-.
...--
.-..
....
-.--
.---
---
---..
..---
.-..
.---

I wszystko jasne – znaki układają się w ciąg SR3LHY JO82LJ. Analogicznie do poprzedniego przykładu z pasma 3 cm, należy teraz “tylko” podmienić adresy wywoływanych funkcji.

15a:   cc d0           rcall   .+408           ;  0x2f4

Skok pod adres 0x2f4 kodowany jest przez op-code “cc d0“. Tak wygląda op-kod dla instrukcji rcall: (strona 137)

Cały trick polega na tym, że adres pod który skaczemy jest w instrukcji rcall podawany relatywnie do naszej aktualnej pozycji w pamięci, czyli jeśli z 15a chcemy skoczyć na 2f4, to musimy skoczyć o 0x0cc, czyli 204, razy dwa – 408 komórek pamięci.

Sprawia to, że podmiana wywołań nie jest trywialna, ale z wiedzą jak działa instrukcja rcall, nie jest też absolutnie trudna – wystarczy kalkulator i chwila cierpliwości. Po naniesieniu poprawek w pliku hex (i korekcie checksum na końcu każdej modyfikowanej linii) można taki plik wrzucić jeszcze raz do deasemblera (avr-objdump) i upewnić się, że wołamy do odpowiednich miejsc. Finalnym potwierdzeniem było użycie avrdude i uważna obserwacja diody na pudełku keyera 🙂

Dwa beacony ćwierkają już nowymi znakami, pozostał jeszcze model na 13 cm – już wkrótce!

73 / SQ3SWF

Posted in Bez kategorii | Comments Off on Odświeżenie YOR-beaconów, czyli inżynieria wsteczna AVR, lekcja 1.

SP3YOR a SPDX Contest

SPDX to jedno z tych wydarzeń, na które czeka się od wiosny do wiosny. Fajnie “mieć branie” na paśmie. Poniżej wyniki wywalczone przez naszych klubowiczów:

ZnakMiejsceQSOPunktyKategoria
SP3CET#2039468SOAB MIXED QRP
SP3CTG#19720150SOAB PHONE LP
SP3LOZ#2916410896SOAB MIXED LP
SP3RNY#4730348SOSB PHONE 20M
SP3UCW#18623350SOAB PHONE LP
SP3VN#14843360SOAB MIXED QRP
SQ3SWF#191003180SOSB CW 20M

Gratulacje dla wszystkich uczestników! 🙂
/swf

Posted in Bez kategorii | Comments Off on SP3YOR a SPDX Contest

Pakowanie z radiem – QRP z SV9

Miałem przyjemność spędzić tegoroczną majówkę na Krecie – była to doskonała okazja na małą aktywację radiową.

Oprócz chęci i zapału, niezbędne jest jakieś zaplecze sprzętowe. Mam nadzieję, że poniższa lista (oraz modele 3D) przydadzą się jako pomoc w samodzielnym planowaniu.

Inspekcja.
  1. Transceiver: Yaesu FT-817ND (z koszyczkiem na baterie 18650)
  2. Transceiver: (tr)uSDX + przejście SMA-BNC
  3. Klucz dwudźwigniowy, magnetyczny – wydruk 3D (tks SQ3PCL) + przewód 3.5 mm
  4. Słuchawki
  5. Dwa dodatkowe zestawy akumulatorków 18650 (3 szt.) w etui (wydruk 3D)
  6. Ładowarka do ogniw Li-Ion 18650 + ładowarka USB jako zasilacz 5V
  7. Koszyczki do akumulatorków z odpowiednimi wtyczkami
  8. Skrzynka antenowa ATU-100
  9. Przewody koncentryczne BNC: krótki, średni i długi
  10. Środki do dipoli + przewody z oczkami – wydruk 3D
  11. Antena teleskopowa 5m (z Aliexpress) + osłona z rurki + podstawa do montażu (wydruk 3D)
  12. Linka miedziana LGY ok. 10 metrów jako przeciwwaga dla teleskopu
  13. Przewód miedziany zakończony z jednej strony oczkiem, z drugiej dużym “krokodylkiem”.

Nieuwzględnione na fotografii: trytki i opaski rzepowe, 6 lub więcej sztuk.

Przeprowadziłem ok. 30 QSO telegrafią – żaden to rekord, ale bynajmniej nie były to łączności polegające tylko na wymianie raportów – raczej miłe, telegraficzne konwersacje. Warunki hotelowe (pierwsze piętro, pomiędzy budynkami) nie pozwalały na pracę z pokojowego balkoniku, pozostała mi więc tylko bardzo sporadyczna aktywność /p z plaży, całkiem zresztą urokliwej.

Propagacja do SP na 15 m w ciągu dnia była świetna – niestety, nie wziąłem mikrofonu do 817, a trusdx operuje tylko do 20 m, gdzie Polski nie było słychać w ogóle. Projekt na przyszłość – podróżny mikrofon do Yaesu, żeby móc zamienić parę słów z nie-titającymi kolegami. ODX: QSO z WM5DX.

Vertical z pojedynczą przeciwwagą umieszczony metr nad olbrzymim zbiornikiem słonej wody to “całkiem sprawna” antena, co widziałem po spotach na RBN – 5 W z FT-817 zgarniało naprawdę dobre raporty.

Cały zestaw został bez żadnych pytań przewieziony samolotem, aczkolwiek do bagażu podręcznego podlegającego kontroli trafiło tylko 817 oraz baterie – antena, druty i reszta gratów poleciała w rejestrowanym. Jeśli ktoś podróżuje tylko z podręcznym, to oprócz długiej, metalowej pałki teleskopowej, cała reszta nie powinna być problemem. Zdarzyło mi się lecieć z podobnym zestawem w przeszłości.

Graty po spakowaniu w etui z Decathlona.
Gdzie popełniłem błąd?

de SV9/SQ3SWF 2023

Posted in Bez kategorii | Comments Off on Pakowanie z radiem – QRP z SV9