Forum: Mikrocontroller und Digitale Elektronik Aus Temp-Sensor Tabellen-Werten Formel erstellen


von Be T. (wilhelmt)


Lesenswert?

Mein Projekt soll sein, die Temperatur über einen speziellen Sensor in 
einen PIC (8 bit) einzulesen, und das Ergebnis auf einer dreistelligen 
LED-Anzeige auszugeben. Temp-Bereich wäre von 0°C bis 120°C, nur ganze 
Zahlen (keine Dez-Stellen). Die Genauigkeit ist weniger wichtig, 2 % 
wären schon gut, die Geschwindigkeit der Ausgabe auch nicht: Alle 10 sek 
reicht völlig aus.
Der NTC-Sensor hat eine logarithmische Kennlinie, an diesem einen 
speziellen Typen geht kein Weg dran vorbei (nichts anderes möglich). Zu 
ihm habe ich das off. Firmendatenblatt, in welchem in einer Tabelle die 
Temp-Werte in 5°C-Schritten gelistet sind und die dazugehörigen 
Widerstandswerte. Es gibt aber keine Formel, auch keine Koeffizienten 
über Material o.Ä..
Das Prog soll in C erstellt werden. Ich bin da zwar noch Anfänger, 
möchte das Projekt aber schon vorbereiten. Selbst habe ich hier im Forum 
unter „Formeln“ gesucht, jedoch nichts gefunden, was mir wirklich hilft. 
Ein angeblich leicht zu bedienendes Formelprogramm namens 
„Kleine-Programme-der-Mathematik“ erweist sich als undurchschaubar. Es 
soll möglich sein, mit einem Office-Programm eine Formel zu erstellen. 
Habe das heute in OpenOfficeCalc versucht, es aber zu keinem Ergebnis 
gebracht (Das blöde Calc akzeptiert die neu installierte Java-Runtime 
nicht).
Wer kann mir einen Weg aufzeigen, aus den  Wertepaaren eine Formel zu 
erstellen, die eine 8-bit-MPU zur Umrechnung gebrauchen kann?
Grüße, wilhelmT

: Bearbeitet durch User
von Werner M. (Gast)


Lesenswert?

Be Ti schrieb:
> Zu
> ihm habe ich das off. Firmendatenblatt, in welchem in einer Tabelle die
> Temp-Werte in 5°C-Schritten gelistet sind und die dazugehörigen
> Widerstandswerte. Es gibt aber keine Formel, auch keine Koeffizienten
> über Material o.Ä..

Wenn die Genauigkeit nicht so wichtig ist, kannst du doch einfach die 
Tabelle in den PIC klopfen und jeweils zwischen zwei Einträgen per 
Dreisatz interpolieren.

> Habe das heute in OpenOfficeCalc versucht, es aber zu keinem Ergebnis
> gebracht (Das blöde Calc findet die neu installierte Java-Runtime
> nicht).

Dann mußt du ihm vielleicht mal beibringen, wo die liegt ;-)

von SuseLunix (Gast)


Lesenswert?


von Be T. (wilhelmt)


Lesenswert?

Als C-Anfänger kann ich weder das Eine - Formel selbst erstellen - , 
noch das Andere - eine Tabelle erstellen. Ich bin aber willens, beides 
zu lernen und werde es auch lernen. Zunächst möchte ich aber wirklich 
den Weg über eine Formel versuchen, das muss ja irgendwie gehen. Dem 
"Calc" habe ich den exakten Pfad zur frisch installierten 
Java-Runtime-Umgebung gegeben. Das doofe Calc behauptet frech, nichts zu 
finden. Vielleicht reicht die "Umgebung" nicht, und es muss eine 
"vollere" Version sein.
@SuseLinux:
Jubel, welch' ein tolles Programm, das wäre der Bringer........wäre! 
Wenn die Ansteuerung des Sensors wie in dem Formeleditor beschrieben via 
Vorwiderstand ginge. Geht aber nicht. Mein Sensor muss dringend aus 
einer Konstantstromquelle seinen Saft beziehen, sonst driftet die 
Genauigkeit in wirklich nicht mehr sinnvolle Dimensionen ab, alleine 
schon wegen des irren Logarythmusses.
Gruß, wilhemT

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Die Verwendung eines NTC ist fest vorgegeben?

von SuseLunix (Gast)


Lesenswert?

>Mein Sensor muss dringend aus
>einer Konstantstromquelle seinen Saft beziehen, sonst driftet die
>Genauigkeit in wirklich nicht mehr sinnvolle Dimensionen ab.
Das glaube ich nicht ganz. Denn ein Widerstand hat die Toleranz X. Eine 
Konstantstromquelle aus mindestens einem Widerstand mit der gleichen 
Toleranz X und zig weiteren Bauteilen mit zusätzlicher Toleranz hat mehr 
Fehler.

von Lan (Gast)


Lesenswert?

Mit Excel kann man Annäherungsformeln für Kurven aus Tabellen erstellen.
Vielleicht kannst du ja mal deine Werte hier schreiben, dann kann dir 
jemand die Formel nennen.
Dreisatz zwischen den Stützpunkten wäre allerdings auch sinnvoll.

von Marek W. (ma_wa)


Lesenswert?

Schaue dir das hier bitte einmal an, insbesondere den ersten Teil mit 
der Formel:
http://de.wikibooks.org/wiki/Linearisierung_von_resistiven_Sensoren/_Heissleiter

Den Teil mit den OPV-Schaltungen kannst du auch überfliegen, den 
brauchst du ja nicht unbedingt. Die Mathematik dahinter könnte aber die 
Lösung für dein Problem sein.

von Klaus R. (klara)


Lesenswert?

Be Ti schrieb:

> Der NTC-Sensor hat eine logarithmische Kennlinie, an diesem einen
> speziellen Typen geht kein Weg dran vorbei (nichts anderes möglich). Zu
> ihm habe ich das off. Firmendatenblatt, in welchem in einer Tabelle die
> Temp-Werte in 5°C-Schritten gelistet sind und die dazugehörigen
> Widerstandswerte. Es gibt aber keine Formel, auch keine Koeffizienten
> über Material o.Ä..

Der zweite Google-Treffer zu "ntc kennlinie". Es gibt Formeln. Durch 
probieren könnte man auch auf die Parameter kommen.
http://www.controllersandpcs.de/lehrarchiv/pdfs/elektronik/pass01_03x.pdf

Aber in Deinem Fall ist eine Werteliste und der Dreisatz effektiver.
mfg klaus

von Be T. (wilhelmt)


Lesenswert?

Ja, wie beschrieben, aus bautechnischen Gründen gibt es nur einen 
einzigen Typen. Der oder keiner.
Das Prob mit dem Vorwiderstand muss nicht unbedingt eines sein. Habe mir 
gerade überlegt, dass eigentlich nichts dagegen sprechen würde, "unter" 
die Konstantstromquelle und vor den Sensor noch einen zusätzlichen 
Widerstand einzufügen. So im Bereich von 400 Ohm müßte das noch passen. 
Deswegen sind wir aber nicht aus dem Schneider, was deine tolle Formel 
angeht, "Suse". Die verlangt die Eingabe irgendeiner Konstanten, und da 
gibt - wie gesagt - das Datenblatt nichts her. Den Hersteller des 
Sensors hatte ich schon mal angeschrieben. Die Reaktion war die 
Zusendung dieses Datenblattes und die Weigerung, irgendwas anderes noch 
zu unternehmen oder raus zu rücken. Der Sensor heißt übrigens: Z- S 088 
.
Gruß, wilhelmT

von Peter D. (peda)


Lesenswert?

Be Ti schrieb:
> Wer kann mir einen Weg aufzeigen

Du legst einfach alle Tabellenwerte in ein Array und vergleichst sie.
Ist der Tabellenwert < Meßwert, machst Du mit dem nächsten eine 
Geradeninterpolation.
Bzw. wenn Du es ganz genau willst:
http://de.wikipedia.org/wiki/Spline-Interpolation

Be Ti schrieb:
> die eine 8-bit-MPU zur Umrechnung gebrauchen kann?

Die Bitbreite spielt keine Rolle. Ein C-Compiler kann Code für 
mindestens 32Bit-float erzeugen, das reicht dicke.

von Peter D. (peda)


Lesenswert?

Be Ti schrieb:
> Mein Sensor muss dringend aus
> einer Konstantstromquelle seinen Saft beziehen

Wozu das denn?

Man nimmt besser einen Widerstand zur Referenz des ADC, die kürzt sich 
dann einfach raus.

von Marek W. (ma_wa)


Lesenswert?

Marek Walther schrieb:
> Schaue dir das hier bitte einmal an, insbesondere den ersten Teil mit
> der Formel:
> http://de.wikibooks.org/wiki/Linearisierung_von_resistiven_Sensoren/_Heissleiter
>
> Den Teil mit den OPV-Schaltungen kannst du auch überfliegen, den
> brauchst du ja nicht unbedingt. Die Mathematik dahinter könnte aber die
> Lösung für dein Problem sein.

Sorry, zu früh gedrückt und bearbeiten ging nicht mehr.

Die obige Formel sollte auch für deinen NTC gelten, nur die Parameter 
sind etwas anders. Dazu könnte dann folgendes weiter auflösen:

http://www.sprut.de/electronic/temeratur/temp.htm#ntc

Die Konstanten musst Du in deinem Datenblatt finden, wenn nicht, hast du 
das falsche Datenblatt.

von Crazy Harry (crazy_h)


Angehängte Dateien:

Lesenswert?

Probiers mal mit einem Parallel-Widerstand zum NTC. Ich mach mir da 
immer ne Excel-Tabelle, Spannung, Strom, Kurve zeichnen und dann einen R 
parallel. Das linearisiert relativ gut.Dann noch nen OP dahinter und gut 
ist. Kannst du mit LookUp-Tabellen arbeiten ?

von Be T. (wilhelmt)


Lesenswert?

Peter Dannegger schrieb:
> Du legst einfach alle Tabellenwerte in ein Array und vergleichst sie.
> Ist der Tabellenwert < Meßwert, machst Du mit dem nächsten eine
> Geradeninterpolation.
Schwitz!  Treffer, und auch gleich versenkt!
Das hatte ich befürchtet: Ich stelle mir einen Weg vor, und dann wird 
mir gleich bewiesen, dass es anders viel besser wäre. Also, bin 
umgefallen, und werde von der Erstellung einer Formel Abstand nehmen. 
Werde dann also dem Rat von Peter Danneger, Lan, Klaus Ra. und Suse 
hatte das - glaube ich - auch angesprochen folgen, und es mit einer 
Tabelle versuchen. Aber das kommt für mich zu früh und da möchte ich 
eure Hilfe nicht überstrapazieren. Da werde ich mich einfach erst noch 
in C weiter einarbeiten und mich dort mal nach sowas umschauen und mit 
einer ganz niedlichen Tabelle anfangen. Aber das braucht, und deswegen 
werden vorraussichtlich etliche Tage vergehen, bis ich mich wieder 
melde.
Danke allen für ihre Hilfsbereitschaft, ist schon toll hier im Forum. 
Muss jetzt wech, C lernen.
Gruß, wilhelmT

: Bearbeitet durch User
von Bastler (Gast)


Lesenswert?

Hiermit kannst Du einfach die Formel für deinen MC erstellen:

Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"

von Volker S. (vloki)


Lesenswert?

Be Ti schrieb:
> Der NTC-Sensor hat eine logarithmische Kennlinie, an diesem einen
> speziellen Typen geht kein Weg dran vorbei (nichts anderes möglich).

Poste doch mal einen Link !
<edit> Sorry...
> Den Hersteller des Sensors hatte ich schon mal angeschrieben.
> Die Reaktion war die Zusendung dieses Datenblattes und die Weigerung,
> irgendwas anderes noch zu unternehmen oder raus zu rücken.
> Der Sensor heißt übrigens: Z- S 088

Da findet man nicht so einfach was ...

