Salut,

On 9/26/07, Dragos Popescu <[EMAIL PROTECTED]> wrote:
> Am un sistem embedded cu un linux pe el, cu kernel 2.4.21 şi procesor
> StrongARM-1110. La sistemul ăsta am conectate nişte plăci de achiziţie
> analog/digitale cu care încerc să măsor nişte tensiuni şi curenţi de la
> reţea (50Hz adicătelea).
> Trebuie să iau 32 de eşantioane pe fiecare alternanţă (la fiecare 625
> microsecunde), după care fac eu p'acolo FFT-uri, nebunii, alea, alea.
>
> Pentru prelevarea eşantioanelor am setat un timer aşa cum se vede în
> progrămelul de mai jos (scuze de lungimea postului), numai că
> rezultatul e dezastruos: dacă măsor o tensiune costantă, rezultatul
> întors e corect cu o precizie mai mult decât mulţumitoare, dacă măsor o
> tensiune alternativă, am pus-o! Şi asta din cauza timer-ului care numai
> la 625us nu bate şi când aplic prelucrările numerice asupra
> eşantioanelor, iese o poezie!
> Nu se pune problema vitezei de eşantionare a plăcilor de achiziţie, alea
> merg lejer la 200k măsurători/sec.
> Cum aş putea rezolva cât de cât problema asta cu timerul?
> Am încercat "nice" da' linuxul de la sistemul ăsta n-a auzit de aşa
> ceva.

iirc RTC-ul (daca ai asa ceva pe placa aia) merge pina la 8khz. Ce-ti
trebuie tie e 1/0.000625 = 1600 Hz. Teoretic programezi rtc-ul sa
genereze 1600 ints/sec (man rtc) si citesti din /dev/rtc.
Daca nu ai asa ceva fa un device care genereaza intreruperi si e
programabil + driver in kernel. Chiar daca recompilezi kernel-ul la
1kHz nu cred ca rezolvi pentru ca iti trebuie mai mult.

Alta solutie (brutala) ar fi busyloop.

> --
> Dragos P
> 126296 luser
> "La revedere. Drum bun"
>
> _______________________________________________
> RLUG mailing list
> RLUG@lists.lug.ro
> http://lists.lug.ro/mailman/listinfo/rlug
>
_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Reply via email to