Autor Thema: Zeitmessung  (Gelesen 283 mal)

Offline Sascha_Focus

  • Jr. Member
  • **
  • Beiträge: 77
    • Profil anzeigen
Zeitmessung
« am: April 18, 2017, 13:20:12 Nachmittag »
Hallo,

erstmal zur Theorie:

Genutzter PIC: PIC18F47K40
                        HFINTOSC 64MHz, PIC Takt 16MHz

Um die Aufrufzeit dt für eine Regelung zu erfassen, habe ich den Timer 0 mit dem Vorteiler 1:16 eingestellt. Überlauf des Timers alle 10 Millisekunden. Im Timer Interrupt
zähle ich eine Variable hoch. Demnach wäre die aktuelle Zeit: (Variable*10000)+ (65536-(TMR0H,TMR0L))


//Timer 0 Aufruf
void TMR0_ISR(void)
{
    // TMR0 interrupt flag löschen
    PIR0bits.TMR0IF = 0;
    // Timer Preload laden
    TMR0H = timer0ReloadVal16bit >> 8;
    TMR0L = (uint8_t) timer0ReloadVal16bit;

    milli10count++; //32Bit Variable
}

/Ausgabe der aktuellen Zeit
uint32_t Get_Time()
{
    uint32_t time=0xffff;
    time=time-TMR0_Read16bitTimer();
    time=time+(milli10count * 10000);
    return time;
}


//while Schleife der main, zur Efassung und Ausgabe der Zeit
    while (1)
    {
currentTime = Get_Time(); //Aktuelle Zeit holen
cycleTime = currentTime - previousTime; //Zykluszeit
previousTime = currentTime;
dt = (float)cycleTime/1000000;

           
    sprintf( text, "%f",dt);
    LCDGoto(0,2);
    LcdDec(cycleTime);
    LCDGoto(0,3);
    LCDPutStr(text); 
    __delay_ms(250);
    }

Nun scheint es bei der Ausgabe so, das die delay Funktion keinerlei Auswirkungen zu haben scheint. Ebenso so verstehe ich die ausgebene Zeit nicht.
Zeitlich liege ich bei 0.006s bis 0.026s. Ich hätte zumindest erwartet, das die Zeit gleich bleibt. Es sind keine weitere Interrupts vorhanden.

Hat jemand eine Idee oder kann mir meinen Denkfehler aufzeigen??

Gruß Sascha


 


* Recent Topics