: Bearbeitet durch User
von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Ich setze mich bei solchen Sachen immer hin und zeichne ein Schaltbild.
Dann nehme ich einen Vorwiderstand zwischen Versorgungsspannung und NTC 
der dem wichtigsten Meßbereich des NTCs entspricht.
Dann tippe ich die Temperaturen (z.B. 5°-Schritte) und Widerstände aus 
dem Datenblatt in eine Excel-Tabelle und rechne mit den Werten etwas 
rum.
Eigentlich ist es so, daß sich aus der Temperatur über den NTC und 
Vorwiderstand ein Verhältnis von Meßspannung zu Versorgungsspannung 
ergibt, der von der Versorgungsspannung unabhängig ist. Diese Tabelle 
speichere ich ab und schreibe eine Routine, die für einen Meßwert die 
Tabelle abklappert und die Stützwerte interpoliert und in 1°-Schritten 
den besten Wert findet.

Klingt etwas trocken, ist aber quick-n-dirty.

Keine aufwendigen mathematischen Formeln (Polynome), nur einfacher 
Dreisatz (Integer), um aus 2 Stützstellen (x Grad, x+5 Grad) und dem 
Meßwert einen Treffer zu suchen, und das immer wieder, bis es paßt...

von W.A. (Gast)


Lesenswert?

Be Ti schrieb:
> Die verlangt die Eingabe irgendeiner Konstanten, und da
> gibt - wie gesagt - das Datenblatt nichts her.

Dann zeig es doch mal. Oder hast du dafür ein NDA unterschreiben müssen.

von Differentialknilch (Gast)


Lesenswert?

Ein NTC ist bestimmt durch ein paar Konstanten. Der exponentielle 
Steilheit, genannt Beta, und dem widerstand bei 25 Grad. Das eine kann 
man messen, das andere rechnen. Die Empfindlichkeit ist am Groessten 
wenn der Serienwiederstand gleich dem Widerstand des NTC bei der 
gewuenschten Temperatur ist.

von thomas s (Gast)


Lesenswert?

Den Polynommaker braucht man nicht unbedingt, die RGP-Funktion in Excel 
tut es auch. Oder ein Punktdiagramm einfügen, eine Trendlinie wählen und 
die Formel im Diagramm darstellen lassen.

von Be T. (wilhelmt)


Angehängte Dateien:

Lesenswert?

Da hier verschiedentlich nach dem Datenblatt des Sensors gefragt wurde, 
stelle ich das mal ein.
Grüße, wilhelmT

von 0815 (Gast)


Lesenswert?

Be Ti schrieb:
> tabelle1.jpg

In der Form wird das wohl kaum ein Programm zur Bestimmung der Funktion 
verarbeiten können. Da wird irgendjemand die Werte aus den Spalten für 
Temperatur und Nominalwiderstand in eine rechnerlesbare Form übertragen 
müssen.

von Karl H. (kbuchegg)


Lesenswert?

0815 schrieb:
> Be Ti schrieb:
>> tabelle1.jpg
>
> In der Form wird das wohl kaum ein Programm zur Bestimmung der Funktion
> verarbeiten können. Da wird irgendjemand die Werte aus den Spalten für
> Temperatur und Nominalwiderstand in eine rechnerlesbare Form übertragen
> müssen.

Das macht auch insofern Sinn, als man dann gleich mit dem zur Temperatur 
gehörenden Widerstandswert in die übliche Spannungsteilerformel geht und 
dann gleich komplett auf den ADC Wert zurückrechnet.

Im Endeffekt kriegt man dann eine Tabelle, die direkt einen Zusammenhang 
zwischen ADC Wert und Temperatur herstellt.

Ob man dann durch diese Werte ein Polynom legt, oder eine Spline 
Interpolation oder ob man zwischen den Stützstellen linear interpoliert 
ist eine andere Frage. Wenn man mit Mathe auf Kriegsfuss steht, ist 
lineares Interpolieren wahrscheinlich das einfachste und dürfte bei 5° 
voneinander entfernten Stützstellen nicht wirklich das große Problem in 
der Praxis darstellen. Aber: wie gut die Werte dann passen sieht man 
meist in einem Diagramm recht schön.

: Bearbeitet durch User
von S. K. (hauspapa)


Lesenswert?

Glaub mir, selbst wenn du die korrekte Formel hättest würdest Du Sie auf 
einem PIC nicht rechnen wollen. Du bräuchtest dafür logarithmus aus...
Das hab ich mal auf einem Atmega probiert: etwa 2500 Taktzyklen. Das ist 
ja nicht das Problem. Aber: Es lädt die floating point library und 
braucht darum massig Platz. Bin auch ganz schnell bei Tabelle und 
Interpolation gelandet.

viel Erfolg
hauspapa

von Be T. (wilhelmt)


Lesenswert?

S. K. schrieb:
> Glaub mir, selbst wenn du die korrekte Formel hättest würdest Du Sie auf
> einem PIC nicht rechnen wollen. Du bräuchtest dafür logarithmus aus...
> hauspapa
Das Thema "Formel" hatte ich ja schon beerdigt, aber...Aber ich hatte 
von vornherein damit geliebäugelt, nach dem Erlernen von "C" mit Hilfe 
der 8-bittigen PICs für mein Projekt auf einen 16-Bit-Pic, also z.B. 
einen PIC24Fxxx umzusteigen, weil der 16-Bit-Matheroutinen in Hardware 
mitbringt. Wäre bei dem eine Formelrechnung immer noch als zu (zeit- 
und/oder platzmäßig-) aufwendig abzulehnen?

Zur Mess-Hardware: Da ist geplant, den Sensor mit Konstantstrom zu 
versorgen. Entsprechend findet sich dessen Kennlinie in der variierenden 
E-Spannung ja wieder. Ist es korrekt, aus dem bekannten Wert für den 
K-Strom und jeweiligen Widerstandswert (aus der Tabelle entnommen) auf 
die Spannungshöhe zu rechnen/ zu schließen, schlicht nach Ohmschen 
Gesetz? Oder gibt es da noch andere zu berücksichtigende Einflüsse 
(Sensorerwärmung durch zu hohen Strom ist klar,aber sonst) ?
Gruß, wilhelmT

von Karl H. (kbuchegg)


Lesenswert?

Be Ti schrieb:

> von vornherein damit geliebäugelt, nach dem Erlernen von "C" mit Hilfe
> der 8-bittigen PICs für mein Projekt auf einen 16-Bit-Pic, also z.B.
> einen PIC24Fxxx umzusteigen, weil der 16-Bit-Matheroutinen in Hardware
> mitbringt. Wäre bei dem eine Formelrechnung immer noch als zu (zeit-
> und/oder platzmäßig-) aufwendig abzulehnen?

Wenn du in C programmierst, interessiert dich das nicht.

Du schreibst deine Multiplikation einfach hin und der Rest ist Sache des 
Compilers. Der weiß schon, wie rechnen in 16 Bit geht, selbst wenn du 
nur einen 8 Bit Rechner hast. Sowas ist ja schliesslich nicht 
Raketentechnik. Du kannst ja auch beliebig große Zahlen multiplizieren, 
obwohl du nur das kleine Einmaleins auswendig kannst. In der Grundschule 
hast du ein "Verfahren" gelernt, wie du damit auch mit größeren Zahlen 
hantieren kannst. Nichts anderes macht ein Computer. Eine 8 Bit CPU kann 
zwar nur mit 8 Bit Einheiten hantieren, aber mit dem richtigen Verfahren 
kann man das auf beliebige Bitzahlen aufbohren. Ähnlich wie du bei der 
Aufgabenstellung "58743 mal 129876" das Ergebnis Schritt für Schritt 
zusammensetzt, setzt das deine 8 Bit CPU auch Schritt für Schritt 
zusammen. Der Compiler hat die entsprechenden Verfahren mit und setzt 
sie ein. Das ist nicht dein Problem.

Und ja. Dein µC kann schneller rechnen als du. Viele tausend mal 
schneller. Selbst wenn er als 8 Bit CPU die Berechnungen in kleinen 
Happen zusammensetzen muss.

> E-Spannung ja wieder. Ist es korrekt, aus dem bekannten Wert für den
> K-Strom und jeweiligen Widerstandswert (aus der Tabelle entnommen) auf
> die Spannungshöhe zu rechnen/ zu schließen, schlicht nach Ohmschen
> Gesetz?

Solange es um Gleichstrom und Widerstände geht, gilt das Ohmsche Gesetz 
IMMER. Kennst du von den 3 Größen Widerstand/Spannung/Strom 2 Stück, 
dann kannst du die 3. errechnen.

Allerdings: Du brauchst ja die Umkehrung. Denn du kennst ja die 
Temperatur (und damit den Widerstandswert) nicht. Das ist ja genau das, 
was du feststellen willst. Was du misst, das ist die Spannung über dem 
Widerstand. Und da du durch die Konstantstromquelle weißt, wieviel Strom 
durch den Widerstand rinnt, kannst du dir mittels Ohmschen Gesetz 
ausrechnen, wie gross der Widerstandswert ist. Aus der Tabelle kannst du 
diesen Widerstandswert wiederrum in eine Temperatur umrechnen und die 
wird dann angezeigt.

: Bearbeitet durch User
von Crazy Harry (crazy_h)


Lesenswert?

Ach schau an ein AB-Sachsen-Fühler :oD Einen anderen Typ von denen, hab 
ich zigfach im Einsatz: Öltemperaturmessung bei Motorrädern (Conrad 
188103). Wie ich gesagt hab: Parallel-R und ein OP. Mit einer 
Widerstandsdekade eine Wertetabelle erstellen (Temperatur zu ADC) und in 
der Software eine LookUp-Tabelle. Ich messe so mit 1°C genau von 
-10..155°C. Als Controller verwende ich ATMega/ATXmega.

von m.n. (Gast)


Lesenswert?

Be Ti schrieb:
> Zur Mess-Hardware: Da ist geplant, den Sensor mit Konstantstrom zu
> versorgen. Entsprechend findet sich dessen Kennlinie in der variierenden
> E-Spannung ja wieder. Ist es korrekt, aus dem bekannten Wert für den
> K-Strom und jeweiligen Widerstandswert (aus der Tabelle entnommen) auf
> die Spannungshöhe zu rechnen/ zu schließen, schlicht nach Ohmschen
> Gesetz?

Konstantstrom ist nicht notwendig, wenn man ratiometrische Messungen 
macht.
Aktuell hatte ich dazu etwas geschrieben, und wenn Du ganz ans Ende des 
Beitrages gehts, findest Du eine Auswertung mit Tabellen. 
Beitrag "PT1000, einfache Auswertung mit AVR (ATmega328)"

Bei Deinen Ansprüchen würde ich keinen NTC nehmen. Auch ein PT1000 muß 
es nicht unbedingt sein. Ein guter Kompromiss wäre m.E ein KTY81/110, 
der eine gut definierte Kennlinie hat und von Hause aus mit 1% Toleranz 
geliefert wird. Der TK ist etwa doppelt so groß wie bei einem PT1000. 
Siehe hier: 
http://www.reichelt.de/KTY-81-110/3/index.html?&ACTION=3&LA=446&ARTICLE=9594&artnr=KTY+81-110&SEARCH=kty81

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist ein schönes Projekt zum NTC berechnen:

http://sourceforge.net/projects/thermistor/files/

Hab ich mal für die Tabellenwerte des speziellen NTC gemacht (wenn ich 
alle richtig gedeutet habe).
Das Ergebnis in Libreoffice-calc als Bild.
c1 bis c4 sind Koeffizienten für den NTC und die Formeln zum berechnen 
der Temperatur aus dem Widerstand sind auch ersichtlich.
Die sind aber nicht wirklich µC-freundlich :-)

Ich denke die sinnvollste Variante ist nachher eine Tabelle mit der 
Zuordnung:
ADC-Wert(8bit) -> Temperatur.

Ist nur die Frage wie die am leichtesten für die Anwendung zu erstellen 
ist.

Ich würde die Schaltung aufbauen die über LED erst Mal den ADC Wert 
ausgibt, den Sensor in einen Topf Öl auf den Herd stellen und langsam 
erhitzen und mit Vergleichsthermometer die Zuordnung ADC-Temp notieren.
Geht natürlich auch beim abkühlen oder automatisiert.
Z.B. hab ich hier ein Multimeter das auch Temperaturen messen kann und 
einen Triggereingang hat. Das könnte bei jeder ADC-Wert Änderung einen 
Impuls kriegen und die Temperatur speichern.

Möglichkeiten gibt es viele...

von Wolfgang (Gast)


Lesenswert?

Karl Heinz schrieb:
> Solange es um Gleichstrom und Widerstände geht, gilt das Ohmsche Gesetz
> IMMER.

