Re: Funktion : Timer_T1GetPM Kategorie: Programmierung C (von Wojtek - 11.10.2005 15:26) | ||
Als Antwort auf Re: Funktion : Timer_T1GetPM von Peter S - 5.10.2005 22:41 | ||
| ||
DANKE ! hilft aber nicht viel weiter :( wan solte die neue Softwareversion erscheinen ? Gruss Wojtek > 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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum