Thermospannung --> Temperatur

Gast #321154
Lesenswert?

Hallo,
ich bin gerade am schreiben einer Routine zum umrechnen einer
Thermospannung in die entsprechende Temperatur da ich meine Programmier
und die Rechenkünste des Atmega8 nicht so hoch einschätze habe ich
versucht die Spannung aus einer Liste heraus zu suchen, und falls es
nötig ist die werte anzugleichen. Auf dem PC läuft das auch gut aber
der AVR bleibt bei ca 29253 µV also 702 C hängen bzw. er zeigt nur noch
mist an. Hat jemand eine Idee an was das liegen könnte oder einen
fertigen (C)Code der diese Aufgabe erfüllt ?

Sebastian
Angehängte Dateien:
Gast #321160
Lesenswert?

Hallo Walter,
Danke für den Tipp. Wenn meine Annahme stimmt das variablen die
ausserhalb einer Funktion deklariert sind global sind hilft mir dein
Tipp leider nichts."wenn e > 54819 gibts wohl Unsinn" damit hast du
sogar doppelt recht den bei 1370 C(54819µV) verendet das
Thermoelement.

Gruß Sebastian
#321163
Lesenswert?

Leg die Tabelle ausserdem im Flash ab (spart 276 Byte Ram), man braucht
aber dann andere Zugriffsmethoden. Ich hab eigentlich genau so was
änliches schon mal gemacht, allerdings ohne Divide and conquer (war mir
zu Aufwändig und zu viel Overhead, bzw ich war zu faul g), sondern bin
die liste einfach durch gegangen, bis ich das passende Intervall
gefunden habe.

Gruß
Roland
Angehängte Dateien:
Persönliche Seite #321168
Lesenswert?

In vorhergehenden Codes war EMV als unsigned int (16bit) declariert und
Du hast mit float (32bit) verglichen (e) ohne zu casten.

Durch type casten kannst Du die Look-up Tabelle auch wieder mit
unsigned int machen, was Dir ne Menge Codespace spart, da Du 16bit
Werte ablegst anstatt 32bit.

Du solltest Dir weiterhin überlegen, ob Du wirklich float's brauchst,
oder ob Du auch mit Integern arbeiten kannst. Das spart Dir auch
einiges an Codespace.

Ein weiterer Fehler kann auftreten, wenn Du Werte innerhalb der Tabelle
hast, die 65535 überschreiten. pgm_read_word liest nur einen 16bit Wert
aus dem Flash, wenn diese als unsigned long abgelegt sind.
pgm_read_dword wäre hier zu empfehlen.

/Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren