mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Integrator, zeitdiskret


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.digipedia.pl/man/microtime.9.html

aus <sys/time.h>
void getmicrotime(struct timeval *tv);
void getnanotime(struct timespec *tsp); 

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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  );

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zuviel Rechenzeit ? Was spricht dagegen in einem Timertask (interrupt) 
zu addieren ?

IntegratorWert:=IntegratorWert + ADCWert;

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte aber nur auf einem uC ordentlich und nicht unter Linux 
funktionieren, oder?

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Linux hat sicher auch einen Tick.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das stimmt mit dem µC, besonders wenns um Genauigkeit geht.
Aber Peter wollte wissen, wie man unter Linux die Zeit abfrägt :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.