Forum: Analoge Elektronik und Schaltungstechnik Thermospannung --> Temperatur


von Sebastian (Gast)


Angehängte Dateien:

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

von Hubert.G (Gast)


Lesenswert?

if((e < EmV[x])&(e > EmV[(x-1)]))
Nach deiner Beschreibung müssen beide Bedingungen wahr sein, sollte da
nicht ein && stehen

von Sebastian (Gast)


Lesenswert?

Hallo Hubert,
danke für den Tipp aber es zeigt sich leider keine Veränderung.

Sebastian

von Sebastian (Gast)


Lesenswert?

Hallo,
könnte es sein das das Ram überfüllt ist, wenn ja wie kann ich das
prüfen.

Sebastian

von Walter (Gast)


Lesenswert?

Nur kurz reingeschaut:
Nimm doch mal die Tabelle aus der Funktion raus und mache sie global,
lokal braucht sie halt ziemlich viel Stack ...

Walter

von Walter (Gast)


Lesenswert?

ach ja,
wenn e > 54819 gibts wohl Unsinn
Walter

von Sebastian (Gast)


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

von Walter (Gast)


Lesenswert?

aber im Beispiel ist die Tabelle doch innerhalb der Funktion
definiert???

Walter

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Walter,
sorry war vielleicht etwas ungeschickt formuliert. Ich habe es mit der
Tabelle ausserhalb der Funktion getestet und es hat nicht
funktioniert.

Sebastian

von Roland P. (pram)


Angehängte Dateien:

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

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Roland,
habe ich auch schon versucht aber ich bekomme wenn ich versuche (siehe
anhang) einen wert aus dem Flash zu lesen immer nur mist.

Sebastian

von arc (Gast)


Lesenswert?

Dürfte an _attribute_ ((progmem)) liegen, siehe pgmspace.h.
Statt progmem _progmem_

von Roland P. (pram)


Lesenswert?

Hab nochmal nachgeschaut. In der jetzigen(?) Version vom GCC scheints
dafür extra Makros zu geben.

Sihehe hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29

Gruß
Roland

von Sebastian Arnd (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
wenn ich die Variablen mit long deklariere geht es. Hat jemand eine
Ahnung wieso.

Sebastian

von Michael W. (mictronics) Benutzerseite


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

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.