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

Re: Funktion : Timer_T1GetPM Kategorie: Programmierung C (von Peter S - 5.10.2005 22:41)
Als Antwort auf Funktion : Timer_T1GetPM von Wojtek - 26.09.2005 21:39
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
Hallo,

wir haben etwas Zeit gebraucht, aber wir haben herausgefunden, das bei kleinen Zeiträumen
manchmal der Interpreter Interrupt zu langsam war. WIr haben in der neuen Softwareversion
jetzt die Logik mit in den Atmel Interrupt Routine eingebaut. Zeiträume >=10 µs sollten jetzt
ohne Probleme messbar sein.


Gruss Peter

> 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 Wojtek - 11.10.2005 15:26)