Forum: Mikrocontroller und Digitale Elektronik Mathe - Routinen


von Pöhli (Gast)


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ö

von Siegfried (Gast)


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

von Pöhli (Gast)


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ö

von Jonas Diemer (Gast)


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.

von Pöhli (Gast)


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ö

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
Noch kein Account? Hier anmelden.