[ yt1nvs @ 13.02.2010. 22:13 ] @
Pozdrav,
Radim neka merenja vezana za agregat znaci napon struja radni sati itd.Izmedju ostalog meri se i frekfencija generatora.Moj problem je kako najlakse izmeriti tu vrednost sa malo tacnijim rezultatom npr 49.5Hz ili 50.1Hz.Hocu da kazem sa naredbom COUNT ja to merim ali je rezultat npr. 49 ili 50Hz.Da li neko ima neko bollje resenje.
[ Sepa011 @ 13.02.2010. 22:34 ] @
Ne mogu mnogo da ti pomognem kada je PBP u pitanju ali kod Proton+ to izgleda ovako:

Code:
Syntax

Variable = COUNTER Pin , Period
 
Overview

Count the number of pulses that appear on pin during period, and store the result in variable.

Operators
Variable - a user-defined variable.
Pin - a Port.Pin constant declaration i.e. PORTA.0.
Period - a constant, variable, or expression.
Example

 ' Count the pulses that occur on PORTA.0 within a 100ms period and displays the results.
 DIM WRD as WORD          ' Declare a word size variable
 SYMBOL Pin = PORTA.0     ' Assign the input pin to PORTA.0
 CLS
Loop:
 WRD = COUNTER Pin , 100  ' Variable WRD now contains the Count
 CURSOR 1 , 1
 PRINT DEC WRD , " "      ' Display the decimal result on the LCD
 GOTO Loop                ' Do it indefinitely
Notes

The resolution of period is in milliseconds (ms). It obtains its scaling from the oscillator declaration, Declare XTAL.  
Counter checks the state of the pin in a concise loop, and counts the rising edge of a transition (low to high). 
 
With a 4MHz oscillator, the pin is checked every 20us, and every 4us with a 20MHz oscillator. 
From this we can determine that the highest frequency of pulses that may be counted is: - 
25KHz using a 4MHz oscillator. 
125KHz using a 20MHz oscillator. 



Uz sve ovo, monitorisanje odradis tako sto na ulazu upotrebis grec umesto jedne diode, tada imas signal od 100 Hz. Malko matematike, produzeno vreme merenja, usrednjavanje sa metodom FIFO,...

[Ovu poruku je menjao Sepa011 dana 13.02.2010. u 23:48 GMT+1]
[ rsinisa @ 13.02.2010. 23:02 ] @
Ne možeš to da radiš sa naredom COUNT pošto ona služi da za FIKSNI period meri broj impulsa, a tebi treba obrnuto, da za fiksni broj impulsa meriš period. U prevodu, meriš trajanje jedne periode. Treba da upotrebiš naredbu PULSIN, ali ne možeš samo jednu jer ona meri trajanje jednog stanja, pozitivnog ili negativnog (poluperiodu). Da budem precizniji, možeš da meriš trajanje samo jednog stanja ako ti je njihov odnos 1, odnosno ako je 50%/50%, u protivnom moraš da upotrebiš dve, jednu koja će da meri pozitivan, i drugu koja će da meri negativan impuls i uz malo matematike pretvoriš to u frekvencu. Tebi za jednu decimalu treba rezolucija od oko 40 µs što zadovoljava osc. od 4 MHz jer tada PULSIN ima rezoluciju 10 µs.

Pozdrav.
Sinisha
[ yt1nvs @ 13.02.2010. 23:44 ] @
Da,probacu sa PULSIN odlicno!!!

@Sepa011 hvala za ovu PROTON varijantu!
[ Sepa011 @ 14.02.2010. 00:09 ] @
Nema na sta fala, to ti je iz Help-a

A i Sinisina varijanta ti sasvim lepo moze da posluzi, samo mora da se poigrac sa registrima i interaptom.
[ rsinisa @ 14.02.2010. 00:15 ] @
Nema tu interapta, naprotiv, ako je uključen interapt biće netačno merenje.

Pozdrav.
Sinisha
[ veselinovic @ 14.02.2010. 08:17 ] @
Citat:
Sepa011

A i Sinisina varijanta ti sasvim lepo moze da posluzi, samo mora da se poigrac sa registrima i interaptom.


Scepo, ne pazis na casu.
Sinisa ne voli interapte i to daje car njegovim programima.
U principu interapt koristis kad ne znas kad ce se nesto desiti, a u ovom primjeru je izvjesno da poslije negativne ide poitivna poluperioda i tako u krug.
[ Sepa011 @ 14.02.2010. 09:04 ] @
Jes, Jovancho, u pravu si, sitni sati nekad malo pomute razmisljanje
[ rsinisa @ 14.02.2010. 15:25 ] @
Jes, Jovane, u pravu si, baš sam štedljiv kad su u pitanju interapti :). Ovde se ionako radi o PBP naredbi koja je takva da ne radi sa interaptom već meri trajanje jednog logičkog nivoa u petlji, ali čisto reda radi da razjasnim da dve uzastopne naredbe od kojih prva meri trajanje niskog, a druga viskog nivoa u stvari ne mere dva susedna nivoa.
Evo o čemu se radi: recimo da prva PULSIN naredba meri trajanje visokog log. nivoa, a ona, da bi merenje bilo precizno, mora prvo da sačeka da stanje bude nisko kako bi sačekala rastuću ivicu, i tek tada kreće merenje koje će da traje sve do pojave opadajuće ivice. Sada dolazi red na drugu naredbu koja će da meri trajanje niskog nivoa, ali da bi merenje bilo precizno ona mora da sačeka da se pojavi visok nivo, a kako je već nastupio nizak nivo, ona će morati da sačeka još jedan "krug" tako da će da izmeri trajane sledećeg niskog nivoa. Sreća pa u ovoj situaciji to nije bitno jer promene nisu česte i velike pa sam zato i predložio ovakvo rešenje. U protivnom bi to trebalo da se uradi na neki drugi način.

Pozdrav.
Sinisha
[ veselinovic @ 14.02.2010. 17:42 ] @
Hehehe,
i ja zbog PBP-a nisam volio interapte. Skoro uvijek ima neko drugo rjesenje.
A PBP je bas zgodan za interapte.
[ yt1nvs @ 14.02.2010. 18:37 ] @
Odradjeno sa PULSIN

'f = 1000ms / traj.periode (ms) == 500ms / traj.poluperiode (ms)
'f = 500 000uS / (izmereno sa PULSIN * 10) == 50 000 / izmereno sa PULSIN

' NAPOMENA: (izmereno sa PULSIN * 10) rezolucija merenja na 4MHz je 10uS


pulsin fq,1,polper
a = 50000 / polper
b = 50000 // polper
lcdout $FE,$C0,dec a,".",dec b dig 2,"Hz" 'rezultat u drugom redu LCD


Simulacija u PROTEUSU daje OK rezultat1