Das "IMMER" gilt allerdings nur für ohmsche Widerstände, da sich das 
Ohmsche Gesetz darauf verläßt, dass ein linearer Zusammenhang zwischen 
Strom und Spannung besteht ;-)

von Be T. (wilhelmt)


Lesenswert?

m.n. schrieb:
> Konstantstrom ist nicht notwendig, wenn man ratiometrische Messungen
> macht.
Da ich durch den Dschungel der vielen alternierenden Möglichkeiten einen 
Weg finden muß, gestatte ich es mir, den obigen Satz mal umzukehren: 
Warum sollte ich mich auf komplizierte Steuerungen einlassen, wenn es 
ein simples und preiswertes Stromregel-IC nicht nur tut, sondern sogar 
sehr gut tut.
> Bei Deinen Ansprüchen würde ich keinen NTC nehmen.
Dass geht jetzt hier wie in vielen anderen Freds: Wer in der Mitte 
einsteigt, bekommt die Info vom Anfang nicht mit: An dem genannten 
Sensor führt aus technischen Gründen kein Weg vorbei, dieser oder 
keiner.
@ crazy_h: Jawoll, du Sachse! Der Sensor ist von TT-electronics, wird 
vertrieben von AB Elektronik Sachsen, von privat zu beziehen aber nur 
über so freundliche Beschaffungsvermittler wie Condrad. Ein sehr 
ähnlicher S ist in deren Katalog gelistet, dieser hier geht nur über 
Einzelbezug.
Und ja doch, auch dieser soll die Temp von Öl messen, diesmal im Auto. 
Und weil im konkreten Fall 8,5 Liter (in Worten: ACHT) dauernd um die 
Fühlerspitze umeinander schwappen, ist an eine Eigenerwärmung des 
Sensors nich zu denken, solange man irgendwo bei 1 bis 5 mA bleibt.
@hp-freund: Das Eichen, bzw. Selbstauslesen der Sensor-Temp!!! 
Schwitz!!Is klar, lag auf der Hand, aber nicht in meiner! Hatte mir eine 
Messanordnung aufgebaut mit mittelgroßem Kunststoffkanister, den innen 
ausgeschäumt, darein einen Glasbecher, darein einen Wärmestab für 
Ätzanlagen, den mit hochgenauer Regelelektronik (ehemals Farbfoto- 
Entwicklung) angesteuert und verdammt, verdammt nur streuende Temp-Werte 
erhalten. Dann den Sensor raffiniert in mehrere Lagen Schrumpfschlauch 
über- und hintereinander eingeschweißt, damit kein Wasser an die 
Anschlüsse gelangt. Voll raffiniert, aber das Wasser war raffinierter. 
Immer diffundierte da Feuchtigkeit durch und verdarb jedwede Messung. 
Irgendwann hab ich's aufgegeben und hoffe nun darauf, dass die einfache, 
ohmsche Umrechnung der aus der Tabelle entnommenen Widerstandswerte auf 
die "richtige" Spannung und damit die Temp führt.
Gruß, wilhelmT

von Karl H. (kbuchegg)


Lesenswert?

Be Ti schrieb:

> Irgendwann hab ich's aufgegeben und hoffe nun darauf, dass die einfache,
> ohmsche Umrechnung der aus der Tabelle entnommenen Widerstandswerte auf
> die "richtige" Spannung und damit die Temp führt.

Wie kommst du da drauf?

Es ist ja nicht das warme Wasser, das dich narrt, sondern die Messung 
mit dem ADC, die keinen stabilen Wert ergibt.

Ich geh mal davon aus, dass du dein warmes Wasser auch umgerührt hast. 
Denn generell ist dieser Unsinn ja recht verbreitet, Temperaturen auf 
hunderstel Grad anzugeben. Weil schon mal irgendjemand in freier 
Wildbahn irgendein Medium gesehen hat, dass in einem nennswerten Volumen 
eine wirklich homogene Temperatur hat. Langer Rede kurzer Sinn: es ist 
völlig normal, dass 2 Thermometer ohne besondere Vorkehrungen eben nicht 
auf 2 Nachkommastellen identische Ablesungen ergeben.

Alles in allem. Ob du mit einer bekannten Temperatur kalibrierst oder ob 
du das theoretisch aus dem Widerstandswert herleitest, ist Jacke wie 
Hose. Wenn du da keine sauberen Werte kriegst, kriegst du auch dort 
keine sauberen Werte und du musst nachsehen, wo du in deinem Aufbau 
elektrisch geschlampt hast.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Be Ti schrieb:
>> Bei Deinen Ansprüchen würde ich keinen NTC nehmen.
> Dass geht jetzt hier wie in vielen anderen Freds: Wer in der Mitte
> einsteigt, bekommt die Info vom Anfang nicht mit: An dem genannten
> Sensor führt aus technischen Gründen kein Weg vorbei, dieser oder
> keiner.

Gut, das hatte ich überlesen.

Be Ti schrieb:
>> Konstantstrom ist nicht notwendig, wenn man ratiometrische Messungen
>> macht.
> Da ich durch den Dschungel der vielen alternierenden Möglichkeiten einen
> Weg finden muß, gestatte ich es mir, den obigen Satz mal umzukehren:
> Warum sollte ich mich auf komplizierte Steuerungen einlassen,

Ratiometrisch ist die unkomplizierteste Methode.

Be Ti schrieb:
> Und ja doch, auch dieser soll die Temp von Öl messen, diesmal im Auto.

Das hättest Du am Anfang schreiben sollen.
Dann laß Dir die Tabelle von Crazy H. geben und sieh zu, daß die 
Toleranzen so gering sind, daß garnicht abgeglichen werden muß.
NTCs haben in der Regel die gröbsten Toleranzen, aber wenn sie auf 1% 
selektiert sind, kann man nicht meckern.

Karl Heinz schrieb:
> Es ist ja nicht das warme Wasser, das dich narrt, sondern die Messung
> mit dem ADC, die keinen stabilen Wert ergibt.

Da könnte man einen 2. Kanal zur Referenzmessung verwenden. Wenn der ADC 
mehr als 8 Bit liefert, sollte er hinreichend genau arbeiten.

von Be T. (wilhelmt)


Lesenswert?

Karl Heinz schrieb:
> Es ist ja nicht das warme Wasser, das dich narrt, sondern die Messung
> mit dem ADC, die keinen stabilen Wert ergibt.
> Ich geh mal davon aus, dass du dein warmes Wasser auch umgerührt hast.
> Denn generell ist dieser Unsinn ja recht verbreitet, Temperaturen auf
> hunderstel Grad anzugeben.
Nein, "kbuchegg", doch das warme Wasser!
Aber bevor ich das erläutere:  Wenn ich einen Namen fürs Zitat nenne, 
wird dann der erste Teil genommen oder der "Blaue" in Klammern?
Also nein, es ist wirklich das Wasser, welches mich narrte. Soweit war 
ich ja noch lange nicht, dass ein µC zum Einsatz kam. Stattdessen kam - 
das wird vielleicht unseren Sachsen freuen - ein Thermometer (T) aus 
DDR-Zeiten zum Einsatz, ein hochgenaues Spezial-T, das via Ebä aus 
Laborbeständen verkauft wurde. Dazu noch für die unteren Bereiche ein T 
aus dem Farbfoto-Labor-Bedarf. Dazu noch ein hoch genauer Meßzusatz für 
ein Multimeter. Alle 3 können nicht gleichzeitig gesponnen und auch noch 
die gleiche Abweichung angezeigt haben!
Umrühren..? Au man, da habe ich die Glas-Ts aufs Äußerste strapziert 
beim Rühren. Ne, so unbedarft bin ich nicht.
Immer war Wasser unter den Schrumpfschläuchen hindurch diffundiert und 
hatte sich in Pfützen am Anschluss-Sockel zur Fete eingefunden, und 
schwups - verschwanden die Messwerte im Nirwana. Ich bekam den Sensor 
nicht dicht. Der ist auch mitnichten so niedlich wie die Üblichen, hier 
kolportierten. Den kann man auch nicht einfach in ein Glasrohr stecken 
und das unten verschweißen. Gebraucht würde ein Schlosser, der ein 
Gewinde zu drehen in der Lage ist, und dann....
Die Ansprüche an die Genauigkeit der Anzeige sind bescheiden. Genau 
sollte es nur in einem einzigen Bereich sein, so um die 70 Grad. Aber 
auch da würden 2 % schon sehr gut sein. Nachkommastellen sollen eh' gar 
nicht angezeigt werden. Ob z.B. angezeigte 30° C nun 26° C oder 34° C 
"in Echt" wären, ist weitgehend belanglos und bleibt dem persönlichen 
Ergeiz überlassen.
Gruß, wilhelmT

: Bearbeitet durch User
von 6A66 (Gast)


Lesenswert?

Be Ti schrieb:
> Wer kann mir einen Weg aufzeigen, aus den  Wertepaaren eine Formel zu
> erstellen, die eine 8-bit-MPU zur Umrechnung gebrauchen kann?
> Grüße, wilhelmT

Das mit Fließkomma auf einem 8-bitter zu rechnen ist Schwachsinn.
Nimm ein "selbstgebautes" Festkomma.

Der Sensor ist mit einem 470R nach +5V gespannt, Mittelabgriff geht auf 
den ADC (+5V - 470R -o(ADC) - NTC - GND)

Der Sensor kann dann über ein Polynom 4.Grades approximiert werden.
Excel gibt mir aus:
y = -3,94E-13x4 - 9,11E-10x3 + 1,97E-05x2 - 8,63E-02x + 1,76E+02
y= TEMP [0...120]
x = Digit[12 bit]

Die ganze Rechnung machst Du int32.

Coeff1 = 1760;
Coeff2 = -(Digit * 863) / 1000;
Xpower2 = (Digit * Digit) / 10000;
Xpower3 = -(Xpower2 * Digit) / 10000;
Xpower4 = (Xpower2 * Xpower2) / 100;
Coeff3 = (197 * Xpower2)/100;
Coeff4 = (911 * Xpower3) / 1000;
Coeff5 = -(4 * Xpower4) / 100;
Temp = Coeff1 + Coeff2 + Coeff3 + Coeff4 + Coeff5; // Temp ist der 
zehnfache Wert, also mit einer Nachkommastelle).
(ohne besondere Optimierungen, geht sicherlich noch genauer).

Nach Excel (Festkomma nachgebildet) komme ich damit auf etwa +/-1,5Grad 
Abweichung.

rgds

von Karl H. (kbuchegg)


Lesenswert?

6A66 schrieb:
> Be Ti schrieb:
>> Wer kann mir einen Weg aufzeigen, aus den  Wertepaaren eine Formel zu
>> erstellen, die eine 8-bit-MPU zur Umrechnung gebrauchen kann?
>> Grüße, wilhelmT
>
> Das mit Fließkomma auf einem 8-bitter zu rechnen ist Schwachsinn.

Nicht unbbedingt.

Kommt drauf an, was der µC sonst onch so zu tun hat.
Für nicht benutztes Flash gibt es kein Geld zurück. Genausowenig wie für 
nicht benutzte Rechenzeit.

Ein µC in einem Fahrzeug, welche die Öltempertur anzeigt, hat alle Zeit 
der Welt. Dafür hat er erst mal keine Probleme mit den Faktoren in der 
Festkommarithmetik.

PS: Wenn schon Festkommaarithmetik, dann mit Vielfachen von 2. Mit 
Vielfachen von 10 kannst du dir den Aufwand auch schon sparen. Da kosten 
dir diese ganzen Divisionen mehr, als wenn du simpel Fliesskomma 
rechnest. (OK, ist jetzt übertrieben ausgedrückt)

von Vlad T. (vlad_tepesch)


Lesenswert?

6A66 schrieb:
> Das mit Fließkomma auf einem 8-bitter zu rechnen ist Schwachsinn.
Wenn genug Flash und Cpu-Zeit frei ist... who cares?
Für ungenutzten Flash oder CPU-Zeit gibts kein Geld zurück.
Und ein bisschen Messwerte geradebiegen sollte immer noch ein paar 1000 
mal pro Sekunde möglich sein.

> Nimm ein "selbstgebautes" Festkomma.
Aber immer schön durch so ungerade Zahlen, wie 100, 1000 oder 10000 
teilen...


