Strony

niedziela, 30 października 2011

RFM70 - AVR - cyfrowa i radiowa transmisja audio

AVR/RFM70 - b.tania cyfrowa radiowa transmisja audio 2,4GHz
Witam, 


Zainteresowałem się ostatnio wykorzystaniem możliwości tych "biednych" (jak je niektórzy określają) przetworników ADC w jakie zaopatrzone są procki AVR. Postanowiłem spróbować zająć się próbkowaniem dźwięku przy pomocy ADC wbudowanego w AVR oraz odtwarzaniem go za pomocą sprzętowego sygnału PWM. Żeby było trudniej i gorzej, zachciało mi się jeszcze wykonać to w rozdzielczości tylko 8-bitowej, a dla utrudnienia zagadnienia - przesyłać jeszcze te dane OnLine drogą radiową. (przy okazji krótki filmik, jak przyjemnie i prosto dla każdego może wyglądać programowe posługiwanie się bibliotekami do obsługi RFM70)





docelowo można sobie w oparciu o taki projekt stworzyć: 


a. dyktafon cyfrowy z zapisem na kartę pamięci SD
b. domofon bezprzewodowy
c. mały podsłuch (jeśli postaramy się o dobry mikrofon i wzmacniacz do niego)
 



W efekcie złożyłem prosty układ (na razie testowy) i na początku wg następująych założeń: 


1. wykorzystanie do testów procesorów ATmega32 (bo takie miałem pod ręką)
2. podłączenie próbkowanego sygnału analogowego bezpośrednio do wejścia ADC
3. częstotliwość próbkowania ok 13kHz
4. buforowanie zbieranych danych i wysyłanie poprzez transciever RFM70

5. odbiór danych także za pomocą FRM70
6. buforowanie odebranych danych
7. odtwarzanie ich z taką samą częstotliwością za pomocą 8-bitowego Fast PWM
 



Z uwagi na dopasowanie napięć pomiędzy modułami RFM70 a mikrokontrolerem postanowiłem zasilać całość napięciem 3,3V. Użyłem do tego celu własnych przetworniczek, które były tak ostro przez co niektórych krytykowane w temacie: Link 
Dzięki nim, efekt pracy przetworników ADC był / jest lepszy niż przy zasilaniu wprost z USB z komputera PC Wink Dlatego przetworniczki pomimo tego, że tak wielu boi się ich jak ognia - sprawują się idealnie w takich zadaniach. Wbrew pozorom nie wnoszą żadnych zakłóceń nawet do aplikacji, gdzie korzystamy z ADC. Jest nawet lepiej jak wspominałem. 


AVR/RFM70 - b.tania cyfrowa radiowa transmisja audio 2,4GHz 


Szczegółowego schematu nawet nie będę rysował bo cóż tu rysować, moduły RFM podłączone zostały wprost do pinów sprzętowego SPI w mikrokontrolerach. Poza tym w nadajniku - na wejście PA0 podłączam wprost albo wyjście audio z karty dźwiękowej komputera albo mały wzmacniacz mikrofonowy zewnętrzny. Procesor pracuje z wewnętrznym napięciem odniesienia 2,56V ustawionym programowo. 


Natomiast w odbiorniku, wykorzystuję albo wyjście OC1A lub OC1B gdyż użyłem sprzętowego Timera1 do generowania wyjściowego sygnału PWM. 


TAKTOWANIE mikrokontrolerów: 


Bawiąc się w taką konwersję, warto zapewnić jak największą możliwą częstotliwość PWM na wyjściu. Przy taktowaniu procesora 8MHz można było uzyskać spokojnie 31,25kHz ale nawet przy próbkowaniu sygnału z częstotliwością 20kHz nie dawało to zadowalającego (przynajmniej mnie) efektu dla ucha. Dlatego w kolejnym kroku dodałem kwarc 16MHz i zwiększyłem częstotliwość PWM dwukrotnie czyli do 62,5kHz. Już było wyraźnie lepiej. Chciałem jednak jeszcze ciut polepszyć brzmienie tych próbek 8-bitowych więc przetaktowałem dosyć mocno procesor bo dodałem kwarc 24MHz !!! Oczywiście wymagało to ustawienia Fusebitu CKOPT bo bez tego procek nie chciał drgnąć przy takim taktowaniu i zasilaniu 3,3V Wink W efekcie uzyskałem PWM o częstotliwości 93,75kHz .... może ktoś powiedzieć, że może niepotrzebnie aż tak - jednak dla ucha jest zauważalna różnica w jakości, a tym bardziej mi na tym zależało z uwagi na dodatkowe zakłócenia jakie mogą wyniknąć podczas transmisji radiowej Wink 


