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

Eine eigene Frage? Dieser Thread ist über 24 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.