Arduino FM radijas su TEA5767

4 07 2014

Kam man tas radijas papasakosiu vėliau. Dabar tik aprašysiu niuansus kaip čia viskas veikia.

Pirmiausia aptarsiu TEA5767 modeliuką. Taip vadinasi pati valdančioji mikroschema, o perkame mes realizuotus modulius kaip pvz:

imagesFM-TEA5767

 

 

car_mp3_player_nxp_tea5767_fm_radio_moduleDSC_0001s-tea5767

Nieko blatno, tik neapsigaukite ir rinkitės iš jau patikrintų variantų, nes bus poto kaip buvo Dovydui, kuomet kyla klausimų su kuo valgomas tas modulis. Žinoma visur lieka tas pats I2C valdymas, tas pats maitinimas, antena, bet kur jie sudėlioti po velniais? Taigi geriau pažiūrėti realių pavyzdžiu ir pirkti iš išvaizdos tokį patį variantą, nes kitaip bus galvos skausmo 🙂 Mano atveju turiu antrame paveikslėlyje esantį modulį.

Kaip jau minėjau valdymas per I2C. Labai geras dalykas. Maitinimas +5V. Gerai. Stereo išėjimas – o kaip kitaip. 

Hardware pajungimas

Kadangi jau turiu pasibraižęs savo produkto schemą tai pasidalinsiu Eagle brėžiniu kaip viskas jungiasi:

z

 

Kadangi modulyje neaišku kur yra pirmas o kur kiti elektrodai, štai vaizdingesnė diagrama:

pinout_TEA5767module

Prototipams nesunku moduliuką perdaryti į štai tokį:

WP_000015c

 

Toks “pasikėlęs“ dabar jis. Bendras mano maklios vaizdelis:

WP_000015

Ir puikiausia antena:

WP_000023

Programavimas

Negi tokiais sunkiais tinginiavimo laikais imsi ir rašysi kodą nuo nulio. Žinoma naudosime biblioteką. Kaip visada tuom viskas tik prasideda, kuomet supranti, kad biblioteka kažko neturi, ką TEA5767 gali duoti.

Pirma rasta biblioteka patalpinta oficialioje Arduino svetainėje: http://playground.arduino.cc/Main/TEA5767Radio. Joje vienas vienintelis metodas setFrequency nuteikė ne kaip.. Taigi antru taikymu radau šią: https://github.com/andykarpov/TEA5767 Pastaroji turi beveik viską bet yra kiek kreiva. Turiu komentarą dėl buferinio masyvo siuntinėjimo pirmyn ir atgal bet ką darysi..

Trumpai aptarsiu kaip arduino aprašomos kelios pagrindinis mano naudotos funkcijos. Viso kodo nekopijuosiu, nes jame yra daug visko, kad bus naudojama pilname projekte (įskaitant ekrane matomą meniu, VU simuliacija ir panašiai). Valdymui panaudojau Serial komandas iš kompiuterio. Jos yra sekančios:

  • b: FM paieška mažėjimo tvarka;
  • n: M paieška didėjimo tvarka;
  • 1, 2, .., 5: išsaugotų EEPROM dažnių grojimas;
  • 11, 22, .., 55: esamo dažnio išsaugojimas atitinkamoje EEPROM atmintyje;

Yra ir dar daugiau komandų, kurios nesusijusios su FM moduliu, tad jų neaprašau. Pats valdymas per Serial yra laikinas, galutiniame projekte jis dings.

Tai apie komandas detaliau. FM modulis pirmiausia apsirašomas:

TEA5767 radio;

Vėliau setup dalyje inicijuojame jį:

radio.init();

Esama kanalą saugosiu int fmCurrentFreq; kitamajame ir jį perduosiu į FM modulį sekančiai:

radio.set_frequency(double(fmCurrentFreq/10.0));

Šis metodas mano programoje naudojamas gana dažnai. Tiek įjungiant moduli, tiek perjungiant į naują kanalą iš EEPROM. Informacija į LCD ekraną nuskaitoma ir spausdinama sekančiai:

lcd.print(F("FM:"));
if (radio.read_status(buf) == 1) {
lcd.print(radio.frequency_available (buf) / 1000000, 1);
if (radio.stereo(buf))
lcd.print(F(" S"));
else lcd.print(F(" M"));
lcd.print(radio.signal_level(buf));
}
else lcd.print(F("err"));

Kaip matote atsiranda kintamasis buf, kuris yra apsirašytas kaip unsigned char buf[5]; Jame saugojama visas FM modulio statusas: FM dažnis, Stereo/Mono režimas, signalo stiprumas ir dar daug visko. Niekaip nesupratau kodėl šis masyvas turi būti pagrindinėje programoje, o ne bibliotekos viduje, bet tiek to.

Dabar LCD ekrane matome sekančią informaciją:

WP_000026

 

Matome kad grojame M1 kurio dažnis Kaune yra 106.6, jis grojamas tik Mono rėžimu dėl musų “galingos“ antenos ir jo signalas taip pat nėra labai jau stiprus. Tas vienetukas pirmos eilutės gale ir juodumai antroje jums dabar neturėtu rūpėti bet spėju kad rūpi. Tai garso stiprumo indikatorius stiprintuvui ir VU vaizdavimas. Ateityje pakalbėsiu ir apie tai.

Liko pakalbėti apie radijo tiuninimą. Gavus “n“ komandą arduino daro sekančius veiksmus:

radio.search_up(buf);
delay(300);
while (radio.process_search (buf, TEA5767_SEARCH_DIR_UP) != 1)
{
lcdUpdate();
}
if (radio.read_status(buf) == 1) {
fmCurrentFreq = int(round(radio.frequency_available(buf) / 100000.0));
}

Trumpai tariant čia įjungiama paieška didėjimo tvarka ir tikrinama ar nerasta radijo stotis. Beieškant vis atnaujiname LCD informaciją. Radus kanalą jis pradedamas groti automatiškai TEA5767 viduje, o mes išsisaugome jo dažnį į fmCurrentFreq kintamąjį. Vėliau jį galime panaudoti išsaugant radijo stotį į EEPROM. Paieška apačion vyksta labai panašiai tik jau naudojame atitinkamus metodus.

Ko pasigedau bibliotekoje, tai perėjimo į miegojimo rėžimą. Į jį noriu pereiti išjungus įrenginį, kitai modulis pastoviai groja, o tai man nepatinką. Žinoma mes galime išjungti tik stiprintuvą, bet kadangi TEA5767 turi miegojimo rėžimą tai kodėl jo neišnaudojus. Papildomai papildžiau biblioteką atitinkamu metodu:

radio.sleep(buf);

Dalintis nauja biblioteka neskubėsiu, viskas vienu metu baigus projektą. Dabar viskas veika va taip:

Filmuke papildomai matote kelis spoilus. Visokie ten AUX1, AUX2 ir BT.. VU simuliatorius taip pat ramybės neduoda.  Stiprintuvą su Arduino mes čia gaminame. Laukite tęsinio.


Veiksmai

Information

5 responses

4 07 2014
jarik

Labai jau idomu, kokia gi galutinio produkto mintis.. 🙂
O kaip to radijo isejimo kokybe? Pajungus prie normalaus stiprintuvo su normaliom kolonkem.

4 07 2014
mindogas

Kol kas kokybe lyg ir gera, filmuotoje medžiagoje ir grojo normalus stiprintuvas su normaliomis kolonėlėm, tik be normalios antenos 😀 Telefono mikrofonas tik “mažumėle“ šniokštė. Realiai tikrai nesitikėjau, kad taip gerai gros ant breadboardo. Galvojau bus koks zvimbimas ar pan, bet to nebuvo. Vienaip ar kitaip vietelė galutinėje PCB jau šis modulis turi.

4 07 2014
jarik

Na is to iraso sunku spresti apie kokybe, bet jeigu ji nera labai prasta, tai visai neblogas sprendimas turint normalu stiprintuva su kolonkem, bet nenorint investuoti i brangia kokybiska radija 🙂 Galima net suprogramuot, kad priimtu stiprintuvo pultelio signalus kaitaliojant radijo stotis 🙂

4 07 2014
mindogas

Galima jei nori padaryti taip 🙂

24 04 2015
jarik

Na pagaliau pasigaminau ir as sau radija… Bet labai jau prastai groja 😦 Nesu tikras cia toki moduli kreiva gavau, pats prisidirbau, o gal taip ir turi buti? Signas daugiau 10 vienetu napakyla, pajungus prie koloneliu skleidzia ne tik muzika bet ir visuokius negrazius garsus 😦 Antena pajungiau kazkokia nuo senos radijos (teleskopinis strypas). Gal turi minciu ar kokiu linku i naudinga informacija?

Beje, kazkaip praleidau projekto tesini, ar viskas taip ir stovi vietoje iki siol?

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: