mircang9 Postat Octombrie 29, 2010 Partajează Postat Octombrie 29, 2010 Vreau sa fac un demodulator FSK astfel: pentru 2310 Hz frecventa de "0" si pentru 2370 frecventa de "1" deci frecvente apropiate. La 2310 Hz perioada de 421 us si la 2370 perioada de 432 us. Numarul de conversii A/D pentru o perioada este de 30 urmand sa se diferentieze mai bine numarul de conversii dupa doua perioade urmarite. Deci eroarea ar fi de 2 ms pentru un semnal digital ce are durata unui bit de 20 ms ( 50 bps ). O conversie ( Tacq + 11 x Tad = 4.5 us minim ). Ca sa nu-mi cumpar alte microcontrollere mai specializate daca se poate. Am vazut ca un dsPIC6014 ar doar memoria flash mai mare in rest limitarea la A/D este cam aceeasi cauzata de acel Chold care este cam la fel. PIC18F4455 poate rula si el pana la 40 MHz frecventa clock extern. Link spre comentariu
cirip Postat Octombrie 29, 2010 Partajează Postat Octombrie 29, 2010 Salut,Intamplarea face ca si eu sunt interesat de asa ceva, dar avansez incet ptr ca am si alte obligatii. Totusi, cred ca nu iti e clar cum vrei sa faci demodularea.Daca vrei sa faci prin masurarea perioadei, nu ai nevoie de ADC. Tot ce iti trebuie este sa limitezi semnalul, sa-l faci dreptunghiular si sa-l bagi pe o intrare care face capture/compare. Perioada o masori cu un timer. Deci nu ai nevoie de ADC. Metoda este destul de "didactica" si are nevoie de RSZ foarte bun ca sa functioneze. Daca vrei sa faci demodulare DSP, atunci ai nevoie de ADC, dar o esantionare cu o frecv. de la 8-10KHz (100us) in sus este suficienta. In acest caz ma astept ca performantele sa fie superioare ptr ca ai posibilitatea sa faci filtrare digitala. Aici dsPICul se dovedeste superior prin setul de instructiuni MAC pe care stie sa le execute si pe care celelalte nu le au.Deci, cum vrei sa demodulezi de fapt? Ce standard este? 2310/2370 Hz mi se par cam apropiate. Am vazut ca rata de baud este 50 bps.CiripEDIT: Am recitit ... Hmmm, la rata de baud asa mica si daca mediezi, s-ar putea sa iasa ceva. Dar tot nu ai nevoie de ADC daca masori perioade. As incerca o simulare a algoritmului intai. Poti folosi Matlab sau Matlabul saracului, Excel. Link spre comentariu
mircang9 Postat Octombrie 29, 2010 Autor Partajează Postat Octombrie 29, 2010 In general cand se aude de demodulare multi apeleaza la PLL dar eu vreau un control numeric ceea ce este mai elegant. Am incercat o schema cu CD4046 si alta cu LM311 dar nu merge. Se pare ca aceste circuite sunt facute sa lucreze cu semnale FSK a caror frecvente pentru "0" si "1" logic sunt mult mai distantate de genul: pentru "0" logic 3 KHz si "1" logic 4 KHz. Am incercat si FAX-modemuri dar problema la ele este ca frecventa de "0" este undeva la 1200 Hz si de "1" undeva la 2200 Hz deci distantate la 1 KHz distanta intre ele. Frecventele date aparin Canalului 17 codificare FSK pentru linii inchiriate. In banda vocala intre 420 Hz - 3400 Hz sunt cam 23 de canale distantate intre ele cu 120 Hz. Frecventa centrala a unui canal se calculeaza astfel: FCn = 120 x n + 300. Pentru canalul 17 FC17 = 120 x 17 + 300. Frceventa de "0" este FC - 30 Hz iar frecventa de "1" logic este FC + 30 Hz. Toate aceste canale pentru diferite posturi telecomandate sunt trecute pe aceeasi linie telefonica inchiriata nefolosindu-se numere sau o centrala telefonica. Modemurile de care dispun sunt cu condensatoare si bobine din ferita si ma gandesc sa le inlocuiesc. Pentru ca mesajele sa fie trimise la distante mari ( zeci de Km ) se foloseste o rata baud mica adica 50 bps pentru a reduce la minim rata erorilor. Problema ar mai fi ca dupa filtru de receptie in receptor ( demodulator - discriminator de frecventa ) intra semnalul FSK dar care are si o variatie de amplitudine( amplitudinea maxima PK - PK este de aproape 100 mV semnal sinusoidal ). Daca il fac dreptunghiular variatiile de amplitudine raman de amplitudine raman dar cred ca pot scapa si de asta: cand compar la un pin de intrare compar fie o valoare "0" si o valoare diferita de "0" considerata "1" logic timp in care masor perioadele cu un Timer. Ma intereseaza sa vad o schema de conversie a semnalelor sinusoidale in semnale dreptunghiulare. Am un PIC Kit 2. Daca schema asta e mai scumpa decat un dsPIC mai bine merg pe dsPIC pe care poate reusesc sa-l programez cu PIC Kit 2. Pana acum am programat PIC-uri din familiile 16FXXXX si 18FXXXX. Link spre comentariu
cirip Postat Octombrie 29, 2010 Partajează Postat Octombrie 29, 2010 Cred ca inca nu suntem pe aceeasi lungime de unda. Am pomenit eu ceva de hardware? Vorbeam de demodulare soft, digitala. Pe de alta parte, demodularea digitala nu inseamna masurarea perioadelor. Daca in spectrul vocal se transmit simultan canalele alea de date, atunci semnalul in timp va fi o amestecatura de nedescris. Este imposibil de demodulat asa ceva fara filtrare. Ia excelul si insumeaza 3-4-5 sinusoide si vezi pe grafic ce iese. Asa ceva nu se poate demodula cu limitator. De aia nici nu a mers cu CD4046. Poate ca ar fi mers cu filtru inainte. Si de aici se vede ca solutia este DSP.Revenind, probabil ca ceea ce vrei sa faci este sa filtrezi cate un canal, apoi sa il demodulezi. Asta se face digital, dar, repet, nu limitand si masurand perioade, ci: Esantionare->filtrare(prin filtrare inteleg convolutie discreta cu functia pondere a filtrului)->PLL numeric->data slicer->recuperare de clock->extragere date. Apoi detectie de erori si ce-o mai fi. Totul soft, dar lucrezi cu valorile esantioanelor, nu cu semnal limitat. Daca limitezi semnalul ala care contine mai multe canale simultane, nu mai recuperezi nimic. Daca semnalul ocupa banda vocala, conform lui Taica Nyquist, o esantionare pe la 8KHz ar fi suficienta, deci ADCurile duc bine mersi. Problema reala e puterea de procesare, mai exact calculul convolutiei. E artimetica multa. Nu merge ca programele obisnuite de genul: daca bitul x e 1, fa-l pe y=0.Daca am timp, o sa-ti arat o poza cu ce am facut eu in Matlab. E departe de ce vrei tu, in sensul ca eu am un singur canal si e un mediu sanitizat, adica RSZ foarte mare. Generez FSKul virtual. Frecventele mele sunt 2025 si 2225, 300 baud, standardul Bell 103. Am incercat sa aplic algoritmul pe un semnal real, inregistrat cu placa de sunet si inca nu imi place, dar se mai lucreaza.Cirip Link spre comentariu
cirip Postat Octombrie 30, 2010 Partajează Postat Octombrie 30, 2010 Salut,M-ai starnit si dupa ce am mai periat un pic algoritmul, iaca rezultatele. Lauda-ma gura/ Ca ti-oi da friptura!-Ceea ce vezi in poze este rezultatul demodularii unui semnal real inregistrat cu receptorul de scurte. Am inregistrat cu Sound Recorderul din Windows si placa de sunet folosind o frecventa de esantionare de 8KHz.-Semnalul pe care a fost aplicata procesarea este in fisierul fsk.zip, atasat. Am procesat in Matlab.-Fig.1 (stanga-jos) este un plot al semnalului FSK exact asa cum a fost inregistrat. Daca pun un osciloscop la iesirea placii de sunet in timp ce redau fsk atasat, ar trebui sa se vada ceva ca in Fig.1-Fig.2 trasa de sus (verde) contine semnalul demodulat, adica datele, in forma analogica. Este de fapt "tensiunea" de control a VCOului din PLLul numeric.-Fig.2 trasa de jos (albastru) reprezinta datele demodulate si limitate, ca sa fie semnal digital 1/0.-Fig.3 (dreapta-jos) reprezinta diagramele ochi pe semnalul demodulat, analogic (sus, albastru) si cel limitat, digital (jos, rosu). Se observa un pui de jiter pe-acolo, dar cred ca datele sunt recuperabile.Nu am folosit masurarea perioadelor. Totul este desepit. Cred ca asa ar trebui sa abordezi si la tine, doar ca inainte de demodulare ti-ar mai trebui un filtru digital de canal. Cirip Link spre comentariu
mircang9 Postat Octombrie 30, 2010 Autor Partajează Postat Octombrie 30, 2010 Ce am incercat cu CD4046 si LM331 a fost pentru un singur canal cu emitatorul pentru un canal legat DIRECT la receptorul meu fara sa interpun alte canale fara sa implic linia telefonica si eliminand filtrele. E normal ca doar dupa cate un filtru care elimina celelalte canale se pune receptorul ( demodulatorul ). O sa-ti trimit si cele doua scheme pe care le-am incercat cu CD4060 si LM331. Revenind la demodularea soft se pare ca tre sa ma pun la punct mai bine cu convolutiile astea si poate gasesc un algoritm gata pe care doar sa-l transcriu in program. Evident ca programez in C si nu in asamblare cu compilatorul dedicat microcontroller-ului. Asa e frecventa este mare totusi si nu merge cu simple masurari de perioade ci cu prelucrarea esantioanelor. Daca perioadele erau de ordinul milisecundelor cred ca mergea doar cu simple masurari de perioade si reconstituirea semnalului digital.Ceea ce mi se pare putin diferit este ca modulatorul ( emitatorul ) cu bobine de ferita este defapt un oscilator comandat in tensiune ( tensiunea fiind nivelele logice de 0/1 ale semnalului digital ) care in functie de semnalul digital de 50 bps ( 20 ms durata unui bit ) "1" sau "0" emite cele doua frecvente. Nu vad ce clock sa extrag din semnal decat direct semnalul digital de 50 bps detectand cele doua frecvente. Ar mai trebui sa fac rost de compilatorul unui dsPIC care sa mearga instalat integrat in MPLAB asa cum este PIC-C Lite sau C18. Link spre comentariu
mircang9 Postat Octombrie 30, 2010 Autor Partajează Postat Octombrie 30, 2010 Cred ca incerc mai intai fara ADC cu PIC16F887 cu masurarea perioadelor la un pin de intrare cu capture/compare. Din sinusoidal in digital incerc sa fac cu un amplificator operational ( schema de comparator ) sau cu un comparator de la PIC. Daca folosesc un comparator de la PIC problema ar fi ca semnalul sinusoidal are si valori negative fata de masa ( alternantele negative ) pe cand somparatorul de la PIC accepta intrari analogice care au valori cuprinse intre VSS ( masa ) si VDD ( +5 V ). Semnalul meu sinusoidal FSK are o amplitudine de 2 V varf la varf dupa cum apare pe osciloscop. Link spre comentariu
cirip Postat Octombrie 30, 2010 Partajează Postat Octombrie 30, 2010 Daca folosesc un comparator de la PIC problema ar fi ca semnalul sinusoidal are si valori negative fata de masa ( alternantele negative ) pe cand somparatorul de la PIC accepta intrari analogice care au valori cuprinse intre VSS ( masa ) si VDD ( +5 V ).Asta nu e o problema. Translatia de nivel se face simplu. Pui un divizor rezistiv care sa aduca la intrarea comparatorului o tensiune egala cu VDD/2, iar semnalul FSK il aduci printr-un condensator. Valoarea medie va fi adusa la VDD/2, iar sinusul tau va oscila in jurul valorii medii. In cazul tau, daca semnalul are 2Vvv, la intrarea comparatorului, dupa translatie vei avea un sinus care la maxim are VDD/2+1V=3.5V si la minim VDD/2-1V=1.5VSpor! Te rog sa postezi cum evolueaza proiectul.CiripEDIT: De ce ai mai deschis alte subiecte? Nu sunt legate tot de proiectul asta? Posteaza aici si continuam discutia. Vad ca ai umplut forumul de posturi identice. Vezi ca ti-o iei de la moderatori.FSK se poate genera foarte usor in soft, cu un pic. Posteaza aici si iti explic cum, daca zici ca esti bazat pe soft. Chestia aia cu mux are probleme majore, una dintre ele fiind discontinuitatea fazei la tranzitiile intre biti. Link spre comentariu
puiu Postat Octombrie 30, 2010 Partajează Postat Octombrie 30, 2010 1. Vezi ca programatorul PIC KIT2 nu merge pe toata familia dsPIC30. Link spre comentariu
mircang9 Postat Octombrie 30, 2010 Autor Partajează Postat Octombrie 30, 2010 Cineva mi-a raspuns ca am postat la Amplificatoare audio de parca astia habar n-au de amplificatoare operationale conversii de semnale ca sa-si dea cu parerea si de-aia am postat si la alte care se apropie de subiectul in discutie. E tare ce mi-ai zis cu VDD/2 cu referintele la comparator si cu ce faci in MATLAB. Ai zis ca la iesire din comparatorul PIC-ului iese tot un semnal sinusoidal cu centrarea semnalului pe Vdd/2 si nu pe zero eliminandu-se alternantele negative insa cum am mai vorbit am nevoie de semnal dreptunghiular la iesirea sin comparator. Inseamna ca semnalul sinusoidal cu referinta modificata il trec prin al 2-lea comparator ca sa obtin semnalul dreptunghilar care sa-l aplic la pinul PIC-ului pentru captura/comparare pentru a masura perioadele pentru demodulare ? Oricum voi vedea mai exact cand voi pune la munca in aplicare ideile discutate. Schema cu CD4046 si CD4052 pentru generare semnal FSK am incercat-o si n-a mers. M-am gandit ca s-ar putea sa fie diferenta de faze la comutarea intre cele doua frecvente dar l-am intrebat pe unul mai in varsta care zice ca se pricepe la electronica si a zis ca nu apare defazaj. Inteleg ca nu le prea are cu electronica cum credeam. Ai zis ca pot face generare semnal FSK cu PIC. Cred ca se face asa: pe un pin de intrare citeste semnalul digital ( de date ): daca este 1 cu ajutorul unui timer genereaza semnale dreptunghiulare cu perioada pentru frecventa pentru 1 logic, iar pentru zero la fel pentru frecventa de 0. Apoi semnalul dreptunghiular trebuie convertit in semnal sinusoidal. Pentru asta voi avea nevoie de o schema pentru a converti semnalul dreptunghiular in semnal sinusoidal. Pentru conversia din sinusoidal --> dreptunghiular am gasit si din ce mi-ai zis cu divizorul rezistiv si condensatorul si din urmatoarele link-uri: http://www.circuiteelectrice.ro/electro ... perational http://forum.softpedia.com/index.php?showtopic=202105 Link spre comentariu
mircang9 Postat Octombrie 30, 2010 Autor Partajează Postat Octombrie 30, 2010 Tre sa recunosc ca ce mi-ai zis cu convolutia si simularea aceea in MATLAB este cam limba straina pentru mine. Pana ajung acolo la nivelul acela la care esti tu sau voi ma chinui deocamdata sa vad ce pot face cu PIC-urile astea mai slabe din familiile 16Fxxxx si 18Fxxxx dupa care ajung si eu pe acolo pe la dsPIC si vom putea discuta mai multe amanunte. Pana atunci va tin la curent cu proiectul meu. Link spre comentariu
cirip Postat Octombrie 31, 2010 Partajează Postat Octombrie 31, 2010 Ai zis ca la iesire din comparatorul PIC-ului iese tot un semnal sinusoidal cu centrarea semnalului pe Vdd/2 si nu pe zero eliminandu-se alternantele negative insa cum am mai vorbit am nevoie de semnal dreptunghiular la iesirea sin comparator. NU! Citeste cu atentie. Am spus ca "dupa translatie". Translatia (de nivel sau de valoare medie) are loc la intrarea comparatorului. La iesirea comparatorului este dreptunghiular. Inseamna ca semnalul sinusoidal cu referinta modificata il trec prin al 2-lea comparator ca sa obtin semnalul dreptunghilar care sa-l aplic la pinul PIC-ului pentru captura/comparare pentru a masura perioadele pentru demodulare ?Nu. Nu ai nevoie de al doilea comparator. Odata din motivul de mai sus si a doua ptr ca majoritatea picurilor au comparator intern cu referinta ajustabila. Este exact ce iti trebuie. Iesirea comparatorului este citibila in interiorul picului. Citeste documentatia. Schema cu CD4046 si CD4052 pentru generare semnal FSK am incercat-o si n-a mers.Ce n-a mers? E prea vag. Ce nu face? Sunt atatea care pot duce la concluzia ca "nu merge" incat ... Deci ce e aia "n-a mers"? Nu scoate semnal, nu comuta frecventele, sunt frecventele in sfecla? Fii mai darnic cu detaliile.Pe de alta parte, 4046 are un pin de control al frecventei, ca doar contine un VCO. Parca e pinul 9. Aplicand acolo tensiunea de date cu amplitudinea corecta, poti modula direct VCOul dintr-un singur 4046. Nu-ti trebuie MUX si nici al doilea 4046. Dar cred ca vei avea probleme mari de stabilitate. M-am gandit ca s-ar putea sa fie diferenta de faze la comutarea intre cele doua frecvente dar l-am intrebat pe unul mai in varsta care zice ca se pricepe la electronica si a zis ca nu apare defazaj.Defazaj e una, discontinuitatea de faza e alta. Eu intreb de branza si raspunsul e despre lumanari. [attachment=0]FSK_faze.GIF[/attachment] Ai zis ca pot face generare semnal FSK cu PIC. Cred ca se face asa: pe un pin de intrare citeste semnalul digital ( de date ): daca este 1 cu ajutorul unui timergenereaza semnale dreptunghiulare cu perioada pentru frecventa pentru 1 logic, iar pentru zero la fel pentru frecventa de 0. Apoi semnalul dreptunghiular trebuie convertit in semnal sinusoidal. Pentru asta voi avea nevoie de o schema pentru a converti semnalul dreptunghiular in semnal sinusoidal. Este o varianta posibila, dar nu la asta ma gandeam. Nu va fi usor sa obtii frecventele corecte. Calculeaza ratele de divizare si vezi ce iese. Eu ma gandeam la ceva pe principiul DDSului. Poti avea precizie foarte buna. Conversia din dreptunghi in sinus se poate face prin filtrare, dar metoda propusa de mine scoate direct esantioanele sinusului, pe care le arunci intr-un convertor D/A. Convertorul se poate face si cu o retea de rezistenle agatata de pinii picului. Pentru conversia sinus/dreptunghi foloseste schema de principiu de la linkul asta: http://www.discovercircuits.com/PDF-FIL ... cross1.pdf Foloseste comparatorul din PIC. Restul sunt chestii didactice, care nu fac ce iti trebuie tie. Link spre comentariu
mircang9 Postat Octombrie 31, 2010 Autor Partajează Postat Octombrie 31, 2010 Am gasit ceva pentru DAC cu PIC: http://en.wikipedia.org/wiki/Resistor_L ... _or_DAC.29 Link spre comentariu
mircang9 Postat Septembrie 20, 2011 Autor Partajează Postat Septembrie 20, 2011 Salut Cirip, daca mai esti pe acolo as vrea daca ai timp si vrei niste linkuripentru a face filtrare digitala acea cu convolutia. A trecut un an aproape, m-am luat cu alte treburi si n-am mai lucrat la proiectul ala dar sunt hotarat sa-l fac pana la urma.Asa, deci eu am filtru inainte care filtreaza toate canalele si lasa sa treaca doar frecventa ( frecventele pentru 0/1 logic ) pentru canalul respectiv.Pun la PIC16F887 un oscilator extern de 18.432 MHz si programul de demodulare FSK arata cam asa: __CONFIG(XT & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & DUNPROTECT & BOREN & IESOEN & FCMEN & LVPDIS); __CONFIG(BORV21); // 2nd config word // configurare BOR la 2.1 V. #define nop() asm("nop") void main(){ int contor; TRISC3 = 1; TRISE1 = 0; // configure ADC module ANSEL = 0x00; // dezactivare functia analogica pentru ADC ANSELH = 0x00; contor = 0; while(1) { contor = 0; while( RC3 == 0 ) { nop(); // semialternanta negativa se sare. } while( RC3 == 1 ) // se contorizeaza doar semialternanta pozitiva. { contor++; } if( contor >= 940 ) // urmeaza sa fac debug si sa vad mai exact // la ce valori ajunge contorul pentru canalul // 18. Valoarea asta e din calcule // considerand ca o instructiune dureaza // (1/Fosc)*4 us. { RE1 = 0; } if( contor <= 932 ) { RE1 = 1; } } // sfarsit while(1)} // sfarsit main() Asta ramane sa vad maine dupa ce la intrare in RC3 amplific si apoi limitez semnalul ca sa fie curat adica tranzitia in zero sa se faca subViL. Semnalul FSK trebe mai intai amplificat pentru ca de la iesirea din FTB iese cu amplitudine mica de 1V varf-varf si are amplitudini variate. Trebe mai intai sa-l amplific sa zicem cam la 20 V ( aproape tensiunea de alimentare ) ca apoi cu acel circuit de limitare recomandat de tine sa limitez la maxim 5 V centrat pe 2.5 V si astfel semnalul o sa fie bun pentru captura la pinul de intrare RC3. Azi m-am uitat cu osciloscopul si tranzitia se face cam la limita adica sub 1.3 V care intra putin in zona interzisa. 1 logic la semnalul limitat e bun adica ajunge pana la 5 V. Toamna trecuta faceam o greseala la citirea cu osciloscopul pentru ca sonda era 10:1 si osciloscopul era setat pe "x1" in loc de "x10" ca sa vad valoarea reala a semnalului si nu impartita la 10. As mai avea optinunea cu XR2206 ( modulare FSK ) si XR2211 ( demodulare FSK ); dar pentru ele trebuie sa fac rost de condensatoare si rezistente de 1% toleranta daca nu chiar 0.5 % intrucat deviatia in frecventa fata de frecventa purtatoare este foarte mica adica la Fc+/-30 Hz. Si in plus am aceste circuite care lucreaza doar la temperaturi pozitive, iar pentru temperaturi negative trebuie aduse din afara tarii, pe cand PIC16F887 lucreaza si latemperaturi negative. Pe langa astea vreau sa fac si acel filtru digital cu dsPIC care sa inlocuiasca filtrul trece banda pe care il folosesc si care este vechi adica este facut cu bobine de ferita si condensatoare foarteprecise de +/- 1.25 %. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum