Łączność radiowa zmieniła wiele na kolei. Bez niej było bardzo trudno przekazywać informacje, a szybka i jednoznaczna komunikacja to podstawa sprawnej pracy, a przede wszystkim większe bezpieczeństwo. W przypadku korzystania z symulatora coraz częściej pojawiają się scenariusze, w których komunikaty radiowe mają kluczowe znaczenie. Testując jedną z opracowywanych ostatnio scenerii okazało się, że moje problemy wynikały między innymi z powodu niewłączenia radiotelefonu.
Komunikacja UART z pulpitem uwzględnia część funkcjonalności obsługi radiotelefonu więc postanowiłem przymierzyć się do jego podłączenia. Nie jest to jeszcze idealne rozwiązanie, bo niektóre funkcje są przygotowane przede wszystkim do obsługi myszką lub klawiaturą. Załączenie/wyłączenie radiotelefonu, przełączanie kanałów czy regulacja głośności nie odbierają bezwzględnych stanów, co może czasami powodować niezgodność reakcji symulatora w stosunku do rzeczywistego stanu przełączników. Podstawą jest uruchomienie symulacji przy odpowiednich, startowych ustawieniach na manipulatorze.
Jak większość, nowo dodawanych elementów, na początek podłączyłem wszystko na płytce stykowej. Utrudniłem sobie również pracę. Elementy manipulatora, na początek bez podłączania oryginalnego Radmora 3066 zostały zintegrowane poprzez dodatkową płytkę Arduino. Z jednej strony nie chciałem podłączać się do głównego kontrolera (Arduino MEGA), a z drugiej nie chciałem również dodawać kolejnego expandera bo wymagałoby to modyfikacji w już istniejącym okablowaniu. Przy okazji postanowiłem przetestować możliwość wewnętrznej komunikacji UART między dwoma płytkami Arduino. W związku z tym cały projekt manipulatora radiotelefonu powstaje dla Arduino NANO, które komunikuje się z MEGA poprzez port szeregowy. Informacja z przycisków i przełączników jest przekazywana do symulatora, a NANO dostaje informacje o aktualnym numerze kanału. Nie odpowiada to ściśle zachowaniu klasycznego Radmora, który nie posiada żadnego wyświetlacza, jednak do celów testowych jest to dla mnie dobre rozwiązanie, choć zakładam, że tymczasowe. Nie widząc wirtualnego manipulatora nie jestem w stanie łatwo stwierdzić jaki aktualnie kanał jest wybrany. Wskazania na wyświetlaczu są dodatkowym potwierdzeniem, że sygnał wysyłany z przełączników prawidłowo dotarł do oprogramowania symulatora. Nie bez znaczenia była również możliwość przećwiczenia jak podłączyć wyświetlacz siedmiosegmentowy z multiplexingiem. Stosowna biblioteka jest dostępna w zasobach GitHub’a.
Po pierwszych testach na płytce stykowej, gdzie wszystko było obsługiwane przyciskami (również zmiana kanałów i głośności) nadszedł czas na integrację z właściwym manipulatorem. Schemat urządzenia oraz weryfikacja połączeń wewnątrz obudowy pozwoliła na bezinwazyjne podpięcie pierwszego przełącznika. Wybór kanałów jest możliwy dzięki temu, że styki przełącznika wielopozycyjnego są wyprowadzone bezpośrednio na piny oryginalnej wtyczki. Kanały 1-10 oraz masa to piny od 1 do 11 na wtyczce. Ten element zadziałał bardzo dobrze.
Podłączenie wszystkich styków przełącznika wymagało zastosowania większej liczby pinów cyfrowych mikrokontrolera, więc była okazja do przetestowania nowego 16-bitowego expandera PCF8575. Dotychczas stosowałem wersje 8-bitowe PCF8574, które działają bardzo dobrze. Większa odmiana daje nowe możliwości, choć niestety zakres dostępnych adresów pokrywa się w obu wersjach, co utrudnia dodawanie nowych układów do istniejącego projektu. Oddzielna płytka Arduino to niezależny ekosystem, przynajmniej jeśli chodzi o podłączone peryferia, więc nowe expandery nie kłócą się z już wykorzystywanymi. Na szczęście są dostępne wersje bibliotek dla obu typów expanderów, więc obsługa większej wersji nie stanowiła żadnego problemu.
Po analizie schematu oraz połączeń wewnątrz manipulatora doszedłem do wniosku, że bez ingerencji, a w zasadzie usunięcia całej elektroniki można łatwo podłączyć jedynie przycisk załączenia/wyłączenia oraz przełącznik kanałów. Pozostałe elementy niestety nie mają bezpośredniego wyjścia na oryginalny wtyk. Możliwe, że jakimiś elektronicznymi trikami można byłoby obejść te ograniczenia, jednak ja nie czuję się na siłach i najprawdopodobniej jeden z manipulatorów będzie musiał zostać poświęcony dla dobra projektu. Na razie podłączyłem bezinwazyjnie co się dało i zobaczymy co będzie dalej. Do codziennego użytkowania, włączanie i zmiana kanałów wystarcza. Przemyślę temat, może uda się skonsultować możliwości z mądrymi ludźmi, a jeśli nic innego nie pozostanie to po usunięciu elektroniki z wnętrza, zastąpię ją własną, która pozwoli na możliwie szeroką i łatwą integrację z pulpitem.
Projekt radiotelefonu będzie się dalej rozwijał bo na podłączenie czekają pozostałe przyciski i przełączniki. Znacznym ułatwieniem byłoby dostosowanie ramek danych komunikacji szeregowej z symulatorem tak, aby uwzględniały specyfikę fizycznego manipulatora. Bistabilny przycisk załączania/wyłączania, bezpośredni odczyt pozycji przełącznika kanałów i głośności, czy stan załączenia radiotelefonu ułatwiłyby integrację. Niestety takie zmiany są poza moimi możliwościami, więc czekam na przychylność twórców symulatora.
Minęło kilka dni i sytuacja zmieniła się dość istotnie. Niestety pełne wykorzystanie manipulatora zarówno do współpracy z blokiem nadawczo-odbiorczym jak i pulpitem symulatora okazało się dla mnie niemożliwe do wykonania. Nie ingerując w wewnętrzną strukturę mogłem jedynie wykorzystać przycisk załączania/wyłączania oraz przełącznik kanałów. Teoretycznie taka funkcjonalność byłaby w większości przypadków wystarczająca, jednak mając dwa manipulatory, z nieukrywanym bólem serca poświęciłem jeden z nich. Z wnętrza zniknęło prawie wszystko za wyjątkiem przycisków, przełączników oraz głośnika. Na płycie montażowej rozmieściłem nowe moduły. Ze względu na ograniczoną liczbę podłączanych elementów zrezygnowałem, przynajmniej na razie z przygotowania dedykowanej płytki PCB i wykorzystałem gotowe moduły mocowane do przejściówek. Pozwoliło to wygodnie i szybko zrealizować projekt, a koncepcja umożliwia ewentualne modyfikacje lub wymianę poszczególnych elementów.
Analizując budowę manipulatora doszedłem do wniosku, że podłączenie wszystkich przełączników, a nawet oryginalnego głośnika będzie możliwe z wykorzystaniem jedynie pinów samego Arduino NANO i jednego 16-bitowego expandera. Wszystkie pozycje kanałów oraz poziomów głośności mogły zostać podłączone do jednego expandera, a pozostałe elementy do pinów Arduino. W zapasie są jeszcze 2 piny cyfrowe i 2 analogowe, choć prawdopodobnie nie będzie okazji z nich skorzystać. Podłączenie wszystkiego co było możliwe, w chwili obecnej nie da się w pełni wykorzystać z aktualną wersją symulatora, ale jeśli coś się zmieni w exe to nie będę musiał modyfikować elektroniki i połączeń, a jedynie dostosować kod Arduino.
Poza standardowym złączem DB25, które jest wykorzystane dla komunikacji UART z głównym kontrolerem Arduino MEGA, wykorzystałem również dostępne gniazdo DB9. Podłączyłem do niego interfejs ICSP Arduino NANO oraz przewody SCL i SDA interfejsu I2C. Dzięki temu przeprogramowanie mikrokontrolera nie będzie się wiązało z koniecznością otwierania obudowy. Wyprowadzone piny interfejsu I2C mogą służyć np. diagnostyce na wyświetlaczu LCD.
Jak wspomniałem wcześniej, nie wszystkie funkcje manipulatora są obsługiwane przez symulator, a niektóre są źle zaimplementowane lub w sposób niewygodny do integracji z pulpitem. W niektórych przypadkach nie wystarcza zwyczajne przesłanie informacji o wciśniętym przycisku lub wybranej pozycji przełącznika. Dla wierniejszego odtworzenia rzeczywistości musiałem kilka rzeczy dostosować w kodzie Arduino zanim stosowna informacja jest wysyłana dalej do exe. Tak dzieje się np. z przyciskami załączenia/wyłączenia, RadioStopu czy przełącznikami kanałów i głośności. Czasami obsługa musiała zostać całkowicie zmieniona. Przykładowo symulator oczekuje sygnału testu RadioStop na jednym bicie tak jakby do jego wywołania używany był pojedynczy przycisk. W rzeczywistości test ten jest efektem wywołania sekwencji ZEW3 i ZEW1 w odpowiedniej kolejności. Można to zobaczyć na tym nagraniu. Zasymulowałem to działanie w kodzie Arduino i tylko efekt jest przekazywany do symulatora.
Poza elementami wejściowymi wykorzystałem również elementy wyjściowe w postaci diod LED i głośnika. W związku z tym, że manipulator nie wie kiedy nadawany jest jakiś komunikat radiowy z symulatora, dioda SFN zapala się na razie po przyciśnięciu przycisku nadawania w mikrofonie lub dowolnego przycisku wywołania selektywnego ZEW1-3. Dioda załączenia radiotelefonu zapala się oczywiście po jego załączeniu odpowiednim przyciskiem. Oryginalny głośnik wydaje dźwięki wywołania selektywnego i mógłby również odtwarzać dźwięk RadioStop, chociaż jest on odtwarzany w samym symulatorze, więc zobaczymy co w ostateczności wykorzystam. Stosowna informacja zwrotna o nadawaniu sygnału RadioStop jest dostępna w komunikacji UART ale na razie pozwala to na świecenie diody SFN podczas nadawania tego sygnału czyli do czasu wyłączenia i ponownego włączenia radioodbiornika.
Aktualny stan prac widać na poniższym nagraniu.