mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LDR linearisieren, LED, empfindlichekeit Auge?


Autor: Fralla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich leses einen LDR mit dem ADC aus. Abhängig von der Helligkeit soll 
eine große 7 Segmentanzeige gedimmt werden.

Die Anzeige sollte abhänigig vom LDR eine angenehme Helligkeit für das 
Auge haben.

Problem ist natürlich, das nichts linear ist, weder der LDR widerstand, 
noch ändert sich die Spannung am Teiler linear mit dem LDR Widerstand, 
noch empfindet das Auge die LED helligkeit liear mit dem PWM wert.

Dh ich brauch eine funktion, die abhängig vom ADC Wert einen bestimmten 
PWM Wert hergibt. Ich verwende eine 8-Bit PWM, vom ADC leses ich auch 
nur 8Bit aus. 10Bit kann man auch verwenden wenn die funktion aufgrund 
von logaritmen ensprechend nur 8-Bit zurückliefert.

Ich dachte an folgende möglichkeiten:
1. Lockuptable im Programmspeicher
2. Ich könnte ein paar Punkte hernehmen und mit Matlab eine Funktion 
approximieren und dann jeweils den Wert berechnen

Was ist die bessere Vorgehensweise?
Achja, es handelt sich um einen ATmega88

MFG

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fralla schrieb:

> Die Anzeige sollte abhänigig vom LDR eine angenehme Helligkeit für das
> Auge haben.

Definiere 'angenehm'
Das ist für jeden was anderes.

> Ich dachte an folgende möglichkeiten:
> 1. Lockuptable im Programmspeicher
> 2. Ich könnte ein paar Punkte hernehmen und mit Matlab eine Funktion
> approximieren und dann jeweils den Wert berechnen

Würde ich 2teres nehmen

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
evtl.

3. Lockuptable mit wenigen Werten? (zB. 16 Stufen)

spart Flash, ist schnell und einfach zu handhaben.

Autor: Maxxie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder eine Mischung aus 1 und 2: Nehm dir die Stützstellen und 
interpoliere Zwischenwerte per BSplines.

Damit könntest du gar den "angenehmen" Helligkeitsverlauf dem Benutzer 
anpassen lassen, ohne jedes mal MatLab anzuschmeissen und neu zu 
flashen.

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... wollte ich eigendlich so verstanden haben.
    Du hast es aber besser (konkreter) formuliert. :) Z8

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Fralla (Gast)

>Dh ich brauch eine funktion, die abhängig vom ADC Wert einen bestimmten
>PWM Wert hergibt.

Siehe LED-Fading

MFG
Falk

Autor: Fralla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Siehe LED-Fading
Das ist ja einfach Lösung 1.

>Definiere 'angenehm'
>Das ist für jeden was anderes.
Eben deshalb soll dieses "angenhem" anpassbar sein.

Meine idee war ähnlich wie der Vorschlag von Maxxie, ich dachte aber 
nicht an B-Splines (keine Erfahrung damit) sondern an 
Polynominterpolation (die zu interpoloerdende Funktion wird 
wahrscheinlich nicht stark oszilieren eher logarimisch sein, oder) 
deshablb Polynome.
Vorteil wäre dass man auch verschiendene "Augenprofile" specihern kann, 
was mit einer Lookuptable wohl unmöglich wäre.

Nur fällt es mir schwer den Rechenaufwand der verschiedenen 
interpolationsverfahren für einen mega88 einzuschätzen.

Oder ganz einfach linear interplieren? Acht stützstellen für 0-255 
sollte reichen und die "ecken" wird man auch nicht merken, was meint 
ihr?

MFG

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Fralla (Gast)

>wahrscheinlich nicht stark oszilieren eher logarimisch sein, oder)
>deshablb Polynome.
>Vorteil wäre dass man auch verschiendene "Augenprofile" specihern kann,
>was mit einer Lookuptable wohl unmöglich wäre.

????
Mit einer Look-Up Tabelle kannst du soviele Profile speichern wie du 
willst, solnge nochn Flash übrig ist.

>Nur fällt es mir schwer den Rechenaufwand der verschiedenen
>interpolationsverfahren für einen mega88 einzuschätzen.