W efekcie końcowym - to co widać i słychać na prezentowanym filmiku działa z częstotliwością próbkowania 13kHz oraz PWM 93,75kHz 


Program do procków napisałem w języku C, w sumie jest dosyć prosty (pomijając te wszystkie dziwolągowate procedury obsługi modułów RFM70). Miałem trochę problemów ze zorganizowaniem buforowania ale w efekcie końcowym udało się i po każdym włączeniu wszystko ładnie się synchronizuje i jak na tak prymitywny ADC oraz prosty procek AVR to efekt jest jak dla mnie świetny. Zaznaczam tylko że celem nie było uzyskanie jakiejś powalającej jakości CD. Główny cel to był przede wszystkim wyraźny i powtarzalny przekaz mowy ludzkiej na odległość za pomocą tych transcieverków - ale niechcący i muzyka ładnie daje się transmitować. 


W efekcie końcowym to można sobie nawet prosty domofon bezprzewodowy zrobić Wink albo podobne gadżety. Program w obecnej mocno testowej postaci zajmuje zaledwie 6% pamięci FLASH procesora (niecałe 2kB !!!) więc spokojnie da się go przenieść nawet na pikusia typu ATmega88 jeśli nawet nie na jakiegoś ATtiny2313 czy ATtiny25/45 .... (nie będę udostępniał kodów źródłowych ani wsadów w tej wersji - przynajmniej narazie - do czasu ich totalnego uporządkowania) 


A docelowo jeszcze chcę zrobić nagrywanie dźwięków na kartę pamięci SD/MMC - może uda się do postaci WAV żeby można było bez żadnych przeróbek potem odtwarzać nie tylko na procku ale i na innym AVR'ku. 


Aha - na wyjściu PWM dałem kondensator 100uF i z niego dalej sygnał na jakiś tam gotowy wzmacniacz głośnikowy (takie tam głośniki komputerowe) 


Całość testowałem na dwóch identycznych zestawach uruchomieniowych a moduły RFM70 podłączone były na kawałku taśmy. W efekcie po zaprojektowaniu na końcu całości na małej kompaktowej płyteczce PCB może dać jeszcze lepsze rezultaty: 


AVR/RFM70 - b.tania cyfrowa radiowa transmisja audio 2,4GHz 




Poniżej filmik z krótką prezentacją - działania transmisji na żywo, zapraszam do obejrzenia: 

 
Link

