Millisekunden messen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute!
    Gleich die nächste Frage an's Team, bevor ich noch den Verstand verliere :P
    Ich nutze zur Steuerung eines (noch fiktiven) vom RaspPi gesteuerten Fahrzeugs einen Lage&Drehsensor der Marke MPU6050. Damit kann unter anderem die Drehgeschwindigkeit in grad/sekunde angezeigt werden. Mein kleines Problem:
    Damit ich mittels Integration über die Zeit die Daten der Drehgeschwindigkeit zur Änderung meines Lagevektors nutzen kann, brauche ich ein gemessenes Zeitintervall. Also in etwa so.

    Pseudocode:

    time_letzte_messung = now();

    schleife
    {
    [irgendetwas...Steuerung und so]

    time_messung_jetzt= now();
    diff = time_messung_jetzt - time_letzte_messung;

    deg_x = grad_pro_sekunde(device);
    vektor_x = vektor_x + (deg_x * diff);
      
    time_letzte_messung = time_messung_jetzt;

    [...]
    }


    Im Internet (Father-google) findet man jede Menge *****, was aber auf dem Rasp bisher alles nicht funktioniert. Gut vll bin ich auch zu doof, aber die "normalen" Funktionen liefern ja alle nur Sekundengenaue Ergebnisse und meine Schleife läuft eher so im Millisekundenbereich, das sollte also schon drinn sein. Gibt es eine einfache Lösung in c (ich habe clock() mit CLOCKS_PER_SEC gegooglet, aber das klappt irgendwie nicht...
    OOODER: gibt es in wiringPi vll eine einfache Alternative dazu?

    Please help :)

    -Lego

    Einmal editiert, zuletzt von lego2minecraft (7. November 2013 um 21:00)

  • Na dann versuch mal clock_gettime().


    // EDIT:
    Und ja, wiringPi hat da auch was:

    Zitat
    • unsigned int millis (void)

    This returns a number representing the number of milliseconds
    since your program called one of the wiringPiSetup functions.
    It returns an unsigned 32-bit number which wraps after 49 days.

    cu,
    -ds-

  • Das mit der wiringPi Funktion habe ich schon gesehen, aber die bezieht sich ja lediglich auf den Zeitpunkt seid dem Aufruf der letzten wiringPi funktion.... da ich nicht weiß, ob ich zwischen zwei auslesevorgängen evt mal eine funktion aufrufe, kann es doch da zu Fehlern kommen, oder?


  • Na dann versuch mal clock_gettime().

    wie ?

    uart_s_e.c:(.text+0xc44): undefined reference to `clock_gettime'

    ich habe noch kein make file und soll eine LIB zulinken.....:helpnew:

    You also need to add the librt library to the linker
    Using a Geany makefile, add this:
    -lrt

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. November 2013 um 12:06)


  • Moin,

    so ganz versteh' ich es jetzt nicht, aber der Compiler-Aufruf würde dann etwa so

    Code
    gcc -o prog prog.c -lrt


    aussehen.

    cu,
    -ds-

    geany ist eine "IDE" shell, irgendwie hat es noch kein makefile und so weiss ich nicht wie makefile erzeugen und zulinken

    von der cmd oberfläche mache ich das ja seit Jahren nicht mehr und möchte damit bei C ehrlich nicht am wheezy anfangen, selbst Atmel hat mit Studio eine schöne IDE und geany macht echt Spass.

    Ich dachte auch andere nutzen geany

    können ja nicht alle Tastaturquäler sein :blush:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo jar,

    Geany-->Kommandos zum Erstellen

    Dort kannst Du das gcc Kommando wie von DS geschrieben eintragen. Ein Makefile ist nicht unbedingt erforderlich.

    Gruß, mmi

  • danke aber irgendwas fehlt:


    uart_s_e.c:98:4: warning: implicit declaration of function \u2018bcm2835_delayMicroseconds\u2019 [-Wimplicit-function-declaration]


    nach include:

    uart_s_e.c:16:21: fatal error: bcm2835.h: No such file or directory


    dann versucht:

    http://www.airspayce.com/mikem/bcm2835/


    Installation


    This library consists of a single non-shared library and header file, which will be installed in the usual places by make install

    # download the latest version of the library, say bcm2835-1.xx.tar.gz, then:

    tar zxvf bcm2835-1.xx.tar.gz

    cd bcm2835-1.xx

    ./configure

    make

    sudo make check

    sudo make install


    und nun:

    uart_s_e.c: (.text+0x1148): undefined reference to `bcm2835_delayMicroseconds'


    bin frustriert.....


    ich will doch nur eine milli sekunde delayen .....


    also mit

    [quote pid='47550' dateline='1385648837']
    mmiGeany-->Kommandos zum Erstellen
    Gruß, mmi

    [/quote]


    meintest du ? set build commands ?


    also das #include hat schon mal funktioniert:

    #include <bcm2835.h> gibt KEINE Fehlermeldung


    aber immer noch nicht zu gelinkt:

    uart_s_e.c:(.text+0x1148): undefined reference to `bcm2835_delayMicroseconds'


    vielleicht klappts ja jetzt.....

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. November 2013 um 16:09)

  • ha gefunden:
    O_NDELAY fehlte

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. November 2013 um 16:41)

  • wiringPI muss als root laufen ?


    ein Programm kann nicht ohne root GPIO Ausgaben über wiring PI machen ?


    ohne wiringPI gelöst :lol:

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (28. November 2013 um 18:40)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!