- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

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

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Anzeige

    E-Bike
    Zitat Zitat von oderlachs Beitrag anzeigen
    ... das mit den Timern noch nicht geschnallt ... nicht wie ich da zum konkreten Ergebis ...
    Zitat Zitat von oderlachs Beitrag anzeigen
    ... Habe auf Microcontroller.net ein gutes Beispiel gefunden und hoffe das ich ...
    Hmmm, da kann ich jetzt nicht weiterhelfen, weil ich Dein microcontroller.net-Beispiel nicht kenne.
    Ciao sagt der JoeamBerg

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    Hi,
    ...doch sollte aus einer Sekunde keine Minute werden ;=)
    pro Tag, Woche oder Jahr ??? Mit Standardquarz bist Du ganz schnell in dem Bereich von einigen 10 Sekunden / Tag
    mfg
    Achim

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von oderlachs Beitrag anzeigen
    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).
    Eigentlich ist das gar nicht so schwer:
    • Du hast deinen Systemtakt mit X Mhz (F_CPU).
    • Würdest du damit direkt deinen Zähler betreiben, würde der irrsinnig schnell laufen. Die messbare Zeit wäre also sehr kurz. Daher teilt man den Systemtakt bei Bedarf noch (Prescaler).
    • Dein Zähler zählt mit einer bestimmten Frequenz F_CPU/Prescaler. Je nach Timer kann der Zähler maximal 2^8 (256), 2^10 (1024) oder 2^16 (65536) verschiedene Zustände annehmen.
    • Relevant für dich ist das Auftreten des Interrupts. Der wird bei erreichen eines bestimmten Wertes (konfigurierbar über sogenannte Output Compare Units oder fest bei Zählerüberlauf)
    • Implizit stellt der Zähler nur ein weiterer Taktteiler dar, er teilt die Zählerfrequenz durch die Anzahl der Schritte bis zum Überlauf.
    • Damit ergibt sich die Überlauffrequenz F_Out = F_CPU / Prescaler / Zählschritte
    • Umgekehrt musst du also, wenn du eine bestimmte Frequenz (und damit Zeitintervalle, da f=1/T) generieren möchtest, die Parameter passend wählen. In der Regel sucht man sich dabei ausgehend von F_CPU den kleinsten Prescaler für den das Zählerregister für die Wunschfrequenz noch ausreichend ist.
    • Diese Bedingung lässt sich formulieren als Prescaler >= F_CPU/Max_Zählschritte/F_Out


    Beispiel: F_CPU = 1Mhz. Wunschfrequenz F_Out 2kHz (0,5ms Periodendauer). Timer: 8-Bit.
    Prescaler >= 1Mhz/2^8/2kHz = 1,95
    Zur Verfügung steht beim Mega8 damit zum Beispiel der Prescaler F_CPU/8

    Zählschritte = 1Mhz/8/2kHz = 62,5 (obere Formel umgestellt)
    Probe: F_Out = 1Mhz/8/62 = 2016Hz

    Achtung: Der TOP-Wert der im CTC-Modus gesetzt wird, ist Zählschritte-1, da von 0 bis TOP gezählt wird!

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

  4. #14
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Danke Markus, das ist sogar für mich Dummie nun besser verständlich, ja manchmal "klemmt der Groschen", wie man früher so sagte, heute sind's ja 10 Cent..
    Ich habe jetzt ein Listig gefunden und etwas verändert und hoffe das ich das richtig damit verstanden habe, die LED soll alle 2 sec hier Aufleuchten:
    /* uC: Attiny2313 */
    /* F_CPU = 2.000.000 Hz */
    #include <avr/io.h>
    #include <avr/interrupt.h>

    //Variablen für die Zeit
    volatile unsigned int millisekunden;
    volatile unsigned int sekunde;
    volatile unsigned int minute;
    volatile unsigned int stunde;

    int main(void)
    {
    DDRB |= (1<< PB0);
    // Timer 0 konfigurieren
    TCCR0A = (1<<WGM01); // CTC Modus
    TCCR0B |= (1<<CS11); // Prescaler 8
    // ((2000000//1000) = 125 bei Qu = 2,0 MHz
    OCR0A = 250-1;

    // Compare Interrupt erlauben
    TIMSK |= (1<<OCIE0A);

    // Global Interrupts aktivieren
    sei();

    while(1)
    {
    /*Hier kann die aktuelle Zeit
    ausgeben werden*/
    if (sekunde % 2 == 0) //alle 2 sec LED ON/OFF
    {
    PORTB &= ~(1<< PB0);//PB0... LOW = LED ON
    }else {
    PORTB |= (1<< PB0);//PB0...HIGH = LED OFF
    }
    }
    }

    /*
    Der Compare Interrupt Handler
    wird aufgerufen, wenn
    TCNT0 = OCR0A = 125-1
    ist (125 Schritte), d.h. genau alle 1 ms
    */
    ISR (TIMER0_COMPA_vect)
    {
    millisekunden++;
    if(millisekunden == 1000)
    {
    sekunde++;
    millisekunden = 0;
    if(sekunde == 60)
    {
    minute++;
    sekunde = 0;
    }
    if(minute == 60)
    {
    stunde++;
    minute = 0;
    }
    if(stunde == 24)
    {
    stunde = 0;
    }
    }
    }
    Gruss und Danke(!!)

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

Seite 2 von 2 ErsteErste 12

Ä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
  •  

fchao-Sinus-Wechselrichter AliExpress