Hallo Ich sitz grad wieder vor meinem Projekt und hab ein Problem. Ich möchte mit meinem Assembler, eingelesene Werte(Istwert) von 0 - 255 umrechnen und ausgeben. Mein Problem ist, daß ich z.B. bei 3,55 Volt (Wert = 182)den Wert PH4,0 (berechnen? und) ausgeben muß und bei 2,28 Volt (Wert = 117) PH7,0. Das heißt bei grosser Spannung ein kleiner PH-Wert und bei kleiner Spannung einen grossen PH- Wert. Ich muß auch die Werte dazwischen ausgeben bzw. berechnen. Hat jemand eine Anregung oder Lösung für mich ! Im voraus DANKE !!!!!!! Gruß Thiemo
Du musst doch nur Deinen eingelesenen Wert vom Maximalwert (hier 255?) abziehen, dann ist der Wert schon einmal proportional zum ph-Wert. dann brauchts Du nur noch den Faktor errechnen. (Falls der Zusammenhang linear ist)
DANKE !!! Ich steh direkt vor dem Wald und seh kein Baum !!!! :-) Jetzt steh ich aber vor dem nächsten Problem. Ich hab die Rechnung gemacht : z.B. für PH-Wert 4.0 255 - 182 = 73 40 : 73 = 0,54794 Das 1. Problem : Wie kann ich die Kommazahl verarbeiten ? Rechnung : z.B. 140 x 0,54794 = ..... Das 2. Problem : Wie kann ich das Ergebnis als Kommazahl im Display anzeigen lassen ? Im voraus DANKE !!! Gruß Thiemo
ich hoffe, das soll mehr ein Spielzeug als ein Messgerät werden? pH-Sonden sind ein ein ziemlich übles Zeug -nichtlinear -temperaturabhängig -altern (Offset, Koeffizient) Mit einer einfachen Linearanzeige wirst du nicht allzuviel erreichen. Prinzipielle Demonstration ja, mehr nicht. Zu deinen mathematischen Problemen: am einfachsten besorgst du dir einen Compiler, was immer du magst. Meist wird C vorgeschlagen und vehement als einzig glücklich machende Sprache bezeichnet (ok, ich benutze es auch ausschliesslich), Basic (Bascom) oder Pascal sind genausogut geeignet. Dann kannst du ganz easy mit grösseren Zahlen oder auh Gleitkommazahlen jonglieren. In Assembler geht das natürlich auch, dafür solltest du dir aber fertige librarys aus dem Netz suchen. Wenn es geht, vermeide ich auf MCs float-Zahlen, fast immer kommt man mit Ganzzahl-Arithmetik zurecht. In deinem Fall: 40 : 73 = 0,54794 Du multiplizierst die 40 beispielweise mit 10.000. 400.0000:73=5479. Bei der Ausgabe dann beachten, dass das alles Nachkommastellen sind.
Die Nichtlinearität könnte man ja durch eine look-up-table eingrenzen. Quasi kalibrieren. Sind ja nur 256 werte zu berücksichtigen. ;-) Gruß Jörn
Hallo und DANKE für die schnelle Antworten. Erstmal muß ich sagen, daß ich froh bin, dieses Forum (durch Zufall) gefunden zu haben. Zu meinem Projekt: Ich habe eine Industrie PH-Mess-Sonde der Firma Jumo, welche relativ linear ist. In verschiedenen Temperaturbereichen hab ich sie noch nicht ausprobiert. Es soll kein "Spielzeug" sein, sondern ich möchte den PH-Wert eines Aquariums messen und regeln. Hierbei kommt es nicht auf die absolut genaue Messung an (+/- 0,2). Und mein Programm hab ich auch schon fast fertig. Ich hab das Programm im Assembler geschrieben und möchte, wenn es möglich ist dies auch weiter machen. Mein problem ist nun folgendes: Ich weiß nicht (und ich hab auch nichts in meinen Büchern gefunden), wie ich diese Rechnung mit der Kommazahl genau realisieren soll. Ich kenn mich noch nicht so gut mit Assemblern aus. Aber was noch nicht ist, wird bestimmt noch werden. Und ich bekomm ja genug hilfe von Euch ! Nochmals DANKE !!! Zitat von crazy horse: "In deinem Fall: 40 : 73 = 0,54794 Du multiplizierst die 40 beispielweise mit 10.000. 400.0000:73=5479. Bei der Ausgabe dann beachten, dass das alles Nachkommastellen sind." Der Wert 0,54794 bzw. 0,548 ist mein Faktor. Den eingelesenen Wert y(z.B.182) * Faktor(0,548) = ....(PH-Wert4.0 ergibt "40" in der Anzeige; soll später als "PH 4.0" in der Anzeige erscheinen). Ich weiß nicht wie ich den eingel. Wert mit der kommazahl multiplizieren kann !?! Und wenn ich y(z.B. 182) * 548 = ...., entsteht doch ein Überlauf, oder ??? Ich hab das in meinem Buch so verstanden, daß ich nur von 0 - 255 habe ?!? Oder lieg ich da falsch ??? Bitte helft mir !!! Ich zerbrech mir die ganzen letzten Tage den Kopf darüber und irgendwie steh ich auf dem Schlauch. Gruß Thiemo E-mail: Suzi79@gmx.de
tja klar, du musst natürlich mit grösseren Zahlen als 8bit arbeiten, im einfachsten Fall mit 16bit, wird bei dir wahrscheinlich ausreichend sein. Messwert z.B. 129 *40=5120/73=70 (pH7,0?) Kannst es noch etwas genauer machen: 129*400/73=706, würde also auf pH7,1 gerundet. Dabei kommst du aber mit 16bit schon nicht mehr aus, meist wird dann 32bit-Arithmetik gerechnet, in Assembler hindert dich aber niemand daran, 24bit zu verwenden. Wie ausgeben? Kommt auch auf die Art des Displays an. Auf jeden Fall in Dezimalstellen aufteilen und das Komma an der richtigen Stelle setzen. Aus welchem Grund willst du mit Assembler weitermachen?
"Zitat" Autor: crazy horse - jsgpsgmx.de Datum: 09.06.2005 00:18 ------------------------------------------------------------------------ -------- tja klar, du musst natürlich mit grösseren Zahlen als 8bit arbeiten, im einfachsten Fall mit 16bit, wird bei dir wahrscheinlich ausreichend sein. Messwert z.B. 129 *40=5120/73=70 (pH7,0?) Kannst es noch etwas genauer machen: 129*400/73=706, würde also auf pH7,1 gerundet. Dabei kommst du aber mit 16bit schon nicht mehr aus, meist wird dann 32bit-Arithmetik gerechnet, in Assembler hindert dich aber niemand daran, 24bit zu verwenden. Wie ausgeben? Kommt auch auf die Art des Displays an. Auf jeden Fall in Dezimalstellen aufteilen und das Komma an der richtigen Stelle setzen. Aus welchem Grund willst du mit Assembler weitermachen? Ich möchte mein Programm nicht nochmals komplett neu schreiben. Und da ich mit Assembler angefangen habe, möchte ich es erstmal fertig schreiben. Wie lautet der Befehl bzw. Befehle(8051) um 16 bit zu speichern ? Gruß Thiemo
"Zitat" Autor: Jörn Bögeholz - joern.boegeholzweb.de Datum: 09.06.2005 08:30 ------------------------------------------------------------------------ -------- Schau mal hier: http://www.avr-asm-tutorial.net/avr_de/rechnen/fpconv.html ------------------------------------------------------------------------ -------- Hallo Jörn Ich hab mir die Seite angeschaut, aber leider hab ich nicht die gleichen Befehle. Was bedeutet : "ldi" ??? Gruß Thiemo
Im Microcontroller-Appliktionsbuch von Andreas Roth ist auführlich mit Code erklärt, wie man mit 16-bit-Variablen bzw. float in Assembler rechnet. Ich hatte mir das mal aus der Bücherei geliehen. Den Quellcode hierzu müsste ich noch irgendwo finden. Wenn du ihn habe willst, melde Dich mal. Sieh Dir doch mal Peter´s Seite an. Vielleicht hilft Dir das ja weiter. Andere Alternative: Du installierst Dir den sdcc. Schreibst eine kleine Funktion, die das gewünschte in C macht und siehst Dir dann den erzeugten Assembler-Code an. Grüße Andreas
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.