Edit:
Lol. da war KHB schneller und das fast mit gleichem Wortlaut :-)
Notiz an mich: nach dem Tee holen noch mal aktualisieren.

: Bearbeitet durch User
von Be T. (wilhelmt)


Lesenswert?

Ähm...."6A66".....das ist wirklich sehr reizend von dir, dass du dir die 
Arbeit mit einer Excel-Tabelle, bzw. einer Formel gemacht hast. Danke 
sehr.
Jetzt habe ich ein neues Problem: Meine aktuellen Mathekenntnisse 
reichen nicht aus. Hatte zwar ein Gymnasium besucht, aber das war ein 
altsprachliches G. So Neumodisches wie Naturkunde, wozu auch Mathe 
gehörte, lief dort unter ferner liefen. Und das alles ist lange her.
Was sollen die ganzen "Xpower" und "Coeffs" bedeuten? Hm....
Zur Rechenzeit des µCs. Der soll genau drei Dinge tun: Den Messwert des 
Sensors einlesen, das Umrechnen und drittens alles auf eine dreistellige 
LED-Anzeige ausgeben (wobei nicht multiplext werden soll, der 
Platinenplatz ist reichlich, und der angestrebte PIC hat 5 ganze Ports).
Die Aktualisierung der Anzeige ist mehr als ausreichend alle 10 
Sekunden, da wäre nach meinem laienhaften Verständnis vermutlich viel 
Zeit, den µC mit Rechenaufgaben zu beschäftigen.
Gruß, wilhelmT

von Crazy Harry (crazy_h)


Lesenswert?

Be Ti schrieb:
> @ crazy_h: Jawoll, du Sachse! Der Sensor ist von TT-electronics, wird
> vertrieben von AB Elektronik Sachsen, von privat zu beziehen aber nur
> über so freundliche Beschaffungsvermittler wie Condrad. Ein sehr
> ähnlicher S ist in deren Katalog gelistet, dieser hier geht nur über
> Einzelbezug.
> Und ja doch, auch dieser soll die Temp von Öl messen, diesmal im Auto.
> Und weil im konkreten Fall 8,5 Liter (in Worten: ACHT) dauernd um die
> Fühlerspitze umeinander schwappen, ist an eine Eigenerwärmung des
> Sensors nich zu denken, solange man irgendwo bei 1 bis 5 mA bleibt.

Als Bayer nehm ich das jetzt persönlich :oD  :oP
Ersten hießen die vor ca. 10 Jahren nur "AB-Sachsen" und 2. wenn die den 
nicht herstellen, wie konnte ich dann damals (aufgrund eines netten 
Mails an die) ca. 50 Temperatursensoren (die die in den Fühlern 
eingebaut sind) von denen bekommen ?

4.7 KOhm an +5V und einen Verstärker (ich nehm den TS912). So berechnen, 
daß dein gewünschter Temperaturbereich optimal als Ausgangsspannung 
0..5V raus kommt. Parallelwiderstand mit Excel-Tabelle ermitteln und 
eine LookUp-Tabelle.

von Mike A. (Gast)


Lesenswert?

6A66 schrieb:
> Der Sensor kann dann über ein Polynom 4.Grades approximiert werden.

Wenn man den Sensor alleine approximiert, handelt man sich eine relativ 
hohe Dynamik der Messdaten (i.e. geringe Auflösung bei hohen 
Temperaturen) ein. Einen Widerstand parallel zum NTC sollte man schon 
einsetzten und dann entsprechend bei der Approximation mit einbeziehen.

Crazy H. schrieb:
> Probiers mal mit einem Parallel-Widerstand zum NTC

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Da ein bestimmen des Temp/R Verhältnis ein Problem zu sein scheint, hier 
ein anderer Vorschlag:

- mit einem REF02 eine Referenzspannung von 5V erzeugen
- diese über 1k R an den NTC, dann Masse
- den Ref Eingang vom PIC/AVR ebenfalls von REF02 speisen
- die Verbindung vom R zum NTC über einen Rail-to-Rail OPV puffern und 
an den ADC vom Controller

Die Tabelle für das Verhältnis von 8bit ADC zu Temperatur gibts im 
Anhang.

Zusammengefasst bedeutet das die vorgegebenen Tabellendaten aus dem NTC 
Datenblatt werden verwendet und im µC ist für den Temperaturbereich von 
0-120°C nur eine Tabelle mit 121 Einträgen nötig.

von Helmut S. (helmuts)


Lesenswert?

Wenn man sich die Tabelle ansieht, dann stellt man schnell fest, dass 
man mindestens einen ADC mit 10bit benötigt. Besser wäre es einen 
12bit-ADC zu nehmen.

von hp-freund (Gast)


Lesenswert?

@ Helmut,
wieso stellst Du das fest?
Die gforderten 2% Genauigkeit werden nur im oberen Temp. Bereich ein 
paar Mal berührt, sonst ist es eine Auflösung von 1°C.
Z.B. kann ADC-Wert 29 für 114 oder 115°C stehen.

Damit sind die Anforderungen erfüllt ...

von Karl H. (kbuchegg)


Lesenswert?

Helmut S. schrieb:
> Wenn man sich die Tabelle ansieht, dann stellt man schnell fest, dass
> man mindestens einen ADC mit 10bit benötigt. Besser wäre es einen
> 12bit-ADC zu nehmen.

Bei der Öltermperatur in einem Auto ist die Abweichung aber sowas von 
egal. Egal was angezeigt wird, sie stimmt ja sowieso nicht damit 
überein, was sich im Zylinderkopf abspielt. Im Grunde würden es 5 Led 
'kalt', 'lau', 'mittel', 'warm', 'aber sowas von heiss' auch tun.

: Bearbeitet durch User
von LostInMusic (Gast)


Lesenswert?

Wenn sich jemand mit einem 10bit-ADC besser fühlt, ist das aber auch 
kein Problem.

Es genügt übrigens, statt der absoluten ADC-Werte nur jeweils die 
Differenz zweier benachbarter Einträge zu speichern. Dann benötigt man 
für die Tabelle auch weiterhin nur 121 Bytes (sonst das Doppelte). Falls 
dagegen Speicherplatz üppig zur Verfügung steht, könnte man sogar in der 
Tabelle gleich die entsprechenden Ziffern der drei Displaystellen 
mitablegen. Dann erschöpft sich die Rechenarbeit des µC praktisch nur 
noch in der Bestimmung des korrekten Tabellenindex aus dem gemessenen 
ADC-Wert.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Angehängte Dateien:

Lesenswert?

Meßtechnik !
Wer mißt mißt Mist!

Ein Parallel-R zum Sensor ist Sch.... Das stammt aus einer Zeit, wo man 
mit analoger Technik arbeitete und mit diesen Parallel-Rs versuchte, die 
krumme Gerade zu linealisieren... braucht man in Zeiten eines uC nicht 
mehr, der kann rechnen(!).

Konstantstromquelle !!
Super Idee, starkes Wort, aber Sch....
Da mißt man an dem NTC eine Spannung und weiß gar nicht, welche 
Versorgungsspannung des ADC hat, wenn mann nicht hochgenaue Quellen 
einsetzt.
Jede zusätzliche Schaltung (REF-xx oder OP-Amp) bringt nur Ärger und 
Ungenauigkeit.

Rechne den ganzen Kram mit einem Vorwiderstand (ca. 470 Ohm oder 
weniger) in ein Spannungsverhältnis runter, das gibt der ADC direkt aus. 
Tabelle, Stützpunkte, interpolieren, Integer-Arithmetik... (oder das h 
an anderer Stelle).

Anbei mal eine Excel-Datei zum Spielen.
Man kann ja mal die VCC-Spannung ändern (Ungenauigkeit 
Versorgungsspannung) und sieht, daß sich der ADC-Wert nicht ändert, auch 
wenn die Meßspannung durch die Gegend geistert.

: Bearbeitet durch User
von vloki (Gast)


Lesenswert?

Bernd Rüter schrieb:
> Rechne den ganzen Kram mit einem Vorwiderstand (ca. 470 Ohm oder
> weniger) in ein Spannungsverhältnis runter, das gibt der ADC direkt aus.
> Tabelle

Würde ich (und viele obige) auch so machen. 8bit ADC reicht hier doch 
vollkommen aus, die Interpolation schon vorher machen (wenn es unbedingt 
sein muss in Excel - schneller gehts bestimmt nach Gefühl ;-)  Das Ganze 
in ein array und fertig.

@Wilhelm
Falls du jetzt nicht weisst, wie das mit dem array (der Tabelle) gemeint 
ist und du meine Doku noch nicht wutentbrannt gelöscht hast, dann schau 
mal bei analog Signale ausgeben. Da ist ein Beispiel mit einer 
Wertefolge

unsigned char signal_data[32] = {6, 7, 8, 7, 6, 6, 6, 4,22,31,0, 3, 6, 
6, 8, 9,11,12,11, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6}; //EKG an 5 bit 
DAC

Das entspräche deine Temperaturen. Das Ergebnis der ad Wandlung gibt dir 
dann die Position in dem Feld welches natürlich dann die Werte deiner 
Interpolation enhält

unsigned char temp[...];
...
Temperatur = temp[ADC_ergebnis];

von Be T. (wilhelmt)


Lesenswert?

Karl Heinz schrieb:
> Egal was angezeigt wird, sie stimmt ja sowieso nicht damit überein, was
> sich im Zylinderkopf abspielt. Im Grunde würden es 5 Led
> 'kalt', 'lau', 'mittel', 'warm', 'aber sowas von heiss' auch tun.
"Karl Heinz", "Karl Heinz"! Bleib bei µCs, da kennst du dich besser aus!
Eine Debatte über den Sinn und Unsinn von Anzeigegeräten im KFZ wollen 
wir in diesem Forum sicher nicht exaltieren, nur in Kürze: Eine brave 
Hausfrau braucht im Auto weder Wasser-Temp-Anzeiger (WTA), noch 
Öl-Temp-A. (ÖTA), noch 4 Leds und 99.99% aller Autofahrer brauchen auch 
keinen WTA, das Ding ist so überflüssig wie der berühmte Kropf. Einzig 
die ÖTA macht Sinn, weil nur die seriös ausgibt, bis zu welchem 
Zeitpunkt man tunlichst den Motor nicht belasten sollte, und ab wann 
dann doch. Und das ist etwa bei 70° C ÖL-Temp.
@ LostlnMusic: im PIC18F stehen 256 Byte EEprom zur Verfügung, bei den 
16-Bittern PIC24F gibts auch 512 Byte. Dein Gedanke, in einer Tabelle 
sofort den 7-Segm.-Code abzulegen, klingt gut, aber in Tab. kenne ich 
mich noch nicht aus.
@ Bernd Rüter: Stimmt, Linearisierungs-Bemühungen halte ich auch für 
wenig zielführend. Dann lieber genau messen und in einer Tabelle 
nachschauen. Aber Arbeit mit Tabellen, siehe unten.....
@ Vloki: Deine Doku, also das Script löschen? Nützt nix, die hatte ich 
doch komplett ausgedruckt! Zudem wäre ich ja mit mehreren Klammerbeuteln 
bearbeitet, wenn ich solche Hilfen nicht annehmen und nutzen würde. Aber 
auch hier gilt: verstanden habe ich deinen Hinweis nicht. Mit der 
genannten Zahlenreihe auf S. 71 kann ich schlicht nix anfangen, noch 
nicht...!
Wie soll ich mir das vorstellen mit so einer Tabelle? Wenn der ADC (aus 
Bernds Tabelle[danke]) einen Wert von genau 500 (dual) ausspuckt, wie 
oder woher weiß der µC dann, in welche Speicherzelle er springen soll? 
Oder ist das so, dass man dem µC den Job verpasst, "von unten" in der 
Tabelle fortlaufend "nach oben" hin nachzuschauen, ob die 500 nun gleich 
oder z.B. größer (kleiner) ist als der in einem Zellenplatz abgelegte 
Wert? Falls das so gehen sollte, is ja prima, aber außer der Freude, 
dass eine best. Zelle einen "passenden" Wert enthält, was genau nutzt 
das dem µC? Findet der in derselben Zelle einen Verweis auf eine andere 
Zelle, in welcher dann z.B. der von "LostlnMusic" [danke] angesprochene 
7-Segm.-Code für die LED-Ausgabe stehen könnte?
Gruß, wilhelmT

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

