umrechneung des ad wertes
Samstag, 19. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  Programmiersprache Assembler  |  AD-Wandler (Assembler)  |  umrechneung des ad wertes « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: umrechneung des ad wertes  (Gelesen 3734 mal)
 
mark_mene
Newbie
*
Offline Offline

Beiträge: 25


Profil anzeigen
« am: September 25, 2006, 10:58:05 »

hallo zusammen,

ich hab einen baustein namens ds600
der eine analoge spannung ausgibt in abhängigkeit von der temperatur.

laut datenblatt muss es wie folgt umgerechnet werden...
adc_wert=509mV+(°C)* 6,45mV
-> (°C) = adc_wert/6,45mV - 509mv/6,45mV

kann mir jmd sahen wie ich zu meiner rekursionsformel kommen kann.

also wenn ich eine zahl mit 5 multiplizieren will.

mach ich im assembler mit meiner subrotine
eben 5 mal den befehl call add16 usw.
siehe sprut.de

naja kann mir da jmd weiterhelfen?
Gespeichert
Holgi
Jr. Member
**
Offline Offline

Beiträge: 53


Profil anzeigen WWW
« Antworten #1 am: September 25, 2006, 14:26:18 »

Hallo,

für solche Zwecke nutze ich gern das Basic von www.oshonsoft.com
In einer (für mich) einfacheren Programmiersprache das ganze umsetzen bis es funktioniert und dann aus dem ASM File die Routinen entnehmen.
Optimieren kann man die dann immer noch.

Vom Ansatz her die Fließkommazahlen in INT/LONG umwandeln und damit rechnen.

Holger
Gespeichert
Rainer
Gast
« Antworten #2 am: September 26, 2006, 08:12:26 »

Hallo Mark,

in Deiner Verarbeitungskette vermisse ich noch Deinen AD-Wandler.

Ich nehme nun an, dass du mit 10 Bit sampelst.
Spannungsbereich dabei: 5V.
Ein Schritt ist damit: d=5V/(2^10) = 4.88mV
Die Temperatur in Abhängigkeit der Spannung: T(V) = V/6,45mV - 509mv/6,45mV.
Verhältnis von d und 6.45mV ~ 3/4
Ein Versuch die Formel zu konkretisieren: T_k(V_k) = V_k / (4/3) - 79 = V_k * 3/4 - 79

Damit hast Du eine kleine Berechnungsvorschrift, die sehr einfach zu implementieren ist.

Hierbei: T(0 V) = -78,9 °C, T(5V) = 696,27 °C.
Im Vergleich: T_k(0) = -79, T_k(1023) = 688 °C
Fehler bei maximaler Temperatur: 8,27 °.
Ausbügeln durch zusätzlichen Fehlerterm: 1023/8.

Wenn Du mehr als nur vollständige Gradangaben brauchst, musst die Eingabewerte noch drehen und die Formel anpassen.

Grüße,
Rainer
Gespeichert
Steffen
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 1235


Profil anzeigen
« Antworten #3 am: September 26, 2006, 08:22:10 »

Wie wäre es damit, die Referenzspannung des AD-Wandlers so einzustellen, dass der Wert ein ganzzahliges Vielfaches der Temperatur ist?

Spart jede Menge Rechenzeit.
Gespeichert
mark_mene
Newbie
*
Offline Offline

Beiträge: 25


Profil anzeigen
« Antworten #4 am: September 26, 2006, 13:05:50 »

Zitat
Rainer:
in Deiner Verarbeitungskette vermisse ich noch Deinen AD-Wandler.

ich hätte eben den ad wert in dezimal (mV) umgewandelt und dann von mV in die Temperatur.
so war meine idee.
wäre es besser wenn man es zusammenfasst?
Zitat
Ich nehme nun an, dass du mit 10 Bit sampelst.
Spannungsbereich dabei: 5V.
Ein Schritt ist damit: d=5V/(2^10) = 4.88mV
da hast du recht. ist der ad wandler des pic18f4320 mit v ref 5V

Zitat
Verhältnis von d und 6.45mV ~ 3/4
da hast dsu recht...

Zitat
Ein Versuch die Formel zu konkretisieren: T_k(V_k) = V_k / (4/3) - 79 = V_k * 3/4 - 79

das ist eine formel die ich inplimentieren kann...
dreimal addieren und 4 mal shiften und dann noch subtrahieen...
sehr gute idee ;-) danke



Zitat
Hierbei: T(0 V) = -78,9 °C, T(5V) = 696,27 °C.
Im Vergleich: T_k(0) = -79, T_k(1023) = 688 °C
Fehler bei maximaler Temperatur: 8,27 °.

Es geht eigentlich nur drüber das das gerät nicht überhietzt...
also ob es 30°c warm ist oder 35°C ist relativ ,
es soll sich eben nur z.B ab 50°C einfach ausschalten und
die temperatur anzeigen das es zu heiss ist.

Zitat
Ausbügeln durch zusätzlichen Fehlerterm: 1023/8.
wie kommst du auf dem Fehler term!?
da komm ich noch nicht ganz mit.



Zitat
Holgi:
für solche Zwecke nutze ich gern das Basic von www.oshonsoft.com

naja hab den rest des programm schon komplett in assembler fertig und möchte nicht wegen den einen problem mit basic anfangen.
aber für ein anderes projekt werd ich mir das mal zu gemüte ziehen.

Zitat
steffen:
Wie wäre es damit, die Referenzspannung des AD-Wandlers so einzustellen, dass der Wert ein ganzzahliges Vielfaches der Temperatur ist?

geht leider nicht da es ein ad wandler vom pic ist und die ref pin für andere zwecke verwendet werden...
es sind leider alle ppins verbraucht.

Gespeichert
Rainer
Gast
« Antworten #5 am: September 27, 2006, 15:10:34 »

Hallo Mark!

Wenn Du den dezimalen Wert der Spannung nicht brauchst, dann weg damit. Auf direktem Wege ist es besser.

Zum Korrekturfaktor muss ich noch ein Geständnis abgeben, da ich mit der Angabe höchstens unter Einsatz meiner Kristallkugel etwas anfangen könnte. Der Faktor 1023/8 sagt nur aus, dass Du pro 128 Teile vom A/D-Wandler einen Fehler von 1° hast. Um den auch noch wegzukriegen, müsstest Du +V_k/128 rechnen. Wenn Du es nicht brauchst, dann lass es. Du bekommst sonst nur einige Stellen, an denen Deine Temperatur springt. Kann also mehr Nachteile haben als Vorteile, da nun einige Temperaturwerte fehlen.

Ansonsten wünsche ich Dir noch viel Spaß mit den Berechnungen!

Grüße,
Rainer
Gespeichert
mark_mene
Newbie
*
Offline Offline

Beiträge: 25


Profil anzeigen
« Antworten #6 am: September 27, 2006, 15:46:41 »

hallo rainer,

ok danke dir, verstanden hab ich es!

aber wie bist du da drauf gekommen...
wie war dein ansazt oder wie hast du das problem angepackt!?

mfg mene
Gespeichert
Rainer
Gast
« Antworten #7 am: September 27, 2006, 19:47:03 »

Hallo Mark!

Meinst Du den Fehlerterm? Dabei habe ich mir nur überlegt, wann denn der Fehler maximal werden kann. Entweder direkt bei der Eingabe 0 oder beim maximalen Wert. Dazwischen kann kein maximaler Fehler sein, da die Formel linear ist und der Definitionsbereich von 0 bis 1023 geht. Also eine harmlose Formel.

Dann habe ich mir die Differenzen bei minimaler (0) und maximaler (1023) Eingabe betrachtet und festgestellt, dass sich bei maximaler Eingabe der maximale Fehler ergibt. Dann habe ich noch versucht, den Fehler auf den ganzen Definitionsbereich umzulegen. Bei 8° Differenz bei 1024 Teilen ergibt sich ein Fehler von 8/1024 [°/Teil]. Die Korrektur kann nun in der Formel verwendet werden.

Ich bin für weitere Frage offen!

Grüße,
Rainer
Gespeichert
mark_mene
Newbie
*
Offline Offline

Beiträge: 25


Profil anzeigen
« Antworten #8 am: September 28, 2006, 22:21:00 »

also mit em fehler term bin ich klar gekommen...
und hab mir dann auch sowas zusammen gereimt...

aber ich meinte auch wie du zu der allgemienen formel gekommen bist ,, bzw das ich sie im pic berechnen kann...
es geht ja ned alles...!?
Gespeichert
Rainer
Gast
« Antworten #9 am: September 29, 2006, 17:13:45 »

aber ich meinte auch wie du zu der allgemienen formel gekommen bist ,, bzw das ich sie im pic berechnen kann...
es geht ja ned alles...!?

Nenne es Intuition und schon öfter vorgekommen. Aber wie meinst Du, dass nicht alles geht?

Grüße,
Rainer
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.035 Sekunden mit 18 Zugriffen.
 
Top! Top!