Null. Das legt man einfach fest per LUT und fertig.

>Oder ganz einfach linear interplieren? Acht stützstellen für 0-255
>sollte reichen und die "ecken" wird man auch nicht merken, was meint
>ihr?

Wenn du den Artikel LED-Fading mal komplett gelesen hättest, könnte 
dir in den Sinn kommen, dass eine Tabelle mit 32 Einträgen bei einer 
8-Bit PWM reicht. Muss man nix interpolieren etc. Einfacher geht's 
nicht.

MFG
Falk

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fralla schrieb:
> Meine idee war ähnlich wie der Vorschlag von Maxxie, ich dachte aber
> nicht an B-Splines (keine Erfahrung damit) sondern an
> Polynominterpolation (die zu interpoloerdende Funktion wird
> wahrscheinlich nicht stark oszilieren eher logarimisch sein, oder)
> deshablb Polynome.
>
> Nur fällt es mir schwer den Rechenaufwand der verschiedenen
> interpolationsverfahren für einen mega88 einzuschätzen.
>
> Oder ganz einfach linear interplieren? Acht stützstellen für 0-255
> sollte reichen und die "ecken" wird man auch nicht merken, was meint
> ihr?

Ausprobieren, daß man die Ecken merkt ist eher unwahrscheinlich. 
Wichtiger ist da ein Filter um die Anzeige träge zu machen damit nicht 
alle Sekunde eine neue Helligkeit gefahren wird in Grenzfällen.

Das Auge hat -- wie andere Sinnesorgane auch -- ein logarithmisches 
Profil, aka Weber-Fechner-Gesetz:
  http://de.wikipedia.org/wiki/Weber-Fechner-Gesetz

Falls es doch Ecken gibt: Logarithmen lassen sich sehr einfach 
berechnen:
  http://de.wikipedia.org/wiki/Logarithmus#Berechnun...

Johann

Autor: Maxxie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> sondern an
> Polynominterpolation (die zu interpoloerdende Funktion wird
> wahrscheinlich nicht stark oszilieren eher logarimisch sein, oder)
> deshablb Polynome.

Würde ich von abraten, das geht schief. Polynominterpolationen haben den 
Nachteil, dass sie, je mehr Stützstellen du hast immer größer an den 
Stellen zwichen denen abweichen.

http://de.wikipedia.org/wiki/Benutzer:Scholten/Pol...

Splines umgehen das ganze, in dem sie nur Polynome kleinen Grades nutzen 
und dafür die Funktion stückeln.

Autor: Fralla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>????
>Mit einer Look-Up Tabelle kannst du soviele Profile speichern wie du
>willst, solnge nochn Flash übrig ist.
unendlichen Flash hab ich nicht, es ist nur mehr wenig platz.

Hab jetzt mal mit 8Bit/32 Stufen gefadet, da sieht man Stufen speziell 
wenn man langsam fadet. (Hab ich vl nicht erwähnt, aber gefadet muss 
auch werden)
  Ich kann aber die Timerverwendung umstrukturieren und werd das mit 
16Bit-PWM /256 Stufen versuchen. 5 Verschiednene Profile fressen dann 
eine Menge flash,
Deshalb dachte ich mit 8 Stützstellen und dem entsprechendem Verfahren 
interpolieren braucht weniger Speicherplatz.

>Null. Das legt man einfach fest per LUT und fertig.
War auf verschiedene Interpolationsverfahren bezogen.


>Wichtiger ist da ein Filter um die Anzeige träge zu machen damit nicht
>alle Sekunde eine neue Helligkeit gefahren wird in Grenzfällen.
Das ist sicher sinnvoll, gute idee

>Würde ich von abraten, das geht schief. Polynominterpolationen haben den
>Nachteil, dass sie, je mehr Stützstellen du hast immer größer an den
>Stellen zwichen denen abweichen.
Danke für den Hinweis, ich werd das mit den polynomen lassen.
Zuerst werd ichs mal linear versuchen.

Hat jemand hinweise zur (B)-Spline Interpolation auf einem µC? 
(Interesenshalber)

MFG

Autor: Fralla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat jemand hinweise zur (B)-Spline Interpolation auf einem µC?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.