Hallo, wie gross in etwa ist der Codeaufwand in C für die folgenden Rechenoperationen bei den AVRs: Multiplizieren bei den AVRs, die nicht multiplizieren können Potenzieren Wurzel ziehen Andersrum gefragt: Wie wandelt man die analoge Größe eines Temperaturfühlers mit E-Funktion-Kennlinie in digitale Werte um? MfG Wolfram Hubert
Da es speziell um diesen Fühler geht, würde ich einmal die Kennlinie aufnehmen, die Werte extern errechnen und dann eine Look-up-Tabelle benutzen. Das ist zum einen weniger Codeaufwand und benötigt auch weniger Rechenkapazität. Beispiele für Multiplikationsroutinen gibt es in den App-Notes von Atmel. Sind zwar in Assembler, aber die kann man bestimmt in C einbinden (kenne mich mit C nicht aus). Wurzelziehen allgemein ist schon der Hammer. Denn ein diskretes Wurzelziehen wird auf Divisionen zurückgeführt (wenn mich meine Mathekenntnisse nicht im Stich lassen). Wenn der µC auch keine Divisionen kann, so muß auch das in Subtraktionen umgewandelt werden. Wer da bei 10bit-Werten (ADC) noch den Durchblick behält... Hut ab! Wenns dann doch allgemein bleiben soll, würde ich einfach mal betreffend Mathegrundlagen googlen. Irgend ne Uni bietet da bestimmt fertige Gleichungen, die man nur auf C konvertieren muß. Viel Spaß Gralf
Wurzelziehen kann man mit einer Iteration. Hatte ich vor zig Jahren mal im EDV-Unterricht, kann mich aber nur Bruchstückhaft erinnern.
typisches Beispiel für eine Hochsprache :-) Geht aber auch in Assembler, wenn man irgendwo die Routinen dafür findet. Selber schreiben ist relativ zeitaufwändig und fehleranfällig. Habs gerade mal in C probiert, die Wurzel aus einer float-Zahl braucht 6400 Takte. Für Kennlinienlinearisierung ist i.a. eine Tabelle besser geeignet. Muß nicht für jedes Argument einen Funktionswert enthalten (will man z.B. den kompletten A/D-Bereich in einer Tabelle abbilden, sind das eben mal ca. 2kB nur für die Tabelle). Besser wirds, wenn man sich sich in gewissen Abständen Stützpunkte abspeichert, dazwischen linear interpoliert. Je mehr Stützpunkte, je genauer.
Hallo Gralf, die Variante mit einer Tabelle kann mein Problem lösen. Mir kommt bezüglich der Tabellengröße sehr entgegen, dass ich einen Temperaturumfang von 50 Grad Kelvin (0 Grad Celsius bis 50 Grad Celsius) nur erfassen muß, mit 0,5 Grad Kelvin Auflösung. Ergibt 99 Elemente. Das Element ist vom Datentyp Byte. Danke für die Antwort. MfG Wolfram Hubert
Hallo Wolfram! Und warum nimmst du nicht einen Temperaturfühler, der die Werte digital sendet. Dann sparst du dir den ganzen Aufwand. Der DS1621 kann von -55°C bis +125°C messen und das in 0,5°C - Schritten. Nimmt man die angegebene Formel zu Hilfe, so kommt man sogar unter 0,1°C. Tolle Sache dieser Fühler. Martin
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.