Zdroje obvykle uvádím na konci, ale tentokrát udělám výjimku. I když mě bastlení baví a rád si vymýšlím vlastní řešení (tím se člověk nejvíce naučí), rozhodl jsem se v tomto případě opětovně nevynalézat kolo. Vytvořit PWM generátor s frekvencí od 67 do 254 Hz je sice poměrně sranda, ale i taková drobnost zabere nějaký ten čas, který se dá využít efektivněji. Proto jsem využil již existující řešení a upravil jen několik drobností - např. ovládání přepínání tónů a zápis stavu do EEPROM.
Genrátor je založen na Arduinu Pro Mini. Je samozřejmě možné použít jakékoliv jiné, ale je nutné mít na zřeteli, že knihovna na generování frekvencí od PA3GUO je postavena na CPU ATMega328@16MHz, takže případný alternativní Arduino board by měl mít tento CPU. Nicméně princip je klasika PWM s tím, že se na základě požadnované frekvence skáče po lookup tabukce funkce sinus a tím se mění výstupní střída. A to zvládne téměř libovolný MCU - klidně i ATTiny (tam ale může být trochu problém interním RC oscilátoru a jeho teplotní stabilitě).
Arduino Pro Mini nemá USB port a tak je potřeba vlastnit "programátor/USB serial převodník." Ten se poté připojuje na horní piny DTR, TXD, RXD, GND, VCC. Já ho bohužel neměl, takže jsem pro naprogramování použil klasiku - naprogramování přes ISP - tedy MISO, MOSI, SCK, RESET a GND (např. USBasp). První varianta je ale lepší, využije se bootloader v Arduinu a celé se to pak chová jako jakékoliv jiné Arduino s USB portem.
Zapojení do stanice je řešeno takto:
Program je klasika Arduino s přidanou třídou CtcssToneClass od PE1CID. V ní jsem udělal jedinou změnu a to, že PWM je generováno na pinu 3 namísto pinu 11. Na 11 jsem měl totiž připojen ISP programátor. Programově je změna v metodě CtcssToneClass::Setup_timer2 a CtcssToneClass::init .
Hlavní část programu ctcsse75s.ino funguje tak, že na základě proměnné toneState generuje jeden ze čtyř subtónů (pro hotspoty v ČR zatím stačí). Přepíná se mezi nimi tak, že se 2 sekundy podrží tlačítko AQ na mikrofonu. Stanice pak do reproduktoru odpípá aktuální stav uvedené proměnné zvýšené o jedna. A současně se tento nový stav uloží do EEPROM, takže po opětovném zapnutí stanice se vysílá to co naposledy. Cykluje se mezi (1=off, 2=88.5, 3=77.0, 4=103.5, 5=127.3). Pípání není v morse, ale v prostých tečkách (tedy E, I, S, H, 5) a to pěkně pomalu, aby to šlo počítat na prstech :-)