Das dachte ich mir ;-)

Also die Tabelle ist nur eine Folge von Werten. Die Werte stehen in 
einem Feld (Array). Jeder Eintrag hat eine Nummer. Die Nummer ist das 
was in den eckigen Klammern steht. Ok bei der Initialisierung am Anfang 
steht da nicht die Nummer sondern die Anzahl der Werte (die Größe des 
Feldes).

Das Array kann in verschiedenen Speicherbereichen stehen.
Im EEPROM, im ROM oder im RAM. Wenn es im RAM steht, dann muss es 
natürlich erst von einem der anderen Bereiche dahin geschrieben werden.
Das verschieben wir aber jetzt mal auf später !

Die Werte die in dem Feld stehen bekommst du, wenn du Bernds ? Tabelle 
komplettierst und für die Zwischenwerte interpolierst indem du für jeden 
ADC Wert eine Temperatur festlegst. Also füllst du praktisch die letzte 
Spalte a uf, damit alle Werte darin stehen. Dann hast du theoretisch für 
jeden ADC Wert eine zugehörige Temperatur.

In den Bereichen die aus deinem Interessensbereich raus laufen brauchst 
du nicht weiter zu machen.

Ich habe die Tabelle jetzt nicht vor mir, aber sagen wir einfach mal für 
0 Grad bekämst du den Wert 13 als Resultat vom ADC.
Dann würde das der erste Eintrag in deinem Feld sein. Der nächste 
Eintrag wäre die Temperatur für den ADC Wert 14.

Den hast du natürlich nicht, deshalb die Geschichte mit der 
Interpolation.
Nehmen wir wieder einfach an, der Wert für 5 Grad wäre 23, dann hättest 
du 10 ADC Schritte auf 5 Grad und müsstest ungefähr bei jedem 2. mal den 
Wert erhöhen. -> {*0*,1,1,2,2,3,3,4,4,5,*5*, ...
Die x Positionen sind jetzt die 0 und 5 Grad aus der Tabelle. 
Dazwischen sind die aufgefüllten (interpoliert)

Vermutlich saublöd erklärt, aber vielleicht raffst du es ja trotzdem.

Wie kommt es nun zu der richtigen Zuordnung ?
Weil dein kleinster Wert in der Tabelle (Array / Feld) zum ADC Wert 13 
gehört, musst du die 13 von ADC Wert abziehen um den Index Null zu 
erhalten, welches der erste Eintrag im Feld ist.

Angenommen du erhältst einen Wert vom ADC von 20. Dann gibt das 20-13 = 
7 als Index, was dem achten Wert entspräche. Das führt im obigen 
Beispiel zu einer Temperatur von 4 Grad.

Am oberen Bereich deines Interesses kannst du genauso verfahren. Wenn 
beispielsweise der ADC Wert von 187 der Temperatur von 120 Grad 
entspricht, dann ist alles größere uninteressant und muss nicht in das 
Feld mit den Temperaturwerten.

Bevor du den Index berechnest, prüfst du auf die Grenzen. Ist (in 
unserem Beispiel) der Wert kleiner als 13 zeigst du "---" oder so was 
an, bei einem Wert größer als 187 "888"

Wie gesagt, ich würde eine 8bit Auflösung wählen, dann sind die ADC 
Werte von 0..255. (8bit erhält man, wenn man von 10bit 2 ignoriert)

Das mit dem 7-Segment Code in der Tabelle würde ich nicht machen. Kann 
man natürlich, aber ich würde eine Funktion schreiben. Den Anzeige würde 
ich auch nur aktualisieren, wenn der Wert sich geändert hat ...

Ja ja, das mit der Lookup-Table (so nennt man das wohl) könnte man auch 
sehr einfach in Assembler realisieren (retlw ...), aber du willst dich 
ja mit C beschäftigen ;-)

UND man kann das alles auch rechnen mit Koeffizienten und pi pa po, ICH 
würde es eben so machen.

Hoffentlich hast du jetzt nicht mehr Fragen als vorher ...

: Bearbeitet durch User
von Hasso, Platz! (Gast)


Lesenswert?

>Oder ist das so, dass man dem µC den Job verpasst, "von unten" in der
>Tabelle fortlaufend "nach oben" hin nachzuschauen, ob die 500 nun gleich
>oder z.B. größer (kleiner) ist als der in einem Zellenplatz abgelegte
>Wert? Falls das so gehen sollte, is ja prima, aber außer der Freude,
>dass eine best. Zelle einen "passenden" Wert enthält, was genau nutzt
>das dem µC?

Ja, genau. Über einen Index (z. B. k), der inkrementiert wird ("k++") 
klapperst Du die Tabelle von oben nach unten ab. Bei jedem Eintrag 
prüfst Du, ob er größer (*) ist als der aktuelle ADC-Wert. Bei 
irgendeinem Tabellenindex ist das garantiert der Fall. Dort brichst Du 
die Suche ab. Der Wert, den die Indexvariable dann k hat, gibt direkt 
die Temperatur in °C an. Daraus musst Du dann nur die drei im Display 
anzuzeigenden Digits generieren. Oder Du bist ganz clever und läßt 
parallel zum Index k einen dreistelligen Dezimalzähler mitlaufen. Damit 
hättest Du dann sofort nach der Suche schon die Digit-Information 
vorliegen, ohne noch irgendetwas rechnen zu müssen.

So würde ich es machen. Meine Tabelle bestünde also aus 120 Einträgen 
mit ADC-Werten. Bei einem 10 bit ADC wäre sie (ohne Tricks) 240 Byte 
groß (mit Trick die Hälfte davon), würde also z. B. gerade in Dein 
EEPROM passen. Der Vorteil dieser Methode besteht darin, dass Du nichts 
interpolieren musst.

(Achtung, bitte nicht durcheinanderbringen: Andere Kollegen hier 
schlagen eine Tabelle mit 256 Temperatur-Einträgen vor - sie ist zu 
meiner gewissermaßen invers. Auch so funktioniert es. Wenn Du allerdings 
einen etwas besser auflösenden 10-bit-ADC verwenden willst, dann musst 
Du entweder zusehen, wo Du eine 1024 Einträge große Tabelle 
unterbringst, oder wie Du Zwischenwerte interpoliert. Auf beides hätte 
ich weniger Lust.)

von Be T. (wilhelmt)


Lesenswert?

@ Volker: Es ist etwas zu spät, als dass ich das beim ersten Durchlesen 
verstehen, geschweige denn repetieren könnte. Das wird noch 'ne Nuss 
werden.
Dass du soviel Geduld mit mir aufbringst, ist erstaunlich...... 
ähm....was trinkst du???

Hasso, Platz! schrieb:
> Der Wert, den die Indexvariable dann k hat, gibt direkt
> die Temperatur in °C an. Daraus musst Du dann nur die drei im Display
> anzuzeigenden Digits generieren.
Kuck an: schlichtes Deutsch und nur eine Variable drin!:) Sollte dem so 
sein (der Aufbau der Tab.), dann sehe ich Chancen, das zu verwirklichen. 
Für die Umrechnung auf die drei Digits habe ich schon ein Gerüst, sicher 
nix Raffiniertes, eher bodenständiges Abzählen......aber lass ma, als 
C-Anfänger muss ich nicht gleich raffiniert ans Werk gehen. Danke, 
Hasso, der Nebel wird schwächer.
Gruß, wilhelmT

von Wolfgang (Gast)


Lesenswert?

Bernd Rüter schrieb:
> Ein Parallel-R zum Sensor ist Sch.... Das stammt aus einer Zeit, wo man
> mit analoger Technik arbeitete und mit diesen Parallel-Rs versuchte, die
> krumme Gerade zu linealisieren... braucht man in Zeiten eines uC nicht
> mehr, der kann rechnen(!).

Es geht dabei nicht um das Linearisieren und das Vermeiden irgendwelcher 
Rechnereien, sondern um die Verringerung der Dynamik. Hättest du dein 
Excel-Worksheet über den vollen relevanten Temperaturbereich ausgedehnt, 
wäre dir das klar.
Wenn man etwas mehr als die Mindestanforderungen bezüglich Auflösung 
abdecken möchte, kommt ohne die Dynamikreduzierung ganz schnell der Ruf 
nach einem höher auflösenden Wandler, weil die Kennline bei hohen 
Temperaturen ziemlich flach wird und die Messung zusätzlich noch 
anfälliger für Störsignale wird.

Du hast noch nie Sensoren entwickelt, oder?

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Na dann werfe ich noch mal meinen Vorschlag von oben ein.
Die Datei: Temp-ADC8.txt habe ich für den Temperaturbereich 0-120°C aus 
dem Datenblatt des Z-S 088 erstellt und als LookUp Table im Prog 
eingesetzt.

Bei einem ADC Wert kleiner 25 also grösser 120°C wird von der Funktion 
121 zurückgegeben, bei ADC Wert grösser 218 also kleiner 0°C dann 255.

Diese Werte setzen eine stabile 5V Spannung voraus die über einen 1k 
Widerstand an den NTC gelegt werden. Die Messspannung muss mit einem OPV 
gepuffert werden, es sei denn das der µC ADC-Eingang einen hohen 
Eingangswiderstand hat. Siehe Datenblatt.

Im Anhang die Funktion in der ntc.h und ein Testprogramm das die ADC 
Werte von 0-255 Auswertet.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Hat der TE denn sein Dichigkeits-Problem gelöst?

Bis dahin ist jegliche weitere Diskussion vollkommen Banane, weil es 
nichts Brauchbares zu messen gibt ...

von Volker S. (vloki)


Lesenswert?

Be Ti schrieb:
> @ Volker: Es ist etwas zu spät, als dass ich das beim ersten Durchlesen
> verstehen, geschweige denn repetieren könnte. Das wird noch 'ne Nuss
> werden.

Die Lösung ist eigentlich viel simpler als die von HP, sogar ohne 
Variable und das Suchen entfällt ( also das was ein fauler Assembler 
Programmierer gerne vermeiden würde ;-)
ABER wie er schon anmerkte, doch etwas unpraktikabel falls du dir 
einreden lässt 10bit ADC Auflösung zu brauchen. Bei deinen Ansprüchen 
ist das meiner Meinung nach aber Quatsch.

Be Ti schrieb:
> Die Ansprüche an die Genauigkeit der Anzeige sind bescheiden. Genau
> sollte es nur in einem einzigen Bereich sein, so um die 70 Grad. Aber
> auch da würden 2 % schon sehr gut sein. Nachkommastellen sollen eh' gar
> nicht angezeigt werden. Ob z.B. angezeigte 30° C nun 26° C oder 34° C
> "in Echt" wären, ist weitgehend belanglos und bleibt dem persönlichen
> Ergeiz überlassen.

Du kannst es dir natürlich trotzdem aussuchen, du hast ja 10bit. Bei 
wenigen möglichen Mess-Werten auf jeden Fall die Interpolation der 
Mess-Werte. Bei vielen - die der Temperaturen und den Suchalgorithmus.

Natürlich gibt es auch noch viele andere Möglichkeiten. Wenn du jede 
Rechnerei vermeidest und nur im Sekundentakt misst, dann läuft den PIC 
ja nachher auf 31kHz Taktfrequenz mit einer Auslastung von <1%
(habe ich jetzt natürlich nicht nachgerechnet ;-)

PS: Ich kann mir nicht vorstellen warum die Tabelle ausgerechnet in das 
EEPROM sollte. Das ist meiner Meinung nach dafür da, Werte die sich 
während der Laufzeit des Programms ändern könnten zu speichern, damit 
man sie (die geänderten) auch nach Ausschalten und Wiedereinschalten 
noch zur Verfügung hat.

von 6A66 (Gast)


Lesenswert?

Mike A. schrieb:
> Wenn man den Sensor alleine approximiert, handelt man sich eine relativ
> hohe Dynamik der Messdaten (i.e. geringe Auflösung bei hohen
> Temperaturen) ein. Einen Widerstand parallel zum NTC sollte man schon
> einsetzten und dann entsprechend bei der Approximation mit einbeziehen.

Hallo Mike

Der Sensor war mit einem normalen Spannungsteiler approximiert. 
Natürlich kann man auch noch Parallelwiderstand verwenden, kommt hat ein 
anderes Polynom raus, kann man wieder durch Integer nachbilden.

