Mathe - Routinen

Gast #1611
Lesenswert?

Hallo allerseits,

ich bräuchte da mal Hilfe .....

ich programmier Atmega163 und/oder AT90S8515 in Assembler, un komm mit 
dem meisten Dingen auch mitlerweile klar. Probleme machen mir aber immer 
wieder mathematische Routinen.

zB. hab ich jetzt das Problem das mir mein AD Wandler die Werte eines 
nichtlinearen Sensors liefert. Die Kennlinie hat nährungsweise 
Exponentialfunktion. Wenn ich nun statt der LSB's einen richtigen 
Meßwert angezeigt haben will muß ich irgendwie Kalibrieren. Bei linearen 
Kennlinien hab ich das auch schon gemacht, aber wie mach ich das bei 
exponentialen?   Der Atmega kann hardwareseitig ADD SUB MUL , für DIV 
gibt es entsprechende Routinen, aber wie händel ich 
Exponentialfunktionen?

Oder kann ich das umgehen und irgendwie anders von meinen LSBs zu meinem 
Meßwert gelangen?

Alle Ideen sind willkommen - Danke

Pö
Gast #1612
Lesenswert?

Auf die Exponentialfunktion Stützpunkte legen, diese als Werte im 
Programm fest hinterlegen. Zwischen den Stützpunkten wie mit einer 
linearen Kennlinie verfahren. Hängt alledings von den 
Genauigkeitsanforderungen ab. Für die meisten Anwendungsfälle reichen 
5-10 Stützstellen aus.

Siegfried
Gast #1613
Lesenswert?

Ja, das wäre möglich.
Allerdings ist eine Gerätekalibrierung mit mehr als drei Kalibierpunkten 
nicht so toll. Vor allem weil man ja auch immer die entsprechenden 
Kalibrierstandarts und so brauch.

Was ist wenn ich die Funktion als Einzelwerte im Eprom hinterleg? da 
hätte ich dann 512 Werte. Die daraus resultierende Auflösung würde 
reichen, bloß wie bekomm ich die ganzen Werte elegant in den EEprom...

by Pö
Gast #1614
Lesenswert?

mit .dw kannste datenwörter ablegen.

entwerde direkt im programmspeicher (die dann mit LPM geladen werden) 
oder im eeprom.

wenn die ins eeprom sollen, musste die .dw ins .ESEG schreiben, also

.CSEG ;optional
<programm code>
<außerhalb des programmcodes (die datenwörter sollen ja nicht ausgeführt 
werden)
.dw 0x1234 ;legt ein wort in den programm speicher
.db 0x12 0x34 ;alternativ 2 bytes. Immer grade anzahl bytes pro .db 
zeile!

.ESEG ; hier beginnt das eeprom
.dw 0x1234  ; und ein byte im eeprom


beim kompilieren legt der assembler dann eine eeprom datei an (evtl. ist 
hierzu eine kommandozeilen option nötig, hängt vom assembler ab). die 
datei heißt dann i.d.R. wie dein programm mit der endung .eep. diese 
kannste dann direkt an den atmel senden.
Gast #1615
Lesenswert?

Genau !

so werd ich das wohl machen.....

nur die 512 Werte eintippen ist natürlich blöd. Da muß ich mir noch was 
einfallen lassen um die aus Exel oder so sauber rüberzubekommen..

Vielen Dank an alle , das Forum ist echt stark da es so gut frequentiert 
ist.
Und vor allem ist es mal eins in deutsch.....

ich werd wohl öfter mal reinschauen !

by Pö

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