Hallo zusammen, ich versuche für mein C-Programm die Temperatur von dem Sensor KTY81-251 über eine A / D – Wandler auf ein Terminal zu übertragen. Der A / D – Wandler hat eine Auflösung von 1023 Stufen ( 2 ^10 - 1 ) und wandelt von 0 V bis 2,5 V. Als Beispielswert ist am Eingang des A / D – Wandlers ein Wert von 400 mV gegeben. Programmausschnitt: unsigned int mw_erf10(unsigned char kanal) { unsigned int erg; // Variable für 10-Bit Wandlungsergebnis ADCON = (ADCON & 0xe8); // Kanalauswahl und Wandlungsende-Bit rücksetzen! ADCON = (ADCON | (0x08+kanal)); // Kanalauswahl und Start der einmaligen Wandlung! while((ADCON & 0x10) == 0); // Warte bis A/D-Wandlung beendet ist! erg = ((ADDH << 2) + (ADDL & 0x03)); // Ergebnisregister auslesen u. zusammenbauen! return(erg); } Im Main-Teil : wert = mw_erf10(3); // Umwandeln in Digital wandel10= wert; temp = wandel10 / (0.0125 /(2.5/1023)); // Berechnung der Temperatur Dabei ist sind die Variablen wert ( unsigned int ) und die Variablen wandel10 und temp (float). Das Programm gibt bei mir bis jetzt 0 Grad raus. Wenn man die Temperatur mit Hand ausrechnet kommt man auf eine logische Temperatur, z.B. liegen 245 mV am A D Wandler an kommen ca. 19,6 ° raus oder bei 400 mV ca. 32°. Also stimmt etwas mit der Wandlung am A / D Wandler meiner Meinung nach nicht. Hat jemand einen Tipp, Vorschlag oder Verbesserung? Danke im vorraus ☺
Wie ist der Sensor beschaltet?? Die Zeile sollte besser so aussehen: wandel10= (float)wert;
Danke. Also der Sensor wird über einen Operationsverstärker TL064 geschaltet und das Signal wird dann an den A/D-Wandler gegeben.
House Man schrieb: > Dabei sind ... die Variablen wandel10 und temp (float). Schlechter Plan, zumindest auf einem µC. Wozu brauchst du Float. Das kostet nur Flash-Speicher und Rechenzeit. Oder rechnest du damit, dass dein Temperatursensor spontan Werte im µ°C-Bereich auf 6 Dezimalstellen verarbeiten können muss - was alleine der Sensor auf Grund seiner Genauigkeit nicht her gibt - und wesentlich über 100°C kommt er auch nicht?
µC-Bastler schrieb: > Schlechter Plan, zumindest auf einem µC. Wozu brauchst du Float. Das > > kostet nur Flash-Speicher und Rechenzeit Float ist nicht unbedingt schlecht. Temperaturen mist man selten schneller als eine Sekunde. Da hat selbst ein Tiny alle Zeit der Welt eine Float-Emulation schnell genug zu berechnen. Und die 4 Byte xfür eine Float-Variable + 4Bytes für eine Hilfsvariable werden sich da auch noch finden lassen. Ich habe 2005 begonnen, analoge Temperaturerfassungen zu entwickeln. Ich habe diese Strategie sehr schnell verworfen, weil die hinreichend angemessene Kalibrierung (Korrekturberechnung) meine Möglichkeiten überfordert hatten. Selbst diese Linearen Sensoren wie LM35 etc. müssen im Offset verschoben werden, um negative Temperaturen messen zu können. Ich bin dann auf die Dallas-Sensoren DS1820 etc. gestossen. Die verfügen über eine digitale Schnitstelle (1-Wire-Protokoll). Es gibt genügend Codebeispiele, die man als ausreichend erprobt ansehen kann. Der Vorteil ist, dass der ausgelesene Wert nur noch skalliert werden muss. Nichtlinearitäten sind weitestgehend ausgeglichen. Alternativ gibt es noch die Sensoren von Sensirion SHTxx. Die bieten nicht nur eine Temperaturerfassung sondern erlauben auch eine relative Feuchtigkeitsmessung. (Diese Kombination fand ich ganz interessant) Ich hoffe mein Beitrag zeigt die Möglichkeiten auf Alternativen auf. Natürlich möchte ich Dir den Spaß des selbser Herausfindens nicht nehmen. ;-) Wenn Du allerdings irgendwann für Dich feststellst, dass es Zeitverschwendung ist, dann hast Du jetzt Perspektiven. Viel Spaß und Viel Erfolg.
Berechnung prüfen, statt einer Zeile besser in mehrere aufteilen, und dann jeden Rechenschritt einzeln checken. Wenn du das debuggen willst, musst du hält jeden Einzelschritt kontrollieren...
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.