Sinn und Zweck war zu zeigen, dass das mit einfachen Integer-Rechnungen 
geht. Die Tabelle geht natürlich auch - wie es beliebt.

Vlad Tepesch schrieb:
>> Das mit Fließkomma auf einem 8-bitter zu rechnen ist Schwachsinn.
> Wenn genug Flash und Cpu-Zeit frei ist... who cares?
> Für ungenutzten Flash oder CPU-Zeit gibts kein Geld zurück.
> Und ein bisschen Messwerte geradebiegen sollte immer noch ein paar 1000
> mal pro Sekunde möglich sein.

Right, das stimmt auch.

BTW: Ich hab' das hier als Int32 ausgelegt. Das geht - wie im 
implementeriungsfall auf einerm Cortex-M3 -in nullkommanichts. Das ist 
auf einem 8-bitter natürlich schwieriger, speziell auch die division 
durch 100,1000,... . Kann man aber auch umrechnen so dass die division 
dann durch shift machbar ist.

Helmut S. schrieb:
> Wenn man sich die Tabelle ansieht, dann stellt man schnell fest, dass
> man mindestens einen ADC mit 10bit benötigt. Besser wäre es einen
> 12bit-ADC zu nehmen.

Das Beispiel war mit 12-bit gerechnet ohne Betrachtung der 
Bauteiltoleranzen und ADC-Fehler.

Be Ti schrieb:
> Ähm...."6A66".....das ist wirklich sehr reizend von dir, dass du dir die
> Arbeit mit einer Excel-Tabelle, bzw. einer Formel gemacht hast. Danke
> sehr.

War etwa 30...45min - halt mal eine Herausforderung.

Be Ti schrieb:
> Was sollen die ganzen "Xpower" und "Coeffs" bedeuten? Hm....
> Zur Rechenzeit des µCs. Der soll genau drei Dinge tun: Den Messwert des
> Sensors einlesen, das Umrechnen und drittens alles auf eine dreistellige
> LED-Anzeige ausgeben (wobei nicht multiplext werden soll, der
> Platinenplatz ist reichlich, und der angestrebte PIC hat 5 ganze Ports).
> Die Aktualisierung der Anzeige ist mehr als ausreichend alle 10
> Sekunden, da wäre nach meinem laienhaften Verständnis vermutlich viel
> Zeit, den µC mit Rechenaufgaben zu beschäftigen.
> Gruß, wilhelmT

Xpower2 = x^2
Coeff2 = 2.Koeffizient (gesamt) des Polynoms.
Sind Variablen die ich in C so als Int32 verwenden würde.

Wenn Du soviel Zeit hast könntest Du auch Floating-Point Arithmetik 
machen.
Aber das ist sicher nicht das größte Problem. Die Werte die Du vom ADC 
bekommnet - hier mal mit 12-bit wie bei uns auf einen Cortex-M3 
implementiert - werden sicher um ein paar Digits hin- und hertanzen. Was 
Du dazu brauchst ist eine vernünftige Glättung die auch beim ersten 
Einschalten schnell reagiert. Sieh auch unter Oversampling nach.
Thema Mathematik: Jou, das was ich im Gymnasium mal hatte und dann im 
Studium ist auch schon sehr lange her, da müsste ich mich auch noch mal 
aufsynchronisieren. Daber dafür hat's dann doch gereicht :) Einfach mal 
nach Polynomen schauen udn ein bischen mit Excel spielen.

Hasso, Platz! schrieb:
> So würde ich es machen. Meine Tabelle bestünde also aus 120 Einträgen
> mit ADC-Werten. Bei einem 10 bit ADC wäre sie (ohne Tricks) 240 Byte
> groß (mit Trick die Hälfte davon), würde also z. B. gerade in Dein
> EEPROM passen. Der Vorteil dieser Methode besteht darin, dass Du nichts
> interpolieren musst.

Das wäre so die einfachste Art, Nachkommastellen sind nicht vernünftig 
da das Ergebnis ohnehin ungenauer als 1 grad werden wird 
(Bauteiltoleranzen, Messtoleranzen).

rgds

von Volker S. (vloki)


Lesenswert?

Hasso, Platz! schrieb:
> Ja, genau. Über einen Index (z. B. k), der inkrementiert wird ("k++")
> klapperst Du die Tabelle von oben nach unten ab. Bei jedem Eintrag
> prüfst Du, ob er größer (*) ist als der aktuelle ADC-Wert. Bei
> irgendeinem Tabellenindex ist das garantiert der Fall. Dort brichst Du
> die Suche ab. Der Wert, den die Indexvariable dann k hat, gibt direkt
> die Temperatur in °C an. Daraus musst Du dann nur die drei im Display
> anzuzeigenden Digits generieren.

Der Temperatur könnte doch aber viel näher am kleineren Wert liegen, 
oder ?   (ok, muss ja nur auf 1° genau sein)

Hasso, Platz! schrieb:
> Oder Du bist ganz clever und läßt
> parallel zum Index k einen dreistelligen Dezimalzähler mitlaufen. Damit
> hättest Du dann sofort nach der Suche schon die Digit-Information
> vorliegen, ohne noch irgendetwas rechnen zu müssen.

Das mit dem dreistelligen Dezimalzähler kapiere ich nicht.

: Bearbeitet durch User
von Be T. (wilhelmt)


Lesenswert?

Au man, jetzt schlagen die hilfreichen Angebote schon - wenn auch per 
Zufall - aber immerhinque im Minutentkt ein.
Ein offenes Wort: Und sie erschlagen mich! Das soll natürlich keine 
Beschwerde sein. Ich möchte damit nur ausdrücken, dass es mir sehr leid 
tut, zu sehen, wieviel Mühe ihr euch gebt und wieviel Zeit ihr da auch 
aufwendet.....und ich komme da auch im Ansatz nicht hinterher. Für mich 
ist ja noch eine einfache Schleife in C ein Abenteuer.
Ich speichere aber fleißig alles ab, drucke es teilweise aus, hefte ab, 
und blättere im Datenwald (D-Handbüchern). Es ist so schade, dass ihr 
keine adäquate Rückkopplung für euren Einsatz bekommt. Es wird aber 
NICHTS übersehen oder nicht beachtet oder nicht vergessen! (Hab' ich 
jetzt eine Verneinung zuviel drin???)
Frank Esselbach schrieb:
> Hat der TE denn sein Dichigkeits-Problem gelöst?
Nein, hat er nicht. Aber heute werde ich versuchen, einen Schlosser 
aufzutreiben, der mir helfen kann, den leider sehr großen Sensor in 
irgendein Gehäuse - vielleicht Metall-Rohr mit unten angelöteter Platte 
und da drin ein Gewinde für den S - zu verpacken.
Evtl. ist das aber auch gar kein Problem, denn letztendlich kommt der S 
als direkter Ersatz für die Ölablassschraube unten in die Ölwanne. Und 
das wird bestimmt dicht, ist schließlich ein orig. Ersatzteil und auch 
kein China-Import. Zudem: Auf meine versuchten Eichmessungen kann ja 
verzichtet werden, wenn man die exakt angegebenen Widerstandswerte aus 
der Tabelle des Herstellers nimmt und dann schlicht sich an den Herrn 
Ohm erinnert. Die Genauigkeit der Anzeige soll ja nur bei 70°C 
hinreichend sein, in allen anderen Bereichen reicht es aus, zu wissen: 
Ne, das Öl ist noch genauso kalt wie mir auch oder aber: Nu' kocht das 
Öl, also runter vom Gaspedal!
@ hp-freund: Alles wieder runtergeladen, schaue heute im Laufe des Tages 
rein. DANKE!
Gruß, wilhelmT

von 6A66 (Gast)


Lesenswert?

Be Ti schrieb:
> Die Genauigkeit der Anzeige soll ja nur bei 70°C
> hinreichend sein, in allen anderen Bereichen reicht es aus, zu wissen:
> Ne, das Öl ist noch genauso kalt wie mir auch oder aber: Nu' kocht das
> Öl, also runter vom Gaspedal!

Na, dann kann man ja die Tabelle noch kürzer machen :) zwischen 0 und 60 
Grad in 5 Grad Schritten, danach in 1 oder 2 Grad Schritten, ab 80 Grad 
dann wieder in 5 Grad Schritten.

Ich denke Du hast jetzt ausreichend Spielmöglichkeiten, Viel Erfolg.

rgds

von m.n. (Gast)


Lesenswert?

Be Ti schrieb:
> Au man, jetzt schlagen die hilfreichen Angebote schon - wenn auch per
> Zufall - aber immerhinque im Minutentkt ein.

Ich weiß ja nicht, was an Vorschlägen hilfreich sein soll, die vor 30 
Jahren als Lösung taugten. Teilweise in Assembler, dann soll nicht im 
Dezimalsystem gerechnet werden, 'float' ist böse und die Wandlung eines 
zweistelligen Wertes für die 7-Segment-Anzeige wird zum riesigen Problem 
aufgeblasen.

Be Ti schrieb:
> Das Prog soll in C erstellt werden.

In C ist die Programmierung doch Kinderkram. Für jeden einzelnen 
Programmpunkt gibt es in der Codesammlung genügend beispielhafte 
Lösungen.
Einfach einmal suchen!

von Udo S. (urschmitt)


Lesenswert?

6A66 schrieb:
> Be Ti schrieb:
>> Die Genauigkeit der Anzeige soll ja nur bei 70°C
>> hinreichend sein, in allen anderen Bereichen reicht es aus, zu wissen:
>> Ne, das Öl ist noch genauso kalt wie mir auch oder aber: Nu' kocht das
>> Öl, also runter vom Gaspedal!
>
> Na, dann kann man ja die Tabelle noch kürzer machen :) zwischen 0 und 60
> Grad in 5 Grad Schritten, danach in 1 oder 2 Grad Schritten, ab 80 Grad
> dann wieder in 5 Grad Schritten.

Nö, jetzt reichen sogar 3 Leds und ein einfacher Fensterkomparator.
;-)

von asdfgd (Gast)


Lesenswert?

ich hab den quatsch oben nicht gelesen.

die ist ein auszug aus einem alten programm. das ordnet einer frequenz 
ein volumina zu. und interpoliert zwischen den werten linear. kann also 
als 2 zeilige tabelle betrachtet werden oben frequenzen unten volumina.

das alles ohne float usw sonden maximal 16 bit int

