Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Funktion : Timer_T1GetPM Kategorie: Programmierung C (von Wojtek - 26.09.2005 21:39)
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hi !
versuche mit SMT160-30 Temperatur zu messen. Daführ Test Programm:

word PM_WERT;                                   // globale Variablendeklaration
word PT_WERT;
char temp_txt[10];

//------------------------------------------------------------------------------
// Messungen
//
void Timer1_ISR(void)
{
    int irqcnt;
    PM_WERT=Timer_T1GetPM(0);                   // Pulsweite messen
    irqcnt=Irq_GetCount(INT_TIM1CAPT);          // Interrupt Request Counter
}

void Timer2_ISR(void)
{
    int irqcnt;
    PT_WERT=Timer_T1GetPM(1);                   // Periode messen
    irqcnt=Irq_GetCount(INT_TIM1CAPT);          // Interrupt Request Counter
}
//------------------------------------------------------------------------------
// Hauptprogramm
//
void main(void)
{
    byte n;
    word i;
    float temp;



 //   Timer_T0PWM(32,PS_256);                      // Pulsgenerator
                                                // Puls=4,34 µs*32= 139 µs
                                                // Periode=4,34 µs*256= 1111 µs
     while (1)
    {
        Irq_SetVect(INT_TIM1CAPT,Timer1_ISR);       // Interrupt Service Routine def.
        PM_WERT=0;
        Timer_T1PM(PS_1);                       // Messung initialisieren und starten
        while (PM_WERT==0);                     // Pulsbreite messen



        Irq_SetVect(INT_TIM1CAPT,Timer2_ISR);       // Interrupt Service Routine def.
        Timer_T1PM(PS_1);                       // Messung initialisieren und starten
        PT_WERT=0;
        while (PT_WERT==0);                     // Periode messen

        Msg_WriteHex(n);                        // Werte ausgeben
        Msg_WriteChar(SPACE);

        Str_WriteWord(PM_WERT,10,temp_txt,0,8);
        Msg_WriteText(temp_txt);
        Msg_WriteChar(SPACE);

        Str_WriteWord(PT_WERT,10,temp_txt,0,8);
        Msg_WriteText(temp_txt);
        Msg_WriteChar(SPACE);

        temp = (PM_WERT * 1.0) / (PT_WERT * 1.0);
        temp=(temp - 0.320)/0.00470;
        Str_WriteFloat(temp,10,temp_txt,0);
        Msg_WriteText(temp_txt);
        Msg_WriteChar(CR);

        for (i=0;i<10000;i++);                  // Delay 500ms
        n++;
    }
}

aber die Ergebnise kan ich mir kaum erkleren:

00D6 00006723 00004547 246.50152        ?????                                        
00D7 00002147 00004555 32.20216           OK                                      
00D8 00002165 00004559 32.95421           OK                                      
00D9 00002163 00004556 32.92734           OK                                      
00DA 00002161 00004555 32.85611          OK                                      
00DB 00006721 00004561 245.44259        ?????                                        
00DC 00002157 00004552 32.73567          OK                                      
00DD 00002154 00004554 32.55123         OK

und ab etwa 40 Grad kommt nur :

00A8 00006655 00004449 250.17910                        
00AA 00006668 00004467 249.51586          
00AC 00006583 00004430 248.08605                                                
00AD 00006627 00004441 249.41094                                                
00AE 00006633 00004395 253.02447  
?????????????????????????????????????????????????????


    Antwort schreiben


Antworten:

Re: Funktion : Timer_T1GetPM (von Peter S - 5.10.2005 22:41)
    Re: Funktion : Timer_T1GetPM (von Wojtek - 11.10.2005 15:26)