Richtige Blende auslesen

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Richtige Blende auslesen

Beitragvon gehtnix » 03.07.2009, 18:59

Hallo,

wir haben get_av und get_av96 zum Auslesen der Blendenwerte.
get_av liefert mit die "Schlüsselnummer", das ist verstanden.

get_av96 ist soweit klar, wenn die Verschlusszeit unter 1 Sekunde bleibt. Wenn die aber höher ist dann werden die ausgelesenen Zahlen unklar. Hier mal eine Aufstellung.
Bild
Unklar ist mir wieso Blende*96 nicht die ausgelesenen Werte ergeben?
Habe ich Blende 8,0 und komme nun über 1 Sekunde liefert mir get_av96 z.B. 548 zurück. Wo ist die numerische Grenze zu den einzelnen Blendenwerten?

gruß gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon PhyrePhoX » 05.07.2009, 14:55

so ganz seh ich da auch nicht durch. es wird jedenfalls des öfteren gerundet, intern, in der kamera. das ganze sollte jedenfalls alles logarithmisch sein, siehe http://doug.kerr.home.att.net/pumpkin/APEX.pdf da sind diese ominösen 96 erklärt.
Benutzeravatar
PhyrePhoX
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 490
Registriert: 04.07.2008, 22:31

Beitragvon gehtnix » 05.07.2009, 17:12

PhyrePhoX hat geschrieben:so ganz seh ich da auch nicht durch. es wird jedenfalls des öfteren gerundet, intern, in der kamera. das ganze sollte jedenfalls alles logarithmisch sein, siehe http://doug.kerr.home.att.net/pumpkin/APEX.pdf da sind diese ominösen 96 erklärt.

:-k Der interne DOF-Rechner von CHDK nutzt dies "get_av96" jedenfalls nicht. Denn sonst würde der DOF-Rechner korrekte Daten liefern.
Gleiches Problem habe ich im SevenupH auch erst jetzt entdeckt. Wenn bei Blende 8 die Belichtungszeit über die ominöse 1 Sekunde geht, dann geht die Blende auf 7.1. Und damit ist der HYP falsch. Mit get_av96 könnte man das abfangen.

Dann muss ich mir doch mal dieses PDF zu Gemüte führen :roll:

gruß gehtnix Bild
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Re: Richtige Blende auslesen

Beitragvon elektronikfreak » 13.12.2009, 19:43

gehtnix hat geschrieben:Unklar ist mir wieso Blende*96 nicht die ausgelesenen Werte ergeben?
Habe ich Blende 8,0 und komme nun über 1 Sekunde liefert mir get_av96 z.B. 548 zurück. Wo ist die numerische Grenze zu den einzelnen Blendenwerten?
gruß gehtnix

Wie PhyrePhoX schon schreibt, liegt das daran, dass es sich nicht um "echte" Blendenwerte handelt, sondern um "APEX96"-Blenden.
Die Umrechnung erfolgt so: Blende=2 ^ (get_av96 / 192)
Also z.B. bei Blende 8 liefert dir get_av96 den Wert 576. Dann rechnest du: 2^(576/192)=2^3=Blende 8
Mit dem Taschenrechner ein Kinderspiel. Die spannende Frage ist nur noch, wie ich die Rechnung in CHDK-Lua umsetzen kann. Dass es dort keine Gleitkommarechnung gibt, ließe sich ja noch verschmerzen, aber soweit ich weiß, gibt's auch kein x^y.
Zur Not hilft da eine Look-up-Tabelle. Bessere Ideen?

Gruß

elektronikfreak
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 21:33
Wohnort: München

Re: Richtige Blende auslesen

Beitragvon fe50 » 13.12.2009, 20:05

elektronikfreak hat geschrieben:aber soweit ich weiß, gibt's auch kein x^y.
Zur Not hilft da eine Look-up-Tabelle. Bessere Ideen?


x ^ y geht in Lua problemlos !
"The grass was greener, The light was brighter"►  ◄fe50 home►  ◄TRAIL-Magazin►  ◄RTFM !
Benutzeravatar
fe50
CHDK-Legende
CHDK-Legende
 
