Gast
#2844008
Hallo, ich möchte einen Smartec UTI03 zur Auswertung von Pt100/Pt1000 verwenden. (DB: http://www.smartec-sensors.com/assets/files/pdf/sensors/SMTUTIN.PDF) Dieser liefert als Ausgangssignal ein pulsbreiten-moduliertes Signal. Leider schwanken meine Werte sehr und ich erhalte in weiterer Folge keine sinnvollen Temperaturwerte. Verwendet habe ich folgende Komponenten: a) ATMega32 (betrieben an Quarz mit 16 MHz) b) UTI03 (samt notwendigen Widerständen und Pt100) c) LCD 4x40 Display (aufgebaut alles auf einem Steckbrett) Meine Grundidee zur Auswertung des UTI03 ist folgende: 1) Timer1 mit Systemtakt starten (mit Noise Canceller und auf rising Edge getriggert) TCNT1 = 0x0000; TCCR1B = (1<< ICNC1) + (1<<CS10) + (1<<ICES1); TIMSK = (1<<TOIE1) + (1<<TICIE1); sei(); 2) bei Overflow von Timer1 eine uint-Variable inkrementieren ISR (TIMER1_OVF_vect) { ovf_counter++; } 3) bei Input Capture die aktuellen Werte von ICR1 und der Overflow-Variable in ein Array speichern; nach einer bestimmbaren Anzahl von Messwerten den Timer1 deaktivieren und über ein Flag das Messende signalisieren ISR (TIMER1_CAPT_vect) { ICR[meas_counter] = TCNT1; OVF[meas_counter] = ovf_counter; meas_counter++; if (meas_counter >= MEAS_CYCLES * MEAS_NUMBER) { cli(); TIMSK &= ~((1<<TOIE1) + (1<<TICIE1)); meas_finished = 1; } return; } 4) Die Berechnung der Zeitdifferenzen erfolgt nach den Messungen mit folgender Formel: diff[i] = (OVF[i+1] * 0x10000 + ICR[i+1]) - (OVF[i] * 0x10000 + ICR[i]) Anmerkung: OVF[], ICR[] unsigned int, diff[] unsigned long Habe ich einen massiven Denkfehler in der Logik? Schwanken die Werte der UTI03 wirklich so sehr (auf meinem Oszi sieht das nicht so aus)? Bin für jeden Tipp dankbar. PS: grundsätzlich soll der UTI03 aufgrund gewisser Rahmenbedingungen verwendet werden!