Sari la conținut
ELFORUM - Forumul electronistilor

Variabila contor vs Timer


mircang9

Postări Recomandate

14 sau 1 totuna este pentru ca atat 1 cat si 14 sunt diferite de 0 si aceasta bucla while se executa la infinit. Orice program sau majoritatea contin aceasta bucla in interiorul careia este editat programul care poate sa aiba si mii de linii sau mai multe. while(expresie logica){ ... }.Daca puneam de exemplu while(variabila<=14){... variabila++} nu apucam sa-l vad pe osciloscopacel tact ( se termina foarte repede ) fiind bucla cu durata finita; si in plus modifica intarzierea adaugand instructiunea de incrementare variabila. :)

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

Top autori în acest subiect

  • mircang9

    22

  • 10vid

    5

  • puiu

    3

  • Liviu M

    2

Top autori în acest subiect

Imagini postate

Am facut curs de DCE dar profu ala ne inebunea cu PSF la tranzistor. iar pentru incepator ca mine era limba straina: "mase virtuale", PSF in alternativ, PSF in continuu, schema de semnal mic ( era si este cea mai ciudata pentru mine ),

Daca incercai atunci sa te prinzi atunci cum e cu psf si masele virtuale, acum nu mai aveai probleme sa intelegi ce sa astepti dupa un condensator.

while(1){    PORTDbits.RD2=1;    NOP(); // _delay(1);    PORTDbits.RD2=0;    NOP(); // _delay(1);}
Astfel am vazut pe osciloscop un tact de 2MHz stabil adica cu perioada de 500 ns. Am reusit sa fac o perioada si de 300 ns dar lungimea de 1 este mai mica decat lungimea de 0 logic
Si nu-i normal? while nu dureaza si el ceva timp? Timpul ala se adauga la nop-ul de dupa RD2=0. Cred ca de fapt asta voia sa-ti transmita si picolo, sa-l bagi si pe while in seama.
Link spre comentariu

Mersi mult Liviu ***

 

:rade:

 

Iaca nu ma prindeam de ce, ... asta e. Nu mi-am pus mintea la contributie destul. E evident ca si while(1) ia timp.

 

74  005FF6                     l11:    75                               76                           ;Em2FSKPIC18F4455.c: 46: {    77                           ;Em2FSKPIC18F4455.c: 47: PORTDbits.RD2 = 1;    78  005FF6  8495               	bsf	3989,2,c	;volatile    79  005FF8  F000               	nop		;#     80                               81                           ;Em2FSKPIC18F4455.c: 49: PORTDbits.RD2 = 0;    82  005FFA  9495               	bcf	3989,2,c	;volatile    83  005FFC  F000               	nop		;#     84  005FFE  D7FB               	goto	l11

Codul de mai sus este extras din fisierul lst.

BSF ia un ciclu ( 83.33ns ) // 48 MHz/4 = 12MHz => Tcy = 83.33ns

// + Port Output Rise Time = 25ns maxim

[83.33nsNOP+83.33nsBCF+(100nsTRISTATE?)+15nsTioF] = 181.66ns

181.66ns - durata la 1 ( fara delay TRISTATE )

NOP ia un ciclu ( 83.33ns )

BCF ia un ciclu ( 83.33ns )

// + Port Output Fall Time = 25ns maxim

[83.33nsNOP+166.66nsGOTO+83.33nsBSF+(100nsTRISTATE?)+15nsTioR] = 348.32ns

348.32ns - durata la 0 ( fara delay TRISTATE )

NOP ia un ciclu ( 83.33ns )

GOTO ia doua cicluri ( 166.66ns )

 

Cat despre DCE, mi-am descarcat aseara o versiune de evaluare pentru simulare circuite analogice

de la National Instruments: NI Multisim Component Evaluator 11.0.2. E tare fain.

Mult mai bun decat Orcad 9, cred.

 

:dans:

Link spre comentariu

O alta chestie. Postez fisierul pentru emitator FSK. Am eliminat tabelul "lookup-table"si variabila index pentru "lookup table" pentru a elimina din instructiunile de "salt"la memorie si de incrementare pentru a face programul mai rapid, desi am umplut aproape toata memoria. Am vazut ca _delay(x) nu baga nop()-uriin fisierul lst ( ceea ce ma asteptam sa fie asa ). In functie de pinul de intrare RA3daca e 0/1 se emit cele doua frecvente F1/F2 ( sinusoide ). Temporizarile le-am facut cuNOP()-uri. Deocamdata n-am setat numarul de temporizari ( nr NOP-uri pt cele doua frecvente ).In prima bucla while pentru intrarea RA3 in 0 numarul de temporizari la scrierea fiecarui esantion va fi egal. La fel si la 1 la RA3. La PORTD am scris valori zecimale pentru ca indiferent ca scriu valori hexa in fisierul lst pune tot valoarea in zecimal. Este pentru 60 esantioane.Apare o mica eroare de +/- 1ms ( in functie de frecventa centrala Fc a postului si de frecventa de esantionare sau numarul de esantioane transmise pentru o perioada )la refacerea semnalului digital la partea de receptiecred datorita faptului ca pentru 0/1 la RA3 transmit o perioada intreaga din sinusoida in ideea de a obtine o stabilitate cat maibuna a frecventelor emise. La fiecare perioada transmisa apare o intarziere diferitacauzata de instructiunea "while(pinintrare==x)" in comparatie cu temporizarea data de numarul de NOP()-uri intre esantioane din bucla while respectiva.Am pus 60 esantioane pentru ca sinusoida sa fie cat mai continua. Am pus NOP()-uri pentru ca sa pot face un reglaj cat mai fin al frecventelor.Am redus utilizarea memoriei de date ( a RAM-ului ) si am marit utilizarea cat mai la maxim a memoriei de program pentru in ideea de a face executia programului cat mai rapida. Acum nu stiu ( n-am pus inca si tranzistorul amplificator )daca tranzistorul amplificator de la iesirea retelei R-2R face mai continua sinusoida ( mai elimina din trepte ) daca o sa fiu nevoit sa lucrez cu mai putin de 60 esantioanepe perioada.Programul puteam sa-l fac in cateva linii dar am apelat la aceasta metodain ideea de a mari viteza si stabilitatea.Atasez fisierul: pentru care compilatorului i-a luat un minut !!! ca sa compileze. Astept idei sau pareri. :dans:

Link spre comentariu
  • 6 luni mai târziu...

Ce-ai mai facut la modulatoarele astea?Eu tot n-am inteles un lucru: toate semnalele le transmiti din acelasi loc? Adica se merita scrierea unui soft de procesare a mai multor semnale cu un 18F, sau daca sunt in locatii diferite, trebuie folosit cate un 16F pentru fiecare semnal?Dar sunt curios daca ai rezolvat deja.

Link spre comentariu

Am mers pe XR2206 circuit specializat de modulare FSK, dar ca pret este undeva pe la 20 RON din cate imi amintesc. Am luat doua XR2206. Mergea si cu retea R-2R de rezistente dar n-am mai continuat sa periez metoda de generare FSK cu PIC.XR2206 scoate destul de bine modularea FSK. Este un circuit simplu. Cat despre demodulatorul FSK XR2211 nu am laude pentru ca VCO nu este stabilpentru o banda restransa de doar 60 Hz intre frecventa F0 pentru bitul 0 sifrecventa F1 pentru bitul 1. XR2211 este functionabil pentru latimi de banda de ordinul sutelor sau miilor de hertzi.Pentru demodulare am folosit masurarea perioadelor. Semnalul sinusoidal care iese din filtru de receptie l-am dreptunghiularizat cu un comparator LM339 si l-am adus la 5V amplitudine la intrare digitala in PIC. N-am folosit timer ci variabila contor ( numarator in soft ).Este functionabila treaba la latime de banda de 60 Hz cat imi trebuie.Doar ca trebe sa lucreze la 20 MHz si ca ca sa maresc stabilitatea nu masor doar semiperioada ci perioada pentru ca astfel variabila contor pentru 1/F0 si 1/F1 are valori mai indepartate una fata de cealalta si astfel discriminarea in frecventa este maiclara.Se poate face si cu inmultirea esantioanelor intarziate cu cele curente si filtrare trece jos dar inca nu mi-a iesit desi am incercat. Domeniul de frecvente este in domeniulvocal: 400 Hz - 2800 Hz.Fiecare XR2206 emite de la posturi diferite.

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