Sari la conținut
ELFORUM - Forumul electronistilor

cum schimb referinta la un semnal ?


Postări Recomandate

Cu ce ai programat dsPIC33FJ64GP804 ? Eu am pickit2. La MCLR ai aplicat Vpp dar in datasheet nu vad sa aiba si functie de programare ci doar pentru reset master. In programul pentru pickit 2 trebe sa setez Vdd la3.3 V, nu ? ca in poza. Si selectez dsPIC33FJ128GP802 pe care-l folosesc.Vad ca ai folosit PGEC2 si PGED2, in timp ce PGEC1,3 si PGED1,3 le-ai lasat in aer. Are importanta care din ele ? De ce are trei perechi ?In poza a doua arata ca placa demo se pare ca nu mai poate fi programata adica am ajuns la 1000 de scrieri la memoria de program flash probabil pentru dsPIC33FJ256GP506. Am citit pe site-ul de la microchip ca limita de scriere este la 1000 scrieri. Probabil asta este cauza. Cu toate astea dupa stergere si programare dsPIC33FJ256GP506 functioneaza si filtreaza. Acum e programat pentru filtrare IIR Bessel pentru canal 10 cu coeficientii calculati cu dsPICfdLite. Ordinul l-am dat maxim adica N = 8.Am incercat toate variantele: mod release, mod debugger DAR tot degeaba nu scap de mesajul "Programming failed". Asa ca m-am gandit sa fac eu o placa de test cu dsPIC33FJ128GP802si sa-l programez cu PICkit2 si sa-mi continuu experimentarea filtrelor IIR si FIR. Ca de anul trecut din toamna cat l-am tot sters si reprogramat este credibila ideea ca am ajuns la numarul maxim de 1000 de stergeri si reprogramari.Experimentele pe masa de lucru arata ca in imagini.

post-23035-139829509107_thumb.jpg

post-23035-13982950913_thumb.jpg

post-23035-139829509132_thumb.jpg

Link spre comentariu
  • Răspunsuri 109
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Cu ce ai programat dsPIC33FJ64GP804 ?
Folosesc ptr programare si debug un ICD2.

 

La MCLR ai aplicat Vpp [...]
Nu mai tin minte, dar probabil ca il foloseste. Nu l-oi fi pus degeaba acolo. De fapt, cand am pus in functiune placa aia facuta de mine prima data, a recunoscut imediat procesorul, l-a citit, programat si toate cele din prima. Asa ca, daca a mers, nici macar nu m-am mai uitat ce semnale foloseste.

 

Vad ca ai folosit PGEC2 si PGED2, in timp ce PGEC1,3 si PGED1,3 le-ai lasat in aer. Are importanta care din ele ? De ce are trei perechi ?
Programarea se poate face pe oricare dintre perechi. Perechea de debug se determina din bitii corespunzatori dintr-unul dintre cuvintele de config. Are mai multe perechi ca sa fie flexibil. Detalii gasesti in documentatie.

 

nu mai poate fi programata adica am ajuns la 1000 de scrieri
Cand incepe sa dea rateuri, nu se opreste brusc din programare. Incepe sa dea erori pe la cate un bit de aiurea de prin memorie. Altul e motivul ca nu programeaza. S-a busit ceva pe acolo. Ai zis ca ai taiat nu-s ce trasee. O fi de acolo?

 

Cu toate astea dupa stergere si programare dsPIC33FJ256GP506 functioneaza si filtreaza.
Nu are cum sa faca asa ceva. Inseamna ca de fapt nu se sterge. Sterge-l si apoi verifica daca e sters.

 

Operationalele din postul anterior: poti sa folosesti 324 sau 2904. Atentie, 339 e comparator, nu operational adevarat. Nu e nevoie sa folosesti componente de 1%. Problema este alta. Un filtru cu frecv de taiere de 2-3KHz, nu va atenua prea mult la frecv Nyquist de 4KHz in cazul tau. Ca sa atenueze mai mult, ori micsorezi frecv de taiere a filtrului anti-alias, ori cresti frecv de esantionare, ca sa creasca frecventa Nyquist.

 

Ce elixir ai in sticla aia de la piciorul mesei? Contine inspiratie concentrata? :aplauze

Link spre comentariu

