Hallo an alle! Habe ein Problem moechte jeweils einem 8bit Wert aus dem A/D Wandler einen anderen Wert einer anderen Kurve zuordnen. Bei 256 Werten waere das ein riesen Programmieraufwand,oder sehe ich das falsch. Habe jetzt eine Regressiongerade bestimmt mit dem ich den Kurvenverlauf bestimmen koennte.Problem hierbei sind die Koeffizienten.y=5,4094E-8*x^4-1,898E-5*x^3+2,4812E-3*x+4,31354347 Nun klar brauch ich nicht alle Stellen und das Ergebnis soll auch keine Nachkommastellen mehr aufweisen also gerundet sein, aber wie kann ich das berechnen?
Ich würd dir schon vorschlagen es mit einer Tabelle zu machen, wenn du nicht alle Werte benötigst, kannst du deine Tabelle auch dementsprechend verkleinern. Machst einfach zur Sicherheit eine Berichsüberprüfung bevor du den Tabellenwert ausliest. Um den Flashspeicher würde ich mir nicht unbedingt sorgen machen, denn du sparst einiges wenn du auf Float verzichten kannst. Gruß Peter
Erklaer mir was du mit einer Tabelle meinst! Ich kenn mich noch nicht so gut aus und brauche dringend Hilfe!
einfach was in der Art: const int look_up[] = {1,2,5,7,8,45,5,6,...}; Zugriff dann mit unsigned char ad_wert; int wert; ad_wert = hole_ad_wert(); wert = look_up[ad_wert]; so, oder so ähnlich, einfach den AD-Wert als index in der Tabelle verwenden, und dir so den zugehörigen wert holen....
Versteh das nicht so recht waere dir super damkbar, wenn Du noch etws genauer erklaeren koenntest.Programmier erst seit 2 wochen in assembler und muss was fuer die Uni fertigmachen!
Ok, war erst mal mein Fehler, hab nicht gelesen, dass das "Programmiere in Assembler!" von dir war. Dachte das war mal wieder einer der hilfreichen Kommentare die man manchmal so liest... Ich programmiere kein Assembler, von dem her kann ich dir auch bei der Umsetzung nicht weiterhelfen. Dürfte aber auch nicht weiter schwer sein, wenn du das Prinzip verstanden hast. Sowas wie Felder sollte es ja auch in assembler geben ;) Gruß Peter
Hi! Da du nicht gesagt hast welcher uC eben mal als PaP: lade Indexreg.mit Adr.Tabellenanfang addiere zum Indexreg. AD-Wert hole Wert,laut Index,aus Tabelle Tabelle:1;3;5;7;.. Einfacher geht es kaum. MfG Uwe
Eine Regressions*gerade* mit Termen bis x^4 :-) Ansonsten ist natürlich eine Tabelle (LUT) wie bereits beschrieben das einfachste, wenn Platz genug da ist...
Frage stellt sich jetzt nur noch nach der Skalierung. Die Funktion ist bei 65->66 null, bei 255 hätte sie den Wert -81.67 und bei einem ADC-Wert von 1 hätte die Funktion dann einen Wert von 4,316 (gerundet). Villeicht brauchst Du ja Amplituden, die einen anderen Wertebereich von x bedingen würden. musst das also nochmal mit deinem Wertebereich multiplizieren. Denn erst bei 348->349 wird die Funktion wieder 0 und schmeisst dann wieder positive Werte. Also wenn Du den gesamten wertebereich erfassen musst, und nicht nur einen Teil der Kurve- Ich habe eben mal den wertebereich von 1020 -> 1023 (10bit-anschlag vom ADC) anzeigen lassen. 38929!! Da läuft dir dein Integer über, ist ja blöd. Aber Du sagtest ja, du hast nur 255 Werte. Trotzdem aufpassen Casio baut bessere Taschenrechner als Klaviere... Gruß Axel
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.