Witam ponownie. I znów piszę posta pod postem żeby nie robić bałaganu. Pisałem o zakończeniu prac, ale to jeszcze nie wszystko. Otóż posiedziałem jeszcze nad programem i trudno mi samemu nawet w to uwierzyć, że to wszystko zmieściło się do maleńkiego Arduiono, bo to zaledwie 32 kB flash, ale udało się wzbogacić syntezę o jeszcze kilka bardzo pożytecznych rzeczy. Tym razem jednak będzie to definitywny koniec prac nad programem, bo przetestowałem go na wszystkie sposoby i działa to wręcz świetnie. Także zachęcam do testowania.
Co dodałem/zmieniłem w tej ostatecznej wersji:
- z powrotem przeszedłem na wyświetlacz SSD1306 0,96"
- program w tej wersji jest zoptymalizowany pod kątem użycia dla r-telefonu FM3-315 i wersji Arduino SuperMini lub też Arduino Pro Minii
- zabezpieczyłem przyciski przed tzw. "drganiem styków"
- pamięta częstotliwość [VFO] sprzed rozpoczęcia akcji skanowania, tzn. wraca do tej częstotliwości po wyłączeniu [SCAN]
- dodałem trzy pozycje ustawień zarządzania oszczędzaniem baterii
- w trackie oszczędzania energii baterii s-metr działa w zwolnionym tempie
- utworzyłem tryb [Turbo] akcji skanowania, który polega na tym, że poniżej 50 ms ustawienia szybkości skanera procesor jest zwolniony z ciężkich operacji wyświetlania na magistrali I2C, dzięki czemu moduł Si5351 jest przełączany z możliwie maksymalną prędkością
- obsługiwane są dwa rodzaje wyświetlaczy: SH1106 o przekątnej 1,3" oraz SSD1306 o przekątnej 0,96" (dwa oddzielne wsady hex)
- zabezpieczenie przed przypadkowym załączeniem [Tx] oraz zmianą częstotliwości encoderem w trakcie wychodzenia z uśpienia
Poniżej, jako że to już definitywny koniec prac, zamieszczam w formie streszczenia wszystkie wcześniejsze i obecne funkcje i ustawienia syntezy.
Funkcje syntezy (w 38 punktach):
Opis funkcji/ustawień syntezy (w 16 punktach):
Wrócę na chwilę do trybu [Turbo] skanera. Skanowanie odbywa się tutaj bardzo szybko, bo aż 50 kroków na sekundę. I tak informacyjnie muszę się pochwalić, że mimo ograniczeń na magistrali I2C, procesor radzi sobie świetnie. Zamieszczę więc zrzut analizy widmowej z HD SDR w trzech prędkościach [Turbo] skanu: 100 ms, 50 ms, 10 ms :
Niestety ta świetna funkcjonalność maleńkiego Arduino ma też swoje ograniczenia, bo wsad hex do procesora nie mieści się na standardowej płytce z bootloaderem, więc nie można go wgrać po USB za pomocą programu xLoader i potrzebny będzie do tego programator USBasp. Koszt programatora jest niewielki, bo to tylko 25zł, więc uważam, że i tak warto go kupić, a na pewno przyda się na przyszłość.
I teraz ważna informacja, bo po wgraniu wsadu programatorem program się nie uruchomi na typowym Arduino dopóki nie zmienimy ustawienia tzw. "Fuse bitów", czyli ustawień Atmegi 328 z domyślnych na dedykowane pod ten konkretny wsad.
Ustawienia domyślne fuse bitów:
Zmieniamy na ustawienia dedykowane:
Schemat syntezy z wyświetlaczem OLED i wyjściem zasilającym moduł Si5351 :
UWAGA - zasilanie Si5351 podłączamy bezpośrednio do pinu sterującego A1.
I jeszcze przypomnienie co do przycisku encodera SCAN - potrójna funkcja przycisku encodera SCAN:
1. Normalny klik -> skan.
2. Podtrzymanie 1,5 sek. -> ustawienia.
3. "Dwuklik" czyli podwójne kliknięcie -> krok 1 MHz z podświetleniem.
Na koniec pomiary z aktywnej opcji oszczędzania baterii z włączonym wyświetlaczem - wyświetlacz ON :
Oszczędzanie Si5351 OFF / ON
62 ma / 27 mA
Aktywna opcja oszczędzania baterii z wyłączonym wyświetlaczem - wyświetlacz OFF :
Oszczędzanie Si5351 OFF / ON
55 mA / 21 mA
W załączeniu dwa identyczne wsady hex, lecz pod dwa różne wyświetlacze OLED.
Zapraszam do testowania.
----
Skasowano z tematu: [Si5351] Radmor FM-3001 - synteza Arduino Nano z CTCSS i skanerem pasma 2 m
przez Hektar Zahle.r dnia 13 Sie 2026 12:41
Co dodałem/zmieniłem w tej ostatecznej wersji:
- z powrotem przeszedłem na wyświetlacz SSD1306 0,96"
- program w tej wersji jest zoptymalizowany pod kątem użycia dla r-telefonu FM3-315 i wersji Arduino SuperMini lub też Arduino Pro Minii
- zabezpieczyłem przyciski przed tzw. "drganiem styków"
- pamięta częstotliwość [VFO] sprzed rozpoczęcia akcji skanowania, tzn. wraca do tej częstotliwości po wyłączeniu [SCAN]
- dodałem trzy pozycje ustawień zarządzania oszczędzaniem baterii
- w trackie oszczędzania energii baterii s-metr działa w zwolnionym tempie
- utworzyłem tryb [Turbo] akcji skanowania, który polega na tym, że poniżej 50 ms ustawienia szybkości skanera procesor jest zwolniony z ciężkich operacji wyświetlania na magistrali I2C, dzięki czemu moduł Si5351 jest przełączany z możliwie maksymalną prędkością
- obsługiwane są dwa rodzaje wyświetlaczy: SH1106 o przekątnej 1,3" oraz SSD1306 o przekątnej 0,96" (dwa oddzielne wsady hex)
- zabezpieczenie przed przypadkowym załączeniem [Tx] oraz zmianą częstotliwości encoderem w trakcie wychodzenia z uśpienia
Poniżej, jako że to już definitywny koniec prac, zamieszczam w formie streszczenia wszystkie wcześniejsze i obecne funkcje i ustawienia syntezy.
Funkcje syntezy (w 38 punktach):
1. Pokrycie całego pasma 2 metrów.
2. Automatyczny shift przemiennikowy [RPT] -600 kHz.
3. Możliwość poszerzenia pasma odbioru do 136 - 174 MHz.
4. Oddzielnie skaner częstotliwości [SC] i oddzielnie skaner kanałów [MS].
5. Standardowy krok 12,5 kHz.
6. Tryb kroku 1 MHz poprzez "dwuklik" przycisku encodera [SCAN], tzn. zostaje podświetlone [xx MHz] i zmiana co jeden MHz encoderem [UP/DN].
7. Blokada Tx poza pamem amatorskim. Wyjście CLK1 (nadajnika) modułu Si jest nieaktywne, wyjście CLK0 (odbiornika) nadal działa i s-metr odbiornika nadal działa. Dla odcięcia Tx radiotelefonu aktywowane jest (5V) wyjście D10 arduino (blokada Tx). NA wyświetlaczu wyświetla się komunikat [Tx OFF].
8. Osobne wyjścia generatorów: CLK0 -> odbiornik, CLK1 -> nadajnik. Dostosowanie do radmorowskich radiotelefonów takich jak FM-3001, FM-315, FM-302, itp.; [CLK1 = f/18], [CLK0 = (f-10,7)/4].
9. Generator subtonów CTCSS [CT] bezpośrednio przez Arduino (pin D9).
10. Pamięć subtonów CTCSS dla dowolnego przemiennika z osobna.
11. Pamięć częstotliwości po odłączeniu zasilania.
12. Pamięta także ustawiony tryb kanałowy po wyłączeniu zasilania.
13. Pamięć włączonego skanera po odłączeniu zasilania, tzn. automatycznie wznawia skan po podaniu zasilania.
14. Pamięć częstotliwości [VFO] po wyjściu z trybu skanowania [SC]/[MS].
15. Jeżeli w trybie pamięci [M] był wcześniej ustawiony dany subton dla przemiennika, wówczas w trybie kanałowym zostanie on przywołany z pamięci (nie trzeba ustawiać ponownie).
16. Zmiana kierunku skanowania +/- przez obrót encodera [UP/DN].
17. Podczas skanowania można klawiszem [MEM] przełączać się wygodnie między [SC]/[MS], tj. VFO scan/memory scan.
18. Pętla histerezy skanera, trybu oszczędzania oraz squelch-a (żeby wyeliminować efekt "czkawki").
19. Utworzono zabezpieczenie konfliktu progów [zamknięcia] i [otwarcia] blokady szumu, aby [próg zamknięcia] nie przekraczał [progu otwarcia] o wartość nie mniejszą, niż S 0,5 (minimalna pętla histerezy) -> czytaj opis.
20. S-metr i miernik mocy. Działa również w trybie uśpienia ze spowolnionym odświeżaniem ekranu.
21. Pamięć dziesiąciu kanałów - przycisk [MEM] (pin D8), który działa w zapętleniu 1...10...VFO...1...10...,itd.
19. Skaner zatrzymuje się po wciśnięciu PTT tak, aby można było swobodnie posłuchać znalezionej rozmowy.
20. Dwa rodzaje wyjścia z trybu skanowania:
- powraca do częstotliwości [SC] -> [VFO] sprzed załączenia skanowania jeżeli nie znalazł sygnału zajętej częstotliwości
- zostaje na zajętej częstotliwości [SC] -> [VFO], jeżeli znalazł sygnał zajętości
21. Skaner zatrzymuje się i wznawia skanowanie idealnie na wyświetlanej pozycji skali S-metra.
20. Poprzez wyświetlanie ikon w negatywie podświetlono aktywne funkcje takie jak np. aktualnie nadawany subton CTCSS, trwa zmiana komórki pamięci, trwa zmiana subtonu, trwa skanowanie, Tx, itp.
23. Podczas gdy jest otwatra blokada szumu [stop-scan] wskaźnik [SC]/[MS] powoli miga do czasu zakończenia [pauzy skanera], lub wyłączenia stanu [HOLD] skanera (menu 4.Pauza skanera).
31. Utworzono kontrolkę [Busy LED]. Wwyjście (D12). Może posłużyć także za utworzenie pełnoprawnego układu squelch. Kontrolka świeci (5V) powyżej [progu otwarcia] blokady szumu i gaśnie (0V) poniżej [progu zamknięcia] w tempie natychmiastowym.
22. Mnożnik kroku przełączania kanałów [Dial speed-up] w zależności od szybkości obrotu pokrętłem encodera.
23. Możliwość zdefiniowania szybkości obrotu dla wykrywania [Dial speed-up] oraz możliwość zdefiniowania mnożnika kroku encodera tej funkcji.
24. Utworzono kontrolkę sygnalizacyjną wykrycie funkcji encodera [Dial Speed-up] . Wyjście D13 oraz dioda L zintegrowana na płytce arduino.
25. Możliwość wyboru prędkości skanowania: skanowanie "zwykłe" z wolniejszą prędkością oraz tryb [Turbo] ze zubożoną transmisją grafiki na wyświetlacz.
26. Detekcja mikrosekundowych szpilek sygnału s-metra (na wejściu A0) dla precyzyjnego wykrywania zajętości czętotliwości/kanału przy najwyższych prędkościach, tj. większych, niż 50 ms.
Tryb [Turbo] prędkości skanowania. Podczas gdy ustawiona prędkość jest poniżej 50 ms skaner działa w tym trybie poprzez znaczne zubożenie odświeżania ekranu kiedy to zwalnia magistralę I2C z ciężkich operacji graficznych i układ Si5351 generuje przez to z maksymalną częstotliwością przełączania.
27. Na pinie D12 dodano krótki sygnał dźwiękowy sygnalizujący wciskanie przycisków oraz (auto)start/stop skanera. Możliwość doprowadzenia tego sygnału w tor audio r-telefonu.
28. Dodano funkcję startu skanera kanału w górę lub w dół od zajętego kanału/częstotliwości, aby nie startował on od zajętego kanału/częetotliwości.
29. Utworzono możliwość przestrajania częstotliwości/kanału encoderem [UP/DN] podczas [stop-scan].
30. Obsługiwane są dwa rodzaje wyświetlaczy: SH1106 o przekątnej 1,3" oraz SSD1306 o przekątnej 0,96" (dwa oddzielne wsady hex).
31. Utworzono w ustawieniach pozycję częściowego uśpienia procesora, wyświetlacza i modułu Si5351 (sleep_mode_adc), która wyłącza wszystkie peryferia oprócz pinu A0 do pomiaru siły sygnału, encodera i przycisku PTT. Pozycja 14. Uśpienie.
32. Utworzono w ustawieniach pozycję oszczędzania energii, która cyklicznie włącza i wyłącza prądożerny moduł Si5351. Moduł jest zasilany (włączany/wyłączany) wprost z pinu A1, ponieważ prąd jego zasilania nie przekracza 40 mA. W trakcie aktywnego trybu cyklicznie włączane i wyłączane jest również wejście A0 do pomiaru siły sygnału i w spowolnionym tempie wyświetlana jest jego wartość na s-metrze.
33. Utworzono funkcję włączenia/wyłączenia wyświetlacza podczas gdy funkcje 14.[Uśpienie] i 15.[Oczczędzanie] są włączone.
34. Utworzono zabezpieczenie przed przypadkowym załączeniem [Tx] oraz zmianą częstotliwości w trakcie wychodzenia z [uśpienia]/[oszczędzania], ponieważ wciśnięcie PTT oraz ruch encoderem wybudza z uśpienia.
35. Pojawienie się sygnału przekraczającego [próg otwarcia] squelcha-a wybudza z uśpienia.
36. Aktywny odbiór, tj. sygnał powyżej [progu otwarcia] (aktywna Busy LED), aktywny skan, włączone menu ustawień oraz wciśnięty PTT dezaktywują przejście w tryb [oszczędzania]/[uśpienia].
37. Wsad do procesora zoptymalizowano pod kątem Arduino Nano SuperMini i radiotelefonu FM-315.
38. Ze względów oszczędnościowych pamięci flash zmieniono nieco układ ikon w stosunku do wcześniejszych wersji, a nazewnictwo funkcji zostało skrócone.
Opis funkcji/ustawień syntezy (w 16 punktach):
1. Kalibracja wzorca Xtal w module Si5351 z krokiem 20 Hz. Domyślnie 0 Hz.
2. Zakres odbioru. Dostępne opcje: 144-146 MHz, 144-148 MHz, 136-174 MHz. Domyślnie 144-146 MHz.
3. Zakres skanera. Dostępne opcje: 145,200-145,800 MHz, tylko simplex, tylko przemienniki, całe wybrane pasmo, 144-146 MHz. Domyślnie 145,200-145,800 MHz.
4. Pauza skanera: czas od zaniku sygnału do wznowienia skanowania. Dostępny zakres: 0-20 sekund oraz Hold, czyli skanowanie zatrzymane na stałe. Domyślnie 4 sekund.
5. Prędkość skanowania w celu możliwości spowolnienia skanowania w sytuacji gdy blok p.cz. radiotelefonu nie może wygenerować mikrosekundowych szpilek sygnału s-metra. Dostępne 10 prędkości w zakresie: 1 (800 ms) - 10 (10 ms). Domyślnie 10 (10 ms).
6. Próg otwarcia: jest to wartość na skali s-metra, powyżej której zatrzymuje skan. Dostępne wartości: S 0-9, +10, +20, +30 dB z krokiem S 0,5. Domyślnie S 1.
7. Próg zamknięcia: jest to wartość na skali s-metra, poniżej której wznawia skan. Dostępne wartości: S 1-9, +10, +20, +30 dB z krokiem S 0,5. Domyślnie S 0,5.
8. Czułość s-metra. Skalibrowano rzeczywiste napięcie z wartością wyświetlaną w zakresie 0 - 4,5 V. Krok czułości 0,5 V. Domyślnie: 0,5 V.
9. Dial Speed-up. Jest to mnożnik kroku przełączania kanałów (przyspieszenie przełączania), który wykrywa szybki ruch obrotowy (poniżej czasu trwania impulsu określonego w menu 10.Wykryj speed-up) i w chwili jego wykrycia przełącza krok na wyższy mnożnik. Dostępne prędkości (mnożniki kroku): x1(wyłączony), x2, x4, x6, x8, x10. Domyślnie x4.
10. Wykryj Speed-up. Jest to ustawienie czasu trwania impulsu encodera, czyli inaczej prędkości obrotowej, przy której następuje wykrycie żądania przełączenia kroku na wyższy mnożnik. Zakres funkcji 1(100ms) - 10(15ms) w dziesięciu krokach. Domyślnie 5 (60 ms).
11. Scan beep. Dodałem funkcję sygnalizacji dźwiękowej dwóch stanów skanera: 1.Krótki beep podczas autostartu po wyłączeniu zasilania sygnalizuje, że skaner startuje automatycznie po włączeniu ON/OFF. 2.Długi beep sygnalizuje, że znalazł sygnał w trakcie skanowania. Dostępna zakres: 400 - 4000 Hz oraz OFF. Domyślnie 2400 Hz.
12. Key beep. Funkcja sygnalizacji dźwiękowej klawiszy CTCSS+/-, MEM oraz SCAN. Dostępny zakres: 400 - 4000 Hz oraz OFF. Domyślnie 3800 Hz.
13. Długość beep. Jest to długość dźwięku wejścia/wyjścia z ustawień, dźwięku pamięci kanałów oraz długość dźwięku sygnalizacji zajętości częstotliwości/kanału w trakcie skanowania. Zakres 50 - 800 ms z krokiem 50 ms. Domyślnie 400 ms.
14. Uśpienie (sleep_mode_adc). Jest to po prostu czas, po którym w przypadku bezczynności, procesor wyłącza peryferia takie jak wyjścia CLK1 (nadawanie) i CLK2 modułu Si5351, aby oszczędzać prąd. Dostępne ustawienia: 5, 10, 30 sekund, 1, 5, 10 minut oraz OFF. Domyślnie 10 s.
15. Oszczędzanie. Inaczej "Power save", lub "Save". Podczas gdy funkcja jest aktywna i procesor wejdzie w tryb uśpienia, wówczaas wyłącza moduł Si5351 (wyjście zasilające A1) żeby oszczędzać prąd. Zasilanie jest wyłączane całkowicie, tzn. prąd jest zerowy. Moduł Si jest włączany i wyłączany cyklicznie w odstępach pół sekundy ze stosunkiem włączenia/wyłączenia ustalonym w tym ustawieniu. Dostępne ustawienia: 1:2. 1:4, 1:6, 1:8, 1:10, 1:12, 1:14, 1:16 oraz OFF. Wartość domyślna 1:8.
16. Wyświetlacz. Wyłącza lub włącza wyświetlacz w trybie uśpienia. Dostępne ustawienia: ON/OFF. Domyślnie OFF.Wrócę na chwilę do trybu [Turbo] skanera. Skanowanie odbywa się tutaj bardzo szybko, bo aż 50 kroków na sekundę. I tak informacyjnie muszę się pochwalić, że mimo ograniczeń na magistrali I2C, procesor radzi sobie świetnie. Zamieszczę więc zrzut analizy widmowej z HD SDR w trzech prędkościach [Turbo] skanu: 100 ms, 50 ms, 10 ms :
Niestety ta świetna funkcjonalność maleńkiego Arduino ma też swoje ograniczenia, bo wsad hex do procesora nie mieści się na standardowej płytce z bootloaderem, więc nie można go wgrać po USB za pomocą programu xLoader i potrzebny będzie do tego programator USBasp. Koszt programatora jest niewielki, bo to tylko 25zł, więc uważam, że i tak warto go kupić, a na pewno przyda się na przyszłość.
I teraz ważna informacja, bo po wgraniu wsadu programatorem program się nie uruchomi na typowym Arduino dopóki nie zmienimy ustawienia tzw. "Fuse bitów", czyli ustawień Atmegi 328 z domyślnych na dedykowane pod ten konkretny wsad.
Ustawienia domyślne fuse bitów:
Zmieniamy na ustawienia dedykowane:
Schemat syntezy z wyświetlaczem OLED i wyjściem zasilającym moduł Si5351 :
UWAGA - zasilanie Si5351 podłączamy bezpośrednio do pinu sterującego A1.
I jeszcze przypomnienie co do przycisku encodera SCAN - potrójna funkcja przycisku encodera SCAN:
1. Normalny klik -> skan.
2. Podtrzymanie 1,5 sek. -> ustawienia.
3. "Dwuklik" czyli podwójne kliknięcie -> krok 1 MHz z podświetleniem.
Na koniec pomiary z aktywnej opcji oszczędzania baterii z włączonym wyświetlaczem - wyświetlacz ON :
Oszczędzanie Si5351 OFF / ON
62 ma / 27 mA
Aktywna opcja oszczędzania baterii z wyłączonym wyświetlaczem - wyświetlacz OFF :
Oszczędzanie Si5351 OFF / ON
55 mA / 21 mA
W załączeniu dwa identyczne wsady hex, lecz pod dwa różne wyświetlacze OLED.
Zapraszam do testowania.
----
Skasowano z tematu: [Si5351] Radmor FM-3001 - synteza Arduino Nano z CTCSS i skanerem pasma 2 m
przez Hektar Zahle.r dnia 13 Sie 2026 12:41