Da este un fel de elixir :rade: care il ia electronistul ( cate o dusca ) cand are nervii intinsi la maxim ca ceva se incapataneaza sa mearga cum vrea si se numeste vin. M-am gandit ca poate o fi eroarea ca am taiat traseul de /MCRL ce-l da PIC18F dar dupa ce am intrerupt traseul a mers bine programarea. Programarea a mers bine fara erori si dupa ce la inceput am dat cu acel fir albastru masa ( 0 logic ) in baza tranzistorului pnp ce scoate acei 3.3V switchedce alimenteaza dsPICu. Probabil s-a trezit acum ca i-am facut aceste doua scurtaturi dar n-are motiv sa nu mearga programarea din aceste doua motive. O sa lipesc inapoi cu statia traseul de /MCLR. Am mai legat fire la placa breadboard cu dsPIC33FJ128GP802 ( capsula SPDIP 28 pini )si cand e gata incerc sa programez cu PICKit2 ca zice ca programeaza si dsPICu asta.

Link spre comentariu

Salut *Vreau daca se poate sa-mi dati formula din Excel de calcul din format Q15 in format zecimal adica calculul invers la "0x" & RIGHT(DEC2HEX($A$2*AM106,4),4) unde la A2 este 32768 ( 2^15) iar laAM106 este cifra in zecimal de genul 0.xxxxxxxxx sau -0.xxxxxxxxxx. Acum vreau sa calculez invers in Excel de preferabil sau in Matlab ( din Q15 in format zecimal cu virgula ).Multumesc ***

post-23035-139829512462_thumb.jpg

Link spre comentariu

Salut,Ambele functii calculeaza corect. Eroarea provine de la trunchiere.Daca precizia ar "infinita", -0.00081207 ar fi de fapt -26.6, dar conversia la hex trunchiaza si se obtine -26, adica 0xFFE6 exprimat pe 16 biti.Pe de alta parte, daca incerci sa convertesi 0xFFE6 inapoi in Q15, lipsesc cei 0.6 pierduti la rotunjirea lui -26.6 la -26 si de aia da altceva.In practica, daca polii nu au fost mutati atat de mult incat sa-ti afecteze in mod major caracteristica de frecv sau stabilitatea, nu prea conteaza. De aia, asa cum spuneam in alt post, este de preferat sa nu supra-esantionezi prea tare, ca sa nu iasa mici coeficientii filtrului si sa conteze erorile de rotunjire.

Link spre comentariu

Salut,Pentru partea de demodulare FSK m-am uitat mai bine la scriptul Matlab ( mirc_ch6 ) si am observat ca ai aplicat decimare, filtrare, interpolare, semn, demodulare. Intrebare: de ce ai pus delay=11 ? si nu delay=10 sau alta cifra ? Pentru implementare in dsPIC trebe sa aplic interpolare semn inainte de a face produsul de genul : x_mul(k)=x_lim(k)*x_lim(k-delay+1); ca in script ? Decimare ma gandesc ca nu voi avea nevoie pentru ca voi esantiona la Fs = 4 KHz pentru canal 10 ( Frecventa Fmax = 1530 Hz ). Dar va trebui sa aplic interpolare si semn inainte de a aplica produsul esantioanelor curente cu cele intarziate ?

Link spre comentariu

Salut,

Intrebare: de ce ai pus delay=11 ? si nu delay=10 sau alta cifra ?

Pentru ca la rata aia de esantionare, intarzierea cu 10 esantioane este cea mai apropiata de un defazaj de pi/2 radiani al purtatoarei FSK, ceea ce maximizeaza amplitudinea semnalului demodulat. Joaca-te cu valoarea delay si o sa vezi ca performantele se nasolesc.

Pentru implementare in dsPIC trebe sa aplic interpolare semn inainte de a face produsul de genul : x_mul(k)=x_lim(k)*x_lim(k-delay+1); ca in script ? Decimare ma gandesc ca nu voi avea nevoie pentru ca voi esantiona la Fs = 4 KHz pentru canal 10 ( Frecventa Fmax = 1530 Hz ). Dar va trebui sa aplic interpolare si semn inainte de a aplica produsul esantioanelor curente cu cele intarziate ?

Decimare cred ca nu, dar va trebui sa modifici delay daca folosesti alta rata de esantionare. Pe de alta parte, s-ar putea sa trebuiasca sa faci interpolare pentru ca intarzierea cu un nr intreg de esantioane s-ar putea sa pice departe de defazajul de pi/2. Tre' calculat. De ex, pi/2 la 1530Hz inseamna 163us. Daca esantionezi cu 4KHz, nu poti sa intarzii decat cu multipli de 250us, deci chiar si delay=1 ar fi prea mult. Sper ca ai prins spilul."Semn" trebuie sa aplici ca sa limitezi si sa elimini in felul asta modulatia de amplitudine parazita, care ar baga zgomot pe semnalul demodulat.Cu conversiile in excel te-ai lamurit? Ca n-ai mai zis nimic.
Link spre comentariu

