Posted By: hajoucha (hajoucha) on 'CZhardware'
Title: casova znacka po hw triggeru
Date: Thu Nov 5 18:16:10 2009
Ahojda,
resim nasledujici problem: merak meri napeti po dobu jednoho cyklu v zasuvce,
nasledne posle trigger, ze uz je hotov (srq po gpib) a ja z neho prectu data.
Samotne cteni dat probehne vcelku rychle, ale nastava urcita promenliva
prodleva mezi okamzikem, kdy merak (mimochodem je to keithley 2182
nanovoltmeter) vysle srq a kdy ja z neho zacnu cist. Potazmo, kdy v pc mrknu
na hodinky volanim funkce clock_gettime().
Pritom ten merak umi vyslat i hw trigger (ma na to vzadu konektor). Tak me
napadlo, jestli by neslo v beznem pc nebo i po dodani nejake relativne levne
soucastky (par stovek) zjistit presny cas hned pote, co by prisel hw trigger.
Je treba si uvedomit, ze se tu bavime o casech nekolika milisekund. Coz je
zpozdeni mezi tim, co merak rekne "mam hotovo" a okamzikem, kdy ja reknu "tak
toto jsou ta data a je tolik a tolik hodin".
Samozrejme zvazuji i real-time patch pro jadro, ale v zasade by mi stacilo
ziskat presnou casovou znacku a tu si pak precist klidne o chvili pozdeji.
Pritom tato chvile by nemela presahnout rekneme 300ms (tj. do okamziku
dalsiho mereni... aby se mi ty znacky nehromadily).
prislusny kus C kodu vypada takhle:
ibwrt(K2182nUd,":data:fresh?",12);
clock_gettime(CLOCK_REALTIME, &Time_now);
ibrd(K2182nUd,buffer,MAX_KEITHLEY_REPLY_LEN);
buffer[15]=' printf("%ld.%09ld %sn",Time_now.tv_sec,Time_now.tv_nsec,buffer);
jde mi o to, ze prvni tri radky mohou obecne probihat ruzny pocet milisekund,
aniz by to byla chyba toho meraku. Ten naopak ta data nabere vzdy stejne
rychle.
Diky predem za tipy a triky.
Zdravi michal (toho casu bez nanosekundy)