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!
Hallo Megafan, ich denke, in 4) wird zu spät auf long umgeschaltet. Ein paar casts sollten helfen. Vielleicht ((long)OVF[i+1] * 0x10000L + ICR[i+1]) - ((long)OVF[i] * 0x10000L + ICR[i]) Gruß Jens
Hallo Jens, vielen Dank für deine Antwort. Leider brachten die expliziten Casts keine Besserung. Hat schon mal jemand mit diesen UTI03 gearbeitet? Mich würde eure Erfahrungen interessieren.
ich bin grad dabei eine Platine mit 3 Stück UTI für insgesamt 9x PT 100 // PT500 // PT1000 in Betrieb zu nehmen, allerdings mit Arduino. Die ersten Tests schauen vielversprechend aus, ich bin mit den messergebnissen soweit zufrieden, bisher recht genau und kaum Schwankungen. ich arbeite allerdings nicht mit timern, sondern mit einer "normalen" mess-Schleife, die einfach nur Durchläufe zählt. Wenns dich interessiert kann ich gerne mal meinen Code posten. offtopic: wie schreib ich einen Schrägstrich, wenn ich nicht kursiv haben will?
Hallo Michael konntest Du Dein Projekt mit Erfolg abschliessen? Würdest Du Deine Erfahrungen teilen? Ich möchte als Endziel eine Heizungssteuerung bauen, aber vorerst mich mit der Thematik der genauen Temperaturmessung mit UTI03 und Arduino auseinandersetzen. Schon vorab vielen Dank für Dein Feedback Daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.