1
// feld der frequenzen  
2
usint freq[31]={2277,2330,2386,2441,2496,2561,2623,2694,2759,\
3
2841,2932,3001,3099,3195,3297,3413,2519,3626,3767,3902,4050,\
4
4210,4380,4570,4810,5040,5290,5570,5880,6230,6550};
5
// feld der zugeordneten volumina
6
usint volu[31]=\
7
{3152,3127,3102,3077,3052,3014,2945,2856,2755,2642,2519,2390,2255,2115,1971,\
8
1824,1676,1526,1377,1228,1081,937,789,662,533,411,298,196,108,37,0};
9
/*!!! aus der später folgenden interpolierung dürfen 
10
die jeweiligen deltas der frequenzen multipliziert 
11
mit den deltas der volumina nicht 2^16(65xxx) überschreiten 
12
also bei 150 volumenschritten max 436hz schritte im freq bereich*/
13
14
......
15
......
16
......
17
18
MAIN
19
20
21
  {              // zuordung des messwertes ins frequenzfeld
22
   for (arraypos=0; freq[arraypos]<=messwert;){ 
23
    arraypos++;
24
    }
25
   if (freq[arraypos]==messwert) // gleicheit des messwertes mit feldelement?
26
    volout=volu[arraypos];    // wenn gegeben, berechnung nicht nötig 
27
   else               // bei ungleicheit, inerpolation notwendig
28
    {i=arraypos-1;        // i zeigt auf vorhergehendes feldelemnt 
29
    
30
    // berechnung des volumens durch interpolieren 
31
    volout=((((volu[i]-volu[arraypos])*(freq[arraypos]-messwert))\
32
      /(freq[arraypos]-freq[i])))+volu[arraypos];
33
    }

von Volker S. (vloki)


Lesenswert?

m.n. schrieb:
> Be Ti schrieb:
>> Das Prog soll in C erstellt werden.
>
> In C ist die Programmierung doch Kinderkram. Für jeden einzelnen
> Programmpunkt gibt es in der Codesammlung genügend beispielhafte
> Lösungen.

Ich glaub meine Assembler Andeutungen sind etwas missverständlich.
Ich wollte damit nicht sagen "programmiere das gefällig in Assembler"

Natürlich ist die Programmierung in "C" Kinderkram. Wilhelm will sich ja 
Anhand des Projektes mit C beschäftigen also genau das richtige.
Nur weil jetzt aber in C programmiert wird, muss man doch aber die 
Architektur des verwendeten Controllers nicht ignorieren oder völlig 
unnötig komplexe Rechnungen anstellen weil das in C ja so einfach ist.

Be Ti schrieb:
> Au man, jetzt schlagen die hilfreichen Angebote schon - wenn auch per
> Zufall - aber immerhinque im Minutentkt ein.
> Ein offenes Wort: Und sie erschlagen mich!

Ja, scheint in diesem Forum so zu sein. Ich bin auch neu hier und etwas 
erschlagen von den Längen der Threads. Leider ist ausgerechnet meiner 
eine Ausnahme :-(
Ich glaub ich muss mal ein bisschen zurückhalten und abwarten, wenn es 
eh schon 100.000 Meinungen gibt ;-)

von Be T. (wilhelmt)


Lesenswert?

m.n. schrieb:
> Ich weiß ja nicht, was an Vorschlägen hilfreich sein soll, die vor 30
> Jahren als Lösung taugten. In C ist die Programmierung doch Kinderkram.
> Für jeden einzelnen Programmpunkt gibt es in der Codesammlung genügend
> beispielhafte Lösungen. Einfach einmal suchen!
Wie gut, "m.n.", dass du alles besser weißt und für dich eh' alles 
Kinderkram ist. Erstaunlich, dass dann doch hier zahlreiche, teils sehr 
unterschiedliche Vorschläge unterbreitet werden. Alles Fachunkundige? Es 
ist offensichtich, dass du nicht verstanden hast, worum es in diesem 
Fred hauptsächlich geht, nämlich einem C-Anfänger bei den ersten, 
unsicheren Schritten zu helfen, und genau das haben die allermeisten 
User bisher getan. Angebliche oder selbsternannte Profis, für die alles 
so einfach ist, dass ihre beste Empfehlung : "Such mal" lautet, werden 
hier nicht gebraucht. Ich habe nie nach einer fertigen Lösung gefragt, 
es geht um den Weg und die ersten Schritte. Suche dir bitte ein anderes 
Betätigungsfeld für deine hochprofessionelle Hilfe. Danke!

@ "Udo Schmidt": Mag sein, aber wenn man alle Freds hier daraufhin 
untersuchen würde, ob sie für den Einstellenden lebenswichtig sind, 
würde es vermutlich sehr, sehr ruhig im Forum werden. Wer will schon 
eine einzelne Led irgendwo glimmen haben? Ein gewisser Anspruch sollte 
akzeptierbar sein, und wer sagt denn, dass ich nach dem allerersten 
gelungenen Lauf des Projektes nicht vom Ergeiz gefasst werde, die 
Anzeige im kompletten Bereich in gute Genauigkeit zu bringen? Ich bin 
Anfänger und suche nach dem einfachsten Weg, das allererste Projekt zum 
Laufen zu bekommen. Aber ich lerne nicht C, um anschließend nichts draus 
zu machen. Da ist mein Ergeiz ein anderer.
Also: Niemand muss sich zurückhalten, es sei denn, aus eigenem Wunsch. 
Lasst uns hier einfach machen, wer etwas beitragen möchte zu meinen 
ersten Schritten, ist hoch willkommen. Wer das nicht möchte, darf sein 
Engagement ja gänzlich entspannt auf andere Freds verteilen.
Grüße, wilhelmT

von A6AA (Gast)


Lesenswert?

Udo Schmitt schrieb:
> Nö, jetzt reichen sogar 3 Leds und ein einfacher Fensterkomparator.
> ;-)

Radio Eriwan:
Im Prinzip Ja - gefragt war aber ein Display.
Obwohl: "eine dreistellige LED-Anzeige" - kann auch so wie von Dir 
interpretiert werden :)

rgds

von Karl H. (kbuchegg)


Lesenswert?

A6AA schrieb:
> Udo Schmitt schrieb:
>> Nö, jetzt reichen sogar 3 Leds und ein einfacher Fensterkomparator.
>> ;-)
>
> Radio Eriwan:
> Im Prinzip Ja - gefragt war aber ein Display.

was aus ergonomischer Sicht im Auto gar nicht mal eine so gute Idee ist.
Denn dann wandert der Blick alle 3 Sekunden dort hin um den Zahlenwert 
abzulesen.
Der Zahlenwert an sich interessiert aber gar nicht, sondern eigentlich 
der Vergleich mit dem Grenzwert: sicher / nicht sicher

Von daher sind ein paar LED, die sich ruhig verhalten solange alles im 
'grünen Bereich' ist, allemal besser. Interessant ist ja im praktischen 
Betrieb nur der Ausnahmezustand. Alles andere ist Spielerei.
Und ja. das kann man lernen. Ich war auch Zeit Lebens daran gewöhnt, die 
Wassertemperatur am Armaturenbrett irgendwo zumindest ungefähr ablesen 
zu können. Mein neuer C4 hat gar keine derartige Anzeige mehr, was am 
Anfang ein wenig irritierend war. Aber genau betrachtet, ist mir die 
Wassertemperatur ja wurscht, solange sie sich im günstigen Bereich 
bewegt. Interessant wird es nur, wenn das Kühlwasser zu heiss wird, und 
darauf macht mich die Karre mit einem Ping und einer Anzeige aufmerksam 
(denke ich mal, ist noch nie gekommen).

Und dass ich bei kaltem Öl und Minusgraden nicht mit 7000 Touren aus dem 
Parplatz rauspresche, weil mir sonst der Ölfilm reist, ... dazu brauch 
ich wirklich keine Anzeige sondern ein bischen Hausverstand.

Gut. Als Spielerei ist so eine Öltemperatur in einem PKW nett. Aber 
brauchen, brauchen tut die als Zahlenwert niemand. Eine Aussage 'kalt', 
'heiss' bzw. normal (keine Warnung leuchtet) reicht völlig und lenkt bei 
vorliegen des Normalfalls nicht ab. Im Zweifel ist mir nämlich das 
Geschehen auf der Strasse wichtiger als die Öltemperatur.

Meine Meinung. Da kann mir der Herr Willi so viel Ahnungslosigkeit 
unterstellen, wie er will.

: Bearbeitet durch User
von Volker S. (vloki)


Lesenswert?

Karl Heinz schrieb:
> Von daher sind ein paar LED, die sich ruhig verhalten solange alles im
> 'grünen Bereich' ist, allemal besser.

Das bringt mich ja auf eine ganz neue Idee.  Wie wäre es mit einer RGB 
LED die man dann von Blau über Grün nach Rot durchmischen kann (also 
wenn mal wieder Langeweile aufkommt ;-)

Karl Heinz schrieb:
> Im Zweifel ist mir nämlich das
> Geschehen auf der Strasse wichtiger als die Öltemperatur.

Fährt er überhaupt auf der Strasse ?

von 6A66 (Gast)


Lesenswert?

Karl Heinz schrieb:
> was aus ergonomischer Sicht im Auto gar nicht mal eine so gute Idee ist.
> Denn dann wandert der Blick alle 3 Sekunden dort hin um den Zahlenwert
> abzulesen.

Früher hatten die Autos so ein analoges Schätzeisen. Das war mir gerade 
recht. Das mit der LED wäre ein 95/5 Ansatz (95prozent der Nutzer mit 5% 
Aufwand erschlagen). Und für die restlichen 5% der Nutzer brauchst Du 
entweder garkeine Anzeige (beratunbgsresiste Hausfrau ohne nennenswerte 
Motorkenntnisse) oder die hier besprochene.

Der TO will die letzte Gruppe. Klar will ich das auch nicht - aber Kunde 
ist König :) Bin wieder raus.

rgds

von Be T. (wilhelmt)


Lesenswert?

Karl Heinz schrieb:
> Gut. Als Spielerei ist so eine Öltemperatur in einem PKW nett. Aber
> brauchen, brauchen tut die als Zahlenwert niemand. Eine Aussage 'kalt',
> 'heiss' bzw. normal (keine Warnung leuchtet) reicht völlig und lenkt bei
> vorliegen des Normalfalls nicht ab.
Ahnungslosigkeit ist so ganz falsch nicht, denn offenkundig unterwirfst 
du deine persönlichen Meinung, deinem eigenen Bedürfnis dasjenige aller 
anderen. Natürlich braucht der Großteil eine solche Öltemp-Anzeige (ÖTA) 
nicht, genausowenig wie die Wasser-Temp-Anzeige. Aber es gibt sehr wohl 
technisch interessierte Autofahrer und dann auch noch solche, für die es 
wirklich ein echter Zugewinn wäre, eine solche ÖTA zu haben. Da wäre 
z.b. die Gruppe derjenigen, welche einen Beruf ausüben, der werktägliche 
Mobilität in größerem Ausmaß erfordert. Und diese Autofahrer finden 
wenig Sinn darin, unnötige Zeit beim Fahren zu vertrödeln, und möchten 
andererseits den berufsnotwendigen Fahruntersatz nur dann zu 
beschleunigtem Einsatz bringen, wenn das technisch vertretbar ist. Und 
da ist eine ÖTA extrem sinnvoll. Die könnte übrigens sehr wohl als 
analoges Rundinstrument ausgeführt sein. Aber wo paßt sowas vom Styling 
her noch in ein Armaturenbrett, und dann - nicht übersehen - noch als 
Nachrüstung?!?!
Was ich hier ganz deutlich von einigen - bitte auf die Differenzierung 
achten - von einigen vermisse, ist Toleranz.
Weil ich wußte, dass es immer wieder Forenmitglieder gibt, die nicht 
fachlich helfen wollen, stattdessen sich aber völlig abarbeiten in einer 
von ihnen vom Zaum gebrochenen Debatte über den angeblichen Sinn des 
Projekt-Zieles, habe ich versucht, möglichst lange den Einsatzzweck 
nicht zu nennen. Und - tusch - kaum ist das doch passiert, fahren hier 
wieder User Sonderschichten in Selbstdarstellung ihrer persönlichen, 
unverbrüchlichen Ansichten.
Schade Leute! Ihr könntet eigentlich zumindest in einem Fach-Forum 
darauf verzichten, euer Besser-Wisser-Tum anzubringen. Es gibt doch die 
berühmten "sozialen Medien", engagiert euch dort, das wäre für alle 
besser.
Gruß, wilhelmT

von hp-freund (Gast)


Lesenswert?

Be Ti schrieb:
> in einem Fach-Forum

Genau. Wie weit bist Du mit deinem Projekt?

von m.n. (Gast)


Lesenswert?

Be Ti schrieb:
> Und diese Autofahrer finden
> wenig Sinn darin, unnötige Zeit beim Fahren zu vertrödeln, und möchten
> andererseits den berufsnotwendigen Fahruntersatz nur dann zu
> beschleunigtem Einsatz bringen, wenn das technisch vertretbar ist.

Ich wußte bislang garnicht, daß Autobahnraser Probleme mit der 
Öltemperatur haben.

hp-freund schrieb:
> Be Ti schrieb:
>> in einem Fach-Forum
>
> Genau. Wie weit bist Du mit deinem Projekt?

Er macht seine ersten Schritte: Treten auf der Stelle ;-)
Oder ist nach den vielen Empfehlungen, von ihm schon irgendein 
Codefitzel gezeigt worden?

von Karl H. (kbuchegg)


Lesenswert?

m.n. schrieb:

> hp-freund schrieb:
>> Be Ti schrieb:
>>> in einem Fach-Forum
>>
>> Genau. Wie weit bist Du mit deinem Projekt?
>
> Er macht seine ersten Schritte: Treten auf der Stelle ;-)

Geht schon länger (*)
Beitrag "Anfänger in C und welcher PIC (evtl. uno32) ist geeignet ?"

(*) genau wie seine arrogante Art.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Karl Heinz schrieb:
> Geht schon länger (*)
> Beitrag "Anfänger in C und welcher PIC (evtl. uno32) ist geeignet ?"
>
> (*) genau wie seine arrogante Art.

Du hattest so etwas ja schon erwähnt, Deinen Beitrag aber wieder 
zurückgezogen.
Daß es solche Abstauber gibt, kann man nicht verhindern. Schade ist nur, 
daß man auf ähnliche Anfragen anderer Personen zunehmend gereizter 
reagiert, obwohl es völlig zu Unrecht sein kann.

von Harry (Gast)


Angehängte Dateien:

Lesenswert?

Das war ich glaub noch schuldig ..... DEIN Fühler so wie er ist und mit 
270 Ohm parallel (soweit ich den Widerstand in der Tabelle richtig 
entziffern konnte).

von Vlad T. (vlad_tepesch)


Lesenswert?

Harry schrieb:
> Das war ich glaub noch schuldig ..... DEIN Fühler so wie er ist und mit
> 270 Ohm parallel (soweit ich den Widerstand in der Tabelle richtig
> entziffern konnte).


hättest im ersten Plot ja auch bis 300 max zeichnen können.
Da hätte man besser sehen können, wie es im für ihm wichtigen Bereich 
aussieht.
Wahrscheinlich auch so gut wie linear.

: Bearbeitet durch User
von Harry (Gast)


Angehängte Dateien:

Lesenswert?

bitte sehr: Bereich 0-120°C ohne Parallel-Widerstand

von Harry (Gast)


Angehängte Dateien:

Lesenswert?

und noch der Bereich mit Parallel-Widerstand. Der Knick kommt wohl von 
einem falschen Wert .... das konnte ich nicht richtig entziffern auf dem 
Scan.

von Volker S. (vloki)


Lesenswert?

Kennlinien Linearisierungen, davon habe ich ja ~1985 in der
Ausbildung zum Elektroniker auch mal gehört.
Aber wozu soll das hier gut sein ?

von Vlad T. (vlad_tepesch)


Lesenswert?

sieht ja nicht schlecht aus - würd ich nehmen.

Wobei ich mit seinem interessanten Bereich eher so um die 70 (+- 15 oder 
+-20) meinte.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Für eine sinnvolle Berechnung werfe ich noch eine 
Taylorreihenentwicklung in die Runde. Die ist gar nicht mal so schwer zu 
implementieren, selbst in Fixed-Point. Nur die Skalierung ist eklig.

Habe damit letzthin eine e^x-Berechnung in ca. fünf Zeilen Fixed-Point 
(nur mit Multiplikation, Addition und Rechtsshift) implementiert. Da war 
die Vorlesung Höhere Mathematik I und II mal wieder für was gut, auch 
wenn sie 20 Jahre her ist. Selbst mit Abbrechen nach dem 2. Glied wart 
der Fehler < 1%.

Logarithmieren geht natürlich auch, siehe 
http://de.wikipedia.org/wiki/Taylorreihe#Exponentialfunktionen_und_Logarithmen

Max

von Harry (Gast)


Angehängte Dateien:

Lesenswert?

Vlad Tepesch schrieb:
> sieht ja nicht schlecht aus - würd ich nehmen.
>
> Wobei ich mit seinem interessanten Bereich eher so um die 70 (+- 15 oder
> +-20) meinte.

auch das noch ......

von Be T. (wilhelmt)


Lesenswert?

Es ist etliche Zeit vergangen, aber mein Programm steht vor der 
Fertigstellung. Das ist doch in Assembler geschrieben und läuft auf dem 
PIC18F14K22. Bei den letzten Arbeiten ist es mir auch gelungen, das 
Problem, das diesem Fred den Titel gegeben hat, selbst zu lösen. Nach 
dem von "thomas s" vorgegebenen Grobraster - danke sehr - hatte ich mir 
vor 3 Tagen endlich das Micr. Office zugelegt und auch Excel noch 
"nieder gerungen". Das kam für meine o.g. Tabelle dabei heraus:
y=  -4E-07xhoch5 + 0,0002xhoch4 -0,0379x³ +3,7723x² -208,18x +5.423,6 
//R²=1  [ Für die ersten beiden Exponenten fand ich keine Möglichkeit 
auf meiner Tastatur, die "hochzustellen". ]
Dieses Polynom werde ich für mein Prog mit einem PIC18 nicht nutzen, die 
Datentabelle kommt in den Prog-Speicher, die Zwischenwerte werden 
interpoliert, und nachdem ich auch die Tableread-Hürden geschafft habe, 
gelingt das ohne dieses P.. Aber mein ursprüngliches Ziel, auf einen 
PIC24 zu kommen, habe ich nicht vergessen.
Meine Frage, gänzlich unabhängig davon, ob eine Alternative - z.B. 
wieder eine Tabelle zu nehmen - die bessere Lösung wäre: ist die 
Abarbeitung einer Formel wie oben in einem 16-bit-µC machbar, 
insbesondere unter der Berücksichtigung, dass Zeit fast kein Thema ist, 
also z.B. die Erneuerung des nächsten AD-Wertes alle 10 Sekunden 
keinerlei Ungemach bedeuten würde? Ein PIC24 hat auch für die Division 
eine Hardwareroutine (wenn auch nur 8 bit), für die Mulitpl. sowieso. 
Wäre das für diesen µC zu schaffen?
Gruß, lippe1audi

von Karl H. (kbuchegg)


Lesenswert?

Be T. schrieb:

> Meine Frage, gänzlich unabhängig davon, ob eine Alternative - z.B.
> wieder eine Tabelle zu nehmen - die bessere Lösung wäre: ist die
> Abarbeitung einer Formel wie oben in einem 16-bit-µC machbar,

Was'n das für eine Frage?
Du scheinst unter der Prämimsse zu leben, dass man für fast alles einen 
Superboliden mit mindestens 32 Bit, 8GHz braucht und man sich mit 
weniger als 32MByte Speicher nicht abgeben braucht.

Schon ein Wunder, dass man vor 45 Jahren zum Mond fliegen konnte und das 
mit einer Rechenleistung, die heute von jeder Kaffeemaschine locker 
überboten wird.

von Karl H. (kbuchegg)


Lesenswert?

Karl H. schrieb:
> Be T. schrieb:
>
>> Meine Frage, gänzlich unabhängig davon, ob eine Alternative - z.B.
>> wieder eine Tabelle zu nehmen - die bessere Lösung wäre: ist die
>> Abarbeitung einer Formel wie oben in einem 16-bit-µC machbar,
>
> Was'n das für eine Frage?

Nur um das klipp und klar zu stellen.

Die Berechnung ist auch für einen 8 Bit Rechner eine Fingerübung.
Er braucht ein wenig länger als eine 16 Bit CPU. Aber wenn ein paar 100 
Ergebnisse pro Sekunde reichen, dann ist das überhaupt kein Problem. Die 
angestrebten "1 Update alle 10 Sekunden" unterbietest du immer noch 
derartig heftig, das man befürchten muss, dass der PIC wegen 
Unterbeschäftigung eingeht.

Irgendwie scheinst du auch nach einem halben Jahr noch immer keine 
Vorstellung davon zu haben, was du da eigentlich vor dir liegen hast und 
welche (erstaunliche) Leistung dieser kleine schwarze Käfer erbringen 
kann. Der hat mehr Rechenleistung als alle Menschen des 19. Jahrhunderts 
zusammen aufgebracht hätten.

: Bearbeitet durch User
von Be T. (wilhelmt)


Lesenswert?

Karl H. schrieb:
> Karl H. schrieb:
>....auch nach einem halben Jahr noch immer keine Vorstellung davon zu
> haben, was du da eigentlich vor dir liegen hast.
Wie du vermutlich gelesen haben wirst, habe ich dieses Polynom erst vor 
3 Tagen erstellt. Und meine Rechenerfahrung mit PIC beschränkt sich auf 
schlichte 16-bit-Addition, Subtraktion und 8-bit-Division. Das 
Ausrechnen des Polynoms mit meinem Taschenrechner war nicht gerade nach 
10 Sekunden erledigt.
Nein, ich hatte keinerlei Vorstellung davon, wielange ein eher noch 
kleinerer µC zum Ausrechnen solch komplexer Formeln benötigt, und ich 
geniere mich deswegen überhaupt nicht. Als fortgeschrittener Anfänger 
muss ich nicht wissen, bzw. können, was z.B. Profis oder aber 
Informatikstudenten wissen oder können.
Wenn ich mal aus deinen aufgeregten - warum eigentlich ? - Vorwürfen 
eine Antwort auf meine Frage extrapoliere, dann bin ich beruhigt und 
freue mich auf diese späteren Zeiten. Und - ach ja - danke für den Kern 
der Antwort. Anbei sei gesagt, dass die Antwort ohne Aufregung noch 
willkommener gewesen wäre.

Da du, Karl-Heinz, gerade mal zufällig da bist, sei persönlich für dich 
noch dieses gesagt: Für die Erstellung meines Programms habe ich drei 
fertige Routinen aus fremden Händen benutzt: Aus den 
Microchip-Handbüchern diejenige für die Initialisierung von Ports (3 
Zeilen), und für die Init. des ADC-Wandlers, und dann aus einem Fachbuch 
("Mit dem PIC-Controller erfolgreich arbeiten") die Routine für 
16-bit-Subtraktion. Für die Tabellenerstellung gabs aus einem anderen 
Forum noch 7 Zeilen als Muster. Den "Rest" des Programms habe ich selbst 
geschrieben. Hat gedauert, und ist mir nicht immer leicht gefallen, aber 
immerhin selbst geschrieben.
Mal sehen, ob dir dazu was einfällt.
Grüße, wilhelmT

von Karl H. (kbuchegg)


Lesenswert?

Be T. schrieb:

> Nein, ich hatte keinerlei Vorstellung davon, wielange ein eher noch
> kleinerer µC zum Ausrechnen solch komplexer Formeln benötigt, und ich
> geniere mich deswegen überhaupt nicht. Als fortgeschrittener Anfänger
> muss ich nicht wissen, bzw. können, was z.B. Profis oder aber
> Informatikstudenten wissen oder können.

Entschuldige das ich lache.
Aber das hat nichts mit Informatikstudium zu tun.

Das ist ganz einfach beobachten! Dein PIC macht (je nachdem wie schnell 
du ihn taktest) irgendwas ab ca 1 Million Befehle aufwärts. Was denkst 
du was die tun?
Der Kern deiner Frage reiht sich nahtlos in den Rest dieses Thread (und 
des vorhergehenden) ein. Kaum zu glauben, dass du in früheren Zeiten 
schon jemals irgendetwas programmiert hast. Soll heissen: ich glaubs 
jedenfalls nicht.


So und jetzt bin ich wieder raus.
Hab mir den Thread noch mal von Anfang an durchgelesen und da kommen 
Erinnerungen hoch.

> 16-bit-Subtraktion. Für die Tabellenerstellung gabs aus einem anderen
> Forum noch 7 Zeilen als Muster. Den "Rest" des Programms habe ich selbst
> geschrieben. Hat gedauert, und ist mir nicht immer leicht gefallen, aber
> immerhin selbst geschrieben.
> Mal sehen, ob dir dazu was einfällt.

Ja. Schwach.
(wenn du mich schon so fragst).
Und nein. Das ist auch für einen Amateur schwach. Das wäre selbst für 
einen blutigen Anfänger schwach (der du ja vorgibst nicht zu sein)

Beschwer dich jetzt nicht - du hast es herausgefordert.

: Bearbeitet durch User
von Be T. (wilhelmt)


Lesenswert?

Schade.
Erwartet hatte ich, dass du erkennen und auch zugestehen würdest, dass 
die damaligen Vorwürfe (sinngemäß "nur abkupfern wollen") voreilig und 
vor allem falsch waren. Zudem: Dass du es auch jetzt dir immer noch 
nicht verkneifen kannst, über einen Anfänger im Programmieren her zu 
ziehen, ist bedauerlich und wirft ein gewisses Licht auf dich! Dass 
ausgerechnet ein Moderator derart agiert, ist bedenklich.
Schade, ich hatte mir vor deinem obigen Statement vorgenommen, einen 
verbalen Schlussstrich unter die damaligen Aufgeregtheiten zu ziehen. 
Leider kann ich nicht erkennen, dass du zu einem Entgegenkommen bereit 
bist.
Grüße, wilhelmT

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
Noch kein Account? Hier anmelden.