24 komentarze:

  1. O proszę zabrałeś się za ADC w medze :) naprawdę wiele można z nich wydusić. Też robiłem swego czasu podobny układ tyle że z mikrofonem DAC-7 (od zestawu nagłownego mikroportu SHURE) i zamiast RFM70 używałem modułów ZIGBee Microchipa naprawdę ładnie hulało z dźwiękiem potem było gorzej bo dodałem obsługę kamerki MCA-25 ale cały czas znośnie więc jak na ubogą atmegę mogę powiedzieć ze efekt był rewelacyjny.

    OdpowiedzUsuń
  2. Tak, powiem szczerze, że długo jakoś się za to zabierałem bo myślałem że będą same problemy ale niesłusznie ;) jak piszesz w miarę fajnie to działa.

    OdpowiedzUsuń
  3. Sprawdzałeś maksymalny zasięg tych modułów? Bo planuje użyć ich pewnym projekcie i zastanawiam sie czy sygnał przebije sie przez jakieś 3 sciany na odlegosc 30m?

    OdpowiedzUsuń
  4. Zależy przez jakie ściany? Ja na razie nie testowałem jakichś dużych zasięgów, maksymalnie ok 20-30m i też po drodze były jakieś ściany.

    No i zależy co i jak chcesz przesyłać ? bo jeśli to ma być np strumień audio - to pewnie, że będą zaciachy czasem, ale jeśli chodzi o jakieś okresowe przesyłanie np danych z czujników itp to myślę że z powodzeniem dasz radę.

    OdpowiedzUsuń
  5. A dałbyś zrobić transmisję dwustronną z tłumieniem echa? :) chodzi mi o użycie tego tak, żebym mógł z osobą po drugiej stronie swobodnie pogadać i żeby to co ja mówię i emituje głośnik u niego nie zostało wychwycone przez jego mikrofon i nie dotarło do mnie spowrotem.

    OdpowiedzUsuń
  6. Mirku, kiedy dokończysz "porządek" z kodami?
    Chciałbym sobie coś takiego zbudować :-)

    OdpowiedzUsuń
  7. Mam nadzieję, że w przeciągu miesiąca może dwóch uda mi się wszystko uporządkować.

    OdpowiedzUsuń
  8. Witam, czy sa juz gdzies do pobrania biblioteki RFM70? Fajnie by bylo przez swieta sie czyms takim pobawic :) Pzdr

    OdpowiedzUsuń
  9. Poprawne uruchomienie i działanie RFM70 nie jest takie proste...,więc myślę, że tak za darmo i bez problemu to nie dostaniemy kodu.

    OdpowiedzUsuń
  10. Niestety wpadło spore opóźnienie - więc jeszcze trzeba poczekać :(

    OdpowiedzUsuń
  11. Czy te biblioteki będą dostępna za darmo na stronie, czy wydasz książkę i odeślesz wszystkich z bloga/forum, żeby kupili książkę?

    OdpowiedzUsuń
  12. A co to ? Kim ja jestem ? żebym miał odsyłać czy nakazywać kupować moje książki?. Co to w ogóle za teksty?. Po co w ogóle przy takim podejściu wchodzisz na ten blog? Nie wchodź na niego, nie czytaj moich książek - czy ja ci to nakazuję? Mam taką siłę sprawczą? .... Przy takim podejściu to może lepiej wyprowadź się do Korei Północnej - tam przywódca Kim Dzong UN - rozdaje wszystko za darmo, a może jeszcze na Kubie ci się uda. Co za podłość - człowiek pisze, dwoi się i troi żeby przekazać kawałek swojej wiedzy a tu mu będą jeszcze zarzucać, że do książek kogoś odeśle a to już nie za darmo przecież!. Masakra! Jeśli ty i tobie podobni uważają że wiedza przekazana w książce nie jest za darmo a ty na tym nic nie skorzystasz , nic się nie dowiesz, nic nie zaoszczędzisz i nic nie zarobisz w przyszłości - to wszystkim takim ludziom mówię stanowcze NIE - i nie życzę sobie wizyt na moim blogu.

    A gdybym miał taką możliwość (chociaż to niemożliwe bo książka sprzedaje się przez niezależne księgarnie) to na pewno np tobie wręcz bym jej nie sprzedał. Cieszysz się teraz ? Nie obawiaj się - nie odeślę cię z bloga/forum żebyś sobie kupił książkę - wręcz przeciwnie.

    żegnam.

    OdpowiedzUsuń
  13. @mirekk36 - To było pytanie, to po pierwsze. Nie wiedziałem na jakich zasadach będziesz publikował kod więc zapytałem. Myślę, że miałęm ku temu postawy, ponieważ na youtube opublikowałeś filmik na którym widać, że ko obsługi tego modułu to jedna z lekcji nowej książki(Eclipse).

    Nigdzie nie powiedziałem, że ty mi coś nakazujesz żebym czytał. Po twoim poście poznaję że jednak coś w tym jest skoro się tak unosisz. Cóż ja kulturalnie się pytam w systemie komentarzy a ty mnie obelgami obrzucają.

    Pozdrawiam mimo wszystko i postaram się pokazać że chciaż ja mam klasę.

    OdpowiedzUsuń
  14. Po pierwsze być może nie słusznie ale potraktowałem trochę zaczepnie twoją wypowiedź o tym, że odeślę wszystkich do kupowania książki.

    Jeśli nie miałeś takiej intencji - zaczepnej - to niestety choć przykro to przyznać ale to ja wyszedłem na totalnego BARANA ! I nie pozostaje mi nic innego jak się pokajać i uprzejmie przeprosić co niniejszym czynię.

    W zasadzie to dopiero teraz jakoś do mnie dotarło, że nie masz nicku "anonimowy" tylko Robert, a zwykle tacy anonimowi wpadają jak burza na blog i robią mi jatkę. Wiem nie widać tego - bo jak już ktoś się zachowuje mało kulturalnie i wręcz po chamsku to po prostu kasuję takie wpisy/komentarze i już.

    Poza tym wytłumaczę się może troszkę tym, że jestem ostatnio mocno przemęczony bo ślęczę nad końcówką drugiej części książki od rana do nocy albo i w nocy .... a i na elektrodzie.pl co i rusz walczę z bardzo zawziętymi ludźmi, którzy jak nie wiedzą jak mi tam dokopać to właśnie obrażają itp ....

    dlatego też na forum ostatnio opisałem swój stan tak:

    http://forum.atnel.pl/post3251.html#p3251

    reasumując jeszcze raz bardzo przepraszam i postaram się poprawić - nie reagować tak zaczepnie - bo wyszło na to, że to ja zaczepiłem a nie ty.

    OdpowiedzUsuń
  15. Mirku nadal nie odpowiedziałeś na moje pytanie na jakich zasadach będziesz publikował kod?

    Dla mnie kod może być maksymalnie nieuporządkowany jak tylko się da(byleby działający).

    Jeśli się zgodzisz na udostępnienie tego kodu nie w formie książki(jak pisałeś na elektrodzie) podeślę ci swój email.

    I naprawdę uprzedzam, ze nie jestem kolejną osobą czyhającą na jakiegoś gotowca, po prostu RFM70 nie che mnie się słuchać po SPI z powrotem przychodzą jakieś głupoty jak czytam jakiś rejestr z banku 0. Po drugie to nie po co się inicjuje wartości rejestrów na początku działania(każą to robić to tak robię).

    Pozdrawiam i liczę na kod, albo chociaż jakąż wskazówkę jak się z RFM70 połączyć, by chociaż można było ustawiać w rejestrach swoje dane/czytać rejestry z banków(znam przełączanie banku 0 na 1).

    Spędziłem na prawdę dużo godzin nad tym modułem i nie wiem jak go rozpracować.

    Pozdrawiam.

    OdpowiedzUsuń
  16. Witam,
    Mam podobny problem jak przedmówca i również z chęcią podejrzałbym tą część programu.Pozdrawiam

    OdpowiedzUsuń
  17. Panowie no to zajrzyjcie tutaj:

    http://forum.atnel.pl/post6046.html#p6046

    i przeczytajcie na okładce o czym będzie ok?

    OdpowiedzUsuń
  18. A ja mam takie techniczne pytanko. Skąd wziąłeś ten kawałek taśmy, którym jest podłączony układ RFM70 do płytki? Ja nigdzie nie mogę dorwać żadnej złączki o rozstawie 50 milsów :( a nie chce mi się bawić w trawienie kawałka laminatu i lutowanie.

    OdpowiedzUsuń
    Odpowiedzi
    1. Sam zrobiłem sobie tą tasiemkę - to najzwyklejsza taśma taka jak od starych dysków twardych ATA ;)

      Usuń
  19. Can you send me the source code to cheeseburgerohnekaese@gmail.com ? Thx

    OdpowiedzUsuń
  20. Witam, gdzie mogę kupić taki moduł RFM70?

    OdpowiedzUsuń
    Odpowiedzi
    1. Panie RFM70 to już szrot - nie ma takich - teraz są RFM73 ;)

      https://www.sklep.atnel.pl/pl/p/RFM73/60

      Usuń
  21. Witam, bardzo fajny projekt. Mam jednak jedno pytanie, czy bezpośrednio do wejścia ADC w uC możemy podać sygnał audio z jakiegoś źródła (np. karta dźwiękowa)? Sygnał taki będzie sygnałem zmiennym a ADC toleruje jedynie wartości dodatnie, czy potrzebny jest jakiś układ na wejściu ADC aby podnieść sygnał o jakąś wartość stałą aby cały mieścił się w zakresie 0-5V ? Jeżeli tak to prosił bym o jakieś sugestie jak można to wykonać.

    OdpowiedzUsuń
    Odpowiedzi
    1. Oczywiście trzeba sobie jakoś dopasować sygnał

      Usuń