Hallo zusammen, ich möchte gerne ein Eingangssignal auf einem uC oder auch normalen Linux integrieren. Geht dies wenn ich keine "Zeitinformation" habe, die mir die Zeit nach letztem Aufruf gibt? Oder gibt es hier möglichkeiten dies herauszubekommen? Beispiel wäre Eingangssignal = dezimal 5 ergibt nach einer Sekunde dann 5, nach zwei 10 usw... Summieren kann ich, aber wie bekomme ich den Wert pro Zeiteinheit? Vielen Dank, Peter
In jedem System gibt es eine "Uhr" Bei Linux kannst sie mit time() aufrufen. Bei einem µC rufst du den Timer periodisch auf und speicherst die "Ticks" ab. Dann kannst du den wert durch die Zeit teilen.
Hallo, danke für die rasche Antwort, aber time() unter Linux gibt ja die zeit in Sekunden an, soweit ich weiss= damit dürfte ich keine chance haben, die Zeit zwischen zwei Aufrufen des Integrators zu ermitteln, oder? Gruss, Peter
Es gibt noch sowas wie microtime(). Da musst du nachsehen. Da sollte aber ein Highprecitiontimer laufen oder richtiges Realzeitbetriebsystem bzw. eine entsprechende Erweiterung. Weil sonst kannst du dir nicht sicher sein, dass auch zu jeder Sekunde der IRQ kommt sondern z.B. jede 1.1Sekunden und dann wieder 0.9. Das nur als Beispiel.
http://www.digipedia.pl/man/microtime.9.html aus <sys/time.h>
1 | void getmicrotime(struct timeval *tv); |
2 | void getnanotime(struct timespec *tsp); |
Super, Danke! bin dann auch auf dieses gestossen: struct timespec time1, time2; clock_gettime( CLOCK_REALTIME, &time1 ); //Com_Init(); usleep(1000); clock_gettime( CLOCK_REALTIME, &time2 ); printf( " A: time1: %d time2: %d, diff_sec: %d\n", time1.tv_sec, time2.tv_sec, time2.tv_sec-time1.tv_sec ); printf( " A: time1: %d time2: %d, diff_nsec: %d\n", time1.tv_nsec, time2.tv_nsec, time2.tv_nsec-time1.tv_nsec );
Zuviel Rechenzeit ? Was spricht dagegen in einem Timertask (interrupt) zu addieren ? IntegratorWert:=IntegratorWert + ADCWert;
Das dürfte aber nur auf einem uC ordentlich und nicht unter Linux funktionieren, oder?
Linux hat eine höhere Abstraktionsebene und genaue Ticks bekommst du durch Overhead des Schedulers nicht gescheit, ausser mit einer Realzeiterweiterung, und das nur annähernd.
Naja. Indem man irregulaer distant gesampelte Werte integriert macht man's besser als gar nicht. Falls man zur Ermittlung des Intervalls allerdings Zeiten subtrahiert, verplempert man viel Rechenzeit. Ein Murks. Jeder ATTiny macht das besser.
Das stimmt mit dem µC, besonders wenns um Genauigkeit geht. Aber Peter wollte wissen, wie man unter Linux die Zeit abfrägt :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.