POL
ENG

Biblioteka RFM70 w C dla STM32

Jeżeli potrzebujesz jedynie biblioteki to pobierz poniższe pliki i możesz opuścić stronę. Jeżeli jesteś ciekawy całej opowieści, to zapraszam do szerszego opisu



Jakiś czas temu, kolega z pracy wyszukał te moduły w sklepie internetowym. Gdy przyniósł je do pracy, to nie mogłem się nadziwić ich stosunkowi możliwości do ceny. Węszyłem podstęp sprzedawców, ale go nie było. Od razu zamówiłem cztery sztuki. Wiedziałem dokładnie do czego chcę je wykorzystać. Zbudowałem manipulator z wyświetlaczem graficznym LCD PG12864LRU-ORA-H oraz joystickami z prostego kontrolera gier. Odbiornik był jeszcze prostrzy. W obu urządzeniach wykorzystałem oczywiście te moduły. Spędziłem wiele godzin, żeby nawiązać poprawną i stabilną komunikację między nimi. Nie udało mi się uzyskać dobrze działającego modelu. Projekt trafił do poczekalni ze względu na bardziej pilne zajęcia. Całkiem niedawno sięgnąłem po niego ponownie. Tym razem udało się bez większych problemów. Teraz śmieję się i powtarzam, że musieliśmy do siebie dojrzeć, ale tak na prawdę przyczyną poprzedniej porażki był procesor w odbiorniku.


W pierwszej wersji użyłem procesora PIC18f452. Wydawał mi się odpowiedni do tej roli. Początkowo szło nawet dobrze. Komunikacja działała. Problem pojawił się w momencie podłączenia silnika. Układ potrafił się zawieszać i nie reagować. Po wielu godzinach prób okazało się, że oryginalny silnik emitował zbyt duże zakłócenia. Po wymianie znowu mogłem ruszyć z pracą na przód. Po podłączeniu serwomechanizmu problem powrócił. Serwo nie działało stabilnie. Cały czas drżało, a czasy podane w nocie katalogowej nijak nie zgadzały się z kątem wychylenia. Nie, to nie była kwestia poboru prądu. W czasie testowania prototypu układ był zasilany z zasilacza o dostatecznej wydajności prądowej. Dodanie dużego kondensatora na wejściu jak również dodatkowych kondensatorów odkłócających przy mikrokontrolerze, zasilaniu głównym i modułu też nie przyniosły oczekiwanego skutku. Również wstawienie dławika nic nie dało. Na sam koniec okazało się, że procesor miał problem z wystartowaniem. Na linii resetu zastosowałem układ do generowania impulsu resetu podczas załączania zasilania, ale do póki nie wstawiłem tam przycisku i nie resetowałem go ręcznie, urządzenie nie startowało. Miałem ochotę zakopać ten projekt na dnie szafy. Po tym długim czasie postanowiłem pozbyć się humorzastego PICa i wstawić poczciwy, wypróbowany AVR. Zrobiłem nową płytkę, na wejściu zastosowałem przetwornicę i wykorzystałem ponownie moduły RFM70. Tym razem poszło gładko... prawie. Jak to czasem bywa, przekombinowałem i straciłem ze dwa wieczory zanim okazało się, że wartości w Bank1 inicjuję w złej kolejności.


Każdy kto próbował napisać tą bibliotekę samemu, albo zmodyfikować którąś z internetu w bardziej zaawansowany sposób, na pewno zetknął się z koniecznością przeczytania noty katalogowej RFM70 datasheet. Przyznam, że po pierwszej lekturze wydała się bardzo zawiła, nieczytelna, a sam moduł bardzo skomplikowany w obsłudze. Z czasem wiele spraw się rozjaśniło i już dokładnie wiedziałem co i kiedy się dzieje w urządzeniu. Zauważyłem, że w bibliotece rozpowszechnionej po internecie jest kilka niedociągnięć i jeden błąd powtarzany przez wszystkich na zasadzie "Copy -> Paste". Postanowiłem poprawić ją i dać ludziom zmodyfikowaną, poprawioną wersję z trzema konfiguracjami i przykładami ich zastosowania w nadajniku i odbiorniku. Chciałem, żeby biblioteka zyskała na czytelności.


Co zostało zrobione:

  • dodałem funkcje dla trzech różnych konfiguracji
  • posprzątałem kod, poprawiłem formatowanie i komentarze
  • poprawiona na zgodną z datasheet-em wartość rejestru w Bank1, która ma mieć wartość 0xD99E860B a nie 0xB99E860B
  • zgodnie z notą katalogową, zapisy do rejestrów powinny się odbywać jedynie w trybach STANDBY_I lub POWER_UP. Do osiągnięcia tych stanów należy przełączyć linię CE w stan niski. W oryginalnej bibliotece działo się to jedynie w funkcjach setModeTx oraz setModeRx. Przerzuciłem to do właściwych miejsc.
  • usunąłem niepotrzebne przerzucanie rejestrami tog1 i tog2 z oryginalnej bibllioteki

Pliki do pobrania:


Srcpro 2020-05-24
Biblioteka jest uniwersalna, ale gdy ją pisałem, jej przeznaczeniem był procesor STM32 :)
Romek 2020-03-22
Kawał niezłej roboty! Tak się tylko zastanawiam jak to się ma do STM32.
Dodaj komentarz

RFM70 biblioteka, RFM70 library, arduino RFM70

Wszelkie prawa zastrzeżone. Projekt i wykonanie strony SrcPro.pl