Cu conversia in Excel din decimal in Q15 si invers si cu erorile de trunchiere am inteles.Acum la partea de demodulare comparand ceea ce se spune in documentul "Practical digital fsk modem"la pagina 18 unde pentru a demodula trebuie gasit valoarea lui "k" pentru care diferenta urmatoare sa aiba valoare maxima: d(k) = |cos(2*pi*F0 *k *Te) - cos(2*pi*F1*k*Te)|. Unde F0 este frecventa pentru 0 logic iar F1 frecventa pentru 1 logic iar Te este perioada de esantionare.Ori tu zici ca intarzierea trebuie sa fie k = pi/2. Eu tind sa iau in considerare felul cum ai facut adica delay = k pentru care se obtine intarzierea de pi/2 deoarece mi-ai demonstrat cu Matlab ca metoda ta cu intarzierea pi/2 este functionala.Acum ma gandesc poate pot sa scap de interpolare alegand frecventa de esantionare Fs = Fe in asa fel incat intarzierea de pi/2 s-o obtin intarziind doar un esantion adica k = 1. Mai exact: avand F0 ( frecventa pentru 0 logic 1470 Hz ) si frecventa F1 ( frecventa pentru 1 logic 1530 Hz ) automat purtatoarea este la mijloc adica Fc = 1500 Hz. Acum Tc = 1/Fc = 1/1500 Hz = sase sute saizeci si sase,66 us perioada. Intrucat pi/2 ( 90 grade ) este un sfert din perioada adica Tk = Tc/4 = 166,66 us preioada de esantionare trebuie aleasa la valoarea Tc/4 si sa respecte criteriul Nyquist ( Fs > 2 Fmax = 2 * 1530 Hz = 3060 Hz ). Fs = 1/Tk = 1000000/166,66 = 6000,24 Hz = 6000 Hz ( rotunjit ). Astfel ca valoarea lui k se poate alege k = 1 ( intarziere de un esantion ) pentru a obtine intarzierea de pi/2 dorita si fara sa apelez la interpolare. Apoi la vectorul produs obtinut din inmultirea esantioanelor curente cu esantioanele anterioare aplic functia semn ( valorile > 0 este +1, valorile < 0 este -1, valorile = 0 este 0 ). Apoi la vectorul la care am aplicat functia "semn" aplic filtrare trece jos cu frecventa de taiere la 50 Hz intrucat rata baud in cazul meu este 50 biti pe secunda.Intrebarea mea acum: este corect cum am gandit ? Acum nu stiu defazajul de pi/2 se calculeaza pentru frecventa F1 ( frecventa pentru 1 logic ) sau pentru frecventa centrala Fc ? Mai sus pi/2 am calculat pentru frecventa centrala Fc = 1500 Hz. In caz ca nu as dori o explicare amanuntiat a ceea ce inseamna interpolare si cum fac interpolarea.Pana atunci ma mai documentez despre acest lucru.

Practical digital fsk modem.pdf

Link spre comentariu

Hmmm, s-ar putea sa fie mai greu de filtrat, daca folosesti intarziere de numai un esantion pentru defazajul de pi/2. Ar trebui sa calculez si eu de manuta. Dar in esenta ceea ce fac eu este exact ce propune documentul. Nu stiu cum au ajuns ei la diferenta respectiva, dar cand am putin timp o sa calculez si eu.

 

Defazajul de pi/2 il calculezi ptr frecv centrala. Oricum, frecventele sunt foarte apropiate si vei avea erori mai mari datorate faptului ca nu poti intarzia decat cu un nr intreg de perioade de esantionare. Nu cred ca trebuie facuta chiar farmacie.

 

Interpolarea este marirea artificiala a frecventei de esantionare. Introduci esantioane acolo unde nu existau. Esenta procedeului este introducerea a n esantioane egale cu 0 intre doua esantioane deja existente, apoi filtrare trece jos. In felul asta ai crescut rata de esantionare de n+1 ori. Mai multe explicatii aici: http://en.wikipedia.org/wiki/Upsampling

Link spre comentariu

Salut *Am vazut ca pot programa cu PIC kit 2 dsPIC33FJ si nu stiu exact cum fac sa setez la DAC sigma delta in asa fel incat esantionand cu Fs = 44100 Hz la ADC sa redau tot cu Fs = 44100 Hz. Intrebare: daca ADC esantioneaza cu 44,1 KHz, DAC trebe sa scoata tot cu 44,1 KHz ? Daca e asa atunci dupa convertirea la ADC cu Fs = 44,1 KHz trebuie sa fac decimare cu 256 deoarece DAC face interpolare adica frecventa Fintern ( dupa decimare ) = Fs/256 o inmulteste cu 256 ca sa scoata tot cu Fs. Problema ar mai fi: cat trebuie sa fie ceasul pentru DAC ? De exemplu daca Fvco = 200 MHz trebe divizat pana la 44,1 KHz in asa fel incat ceasul pentru DAC sa fie Fdac = 44,1 KHz ?

