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
Vielleicht stehe ich gerade auf dem Schlauch, aber ich verstehe das Problem nicht. Funktioniert es so nicht, wie du es gemacht hast?
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?
:
Bearbeitet durch User
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.
Steven Zimmermann schrieb: > also pressure als Float deklarieren oder? Ja, aber das ist nur ein Schönheitsfehler. Du hast den falschen Sensor.
Heiko schrieb: > Barometrische Drucksensoren gehen etwa bis 10kPa. 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.
>Du hast den falschen Sensor.
Wieso? Zum messen des Reifendrucks ist das die erste Wahl.
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!
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.
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.
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.
Wenn ich mich nicht verrechnet habe sollte ((ADCwert*1137778)-46603378)>>21 genauso gehen, nur in Int32_t-Arrithmetik.
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.