08-08-2026, 12:31
Otrzymałem wiadomość, że spośród osób budujących Jokera, nieliczna grupa natrafiła
na kłopot z uruchomieniem odbiornika w module RF. Sprawa jest bardzo interesująca,
pomimo takiego samego schematu, takich samych połączeń na takiej samej płytce PCB,
zdarzyły się odstępstwa w działaniu i współpracy kluczy CBT3253 z układami AD8421.
Popatrzmy najpierw na widok wnętrza AD8421 jakie zostało opisane w dokumentacji.
Na wejściach -IN oraz +IN znajdują się źródła prądowe dołączone do obu biegunów zasilania.
Według moich doświadczeń i pomiarów, przy zasilaniu niesymetrycznym wzmacniacza,
napięcie na tych wejściach jest bliskie połowie Vs (połowie napięcia zasilania).
Teraz popatrzmy na fragment schematu z kluczami CBT3253, interesuje nas lewa strona.
Klucze w tej konfiguracji nie są polaryzowane od strony transformatora, napięcie polaryzacyjne
podawane jest z drugiej strony, czyli od opisanych wyżej wejść układów AD8421.
Jest to korzystne, ponieważ kondensatory próbkujące nie mają dołączanego skokowo
napięcia polaryzacyjnego od strony transformatora przy cyklicznie zamykanych kluczach.
Na kondensatorach jest utrzymywane cały czas stałe napięcie, którego nie trzeba doładowywać.
Takie rozwiązanie działa u większości osób, ale niestety są również potwierdzone przypadki,
gdzie AD8421 nie wykazuje napięcia na wejściach lub jest one bardzo niskie, poniżej 0,5V.
W rezultacie klucze nie pracują i układ odbiornika nie działa. Trudno jest sensownie określić
dlaczego u niektórych osób, które wykonały płytkę RF, wejścia AD8421 nie wystawiają napięcia
potrzebnego do polaryzacji kluczy. Rozwiązaniem tego kłopotu jest po prostu dostarczenie
napięcia polaryzacyjnego na środkowym padzie transformatora jak na poniższym zdjęciu.
Niestety nie przewidziałem na płytce PCB montażu dodatkowego rezystora. Jedynym wyjściem
będzie lutowanie wersji przewlekanej od pola lutowniczego transformatora, do któregoś miejsca
z napięciem zasilania 5V. Poniżej zdjęcie z proponowanym ułożeniem takiego rezystora.
Tak zbudowany dzielnik z rezystorów nie musi być ustawiony na połowę napięcia zasilania 5V.
Sugerowany wybór wartości dla napięcia blisko 2V to rezystor przewlekany R po stronie zasilania
około 3k3, po stronie masy R43 około 2k2. Kondensator równolegle do rezystora najlepiej będzie
wymienić na znacznie większą pojemność dostępną dla montażu 0805. Jestem trochę rozczarowany
takimi różnicami w sposobie pracy dostępnych na rynku układów AD8421 u różnych dostawców.
Najważniejsze, że mamy teraz świadomość takich rzeczy i potrafimy sobie z tym poradzić.
Temat sprzętowy mamy omówiony, przejdźmy do ciekawych zmian programowych. Kod Jokera
napisany jest w sposób nieblokujący, żadna funkcja nie ma wyższego priorytetu od pozostałych.
W rozbudowanym i dobrze pracującym urządzeniu program od początku musi być zaplanowany
do działania asynchronicznego z architekturą sterowania zdarzeniami opartej na maszynie stanów.
Joker nie posiada w kodzie ani jednego zatrzymania delay() czy pętli while(), które marnowałyby
cenny czas procesora. Klasyczne podejście blokuje na chwilę program, na przykład czekając,
aż skończy się jakieś pojedyncze zadanie, Joker jest napisany tak, żeby na nic nie czekał.
W każdym obiegu głównej pętli program sprawdza aktualny status kolejnego bloku funkcyjnego,
wykonuje natychmiastową akcję jeśli jest potrzebna i od razu przechodzi do następnego kroku.
Konsekwencją takiego podejścia jest pełen determinizm czasowy, niezwykle ważny w systemach
gdzie zależy nam na maksymalnej płynności. Niezależnie od tego, czy obraca się enkoder,
rysuje wodospad, włączona jest redukcja szumu, komputer gęsto przesyła dane przez CAT,
czas przetwarzania głównej pętli pozostaje niezmienny, nie ma opóźnień w działaniu całości.
Oprócz przyjętego sposobu pisania kodu, ważną rolę odgrywa zastosowany tutaj ESP32-S3,
posiadający sprzętowe instrukcje wektorowe przyspieszające zaawansowaną matematykę.
W poprzedniej wiadomości napisałem, że modyfikacje kodu bez zrozumienia jego filozofii,
którą od początku założył autor, prawie zawsze będą kończyły się pogorszeniem działania.
Linie programu są jak trybiki w wielkiej maszynie, kiedy wszystko jest dobrze przemyślane,
otrzymujemy harmonijnie i spójnie pracujący system zarządzający pracującym urządzeniem.
Użyte narzędzie do programowania nie ma tutaj większego znaczenia. Łatwość rozpoczęcia nauki
w środowisku Arduino sprawia, że chętnie sięgają po nie początkujący. Jednak ponieważ ich wiedza
często kończy się na miganiu diodami LED, niesłusznie szufladkują tą platformę jako zabawkę.
Joker w całości napisany jest w Arduino i wcale nie narzeka na niemożność realizacji stawianych
przed nim zadań do wykonania. Przeciwnie, zachęca do tworzenia kolejnych możliwości.
Raz za razem przybliża nas to do własnoręcznie wykonanego urządzenia, którego właściwości
coraz bardziej starają się dorównać produktom z zupełnie innej, wyższej półki jakościowej.
Po tym przydługim wstępie o stosowanych w Jokerze praktykach w kodzie, opiszę teraz nową funkcję,
jaka została wprowadzona do programu. Każdy filtr dla modulacji SSB i CW można obecnie przesuwać.
W lewym menu podręcznym mamy pozycję z literą B jak Bandwidth, gdzie wybieramy 1 z 15 filtrów
za pomocą obrotu enkodera. Będąc przy tej pozycji, jeśli naciśniemy przycisk enkodera, wtedy litera B
zmieni się na S, co oznacza Shift. Obracając enkoder będziemy zmieniali przesunięcie danego filtru.
Podczas regulacji Shift, na wodospadzie wyróżniona kolorem strefa filtru będzie przemieszczała się
określając dokładnie nowe miejsce działania wybranego filtru. Wizualizacja podąża więc precyzyjnie
za tym co konkretnie słyszymy. Dla odsłuchu SSB może to być ucieczka przed zakłóceniem od strony
niskich częstotliwości lub odcięcie dudniących basów u korespondenta z tak akurat ustawionym audio.
Ciekawym efektem jest ustawienie węższego filtru 2k3 i przesunięcie go nieco wyżej niż jest domyślnie.
Dla CW działa to bardziej inteligentnie. Gdyby Shift skupiony był wyłącznie na przesuwaniu,
wtedy dość szybko utracilibyśmy stację telegraficzną z wąskiego filtru. Dlatego przy CW
razem z filtrem przesuwa się także całe widmo, utrzymując stację cały czas wewnątrz filtru.
W efekcie ton stacji zmienia się i można dopasować jego wysokość do własnych preferencji.
Shift jest niezależną funkcją od BIT, oznacza to, że bez względu na ustawione przesunięcie,
nadal mamy stały odstęp częstotliwości odsłuchu od częstotliwości nadawania, oczywiście możemy
regulować odstęp tak jak było do tej pory. Granice przesunięcia to 0 – 500Hz z krokiem 10Hz.
To jest wystarczający zakres, przy którym odsłuch ma realnie jakiś sens. Shift dla każdego filtru
jest niezależny i zapamiętywany, powstała więc nowa wyspa w programie Joker Configurator.
W tej chwili Joker Configurator jest zdolny odczytać i w przyszłości przywrócić ponad 190 ustawień.
To wydaje się być bardzo dużo, ale jeśli spojrzeć na grupy tych ustawień to widać, że taka liczba
bierze się głównie z zależności i przydzielania komórek pamięci na określone pasma, filtry, vfo itd.
Domyślam się, że tak skrótowy opis funkcji Shift może nie oddaje wyraźnie sposobu jego działania,
jednak Piotr na kolejnym filmie omówi wszystko dokładniej i pokaże jak to wygląda w rzeczywistości.
Zostanie również pokazana faktyczna skuteczność filtrów jakich używa Joker, szerokość ich zboczy,
zachowanie sygnału przechodzącego przez krawędzie filtrów oraz inne ciekawe i praktyczne testy.
Sposób w jaki teraz obsługiwane jest filtrowanie w programie otwiera niedostępne wcześniej drzwi
do zupełnie nowych i przydatnych funkcji, które na pewno zostaną wprowadzone w przyszłości.
Zapraszam do pobrania dostępnych teraz nowych wersji Joker 2.7 oraz Joker Configurator 1.1
Uzupełniona jest także tabelka z komendami CAT, a ten opis znajduje się w dokumentach pdf.
Na koniec kilka zdjęć opisanej na początku płytki RF ze zbliżeniem na tor odbiornika.
na kłopot z uruchomieniem odbiornika w module RF. Sprawa jest bardzo interesująca,
pomimo takiego samego schematu, takich samych połączeń na takiej samej płytce PCB,
zdarzyły się odstępstwa w działaniu i współpracy kluczy CBT3253 z układami AD8421.
Popatrzmy najpierw na widok wnętrza AD8421 jakie zostało opisane w dokumentacji.
Na wejściach -IN oraz +IN znajdują się źródła prądowe dołączone do obu biegunów zasilania.
Według moich doświadczeń i pomiarów, przy zasilaniu niesymetrycznym wzmacniacza,
napięcie na tych wejściach jest bliskie połowie Vs (połowie napięcia zasilania).
Teraz popatrzmy na fragment schematu z kluczami CBT3253, interesuje nas lewa strona.
Klucze w tej konfiguracji nie są polaryzowane od strony transformatora, napięcie polaryzacyjne
podawane jest z drugiej strony, czyli od opisanych wyżej wejść układów AD8421.
Jest to korzystne, ponieważ kondensatory próbkujące nie mają dołączanego skokowo
napięcia polaryzacyjnego od strony transformatora przy cyklicznie zamykanych kluczach.
Na kondensatorach jest utrzymywane cały czas stałe napięcie, którego nie trzeba doładowywać.
Takie rozwiązanie działa u większości osób, ale niestety są również potwierdzone przypadki,
gdzie AD8421 nie wykazuje napięcia na wejściach lub jest one bardzo niskie, poniżej 0,5V.
W rezultacie klucze nie pracują i układ odbiornika nie działa. Trudno jest sensownie określić
dlaczego u niektórych osób, które wykonały płytkę RF, wejścia AD8421 nie wystawiają napięcia
potrzebnego do polaryzacji kluczy. Rozwiązaniem tego kłopotu jest po prostu dostarczenie
napięcia polaryzacyjnego na środkowym padzie transformatora jak na poniższym zdjęciu.
Niestety nie przewidziałem na płytce PCB montażu dodatkowego rezystora. Jedynym wyjściem
będzie lutowanie wersji przewlekanej od pola lutowniczego transformatora, do któregoś miejsca
z napięciem zasilania 5V. Poniżej zdjęcie z proponowanym ułożeniem takiego rezystora.
Tak zbudowany dzielnik z rezystorów nie musi być ustawiony na połowę napięcia zasilania 5V.
Sugerowany wybór wartości dla napięcia blisko 2V to rezystor przewlekany R po stronie zasilania
około 3k3, po stronie masy R43 około 2k2. Kondensator równolegle do rezystora najlepiej będzie
wymienić na znacznie większą pojemność dostępną dla montażu 0805. Jestem trochę rozczarowany
takimi różnicami w sposobie pracy dostępnych na rynku układów AD8421 u różnych dostawców.
Najważniejsze, że mamy teraz świadomość takich rzeczy i potrafimy sobie z tym poradzić.
Temat sprzętowy mamy omówiony, przejdźmy do ciekawych zmian programowych. Kod Jokera
napisany jest w sposób nieblokujący, żadna funkcja nie ma wyższego priorytetu od pozostałych.
W rozbudowanym i dobrze pracującym urządzeniu program od początku musi być zaplanowany
do działania asynchronicznego z architekturą sterowania zdarzeniami opartej na maszynie stanów.
Joker nie posiada w kodzie ani jednego zatrzymania delay() czy pętli while(), które marnowałyby
cenny czas procesora. Klasyczne podejście blokuje na chwilę program, na przykład czekając,
aż skończy się jakieś pojedyncze zadanie, Joker jest napisany tak, żeby na nic nie czekał.
W każdym obiegu głównej pętli program sprawdza aktualny status kolejnego bloku funkcyjnego,
wykonuje natychmiastową akcję jeśli jest potrzebna i od razu przechodzi do następnego kroku.
Konsekwencją takiego podejścia jest pełen determinizm czasowy, niezwykle ważny w systemach
gdzie zależy nam na maksymalnej płynności. Niezależnie od tego, czy obraca się enkoder,
rysuje wodospad, włączona jest redukcja szumu, komputer gęsto przesyła dane przez CAT,
czas przetwarzania głównej pętli pozostaje niezmienny, nie ma opóźnień w działaniu całości.
Oprócz przyjętego sposobu pisania kodu, ważną rolę odgrywa zastosowany tutaj ESP32-S3,
posiadający sprzętowe instrukcje wektorowe przyspieszające zaawansowaną matematykę.
W poprzedniej wiadomości napisałem, że modyfikacje kodu bez zrozumienia jego filozofii,
którą od początku założył autor, prawie zawsze będą kończyły się pogorszeniem działania.
Linie programu są jak trybiki w wielkiej maszynie, kiedy wszystko jest dobrze przemyślane,
otrzymujemy harmonijnie i spójnie pracujący system zarządzający pracującym urządzeniem.
Użyte narzędzie do programowania nie ma tutaj większego znaczenia. Łatwość rozpoczęcia nauki
w środowisku Arduino sprawia, że chętnie sięgają po nie początkujący. Jednak ponieważ ich wiedza
często kończy się na miganiu diodami LED, niesłusznie szufladkują tą platformę jako zabawkę.
Joker w całości napisany jest w Arduino i wcale nie narzeka na niemożność realizacji stawianych
przed nim zadań do wykonania. Przeciwnie, zachęca do tworzenia kolejnych możliwości.
Raz za razem przybliża nas to do własnoręcznie wykonanego urządzenia, którego właściwości
coraz bardziej starają się dorównać produktom z zupełnie innej, wyższej półki jakościowej.
Po tym przydługim wstępie o stosowanych w Jokerze praktykach w kodzie, opiszę teraz nową funkcję,
jaka została wprowadzona do programu. Każdy filtr dla modulacji SSB i CW można obecnie przesuwać.
W lewym menu podręcznym mamy pozycję z literą B jak Bandwidth, gdzie wybieramy 1 z 15 filtrów
za pomocą obrotu enkodera. Będąc przy tej pozycji, jeśli naciśniemy przycisk enkodera, wtedy litera B
zmieni się na S, co oznacza Shift. Obracając enkoder będziemy zmieniali przesunięcie danego filtru.
Podczas regulacji Shift, na wodospadzie wyróżniona kolorem strefa filtru będzie przemieszczała się
określając dokładnie nowe miejsce działania wybranego filtru. Wizualizacja podąża więc precyzyjnie
za tym co konkretnie słyszymy. Dla odsłuchu SSB może to być ucieczka przed zakłóceniem od strony
niskich częstotliwości lub odcięcie dudniących basów u korespondenta z tak akurat ustawionym audio.
Ciekawym efektem jest ustawienie węższego filtru 2k3 i przesunięcie go nieco wyżej niż jest domyślnie.
Dla CW działa to bardziej inteligentnie. Gdyby Shift skupiony był wyłącznie na przesuwaniu,
wtedy dość szybko utracilibyśmy stację telegraficzną z wąskiego filtru. Dlatego przy CW
razem z filtrem przesuwa się także całe widmo, utrzymując stację cały czas wewnątrz filtru.
W efekcie ton stacji zmienia się i można dopasować jego wysokość do własnych preferencji.
Shift jest niezależną funkcją od BIT, oznacza to, że bez względu na ustawione przesunięcie,
nadal mamy stały odstęp częstotliwości odsłuchu od częstotliwości nadawania, oczywiście możemy
regulować odstęp tak jak było do tej pory. Granice przesunięcia to 0 – 500Hz z krokiem 10Hz.
To jest wystarczający zakres, przy którym odsłuch ma realnie jakiś sens. Shift dla każdego filtru
jest niezależny i zapamiętywany, powstała więc nowa wyspa w programie Joker Configurator.
W tej chwili Joker Configurator jest zdolny odczytać i w przyszłości przywrócić ponad 190 ustawień.
To wydaje się być bardzo dużo, ale jeśli spojrzeć na grupy tych ustawień to widać, że taka liczba
bierze się głównie z zależności i przydzielania komórek pamięci na określone pasma, filtry, vfo itd.
Domyślam się, że tak skrótowy opis funkcji Shift może nie oddaje wyraźnie sposobu jego działania,
jednak Piotr na kolejnym filmie omówi wszystko dokładniej i pokaże jak to wygląda w rzeczywistości.
Zostanie również pokazana faktyczna skuteczność filtrów jakich używa Joker, szerokość ich zboczy,
zachowanie sygnału przechodzącego przez krawędzie filtrów oraz inne ciekawe i praktyczne testy.
Sposób w jaki teraz obsługiwane jest filtrowanie w programie otwiera niedostępne wcześniej drzwi
do zupełnie nowych i przydatnych funkcji, które na pewno zostaną wprowadzone w przyszłości.
Zapraszam do pobrania dostępnych teraz nowych wersji Joker 2.7 oraz Joker Configurator 1.1
Uzupełniona jest także tabelka z komendami CAT, a ten opis znajduje się w dokumentach pdf.
Na koniec kilka zdjęć opisanej na początku płytki RF ze zbliżeniem na tor odbiornika.

