ADVERTISEMENT

Nagranie.rar

Moduł radia TEA5767 od NXP - V1

Witam wszystkich po raz kolejny. Jako że odwiedził mnie listonosz z długo i niecierpliwie wyczekiwaną żółtą kopertą, to postaram się dzisiaj opisać Wam tutaj pokrótce gadżet, który to był w środku - moduł cyfrowego radia FM zrobiony na układzie TEA5767 firmy NXP. Moduł ten to …. powiedziałbym, że to kompletne radio, choć by wydobyć z niego dźwięk, potrzebne będzie kilka dodatkowych elementów. https://obrazki.elektroda.pl/4729291600_1522857906_thumb.jpg https://obrazki.elektroda.pl/1658815900_1522857924_thumb.jpg Wymiary tego modułu to 11x11x2mm – czyli dosłownie maleństwo, uważajcie, żeby go nie zgubić podczas zabawy z nim. :) Ceny za moduł zaczynają się od $0,72 wraz z przesyłką na Aliexpress, na Allegro trzeba zapałacie wraz z przesyłką ok. 12zł, choć można znaleźć i oferty kilkukrotnie droższe - nie wiem, czym różnią się one od tych tańszych. Ja swój „odbiornik” zakupiłem z Chin i nie było z nim żadnych problemów – „ruszył od pierwszego strzała”. Dzięki temu maleństwu możemy odbierać fale radiowe w stereo w zakresie od 87,5MHz do 108MHz. Napięcie zasilania to 2,5V do 5VDC. Pobór prądu po ustawieniu stacji radiowej to ok. 13mA przy zasilaniu modułu z 5V. Poniżej rysunek z wyprowadzeniami naszego układu. https://obrazki.elektroda.pl/4522088800_1522859033_thumb.jpg 1 – SDA 2 – SCL 3 – BUS MODE 4 – WRITE/WRITE 5 – VCC 6 – GND 7 – Wyjście audio kanał lewy 8 – Wyjście audio kanał lewy 9 – MPXO 10 – antena Moduł ten jest sterowany za pomocą komunikacji I2C, więc potrzebny nam będzie jakiś mikroprocesor, by ustawić nasza ulubiona stację. Ponadto wyjście audio jest na tyle słabe, że nie „uciągnie” nawet słuchawek, więc potrzebny będzie wzmacniacz. Ja użyłem małego taniego gotowego wzmacniacza w klasie D opartego o układ PAM8610 - napisałem małego, ale porównując go do modułu radia, to nie można powiedzieć, że jest mały. Potrzebować jeszcze będziemy dwóch rezystorów (ja użyłem 10k, można też dać 4,7k) do podciągnięcia linii komunikacyjnych SDA i SCL do plusa - w zasadzie to wszystko co potrzeba nie licząc źródła zasilania, kilku przewodów i jakiegoś głośniczka. Poniżej rysunek, jak to ma wyglądać. https://obrazki.elektroda.pl/9862667900_1522858061_thumb.jpg BUS MODE zwieramy do masy, by działała komunikacja poprzez I2C. Jako że moduł jest naprawdę mały, a jego raster nie jest standardowy tylko 2mm, więc trzeba było sobie jakoś poradzić, no i wyszła taka „hybryda” jak na zaprezentowanych zdjęciach poniżej. :) https://obrazki.elektroda.pl/9483666800_1522858773_thumb.jpg https://obrazki.elektroda.pl/5015279100_1522858774_thumb.jpg https://obrazki.elektroda.pl/9107461500_1522858774_thumb.jpg Chodzi tu o przetestowanie modułu, a nie o walory estetyczne, więc wybaczcie – zrobiłem to na McaGyver`a i ważne, że działa, następnym razem postaram się bardziej, by prócz uszy i oczy mogły się nacieszyć. ;) Do sterowania radyjka użyłem zestawu uruchomieniowego ZL2AVR, choć wystarczy tu płytka stykowa i jakiś mikroprocesor, który będzie wysyłał kilka bajtów za pomocą I2C – np. AVR czy PIC lub popularne Arduino. Ok, wiemy już jak podłączyć nasz moduł, więc przejdźmy do opisu, jak rozkazać radiu „grać” wybraną przez nas częstotliwość. Musimy wysłać do naszego radia 5 bajtów, a przed tym wysłać jeszcze adres naszego odbiornika radiowego. Oczywiście z pomocą przychodzi dokumentacja. Adres naszego radia wedle dokumentacji to: 110 000b Moduł może działać w dwóch różnych trybach pracy – zapisu i odczytu, co należy podać w adresie. 0 - tryb zapisu 1 - tryb odczytu Stąd też będziemy używać adresu &B1100 0000 (w zapisie dwójkowym lub &HC0 w zapisie szesnastkowym), gdyż wybieramy tryb zapisu. Fragment dokumentacji dla opisu adresu: https://obrazki.elektroda.pl/1608968500_1522858166_thumb.jpg Dalej należy wysłać 5 bajtów, których opis znajdziemy w dokumentacji. W pierwszych dwóch bajtach podajemy częstotliwość naszej radiostacji - PLL, jest to 14 bitów. Fragment dokumentacji dla opisu pierwszych dwóch bajtów dla pracy w trybie zapisu: https://obrazki.elektroda.pl/7660629200_1522858181_thumb.jpg https://obrazki.elektroda.pl/5917543000_1522858193_thumb.jpg PLL możemy wyliczyć ze wzoru: https://obrazki.elektroda.pl/1533741300_1522859463_thumb.jpg gdzie RMF to częstotliwość naszej stacji w MHz. Weźcie pod uwagę że w mianowniku mamy częstotliwość kwarcu, który jest w tym module. Przy użyciu samego układu TEA5767 można zastosować tam inny kwarc, ale trzeba jego wartość wziąć pod uwagę w tym wzorze oraz wziąć go pod uwagę w ustawieniach dla bajtu czwartego i piątego - chodzi o bity XTAL w bajcie czwartym oraz PLLREF w bajcie piątym. Np. dla częstotliwości stacji 98MHz i kwarcu 32,768kHz, który jest zastosowany w tym module ze wzoru wyjdzie nam 11990,3564453125, z czego jako PLL przyjmujemy część całkowitą tej liczby czyli PLL=11990, co daje nam w zapisie binarnym 10111011010110. Bajt pierwszy w tym przypadku to: MUTE SM PLL13-PLL8, gdzie bit MUTE ustawiamy na 0 a bit SM też na 0, co daje nam kompletny bajt w formie &B00101110. Drugi bajt to PLL7-PLL0, czyli &B11010110 Kolejne bajty to ustawienia, których nie będę tutaj opisywał – mamy je opisane w dokumentacji. Fragment dokumentacji dla opisu kolejnych trzech bajtów dla pracy w trybie zapisu: https://obrazki.elektroda.pl/4333756100_1522858230_thumb.jpg https://obrazki.elektroda.pl/8368817700_1522858238_thumb.jpg https://obrazki.elektroda.pl/6784757900_1522858249_thumb.jpg Ja wysyłam tutaj &B00010000 jako bajt 3 &B00010000 jako bajt 4 &B00000000 jako bit 5 Czyli by wydobyć dźwięk naszej wybranej stacji radiowej (przykład 98MHz), wysyłamy kolejno: &B11000000 lub &HC0 – zapis dwójkowy lub szesnastkowy &B00101110 lub &H2E &B11010110 lub &HD6 &B00010000 lub &H10 &B00010000 lub &H10 &B00000000 lub &H0 Na początku mojej zabawy wysyłałem do modułu te dane co 100ms - proponuję tego nie robić, gdyż wprowadza to pewne zakłócenia w pracy radia. Powoduje to przerwanie dźwięku na ułamek sekundy - tak jakby na pilocie od TV co chwilę naciskać guzik od wyboru tego samego kanału. Poniżej kod napisany w Basomie dla ATmega8 do obsługi tego radia. Zajmuje on ok. 25% pamięci, po zrezygnowaniu z wyliczania przez program bajtów, a wpisaniu ich na stałe możemy zejść do 6% pamięci, ale nie wiem, czy uda się to odpalić na ATtiny13 z powodu braku sprzętowego I2C. $regfile = "m8def.dat" $crystal = 8000000 Dim S As String * 6 Config Scl = Portc.1 Config Sda = Portc.0 Config I2cdelay = 10 Dim Pll As Single Dim Fset As Word Dim Dane As Byte Config Pind.0 = Input Config Pind.1 = Input Config Pind.2 = Input S1 Alias Pind.0 S2 Alias Pind.1 S3 Alias Pind.3 Set Portd.0 Set Portd.1 Set Portd.3 Do Debounce S1 , 0 , Stacja_1 , Sub Debounce S2 , 0 , Stacja_2 , Sub Debounce S3 , 0 , Stacja_3 , Sub Loop Stacja_1: Pll = 99.1 I2cinit I2cstart I2cwbyte &HC0 'adres Pll = Pll * 1000000 Pll = Pll + 225000 Pll = Pll * 4 Pll = Pll / 32768 'Pll=12124,6337890625 dla 99,1MHz Fset = Int(pll) 'Fset=Int(pll) przypisuje część całkowitą Pll do Fset czyli Fset=12124, binarnie=10111101011100 Dane = High(fset) 'przypisanie zmiennej DANE wartości starszego bajtu zmiennej Fset czyli 101111 Reset Dane.7 'jako że starszy bajt wygląda tak 101111 Reset Dane.6 'utawienie bitów 7 i 6 na 0 czyli 00101111 I2cwbyte Dane 'wysłanie starszego bajtu zmiennej Dane ->00101111 Dane = Low(fset) 'Przypisanie zmiennej Dane wartości młodszego bajtu Fset czyli 01011100 I2cwbyte Dane 'wysłanie młodszego bajtu zmiennej Dane ->01011100 I2cwbyte &B00010000 'bajt 3 I2cwbyte &B00010000 'bajt 4 I2cwbyte &B00000000 'bajt 5 I2cstop Return Stacja_2: Pll = 103.3 I2cinit I2cstart I2cwbyte &HC0 Pll = Pll * 1000000 Pll = Pll + 225000 Pll = Pll * 4 Pll = Pll / 32768 Fset = Int(pll) Dane = High(fset) Reset Dane.7 Reset Dane.6 I2cwbyte Dane Dane = Low(fset) I2cwbyte Dane I2cwbyte &B00010000 I2cwbyte &B00010000 I2cwbyte &B00000000 I2cstop Return Stacja_3: Pll = 104.5 I2cinit I2cstart I2cwbyte &HC0 Pll = Pll * 1000000 Pll = Pll + 225000 Pll = Pll * 4 Pll = Pll / 32768 Fset = Int(pll) Dane = High(fset) Reset Dane.7 Reset Dane.6 I2cwbyte Dane Dane = Low(fset) I2cwbyte Dane I2cwbyte &B00010000 I2cwbyte &B00010000 I2cwbyte &B00000000 I2cstop Return Dla mniej wtajemniczonych wyjaśnię może, skąd się wzięła w kodzie poniższa część, bo pisałem o wysłaniu adresu i pięciu bajtów, a widać, że wysyłam tylko adres i trzy bajty. Fset = Int(pll) Dane = High(fset) Reset Dane.7 Reset Dane.6 I2cwbyte Dane Dane = Low(fset) I2cwbyte Dane Jako że ustawienia dla każdej stacji w trzech ostatnich bajtach są identyczne, więc te bajty wpisane w program są na stałe. Pierwsze dwa zmieniają się w zależności od wybranej częstotliwości i żeby tego nie robić samemu - żeby uprościć sobie, to program jest tak napisany, że wystarczy mu wpisać wybraną częstotliwość w zmienną PLL, a ten sam sobie wyliczy pierwsze dwa bajty do wysłania. Chcąc wpisać swoje częstotliwości do programu, wpisujemy częstotliwość w MHz w zmienną PLL, a program sam wyliczy sobie dwa pierwsze bajty. Przy uruchomieniu tego małego radyjka obyło się bez kłopotów – z głośnika wydobył się dźwięk zaraz po wgraniu programu do procesora i naciśnięciu guzika. Największym problemem w tym wszystkim było tylko polutowanie tej „hybrydy”, ale myślę, że nie będzie to problemem, by z użyciem Google znaleźć bibliotekę np. w Eaglu pod to maleństwo. Jak widać ze zdjęć - użyłem jako anteny kawałka drutu długości ok. 10cm i jak można usłyszeć na załączonych nagraniach - radio gra dość dobrze Radio posiada funkcję automatycznego szukania stacji z możliwością ustawienia jej czułości - 3 stopnie czułości. Nie miałem zbytnio czasu, by ją dokładnie przetestować. Myślę, że pomocny byłby tutaj odczyt aktualnej częstotliwości z radia, gdyż podczas automatycznego szukania radio zatrzymywało się na czymś, co uważało za stację radiową, a ja nie byłem w stanie uzyskać informacji, jaka to częstotliwość, przez co błądziłem po omacku w gąszczu rożnego rodzaju szumów i ciszy, gdzie czasem udało się natrafić na stacje, ale nie zająć jej częstotliwości. Być może ktoś podzieli się tutaj wiedzą na temat odczytu informacji z tego modułu - mi nie udało się uzyskać żadnych informacji z modułu w trybie odczytu, być może robię to niepoprawnie. W załącznikach dokumentacja do opisywanego modułu radia oraz dwa nagrania dźwięku, jaki to wytwarza to radyjko by można było samemu ocenić czy można się spodziewać czegoś miłego po module za niespełna dolara, czy raczej można się tylko rozczarować, jak to zazwyczaj bywa w przypadku chińskich gadżetów. Mam nadzieję, że ten opis zachęci Was do zabawy z tym modułem radia i opisywaniu tutaj swoich zmagań z nim i osiągnięć, co pozwoli rozwinąć ten temat i pomóc innym przy poznawaniu tego maleństwa. Poniżej link do kolejnej części opisującej moduł TEA5767 https://www.elektroda.pl/rtvforum/viewtopic.php?p=17161950#17161950


Download file - link to post
  • Nagranie.rar
    • Nagranie.m4a