Hallo,
mittlerweile habe ich nach dem Durchlauf verschiedener Testszenarien den Eindruck, es gibt keinen Weg um die bestehenden ISO-Steuerungs-Befehle zuverlässig einsetzen zu können nachdem die Befehle deutliche Tücken aufweisen. (Rudis Skript ist hier noch nicht getestet und damit noch nicht berücksichtigt.)
Get_iso_market() scheitert schon in TEST 1 oder bietet teilweise völligen Unsinn in TEST 5.
Get_iso_real scheitert spätestens in TEST 3 im zweiten Durchlauf.
Get_iso_mode() liefert keine ISO-Werte, sondern nur Stufen, wobei ISO 80 als Stufe „0“ gemeldet wird, und der Befehl spätestens in TEST 6 nicht korrekt funktioniert? (iso50=?, iso 80=0, iso100=2, iso200=3, iso400=4, iso800=5, alles auslesbar nur nach dem set_sv96() nach (!) dem ShootHalf des Auslöseshootings und funktioniert nicht in allen Testszenarien). Welcher Wert ISO50 repräsentiert weiß ich nicht (ISO50 hat meine Cam nicht).
Get_sv96() spiegelt nicht korrekt die Kamera-ISO-Einstellung wider.
Eine ISO-Änderung mittels set_sv96() wird offenbar noch nicht nach dem Set auslesbar angenommen, sondern kann als Override erst nach dem HalfShoot des eigentlichen Auslöse-Shootings ausgelesen werden.
Hier die Testszenarien mit ihren merkwürdigen Ergebnissen. Meine Anmerkungen innerhalb der Log-Files gehen angesichts der massigen Fülle von Ungereimtheiten nicht auf jeden einzigen Fehler ein.:
Folgendes erstes Skript:
--[[
************************************
@title GetIso
@param q Logfile
@default q 1
--]]
-- start main
sleep
(2000)
print_screen
(q
)
set_console_layout
(0,
0,
25,
13)
print("ISOMarketVorSet=",get_iso_market
())
print("ISORealVorSet =",get_iso_real
())
print("ISO96VorSet =",get_sv96
())
print("ISOModeVorSet =",get_iso_mode
())
set_sv96
(507) -- =ISO200
print("ISOMarketNachSet=",get_iso_market
())
print("ISORealNachSet =",get_iso_real
())
print("ISO96NachSet =",get_sv96
())
print("ISOModeNachSet =",get_iso_mode
())
press
("shoot_half")
repeat
sleep
(1)
until get_shooting
() == true
print("ISOMarketNachHalf=",get_iso_market
())
print("ISORealNachHalf =",get_iso_real
())
print("ISO96NachHalf =",get_sv96
())
print("ISOModeNachHalf =",get_iso_mode
())
sleep
(300)
press
("shoot_full")
release
("shoot_full")
release
("shoot_half")
repeat
sleep
(1)
until get_shooting
() ~
= true
--end
print_screen
(false)
Erstellt in 0.008 Sekunden, mit
GeSHi 1.0.8.9
Nun das Skript vierfach gestartet, alle 4 Durchläufe mit ISO 80-Einstellung der Kamera:
Hier die einzelnen Log-Ergebnisse:
- Code: Alles auswählen
TEST 1: Bemerkung
ISOMarketVorSet= 80 ok
ISORealVorSet = 0 falsch
ISO96VorSet = 0 falsch
ISOModeVorSet = 0
ISOMarketNachSet= 80 falsch. Müsste 200 sein. Warum noch nicht richtig?
ISORealNachSet = 0 falsch
ISO96NachSet = 0 falsch müsste 507 sein
ISOModeNachSet = 0 falsch
ISOMarketNachHalf= 196 falsch??? müsste 200 sein
ISORealNachHalf = 130
ISO96NachHalf = 507 Override erfolgte offenbar erst nach ShootHalf
ISOModeNachHalf = 0 entspricht nicht dem aktuellen Setting mittels set_sv96().
ISOMarketVorSet= 100 ???????????? falsch! Woher denn die 100 wenn ISO auf 80?
ISORealVorSet = 130
ISO96VorSet = 507 noch aus Durchlauf 1 gespeichert???
ISOModeVorSet = 0
ISOMarketNachSet= 100 falsch
ISORealNachSet = 130
ISO96NachSet = 507 noch alt oder schon neu?
ISOModeNachSet = 0
ISOMarketNachHalf= 100 falsch; war nur in Durchlauf 1 mit Wert 196 einigermaßen korrekt.
ISORealNachHalf = 130
ISO96NachHalf = 507 könnte ok sein
ISOModeNachHalf = 0
ISOMarketVorSet= 100 Durchlauf 3 und 4 wie Durchlauf 2.
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 0
ISOMarketNachSet= 100
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 100
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 0
ISOMarketNachSet= 100
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Weiter ein anderer Skriptdurchlauf mit aufsteigender ISO-Einstellung:
- Code: Alles auswählen
TEST 2:
Beginnend mit ISO80:
ISOMarketVorSet= 80 ok
ISORealVorSet = 0 falsch
ISO96VorSet = 0 falsch
ISOModeVorSet = 0
ISOMarketNachSet= 80 falsch; noch keinen Override angenommen
ISORealNachSet = 0 falsch
ISO96NachSet = 0 falsch; warum funktioniert diesmal der Override an dieser Stelle noch nicht?
ISOModeNachSet = 0 falsch oder Override noch nicht angekommen
ISOMarketNachHalf= 196 Override angekommen, aber wieder nur mit 196 statt 200
ISORealNachHalf = 130 Warum 130 bei Market 196 wenn zuvor im Vierer-Durchlauf ebenfalls 130 aber bei Market 100 ????
ISO96NachHalf = 507 könnte ok sein
ISOModeNachHalf = 0 stellt die ursprüngliche Cam-Einstellung dar, aber nicht die aktuelle Einstellung.
ISO100:
ISOMarketVorSet= 100 ok
ISORealVorSet = 130
ISO96VorSet = 507 falsch. Oder ist das Altwert von vorigem Durchlauf?
ISOModeVorSet = 2 könnte ok sein
ISOMarketNachSet= 100 falsch
ISORealNachSet = 130
ISO96NachSet = 507 könnte ok sein, oder auch fälschlicherweise nur der alte Wert aus vorigem Durchlauf
ISOModeNachSet = 2
ISOMarketNachHalf= 196 warum nur 196 statt 200 ???
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0 falsch
ISO200:
ISOMarketVorSet= 200 ok
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 3
ISOMarketNachSet= 200 diesmal tatsächlich 200. Könnte aber auch aus ISO200-Einstellung stammen.
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 3
ISOMarketNachHalf= 196 da sind sie schon wieder, die ominösen 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0 falsch
ISO400:
ISOMarketVorSet= 400 ok
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 4
ISOMarketNachSet= 400 falsch, es müsste 200 eingestellt sein
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 4
ISOMarketNachHalf= 196 200 müsste es heißen
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISO800:
ISOMarketVorSet= 800 ok
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 5
ISOMarketNachSet= 800 falsch, es müsste 200 eingestellt sein
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 5
ISOMarketNachHalf= 196 200 müsste es heißen
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOReal ändert sich hier offenbar überhaupt nicht.
Nun das Skript abgewandelt und ein abgeschlossenes ShootHalf vorangestellt. Hier das Skript:
--[[
************************************
@title GetIso
@param q Logfile
@default q 1
--]]
-- start main
sleep
(2000)
print_screen
(q
)
set_console_layout
(0,
0,
25,
13)
press
("shoot_half")
repeat
sleep
(1)
until get_shooting
() == true
release
("shoot_half")
print("ISOMarketVorSet=",get_iso_market
())
print("ISORealVorSet =",get_iso_real
())
print("ISO96VorSet =",get_sv96
())
print("ISOModeVorSet =",get_iso_mode
())
set_sv96
(507) -- =ISO200
print("ISOMarketNachSet=",get_iso_market
())
print("ISORealNachSet =",get_iso_real
())
print("ISO96NachSet =",get_sv96
())
print("ISOModeNachSet =",get_iso_mode
())
press
("shoot_half")
repeat
sleep
(1)
until get_shooting
() == true
print("ISOMarketNachHalf=",get_iso_market
())
print("ISORealNachHalf =",get_iso_real
())
print("ISO96NachHalf =",get_sv96
())
print("ISOModeNachHalf =",get_iso_mode
())
sleep
(300)
press
("shoot_full")
release
("shoot_full")
release
("shoot_half")
repeat
sleep
(1)
until get_shooting
() ~
= true
--end
print_screen
(false)
Erstellt in 0.007 Sekunden, mit
GeSHi 1.0.8.9
Mit diesem Skript der gleiche Test wie anfangs: 4 Durchläufe, alle 4 Durchläufe in ISO 80-Einstellung:
- Code: Alles auswählen
TEST 3:
ISOMarketVorSet= 80
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 80
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 100 falsch! Woher denn die 100 wenn ISO auf 80?
ISORealVorSet = 130 IsoReal größer als Market? Unmöglich.
ISO96VorSet = 507
ISOModeVorSet = 0
ISOMarketNachSet= 100
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 100
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 0
ISOMarketNachSet= 100
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 100
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 0
ISOMarketNachSet= 100
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Gleichfalls nochmal das Skript mit stufenweise ansteigenden ISO-Einstellungen, beginnend mit ISO 80, ohne die Cam zwischen den Durchläufen auszuschalten:
- Code: Alles auswählen
TEST 4:
Iso80:
ISOMarketVorSet= 80
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 80
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso100:
ISOMarketVorSet= 100
ISORealVorSet = 65
ISO96VorSet = 411
ISOModeVorSet = 2
ISOMarketNachSet= 100
ISORealNachSet = 65
ISO96NachSet = 411
ISOModeNachSet = 2
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso200:
ISOMarketVorSet= 200
ISORealVorSet = 130
ISO96VorSet = 507
ISOModeVorSet = 3
ISOMarketNachSet= 200
ISORealNachSet = 130
ISO96NachSet = 507
ISOModeNachSet = 3
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso400:
ISOMarketVorSet= 400
ISORealVorSet = 261
ISO96VorSet = 603
ISOModeVorSet = 4
ISOMarketNachSet= 400
ISORealNachSet = 261
ISO96NachSet = 603
ISOModeNachSet = 4
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso800:
ISOMarketVorSet= 800
ISORealVorSet = 523
ISO96VorSet = 699
ISOModeVorSet = 5
ISOMarketNachSet= 800
ISORealNachSet = 523
ISO96NachSet = 699
ISOModeNachSet = 5
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
In TEST 4 sehen die Werte ISOMarketVorSet zwar korrekt aus, aber in TEST 3 sind diese Werte fehlerbehaftet wenn man ISO einfach nur auf Iso80 stehen lässt.
Noch eine Abwandlung des Skripts: Diesmal nach dem Shooting ein Versuch, ob der jeweils zuletzt gesetzte set_sv96 jeweils den nächsten Skriptablauf (ohne die Cam dazwischen auszuschalten) beeinflusst. Versuch einer Art Initialisierung der Cam-ISO nach (!) dem Shooting mittels eines set_sv96(371) nach dem Shooting. Hier zunächst das Skript:
--[[
************************************
@title GetIso
@param q Logfile
@default q 1
--]]
-- start main
sleep
(2000)
print_screen
(q
)
set_console_layout
(0,
0,
25,
13)
press
("shoot_half")
repeat
sleep
(1)
until get_shooting
() == true
release
("shoot_half")
print("ISOMarketVorSet=",get_iso_market
())
print("ISORealVorSet =",get_iso_real
())
print("ISO96VorSet =",get_sv96
())
print("ISOModeVorSet =",get_iso_mode
())
set_sv96
(507) -- =ISO200
print("ISOMarketNachSet=",get_iso_market
())
print("ISORealNachSet =",get_iso_real
())
print("ISO96NachSet =",get_sv96
())
print("ISOModeNachSet =",get_iso_mode
())
press
("shoot_half")
repeat
sleep
(1)
until get_shooting
() == true
print("ISOMarketNachHalf=",get_iso_market
())
print("ISORealNachHalf =",get_iso_real
())
print("ISO96NachHalf =",get_sv96
())
print("ISOModeNachHalf =",get_iso_mode
())
sleep
(300)
press
("shoot_full")
release
("shoot_full")
release
("shoot_half")
repeat
sleep
(1)
until get_shooting
() ~
= true
set_sv96
(371) -- =ISO80
--end
print_screen
(false)
Erstellt in 0.007 Sekunden, mit
GeSHi 1.0.8.9
Nun wieder die entstandenen Logfiles bei 4 Durchläufen mit konstant ISO80:
- Code: Alles auswählen
TEST 5:
ISOMarketVorSet= 80
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 80
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 36 völliger Unsinn
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 36
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
ISOMarketVorSet= 36
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Ebenfalls nochmals mit ansteigender ISO-Einstellung ohne die Cam zwischen den Durchläufen auszuschalten:
- Code: Alles auswählen
TEST 6:
Iso80:
ISOMarketVorSet= 80
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 80
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 196
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso100:
ISOMarketVorSet= 72
ISORealVorSet = 48
ISO96VorSet = 371 scheint sich die Cam zu merken wenn keine Abschaltung dazw.
ISOModeVorSet = 0 falsch
ISOMarketNachSet= 72
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso200:
ISOMarketVorSet= 36
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso400:
ISOMarketVorSet= 36
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Iso800:
ISOMarketVorSet= 36
ISORealVorSet = 48
ISO96VorSet = 371
ISOModeVorSet = 0
ISOMarketNachSet= 36
ISORealNachSet = 48
ISO96NachSet = 371
ISOModeNachSet = 0
ISOMarketNachHalf= 100
ISORealNachHalf = 130
ISO96NachHalf = 507
ISOModeNachHalf = 0
Jeweils innerhalb der 6 Tests wurde die Cam nicht ausgeschaltet, sondern jeweils nur der Skriptparameter für die Logfile-Nummer sowie bei den geradzahligen Tests die manuelle ISO-Einstellung geschalten.
Ernüchterndes Fazit falls ich nichts übersehen habe:
Egal welcher ISO-Abfragebefehl, egal welche Position, egal ob noch ein abgeschlossenes ShootHalf davor, egal ob nach dem Shooting nochmals auf IsoApexGrundwert 371 gesetzt. Ich sehe hier kein einziges verlässliches Verfahren um die aktuelle ISO-Einstellung auszulesen.
Einzig get_sv96() nach demjenigen Shoothalf des eigentlichen Shootings funktioniert wohl, nur ist das nicht das, was wir brauchen. Wir brauchen einen Befehl um korrekt abzufragen, welche ISO-Einstellung vor (!) dem set_sv96() aktiv ist.
get_iso() gibt es wohl unter Lua nicht. Ich bekam eine Fehlermeldung:
attempt to call global 'get_iso' (a nil value)
@msl: get_iso_mode() scheint in Lua keine ISO-Werte auszugeben, sondern wie UBasic get_iso nur die Stufen durchzuzählen. (evtl. muss hier das Handbuch angepasst werden)
Von ISO 100 bis 800 könnte get_iso_mode() nützlich sein sofern man TEST 5 und 6 ausklammert und deren Verfahren vermeidet. Aber falls bei anderen Cams ISO 50 vielleicht ebenso wie ISO 80 mit dem Wert 0 definiert wäre (was noch zu prüfen ist), wäre das nicht mehr eindeutig und wäre damit unbrauchbar.
Vielleicht sind wir hier an einem toten Punkt angekommen. Mittlerweile habe ich eine zweistellige Stundenanzahl allein nur in die Versuche der ISO-Befehlsanwendung investiert, ohne dass sich ein komplett zuverlässiger Weg aufzeigt. Mit den CHDK-Interna und der Befehlsprogrammierung kenne ich mich zu wenig aus, um systematisch direkt an die Befehle ranzugehen, ob es da einen erkennbaren Bug gibt, den man vielleicht mit angemessenem Aufwand bereinigen könnte. Grundsätzlich sind ja die Befehle schön durchdacht. Vielleicht fehlt da nur noch eine Kleinigkeit um die Tücken zu beseitigen. Aber vielleicht findet sich bereits in Rudis Testskript noch eine Lösung. Das möchte ich detailliert austesten.
Viele Grüße,
Sinter