Link spre comentariu

Salut,Nu e nevoie sa te legi de rata de 44.1KHz. Eu am folosit-o pe aia ptr ca asa mi-ai trimis fisierele. Dar daca lucrezi cu dsPICul, foloseste o rata convenabila si care se poate programa usor atat in ADC cat si in DAC. Daca imi amintesc bine, eu folosesc 31.25KHz in montajul meu.In general ratele de esantionare de intrare/iesire trebuie sa fie egale. Nu e obligatoriu, dar se complica daca nu sunt.Nu trebuie sa faci decimare inaintea DACului. Cresterea ratei de esantionare cu 256 este ceva intern si tine de faptul ca este realizat cu modulator sigma-delta. Tu trebuie sa ai grija sa stabilesti corect frecventa de citire din FIFO si sa alimentezi FIFOul in permanenta, ca sa nu se goleasca. Restul e automatizat. Citeste cu atentie documentul referitor la DAC. Trebuie sa recunosc ca si mie mi-a cam mancat zilele pana l-am pornit.Scrie clar in documentatie ca ceasul DACului trebuie sa fie de 256 x frecv de esantionare si sa nu depaseasca 25.6MHz. Restul e la latitudinea ta. Dar, repet, nu te crampona de 44.1KHz.

Link spre comentariu
  • 1 an mai târziu...

Coeficientii polinoamelor de la numarator(b)/numitor(a) ai transformatei Z a functiei de transfer a filtrului. Detalii aici: http://www.mathworks.com/help/signal/ref/butter.html

Daca tot nu intelegi despre ce e vorba, citeste despre filtre IIR (Infinite Impulse Response - filtre cu raspuns infinit la impuls).

Daca tot nu intelegi, trebuie sa o cam iei de la capat cu teoria transformatelor Laplace si Fourier si cu convolutia.

 

Sau mai intreaba pe-aici mai in detaliu ce nu intelegi.

Link spre comentariu
  • 2 ani mai târziu...
Vizitator MIRCAN DAN

Salutare *

 

Continuu cu acest topic dupa 4 ani de pauza.

 

Intrebare: pot sa alimentez dsPIC33FJ128GP802 cu regulatorul de tensiune versiunea AJUSTABILA de LM2575 sau LM2576 cu 3,3 V la iesire ? La Microchip pe site pare ca este posibil asa ceva. Le am pe ambele LM-uri. Am un LM1117 dar nu-l mai gasesc. O sa leg un 12V la intrare si la iesire, dupa formula Vo = 1.23 ( 1+R1/R2 ) ajustez la 3.3 V. Numai ca aceste LM-uri imi par ca scot o putere prea mare la iesire pentru un dsPIC si ce mai are pe langa el. Dar asta e, daca nu mai gasesc acel LM1117 prin casa.

 

@ Cirip

 

Ziceai undeva pe un topic ca: dsPIC33FJ desi are acele doua module ADC si DAC interne scoate un zgomot de 17 Hz, cu iesirea la DAC tinuta in zero si in acelasi timp intern ii dai sa ruleze un algoritm ? Adica peste 12 KHz frecventa de esantionare se intampla acest fenomen ? Nu prea as fi dispus acum sa dau bani pe ADC si DAC externe. Si asta in conditiile in care in datasheet se lauda cu o rata de esantionare de 500 Ksps ( pentru ADC de 12 biti ) si 1.1 Msps ( pentru ADC de 10 biti ).

 

Sa zic ca aplic interpolare adica esantionez cu 4 KHz si interpolez la 12 KHz cu un FTJ dupa introducere de zerouri intre esantioane pentru a obtine o intarziere k > 1 pentru esantioanele de la intrare ( pentru intarzierea de pi/2 ) pentru demodulare FSK.

 

Pot seta orice frecventa de esantionare la ADC ? De exemplu: 5432 Hz ? Am ales intamplator aceasta cifra. Sau sunt frecvente de esantionare standard ? De exemplu 5432 Hz se poate obtine doar prin interpolare/decimare ? sau direct din setarile de la ADC/DAC ?

Editat de MIRCAN DAN
Link spre comentariu

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări