MPX 5500 und Formel in C

#3771911
Lesenswert?

Hallo zusammen ich hab mal wieder eine Frage! Ich habe mir ein 
Drucksensor zugelegt und wollte damit bissl den Druck messen leider hab 
ich nicht so richtig Erfahrung wie man eine Formel vom Papier nach C 
transferiert


diese lautet ((ADCwert/1024)-0.04)/0.0018  die 5 Volt der ADC Formel vom 
AVR und die des Sensors hab ich rauskürzen können.

wie bekomm ich das jetzt mit den richtigen Wertebereichen der Variablen 
und der Formel nach C?

hier mal meine Idee
_________________________________________
int convert2kpa(int32_t value)
{ int32_t pressure;
  pressure=((value/1024)-0.04)/0.0018;
  return(pressure);
}


Wandlung des ADC Signals:


vergl=(convert2kpa(ADCwert));



Danke schon mal im Vorraus
#3771965
Lesenswert?

Das LCD Display rührt sich aber nicht :(
hier mal eine mein gestauchter main Code

   char buffer[10];

   lcd_clear();
   lcd_home();
   val=ADC_Read_avg(5,5); // ADC kanal 5 lesen und 5 messungen machen

   vergl=(convert2kpa(val)); // umwandlung von ADC zu kpa
   printf("%d \n",vergl);  // ausgabe über die serielle schnittstelle


   lcd_string( "Pressure:" );  // "" inhalt ins Display schreiben
   lcd_setcursor( 11,1 ); //setcursor(Spalte, Zeile)
   itoa (vergl,buffer,10); // kpa adc wert nach Ascii für LCD display
   lcd_string(buffer); // buffer auf LCD ausgeben

also pressure als Float deklarieren oder?
Gast #3771979
Lesenswert?

Im Datenblatt deines Sensors steht ein Bereich von 0...500kPa. 
Barometrische Drucksensoren gehen etwa bis 10kPa. Ich würde sagen, der 
ist so unempfindlich, daß er einfach nichts "merkt" von einer 
Druckänderung.
#3771989
Lesenswert?

Dann versteh ich aber nicht warum er dann ein vakuum registriert also 
wenn ich mit dem Mund eins erzeuge dann geht er bis auf 0 runter. 500 
kpa sind doch 50bar mit einer Luftpumpe kann ich ca 3bar erzeugen aber 
da sollte er doch was anzeigen. Im Display hab ich nur eine -22 stehen!
#3771994
Lesenswert?

1
      ..... (value/1024)


value ist ein int (wenn auch mit 32 Bit, was aber wurscht ist, denn 
value kann nur Werte zwischen 0 und 1023 annehmen).
1024 ist ein int

Damit wird hier int durch int dividiert und das Ergenis ist wieder ein 
int.

Du kannst dir ja mal überlegen, welches int-Ergebnis du bekommst, wenn 
du zb 512 durch 1024 dividierst.
Exakt. Das Ergebnis ist einfach nur 0.


Hinweis: man kann solche Dinge auch ganz leicht mit einem C Compiler auf 
dem PC vorab überprüfen. Das hätte sogar den Vorteil, das man da mit 
einem Debugger ganz leicht ran kann und das man die Implementierung 
schnell und einfach ändern kann oder sich Teilergebnisse rausziehen 
kann, etc. etc.
Und erst dann, wenn die 'Formel' bzw. ihre IMplenentierung auf dem PC 
überprüft ist, dann geht man auf den µC.
Gast #3772002
Lesenswert?

Mike schrieb:
> Aber nur, wenn sie für die Stratosphäre spezifiziert sind. Auf NN wären
> die mit solch einem Meßbereich hoffnungslos (mehr als einen Faktor 10)
> übersteuert.

Sorry, Du hast natürlich recht. Ich habe die Umrechnung psi <-> Pascal 
verpeilt. Der in meiner Wetterstation geht von 0..15psi. Aber 500kPa ist 
trotzdem happig.
#3772003
Lesenswert?

Deine Funktion wird immer 0 zurückgeben.

Wieso?
1
value/1024
ist eine Division von zwei ganzen Zahlen und liefert für alle Werte von 
value von 0 bis 1023 genau 0.

Erst wenn Du
1
pressure=((value/1024.0)-0.04)/0.0018;
schreibst, wird die Rechnung mit Float durchgeführt und das Ergebnis in 
einen int umgewandelt.
Gast #3772099
Lesenswert?

Thomas K. schrieb:
> Erst wenn Dupressure=((value/1024.0)-0.04)/0.0018;schreibst, wird die
> Rechnung mit Float durchgeführt und das Ergebnis in
> einen int umgewandelt.

Man fragt sich natürlich, was da überhaupt die Float Rechnung soll. Der 
Sensor hat keinen sonderlich großen Dynamikbereich und in der 
Skalierungsrechnung treten auch keine Ausdrücke auf, die dies 
rechtfertigen würde. Selbst mit einer Druckangabe im Bereich 0..5000 hPa 
ohne Nachkommastellen läge man mit der Ausgabegenauigkeit einen Faktor 
100 über der spezifizierten Sensorgenauigkeit. Das ist also mehr als 
locker mit 32-Bit Integerrechnung in physikalische Werte umrechenbar.
#3775843
Lesenswert?

Vielen Dank, an alle. Ich selber programiere nur als hobby und leider 
ist mir nie beigebracht worden wie man die Mathematik in C umsetzt, so 
das ich mich hier so durchschlagen muss ;).
jedenfalls funzt die Rechnung nur der Sensor selber hat glaub ich einen 
treffe weg :(.

Danke nochmals...

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