Kazalo:
- 1. korak: Uporabniško delovanje digitalnega zaporedja
- 2. korak: Tehnične podrobnosti
- 3. korak: Tehnične podrobnosti
- 4. korak: 7-segmentni delilec ure
- 5. korak: delilec ure na minuto
- Korak 6: Razdelilnik ure
- 7. korak: Predvajaj/začasno ustavi/izberite državno napravo
- 8. korak: Predvajaj/začasno ustavi/izberite državno napravo
- 9. korak: Izhodni FSM
- 10. korak: Izhodni FSM
- 11. korak: Dodelitev opombe
- 12. korak: Izberite izhod
- Korak: Square Wave Gen
- 14. korak: 7-segmentni zaslon
- Korak 15: Končna izbira
- Korak 16: Zunanje naprave: DAC
- 17. korak: Zunanje naprave: Zvočnik
- Korak 18: Video demo
- 19. korak: Koda VHDL
Video: 4 -stopenjski digitalni zaporedje: 19 korakov (s slikami)
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:08
CPE 133, Cal Poly San Luis Obispo
Ustvarjalca projekta: Jayson Johnston in Bjorn Nelson
V današnji glasbeni industriji je eden najpogosteje uporabljenih "instrumentov" digitalni sintetizator. Vsak glasbeni žanr, od hip-hopa do popa in celo countryja, v studiu uporablja digitalni sintetizator za ustvarjanje taktov in zvokov, ki jih potrebujejo za oživitev svoje glasbe. V tej vadnici bomo ustvarili zelo preprost sintetizator s ploščo Basys 3 FPGA.
Sintetizator bo lahko predvajal štiri izbrane četrtinske note s konstantnim številom udarcev na minuto. Uporabniki bodo s stikali dodelili vsako četrtinsko noto glasbeni višini. Za ta projekt uporabljamo 4-bitni digitalno-analogni pretvornik (DAC), da vzamemo izhod iz plošče in ga pretvorimo v analogni signal. Izhod iz DAC -a se nato posreduje v standardni računalniški zvočnik, ki ustvarja našo glasbo. Možnih je šestnajst diskretnih višin. Sintetizator bomo omejili na eno oktavo z 12 notami, ki se nahaja med srednjim C (261,6 Hz) in B4 (493,9 Hz). Uporabnik bo imel tudi možnost dodelitve več zapiskov hkrati, pa tudi dodelitev počitka s pritiskom na dodeli, pri čemer nobeno od stikal za višino tona ni pomaknjeno navzgor. Ko je vsaka nota izbrana in predvajana, se na 7-segmentnem zaslonu prikaže črkovna nota. Uporabili bomo tudi tri gumbe na plošči, enega za predvajanje in začasno ustavitev glasbe, enega za ponastavitev sintetizatorja in preklop v način "izbire", tretjega pa za dodelitev tona vsake note v načinu izbire.
Ko je uporabnik zadovoljen z izbiro not in po pritisku na gumb za predvajanje, bo sintetizator večkrat zaporedoma predvajal vsako noto, dokler uporabnik ne pritisne premora ali izbire.
Tu je seznam potrebne opreme:
- Vivado (ali kateri koli delovni prostor VHDL)
- Basys 3 ali podobna plošča FPGA
- Digitalno-analogni pretvornik (najmanj 4-bitni)
- Zvočnik s priključkom za slušalke
- Žični vodi
1. korak: Uporabniško delovanje digitalnega zaporedja
Naslednji koraki so za upravljanje digitalnega sekvencera. Digitalni sekvencer podpira predvajanje 12 različnih višin (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), ki segajo od 261,6 Hz do 493,9 Hz.
1. Pritisnite levi gumb, da ploščo preklopite v način izbire. V tem načinu bodo vsa štiri leva stikala (stikala od 13 do 16) uporabljena za shranjevanje ločene vrednosti višine tona.
2. Če želite izbrati, vklopite eno od levih stikal in nato s skrajnimi 4 desnimi stikali (stikala od 1 do 4) izberite želeno višino. Nagib, povezan z določeno kombinacijo desnih stikal, bo prikazan na zaslonu sedmih segmentov, zaslon pa se bo vsakič, ko se desna stikala premaknejo v novo kombinacijo, posodobil na novo povezano višino. Počitek lahko dodelite tako, da nikoli ne dodelite višine tona enemu od levih stikal ali da opombi dodelite višino tona, prikazano kot 0 na zaslonu. Ko najdete želeno višino in se prikaže na zaslonu, pritisnite spodnji gumb za dodelitev, da to noto dodelite določeni višini.
3. Ponovite 2. korak za tri preostale note, tako da vsako od preostalih levih stikal vklopite ločeno, z desnimi stikali izberete ustrezno višino in pritisnete spodnji gumb, da tonu dodelite višino. Več notam lahko dodelite isto višino, tako da hkrati premaknete več kot eno levo stikalo navzgor.
4. Zdaj, ko so bile dodeljene vse note, je digitalni sekvencer pripravljen za predvajanje. Če želite predvajati note na zvočniku, preprosto pritisnite desni gumb za predvajanje/premor, da začnete predvajati glasbo. Vrstni red zaporedja predvajanja odraža višine, povezane z levim stikalom, od leve proti desni. Zapiski se bodo predvajali z nastavljenim številom udarcev na minuto v vrstnem redu 1, 2, 3, 4, 1, 2…. Na zaslonu bo prikazana nota, ki se trenutno predvaja, ko zvočniki predvajajo glasbo. Če želite začasno ustaviti predvajanje glasbe, preprosto pritisnite desni gumb, nato pa se glasba neha predvajati in na zaslonu se prikaže simbol za premor. Če znova pritisnete desni gumb, se predvajanje nadaljuje.
2. korak: Tehnične podrobnosti
Naš sintetizator uporablja številne različne digitalne komponente. Vključeni so končni avtomati, registri, multiplekserji, delilniki ure in drugo. Za izdelavo našega sintetizatorja smo uporabili 10 edinstvenih modularnih datotek. Namesto da bi vsak modul postali komponenta, smo modularne datoteke razčlenili po funkcijah. Zato je večina modulov več kot ena komponenta. Upoštevajte, da zgornja slika prikazuje vsak blok, povezan v našem vrhunskem dizajnu.
O vsakem modulu bomo razpravljali z opisom vhodov in izhodov, razčlenjevanjem njegovih komponent in razlago njegovega namena v celotni zasnovi. Datoteka ZIP je vključena na dnu navodila, ki vsebuje vsako datoteko kode VHDL, uporabljeno v projektu.
Vhodi
- Clk (izvorni signal ure)
- PP (predvajanje/premor)
- Sel (postavi sintetizator v način izbire)
- Dodelite (dodelite korak smoli)
- Korak (opombe o položaju)
- Freq (stikala ustvarijo želeno višino)
Izhodi
- Anoda (7-segmentne anode)
- Katoda (7-segmentne katode)
- DAC (4-bitni pogon DAC)
3. korak: Tehnične podrobnosti
4. korak: 7-segmentni delilec ure
Naš sintetizator uporablja tri delilnike ure, od katerih vsi proizvajajo signale, ki imajo v našem projektu drugačen namen. Ločilnik ure sprejema izvorni signal ure in proizvaja spremenjen signal, katerega frekvenca je manjša od izvirnega signala ure. Izvorna ura Basys 3 je 100 MHz. To je frekvenca, ki jo uporabljajo naši delilniki ur. Če uporabljate drugo ploščo FPGA z različno urono frekvenco, boste morda morali spremeniti kodo.
7-segmentni delilnik ure proizvaja signal, ki poganja datoteko seg_display. Ko pridemo do njenega razdelka, bomo podrobneje razložili, kako ta datoteka deluje. V bistvu ta delilnik ure proizvaja signal 240 Hz, ki se bo uporabljal za preklapljanje med anodami in katodami na zaslonu. Signal je 240 Hz, ker je frekvenca, pri kateri človeško oko ne more prepoznati odsotnosti svetlobe, 60 Hz. Uporabljamo dve števki, zato bo s podvojitvijo te frekvence vsaka številka nihala pri 60 Hz. Nato ga podvojimo, da dobimo 240 Hz, ker se sistem spreminja le, ko je signal visok, ne pa tudi, ko pade nizko.
Da bi to dosegel, delilec sprejme izvorni signal 100 MHz in šteje na vsakem naraščajočem robu. Ko števec doseže 416667, bo izhod prešel iz nizkega v visoko ali obratno.
Vhodi
Clk (izvorni signal ure)
Izhodi
Clk_7seg (do seg_display)
Sestavni deli
- D register
- MUX
- Pretvornik
- Seštevalnik
5. korak: delilec ure na minuto
Na podoben način deluje tudi delilnik ure BPM. Ta razdelilnik proizvaja urono frekvenco, ki poganja preklapljanje med štirimi koraki pri oddajanju tonov v stanju predvajanja. Odločili smo se za preklop med zapiski pri 100 BPM. Pri 100 BPM se bo vsaka nota predvajala 3/5 sekunde. Nastali signal bi imel frekvenco 1,67 Hz.
Za izdelavo signala te frekvence smo ponovno uporabili sistem štetja, vendar je bilo tokrat 60 milijonov. Vsakič, ko števec doseže 60 milijonov, bi se izhodni signal preklopil visoko ali nizko.
Vhodi
Clk (izvirna ura)
Izhodi
Clk_BPM (za izhod_FSM)
Sestavni deli
- D register
- MUX
- Pretvornik
- Seštevalnik
Korak 6: Razdelilnik ure
Delitelj ure Pitches je največji od naših delilnikov ure. Ta razdelilnik oddaja 12 različnih signalov, ki ustrezajo 12 različnim notam, ki jih lahko predvaja naš sintetizator. Z osnovnim poznavanjem glasbene teorije smo ugotovili, da lahko bit ali vodilo niha s hitrostjo, ki ustreza frekvenci glasbenih not. Če si želite ogledati frekvence, ki smo jih uporabljali, poglejte tukaj. Uporabili smo četrto oktavo smol.
Tu se uporablja isti sistem štetja. Za posebne vrednosti, na katere smo šteli, si oglejte datoteko z oznako Clk_div_pitches.
Vhodi
Clk (izvirna ura)
Izhodi
C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (za izbiro_izhoda)
Sestavni deli
- D register
- MUX
- Pretvornik
- Seštevalnik
7. korak: Predvajaj/začasno ustavi/izberite državno napravo
V našem projektu obstajata dva stroja s končnim stanjem (FSM). FSM je logična naprava, ki lahko obstaja v samo enem stanju od omejenega števila stanj. Z uporabo FSM se lahko digitalno vezje premakne v novo stanje na podlagi kombinacije vhodov. Z uporabo vhodne logike se bo stanje FSM spremenilo, ko bo ura naraščala. Iz stanja in vhodov v vezje lahko ustvarite izhodno logiko, ki daje izhode, ki obstajajo le, če je FSM v določenem stanju.
Državni stroj PPS je prvi FSM v našem vezju. V tem FSM so tri države; Način predvajanja, premora in izbire. Za premikanje po različnih stanjih smo uporabili gumba PP in Izbor. Oglejte si zgornji diagram stanja, da vidite, kako prihaja do prehodov med stanji. Ta prehod FSM smo naredili na naraščajočem robu izvorne ure 100 MHz, tako da bi bilo nemogoče, da stroj ne bi prešel, ko je bil pritisnjen eden od gumbov, tudi za zelo kratek čas. Trenutno stanje (P_state) je edini izhod tega modula.
Vhodi
- Clk (izvirna ura)
- Sel (levi gumb)
- PP (desni gumb)
Izhodi
P_state (trenutno stanje, za output_FSM, note_assign, seg_dsiplay, final_select)
Sestavni deli
- MUX
- D register
8. korak: Predvajaj/začasno ustavi/izberite državno napravo
9. korak: Izhodni FSM
To je drugi FSM, omenjen v prejšnjem razdelku. Ta FSM opravlja drugačno funkcijo kot druga, vendar je osnova za to v bistvu enaka.
Izhodni FSM deluje le, če je trenutno stanje prvega FSM "01" (stanje predvajanja). V bistvu je to omogočanje modula. Če je stanje "01", bo FSM preklapljal med stanji na naraščajočem robu signala ure BPM. To počnemo, ker output_FSM nadzoruje, katero binarno število za izbrano višino tona se pošlje modulom output_select in seg_display. FSM ima 16-bitni vhod, ki prihaja iz modula za dodelitev beležk, ki bo obravnavan v nadaljevanju. V stanju "00" za output_FSM bo modul izpisal "xxxx" za prvo dodeljeno noto. Nato v "01" izpiše "yyyy" za drugo noto in tako naprej za vsako opombo, preden se premakne nazaj na prvo noto. Oglejte si zgornji diagram stanja.
Ta FSM se razlikuje od prvega, ker ni vhodne logike za nadzor preklapljanja med stanji. Namesto tega bo FSM deloval le, ko je stanje iz prvega FSM "01", nato pa bo ta FSM prehajal med stanji le na naraščajočem robu signala ure. Druga razlika je v tem, da ima ta modul izhodno logiko, kar pomeni, da ne oddaja trenutnega stanja, ampak oddaja binarno število za smolo v tem stanju.
Vhodi
- Clk_BPM (signal ure BPM iz delilnika ure)
- FSM1_state (PS iz PPS FSM)
- Pitch_in (parcele iz note_assign)
Izhodi
Pitch_out (en korak naenkrat, za output_select in seg_display)
Sestavni deli
- MUX
- D register
10. korak: Izhodni FSM
11. korak: Dodelitev opombe
Modul za dodelitev beležke je odgovoren za dejansko dodelitev višine tonu pozicijski nogi ali koraku. Ta modul je pravzaprav precej preprost. Najprej preveri, ali je vezje v stanju "izbire" in ali je stikalo (skrajno levo) visoko. Če je to res in pritisnete gumb za dodelitev, bo izhod modula enak binarnemu številu, ki ga predstavljajo frekvenčna stikala (skrajno desno).
Sprva smo poskušali izdelati modul, ki bi dejansko shranil enega od signalov takta tona na izhod, vendar smo imeli težave s spreminjanjem izhoda, ki sledi vhodnim signalom ure. To je edini modul, uporabljen večkrat v končni zasnovi. Vsak korak ima povezan modul note_assign, zato vsak primerek modula dobi en bit vodila Step.
Vhodi
- P_state (trenutno stanje iz PPS FSM)
- Sel (levi gumb)
- Stikalo (enostopenjsko stikalo)
- Freq (skrajna desna stikala za višino tona)
- Dodeli (spodnji gumb, dodeli opombo)
Izhodi
Nagib (binarna številka, na izhod_FSM)
Sestavni deli
- MUX
- D ponovna registracija
12. korak: Izberite izhod
Izbira izhoda je odgovorna za sprejem binarne številke za višino tona in njeno povezavo z ustreznim signalom ure. Kljub svoji velikosti je to tudi relativno preprost modul. Output_select je v bistvu binarni dekoder, ki dekodira binarno število za višino tona do določenega signala ure. Pravzaprav je dodelitev izhoda taktni frekvenci delovala bolje v primerjavi z modulom note_assign, ker je vse, kar je moral narediti ta modul, MUX signali ure z binarno številko, ki predstavlja kontrolni vhod.
Opravičujemo se za nenavadno usmerjanje, Vivado je za datoteko clk_div_pitches organiziral signale smole po abecedi, za to datoteko pa jih je organiziral po naraščajoči binarni številki, zaradi česar so bile višine v drugačnem vrstnem redu. Upoštevajte tudi, da če je binarna številka iz izhoda_FSM "0000" ali karkoli večjega od "1100", potem MUX pošlje skozi raven signal "0".
Vnos
- Nagib (iz izhoda_FSM);
- C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (signali takta)
Izhod
Ton (en sam bit, ki se ujema z izbranim signalom ure, na square_wave)
Sestavni deli
MUX
Korak: Square Wave Gen
Modul square_wave je generator kvadratnega vala, ki se iz plošče odda na DAC. Z uporabo tonskega signala iz prejšnje datoteke ta square_wave obrne 4 -bitno število med "0000" in "1111" na naraščajočem robu tona. Ton je določena frekvenca višine tona, zato kvadratni val ustvari val z drugačno frekvenco, ko izhodni_FSM preide v drugo stanje. 4-bitni izhod tega modula gre v modul fin_sel, kjer logika narekuje, ali bo to vodilo oddano glede na stanje iz PPS FSM.
Alternativa temu generatorju kvadratnih valov je izdelava sinusnega vala. Čeprav bi to najverjetneje ustvarilo boljši končni ton, je izvedbo precej težje, zato smo se odločili za ustvarjanje kvadratnega vala.
Vhodi
Ton (nihajni bit iz izhoda_izbira)
Izhodi
DAC_input (nihajoče 4-bitno vodilo, ki se spreminja pri isti frekvenci tona)
Sestavni deli
- Pretvornik
- D register
14. korak: 7-segmentni zaslon
Modul seg_display nadzoruje 7-segmentni zaslon na naši plošči basys. Znotraj modula se pojavita dva procesa. Prvi postopek dekodira Freq v stanju "izbire" ali Pitch v načinu "play". V načinu "premor" modul dekodira, da prikaže simbol premora. Če pogledate kodo VHDL, lahko vidite, da binarni dekoder dejansko dekodira vhod v dva različna signala, katodo 1 in katodo 2. Katoda 1 predstavlja črko, ki ustreza višini tona, ki jo je treba prikazati, katoda 2 pa ploski simbol (b), če obstaja. Razlog za to je drugi postopek, ki ga izvede modul seg_display.
Na plošči basys3 ima segmentni zaslon skupne katode. Medtem ko anode nadzorujejo, katera številka je vklopljena, katode nadzorujejo, kateri segmenti so vklopljeni. Ker imajo zaslon skupne katode, to pomeni, da lahko hkrati prikažete samo en niz segmentov. To predstavlja problem za ta projekt, ker želimo prikazati črko pri prvi številki in ploski simbol, če je potrebno, hkrati. Se spomnite signala ure 7seg? Da bi rešili to težavo, spreminjamo anode in katode naprej in nazaj na signalu ure 7seg. Ker je signal ure 240 Hz in uporabljamo dve števki, bo vsaka številka nihala pri 60 Hz. Za človeško oko bo videti, kot da števke sploh ne nihajo.
Upoštevajte tudi, da zaslon plošče basys3 uporablja negativno logiko. To pomeni, da če je anoda ali katoda nastavljena na '0', bo ta številka ali segment vklopljen in obratno.
Vhodi
- Pitch (binarna številka note, uporabljena v stanju predvajanja)
- Freq (frekvenčna stikala, ki se uporabljajo v izbirnem stanju)
- P_state (trenutno stanje iz PPS FSM)
- Clk_240Hz (signal ure iz Clk_div_7seg, dvojno 120, ker uporabljamo le naraščajoči rob)
Izhodi
- Katoda (vodilo, ki nadzoruje segmente na zaslonu, končni izhod)
- Anoda (vodilo, ki nadzoruje številke na zaslonu, končni izhod)
Sestavni deli
- Zapah
- MUX
- D register
Korak 15: Končna izbira
Končna izbira je zadnji modul, uporabljen v tem projektu. Še en preprost modul, ta modul nadzoruje končni izhod, ki bo šel v DAC. V stanju "izbira" ali "premor" bo modul predvajal statično vrednost "0000", tako da iz zvočnikov ne bo predvajana glasba. V stanju "play" bo modul oddajal nihajoče 4-bitne, kot jih določa square_wave.
Vhodi
- P_state (trenutno stanje iz PPS FSM)
- DAC_input (nihajoči 4-bitni iz kvadratnega_vala)
Izhodi
DAC (enak vhodu DAC_ v stanju predvajanja, končni izhod)
Sestavni deli
MUX
Korak 16: Zunanje naprave: DAC
Digitalno -analogni pretvornik (DAC) sprejme ločen signal in ga pretvori v stalen signal. Naš DAC ima štiri bite in je izdelan iz seštevalnega ojačevalnika. Z uporabo razmerja uporov v napajalni in povratni zanki smo lahko ustvarili sistem, ki oddaja na 16 različnih ravneh, ki nastanejo s "seštevanjem" vsake veje. Bit0, zgornja veja, nosi najmanjšo težo in prispeva najmanjši potencial, ko je visok, zaradi tega se veje povečujejo. Ko se spuščate po vejah, se teža povečuje. Če bi šteli binarno navzgor in nato nazaj z uporabo bitnih vhodov, bi bile izhodne napetosti videti kot sinusni val po korakih. Vhod v DAC je bil priključen na enega od PMOD-jev na plošči za prenos 4-bitnega signala.
DAC je bil prvotno sestavljen za razred elektrotehnike in smo ga oblikovali in spajkali, ne pa kupili v trgovini. Zgoraj je slika oblikovalske datoteke za ustvarjanje tiskanega vezja.
17. korak: Zunanje naprave: Zvočnik
Za ta projekt ne boste želeli kupiti super lepega zvočnika. Kot lahko vidite, je zvok precej preprost. Šli smo in pri Best Buyu kupili računalniške zvočnike za 8 USD. Vse, kar ima priključek za slušalke, dobro deluje. Monoton deluje tudi dobro. Uporabljate lahko celo slušalke, vendar jih lahko raznesete!
Za priključitev izhoda DAC na zvočnike smo uporabili mostične kable, nato pa izhodni kabel držali na konici vtičnice za slušalke in kabel za ozemljitev na podnožje. Poskušali smo z električnim trakom držati kable na mestu, vendar je povzročilo veliko motenj. Poskus z drugačnim slogom traku bi lahko rešil to težavo.
Za naše zvočnike smo jih obrnili na najvišjo nastavitev in dobili spodobno močan hrup.
In to je zadnji korak pri ustvarjanju digitalnega sekvencerja iz plošče FPGA! Pojdite na naslednja dva razdelka, če želite prenesti vso kodo VHDL in si oglejte sekvence v akciji.
Korak 18: Video demo
Ta videoposnetek prikazuje končno različico delovnega projekta, vključno s postopkom dodelitve stikal na 4 različne višine in zvočniki, ki igrajo ustrezne note.
19. korak: Koda VHDL
Tu je koda za celoten projekt, vključno z datotekami omejitev in sim, uporabljenimi pri izdelavi sekvencera. Upoštevajte, da v arhitekturi tako pišejo neuporabljene oblikovalske datoteke.
Priporočena:
Preprost zaporedje: 16 korakov (s slikami)
Preprost zaporedje: Eden od ključev za ustvarjanje dobre glasbe je nepremišljeno ponavljanje. V tem je preprost sekvencer odličen. Vedno znova počne isto v zaporedju osmih not. Prilagodite lahko pogostost zapiska, trajanje zapiska in
(skoraj) Univerzalni programer MIDI SysEx CC (in zaporedje ): 7 korakov (s slikami)
(skoraj) Univerzalni programer MIDI SysEx CC (in zaporedje …): Sredi osemdesetih let so proizvajalci sintetizatorjev začeli z "manj je bolje" proces, ki je pripeljal do sintetizatorjev barebones. To je omogočilo zmanjšanje stroškov na strani proizvajalca, vendar je postopek popravkov otežilo, če ne celo onemogočilo končno uporabo
DoReMiQuencer - programabilni MIDI zaporedje s tipkovnico: 7 korakov
DoReMiQuencer - Programabilni MIDI sekvencer s tipkovnico: Ta naprava je bila ustvarjena za uporabo z VCVRack, virtualnim modularnim sintetizatorjem, ki ga je ustvaril VCV, vendar lahko služi kot MIDI krmilnik splošnega namena, odvisno od izbranega načina. Opombe MIDI, preslikane v ke
Programabilni RGB LED zaporedje (z uporabo Arduino in Adafruit Trellis): 7 korakov (s slikami)
Programabilni RGB LED sekvencer (z uporabo Arduino in Adafruit Trellis): Moji sinovi so želeli, da bi njihove mize osvetlili barvni LED trakovi, jaz pa nisem hotel uporabljati krmiljenega RGB tračnega krmilnika, ker sem vedel, da jim bo s fiksnimi vzorci dolgčas imajo ti krmilniki. Mislil sem tudi, da bo to odlična priložnost za ustvarjanje
Kako brezplačno narediti Firefox neverjetno in kul .. zaporedje: 4 koraki
Kako brezplačno narediti Firefox neverjetno in kul …….. Sequil: Pozdravljeni vsi. Ta navodilo je manjše nadaljevanje Mojega prvega navodila za Firefox, ki je eno najbolj priljubljenih, kako to storiti v spletu. Danes vam bom predstavil tri: (nove in kul dodatke za firefox. Če nimate firefox pl