Beiträge: 1105
Registriert: 25.04.2008, 15:28
Wohnort: B'Württemberg
Kamera(s): Ixus50 101b, Ixus860 100c, SX10 101a

Re: Richtige Blende auslesen

Beitragvon elektronikfreak » 13.12.2009, 20:19

fe50 hat geschrieben:x ^ y geht in Lua problemlos !

Na dann vielen Dank. Ich dachte irgendwo gelesen zu haben, dass es sowas in Lua nicht gäbe. Hab' ich wohl geträumt...
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 21:33
Wohnort: München

Beitragvon msl » 13.12.2009, 20:31

Hallo,

in der Mathematik-Bibliothek von CHDK-Lua ist die Potenzfunktion im Gegensatz zu fast allen anderen Funktionen freigeschaltet siehe auch CHDK-Handbuch S. 97.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
math.pow(x, y)
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9


Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

"Echte" Blende aus Apex-Blende berechnen

Beitragvon elektronikfreak » 14.12.2009, 20:37

Nach einigem Nachdenken bin ich zu dem Schluss gekommen, dass die Potenzfunktion in dem Fall auch nicht allzu viel hilft, da in CHDK-Lua nur Ganzzahl-Berechnungen verfügbar sind.
Aber es gibt trotzdem einen einfachen Weg, die Umrechnung einfach und genau hinzubekommen.
Ich habe einfach die Umrechnungsfunktion so skaliert, dass zum Schluss der Blendenwert*1000000 herauskommt und dann das Ganze durch ein Polynom 2. Ordnung approximiert. Dann wird noch durch 1000 dividiert, damit das Ergebnis nicht gar so groß ist.
Die Funktion liefert also aus dem Wert, den die Kamera-Funktion get_av96 zurückgibt, den Blendenwert * 1000.
Die eigentliche Funktion ist herzhaft kurz:
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
-- Blendenberechnung aus Apex96-Blende
-- Die theoretische Umrechnung lautet: Blende = 2 ^ (Av96/192)
-- z.B. Apex96=6*96=576 ergibt: Blende = 2 ^ (576/192) = 2 ^ 3 = 8
function av1000(apex96)     -- Apex96 wird in 1000x echte Blende umgerechnet
-- Approximation durch quadratische Gleichung:
-- Blende * 1000000 = k2 * apex96 ^ 2 + k1 * apex96 + k0
    k2 = 33  k1 = -9648  k0 = 2998100       -- Koeffizienten
    return (apex96 * apex96 * k2 + apex96 * k1 + k0) / 1000
end

-- Ein paar Beispiele (halbe Blendenstufen):
print("Bl 2,8:", av1000(288))
print("Bl 3,4:", av1000(336))
print("Bl 4,0:", av1000(384))
print("Bl 4,8:", av1000(432))
print("Bl 5,6:", av1000(480))
print("Bl 6,7:", av1000(528))
print("Bl 8,0:", av1000(576))
 
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9

Die Ausgabe:
Syntax: [ Download ] [ Verstecken ]
Benutze Diff Syntax Highlighting
Bl 2,8: 2873
Bl 3,4: 3369
Bl 4,0: 4011
Bl 4,8: 4802
Bl 5,6: 5739
Bl 6,7: 6825
Bl 8,0: 8057
*** BEENDET ***
 
Erstellt in 0.000 Sekunden, mit GeSHi 1.0.8.9

Wie man sieht, gibt es kleine Abweichungen. Die stammen zum größten Teil daher, dass die üblichen Blendenwerte z.T. nur Näherungen sind. Z.B. Blende 2,8 ist in Wirklichkeit der Wert 2*Wurzel2=2,828... Der Fehler durch die Approximation liegt für alle Werte unter 1%, was für den Zweck mehr als ausreichend ist.

Der nächste Schritt für mich ist, hieraus einen Ersatz für die fehlerhaften Funktionen get_dof und get_hyp_dist zu berechnen - folgt demnächst.

Gruß

elektronikfreak
A710IS, EOS500D
elektronikfreak
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 74
Registriert: 31.03.2009, 21:33
Wohnort: München


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast