Tym razem projekt który robiłem dla jednego z małych forów dla elektroników skupionych wokół pewnego youtubera, celowo piszę takimi ogólnikami bo nasze drogi się rozeszły w dość nieprzyjemny sposób.
Opis projektuWięc projekt polegał na opracowaniu radia krótkofalarskiego lampowego, ale z powiewem nowoczesności tzn. generatorami dla pierwszej i drugiej przemiany częstotliwości miał być układ SI5351 (potrójny generator sterowany I2C). Na początku padł pomysł sterowania tego generatora z gotowego programu napisanego na Arduino, szybko jednak okazało się, że nie spełnia on za bardzo oczekiwań i należy go trochę przerobić, do głównych wad należało m.in. to, że większość parametrów pracy generatora była ustawiana jako stałe w kodzie programu i niezmienna w czasie, program też niczego nie zapamiętywał.
Do rywalizacji w szranki stanęliśmy we dwóch, ja w C, drugi z kolegów w BASCOMie, założenia początkowe były proste, możliwość ustawienia i zapamiętania dowolnej częstotliwości pośredniej pierwszej przemiany VFO, odpowiedni zakres odstrojenia drugiej przemiany BFO, sterowanie opóźnionym załączeniem napięcia anodowego lamp, zapamiętanie ostatnio nastawionej częstotliwości odbioru. Z czasem projekt się rozrastał i została dodany układ automatycznego przełączania filtrów wejściowych, wskaźnik wysterowania/poziomu sygnału, sterowanie z pilota RC5, a ostatnią funkcją było dodanie nadawania.
W sumie projekt mimo wykonania 10 szt. płytek sterownika został zmontowany tylko przeze mnie jako egzemplarz testowy bez całego radia oraz przez jednego z kolegów, reszta forumowiczów z czasem jakoś straciła zainteresowanie projektem po początkowej euforii - tzw. słomiany zapał.
Sterowanie układu odbywało się z gotowego kupnego modułu KEY & LED zawierającego 8 diod świecących, 8 klawiszy oraz wyświetlacz led 8 segmentowy zbudowany na bazie układu TM1638, klawisze zawarte w tym układzie służyły do wyboru odpowiednich funkcji systemu, dodatkowo jako element regulacyjny do zmiany parametrów służył encoder pełno-okresowy 24 krokowy, a dodatkowo w systemie na czas strojenia (dokładniejsze opisy na wyświetlaczu) można było podłączyć wyświetlacz 2x16 sterowany w trybie 4bitowy, wskaźnik wysterowania zrobiony był na wyświetlaczu OLED 0.96" I2C, a selektorem wyjść przełącznika filtrów był multiplekser. Nie ustrzegłem się od małego błędu na płytce więc w zestawie trzeba było ciąć ścieżki i robić zworki ale nie były widoczne i schowane pod wyświetlaczem OLED, a zamienione były sygnały SDA i SCL do tegoż wyświetlacza. Układ proacował z ATmega328P lub ATmega328PB
Schemat układu wyglądał następująco
A układ po zmontowaniu prototypu tak bez i z założonymi wyświetlaczami
Opis programuProgram został napisany nie wiem czy z lenistwa, czy z pośpiechu w jednym pliku .c i do kompletu jednym pliku .h z ustawieniami i do tego oczywiście z bibliotekami wymaganymi do działania komponentów.
Użyte w programie zatem są następujące biblioteki
SI5351 ->
https://github.com/NT7S/Si5351TM1638 ->
https://github.com/lpodkalicki/attiny-tm1638-library/MK_OLED ->
http://atnel.plIR_DECODE ->
http://atnel.plLCD ->
http://atnel.plprzy czym biblioteki Atnelowskie zostały zapożyczone z pendrive do bluebooka, a ta do OLED chyba nawet zakupiona.
Biblioteka do sterowania SI w komplecie posiadała swoją własną implementację i2c, a biblioteka OLED swoją, więc musiałem nieco przerobić kod, wydaje mi się, że biblioteki OLED aby pracowały na jednej bibliotece i2c
Dokładne opisy zmiennych oraz klawiszy i ich znaczenia czy klawiszy z pilota rc-5 znajdują się w komentarzach więc nie będę tego przepisywał, jak kogoś zainteresuje zapraszam do kodu, w skrócie jedynie podam, że przy starcie systemu wszystkie nastawy i odbierana częstotliwość były odczytywane z pamięci EEPROM, następnie jeśli projekt był skompilowany z obsługą opóźnionego startu dla lamp to było wykonywane to opóźnienie, na jednym z pinów poprzez tranzystor sterujący załączany był stan do sterowania przekaźnikiem załączającym napięcie anodowe ok. 150V, zapis do EEPROMu następował za każdym razem gdy system wychodził z którejkolwiek procedury strojenia lub gdy w trybie normalnej pracy przez określony czas nie było zmienianej częstotliwości odbiorczej. Regulację częstotliwości można było dokonywać dokładnie co 1Hz lub zgrubnie wybierając dowolną z dekad. Trochę na kolanie została napisana procedura przełączania filtrów, gdyż była ona dodawana na końcu i tak właściwie tylko dla jednego z kolegów który całkowicie ukończył projekt, dla tego częstotliwości filtrów nie były ustawiane programowo, a wpisane w pliku .h na stałe i był to chyba jedyne odstępstwo w programie od zasady, że wszystko da się ustawić w pełni działającym systemie bez konieczności programowania ponownego wsadu. Program miał jedną ułomność, która wynikała z dostępnej biblioteki dla układu SI5351, otóż jej oryginał na arduino mógł sterować generatorami praktycznie od zera, a jedyna jaką wtedy znalazłem biblioteka w czystym c z powodu jakiś specyficznych obliczeń, a była pisana pod ATTiny potrafiła pracować dopiero od 1MHz więc projektu nie można było użyć na falach średnich lub długich a jedynie na falach krótkich.
Kod w załączeniu