-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Systemzeit in Gcc abfragen, ist das möglich ??

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1

    Systemzeit in Gcc abfragen, ist das möglich ??

    Anzeige

    Ich muss mal wieder fragen

    und hoffe, es kan mir wer helfen, bzw. einen Hinweis zu geben.

    Ich möchte in einer AVR Anwendung eine Systemzeit setzen und diese auch wieder abfragen können. Es genügen 0..24Stunden 0..60 Minuten 0...60Sekunden eventuell auch noch .

    Es geht mir da nicht so um genaue Zeit..wenn da mal etwas Unterschied ist ist es nicht so schlimm, doch sollte aus einer Sekunde keine Minute werden ;=)

    Gibt das dafür in GCC Routinen/Variablen ? und mit welchen AVR ist es möglich, ich denke das der Chip einen RTC innen haben muss...?

    Würde gerne einen ATTiny2313 o.ä. einsetze,n also mit 20 Bein'chen solch Käferle..

    Danke schon mal für die eventuelle Info, auch für ein Anschauungsbeispiel(Link) vielleicht, wäre ich dann doppelt dankbar...

    Gruss

    Gerhard

    P.S. Es soll ohne einen extra RTC Chip bzw. Funkuhrmodul laufen.
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    ... AVR Anwendung ... Systemzeit setzen und ... abfragen ... ohne einen extra RTC ...
    Wenns sonst nix ist! DAS ist easy.

    Ich habe eine 50µs-ISR, das ist bei mir ein Mehrfach-Timer, der mir die Boardzeit macht und einen heartbeat (LED-1sec-toggel) und so, dazu einen Sekundenzähler, der erst nach rund neun Stunden überläuft. Wer längere Laufzeiten hat, müsste halt nen Stundenzähler dazu definieren, dann ginge das über Jahre . . . . Abweichung je nach Quarzkonstanz ein paar Sekunden im Monat.

    Als Skizze für eine headerdatei:
    Code:
    // ============================================================================== =
    //      Zeiten, insbes. Zeitmessung
    // ============================================================================== =
      volatile s16 Izeit_1;         // Wertbereich int16: 32.767. uint16: 65.535
    //  Timer läuft hoch. Die Interruptroutine läuft mit 20 kHz
      volatile s16 Izthrznt;        // Der zeitliche Horizont, z.B. 20000 für 2 sec
      volatile s16 Isecundn;        // Sekunden Programmlaufzeit, 32.767 sec sind
                                    // 546,117 Minuten bzw. 9 Std
    // ============================================================================== =
    //=============================================================================== =
    //      Modul R5M_tmrij.c           Routinen:       Timerroutinen
    // ============================================================================== =
      void TC2TMR_init(void);       // Init Tmr/Cntr 2, 8-Bit auf 20 kHz = 50 µs
      void TC2_stop(void);          // Stoppe Tmr/Cntr 2
      ISR(TIMER2_COMPA_vect);       // Routine zählt hoch im Takt 20 kHz = 50 µs
    // ============================================================================== =
    
    // ...
     #define ToggleBit(ADDR,BIT)    ((ADDR)  ^=  (1<<(BIT)))        // Toogelt Bit
    Und dazu der eigentliche Timer:

    Code:
    // ============================================================================== =
    // ===  Initialisierung fuer Timer2 mega168/328
     void TC2TMR_init(void)         // Init Tmr/Cntr 2, 8-Bit auf 20 kHz = 50 µs
     {                         //
      TCCR2A |= (1<<WGM21);         // Timer im CTC-Mode, Top=OCR2A   doc S 157
      TCCR2B |= (1<<CS21);          // Prescaler 1/8 / Clock <- CPU   doc S 158
      OCR2A = 124;                  // Preset 124 für 50µs bei 20Mhz  
      TIMSK2 |= (1<<OCIE2A);        // Tmr/Cntr2 CompareA interrupt enabled
                                    // ##>>>  Izeit_1 wird im main initialisiert
     }              //
    // ============================================================================== =
    // ============================================================================== =
    // ===  Stoppen Timer2 mega168
    void TC2_stop(void)             // Stoppe Tmr/Cntr 2
    {                               //
        TCCR2A &= ~(1<<WGM21);      // Timer WGM21 resetten
        TIMSK2 &= ~(1<<OCIE2A);     // Tmr/Cntr2 CompA interrupt DIS abled
    }                               //
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  Nicht unterbrechbare ISR für timer2 ==================================== */
    // Routine zählt hoch im Takt 20 kHz = 50 µs.
     ISR(TIMER2_COMPA_vect)         // Vektor 7
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     {                              //
      Izeit_1 --;           //  ###>>> Izeit_1 ist aktuell int16_t ==>>
                            //  Izeit_1 bleibt bis 32000 in der int16-Grenze
      if ( Izeit_1 )        // Interrupt-Timer = 1 ... 20 000 ... (1 sec blink)
        {  }    // WENN Izeit_1 =|= Null => Ausdruck ist wahr => Anweisung ausgeführen
      else                  // Eine Sekunde ist voll =>
      {                     //
        Izeit_1 = Izthrznt; // ansonsten: Rückstellen auf Zeithorizont
        ToggleBit (PORTB, L1g);    // gnLED auf Pin PB3 toggeln
        Isecundn ++;                // Sekundenzähler hochtackern, max 9 Std
      }             // Ende if (Izeit_1 )
    // - - - - - - - - - - - - - - - -
      return;
     }       // Ende ISR(TIMER2_COMPA_vect)
    // ============================================================================== =
    Der "TC2_stop" ist ja im Prinzip für eine Boardzeit nicht sinnvoll, den habe ich für sonstige Anwendungen, die hier nicht interessieren.

    Ist es das, was Du suchst ?
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke JoeamBerg !!

    Ich glaube das es das ist was ich suche..."glaube" darum , weil ein solches projekt noch nie bewust angegangen bin. Erst dachte ich mit _wait_ms(xx) arbeiten zu können , aber das legt ja meine ganze Überwachungs(Main-)Routine lahm für die Wartezeit.
    Danke Dir auch für die Codeabschnitte, da kann ich mal lesen und hoffe dann auch besser zu verstehen... .
    Ich brauche ein wenig Zeitgefühl in der Anwendung, grob gesagt könnte ich Tag Nacht per Helligkeit unterscheiden, aber das möchte ich ungerne nutzen. Der Wetterdienst hat für hier Regen angesagt, also AVR Zeit und nicht im garten rum ackern angesagt....da werde ich probieren..

    Gruss & Danke

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    ... Ich glaube das es das ist was ich Suche ... für hier Regen angesagt ...
    War ja gut, wenns Dir hilft. Eine Sache hatte ich nicht dokumentiert, die Variablendefinition:

    typedef unsigned short u16;
    typedef signed short s16;

    gehört natürlich auch in den Header. Hatte ich vergessen, weils bei mir eine allgemeine Bibliothek ist. Sorry.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Danke für den superschnellen Nachtrag...

    Nachtrag:
    Habe auf Microcontroller.net ein gutes Beispiel gefunden und hoffe das ich es auf meine q-freq. umstricken kann, befasse mich aber trotzdem mit den Timern vom Chip und deren Anwendung, denn das ist bislang noch, ein von mir unbetretendes Feld bei der Programmierung

    Gruss und Danke

    Gerhard
    Geändert von oderlachs (15.10.2013 um 20:37 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    29
    Beiträge
    1.221
    Zitat Zitat von oberallgeier Beitrag anzeigen
    War ja gut, wenns Dir hilft. Eine Sache hatte ich nicht dokumentiert, die Variablendefinition:

    typedef unsigned short u16;
    typedef signed short s16;

    gehört natürlich auch in den Header. Hatte ich vergessen, weils bei mir eine allgemeine Bibliothek ist. Sorry.
    Evtl. möchtest du dir Mal int16_t, uint16_t und ihre großen/kleinen Geschwister aus stdint.h ansehen. Das ist seit C99 der Weg um plattformunabhängig(er) mit Variablen einer bestimmten Mindestbreite zu arbeiten.

    @Gerhard: So ist das mit den kleinen µCs. Alles muss man selbst machen. Typischerweise lässt man einen Timer mit 10..1000Hz laufen, zählt im Interrupt die Zeit hoch und kann gleich noch Dinge erledigen die ein exaktes Timing erfordern.

    mfG,
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von markusj Beitrag anzeigen
    Evtl. möchtest du dir Mal int16_t, uint16_t und ihre großen/kleinen Geschwister aus stdint.h ansehen...
    Netter Hinweis, aber danke, die kenne ich. Und plattformunabhängig bin ich auch, da gibts nämlich Möglichkeiten . . . mit denen man formgerecht auch mal etwas mit weniger als sechs, sieben Buchstaben hinkriegt *ggg*.
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von oberallgeier Beitrag anzeigen
    Und plattformunabhängig bin ich auch
    Mit dem oben gezeigten aber nicht.


    Zitat Zitat von oberallgeier Beitrag anzeigen
    auch mal etwas mit weniger als sechs, sieben Buchstaben
    Niemand sagt, dass du auf dein u16/s16 verzichten sollst. Aber wenn du es so schreibst
    Code:
    typedef uint16_t u16;
    typedef int16_t  s16;
    müssen deine Typ-Definitionen bei anderen Plattformen nicht erst hinterfragt und ggf. angepasst werden.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    Zitat Zitat von sternst Beitrag anzeigen
    Mit dem oben gezeigten aber nicht ... Aber wenn du es so schreibst ...
    Stefan, danke! Da dachte ich, ich hätte die typedef int aus der Library Reference von der AVR Libc Home Page verstanden - und nu gehöre ich doch zu den 60% Pisa-Erwachsenen, die Leseprobleme haben (eher Verständnisprobleme).

    Hab gerade meine Zentralbibliothek geändert !
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    67
    Beiträge
    1.118
    Blog-Einträge
    1
    Ganz habe ich das mit den Timern noch nicht geschnallt, die Art und Weise schon verstanden nur nicht wie ich da zum konkreten Ergebis einer bestimmten Zeit komme, also die Konfiguration der Timerwerte, Vorteiler bei bestimmter FQu. (3.686400Hz oder 16.000000Hz zBsp).

    Na ja habe zwar jetzt ein funzenden ASM Beispiel, aber da muss ich erst mich wieder durchdenken was genau die SourceCode da macht...
    Es wird aber...
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Video: Wie ist das möglich ?
    Von hunni im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 19.05.2012, 14:45
  2. Asuro mit Antenne. Ist das möglich???
    Von Sim Robot im Forum Asuro
    Antworten: 14
    Letzter Beitrag: 10.03.2008, 20:25
  3. Bilddaten von Kamera speichern, ist das möglich?
    Von Edi im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 13.10.2006, 20:38
  4. 16% wirkungsgrad?ist das möglich?
    Von geisti im Forum Motoren
    Antworten: 5
    Letzter Beitrag: 29.09.2005, 16:33
  5. Ist das zuprogrammieren möglich ???
    Von Skull im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 21.08.2004, 13:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •