Benötige bitte einen Tipp: Einsatz von set_tv96() unter LUA?

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

Benötige bitte einen Tipp: Einsatz von set_tv96() unter LUA?

Beitragvon Sinter » 08.02.2010, 11:53

Hallo,

ich bekomme set_tv96() trotz Handbuch, Shooting-Tipps und anderen Infoquellen einfach nicht zum Laufen. Gleichfalls die Alternative set_tv96_direct(). Die neue Verschlusszeit wird mir irgendwie nicht angenommen. Kann mir bitte jemand sagen was ich bei der Programmierung übersehen habe?

Im Skript möchte ich die von der Kamera gemessene bzw. geplante Belichtungszeit um 5 EV verkürzen.

Hier und in der Anlage das auf das Problem reduzierte LUA-Skript (Die function fastshoot ist nur zum Vergleich integriert und wird im Skript nicht genutzt):

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting

--[[





by Sinter, Febr 2010

********************************

@title A_Test



--]]


function fastshoot()

    press("shoot_half")

    repeat

        sleep(1)

    until get_shooting() == true

    press("shoot_full")

    release("shoot_full")

    release("shoot_half")

    repeat

        sleep(1)

    until get_shooting() ~= true

end









--start script



sleep(2000)







--SHOOTINGBEGINN:

press("shoot_half")

repeat

  until get_shooting() == true



-- Abfrage der von der Kamera ermittelten Belichtungszeit

kamerawillbelichten=get_tv96()

print ("Ermittelt: ", kamerawillbelichten)

-- Printbefehl zeigt dass zumindest die Messung ohne vorheriges release("shoot_half") funktioniert



-- Eventuell krummen Wert bereinigen (=runden) und auf ein Vielfaches von 32 bringen

kamerawillbelichten=(kamerawillbelichten+16)/32

kamerawillbelichten=kamerawillbelichten*32



print ("Gerundet: ", kamerawillbelichten)

sleep (2000)





-- Ich moechte nun aber um 5 EV kürzer belichten und berechne neuen Apex-TV96-Wert:

wert=(kamerawillbelichten+(96*5))

print("5EV kuerzer: ", wert)







sleep(1000)

--######################################################

-- Hier folgt die Problemzeile, weder set_tv96(wert) noch set_tv96_direct(wert) funktionieren

set_tv96(wert)



press("shoot_full")

release("shoot_full")

release("shoot_half")

repeat

  until get_shooting() ~= true



-- SHOOTING-BEENDET





 
Erstellt in 0.011 Sekunden, mit GeSHi 1.0.8.9



Viele Grüße,
Sinter


EDIT: Anhang gelöscht
Zuletzt geändert von Sinter am 08.02.2010, 18:49, insgesamt 3-mal geändert.
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Beitragvon msl » 08.02.2010, 13:06

Hallo Sinter,

ich sehe bisher nur einen Fehler. Du hast das erste "press" nicht mit einem "release" abgeschlossen. Auch wenn Du nur messen möchtest, musst Du diesen Vorgang abschließen. Dann hast Du den gemessenen Wert und kannst nach den verschiedenen Methoden vorgehen.

Versuche zuerst ein Auslösen mit einem festen Wert hin zu bekommen. Wenn das so funktioniert wie es soll, dann kannst Du das Skript Stück für Stück mit Mess- und Berechnungsprozeduren erweitern.

Übrigens brauchst Du nicht zu runden. Sind die Werte "krumm", benutzt die Kamera den nächstmöglichen höheren oder niedrigeren Wert.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Sinter » 08.02.2010, 13:33

Hallo msl,

vielen herzlichen Dank für Deinen Hinweis!

Irgendwie klappt es bei mir weiterhin nicht, auch wenn ich zuerst mit "release"abschließe und zum Testen einen festen Wert verwende.

Hm, die Print-Befehle zeigen, es wird zumindest bereits ohne zusätzliches Release ein korrekter Wert gemessen.
Wenn ich das erste "press" mit einen "release" abschließe, dann muss ich vermutlich vor dem shoot_full nochmals "press shoot_half" setzen.

Ziemlich verzwickt. Ich kenne aber auch noch kein funktionierendes Beispiel unter LUA. Sofern es überhaupt eines gibt.

Viele Grüße,


Edit:

Moment,

ich glaube es ist gelöst...

Gleich dazu mehr.

Viele Grüße,
Sinter
Zuletzt geändert von Sinter am 08.02.2010, 14:28, insgesamt 1-mal geändert.
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Beitragvon msl » 08.02.2010, 14:00

Na ok.

Ãœbrigens kannst Du Dir auch mal das Skript zum Thema erweiterter Tv-Modus anschauen. Das ist zwar relativ komplex. Da werden aber Messergebnisse eingerechnet.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Ich glaube es ist gelöst

Beitragvon Sinter » 08.02.2010, 14:16

Hallo msl,

vielen Dank. Das Skript werde ich mir ansehen.

Das Shooting in meinem Fall funktioniert nun offenbar in folgender Befehlsanordnung (Feintuning ob Sleep notwendig vor press("shoot_full") steht noch aus). Mit dem nun hoffentlich funktionierenden Skript ist der Tag für heute gerettet. Denn das kleine Problem hat mich in den vergangenen Tagen locker über fünf Stunden mit Recherche und Tests beschäftigt :-) Jetzt komme ich glücklicherweise weiter.

Funktionsfähiger LUA-Code:

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting

--[[





by Sinter, Febr 2010

********************************

@title A_Test



--]]


function fastshoot()

    press("shoot_half")

    repeat

        sleep(1)

    until get_shooting() == true

    press("shoot_full")

    release("shoot_full")

    release("shoot_half")

    repeat

        sleep(1)

    until get_shooting() ~= true

end









--start script



sleep(2000)







--SHOOTINGBEGINN:

press("shoot_half")

repeat

  until get_shooting() == true

-- VERBESSERT:

release("shoot_half")





-- Abfrage der von der Kamera ermittelten Belichtungszeit

kamerawillbelichten=get_tv96()

print ("Ermittelt: ", kamerawillbelichten)



-- Eventuell krummen Wert bereinigen (=runden) und auf ein Vielfaches von 32 bringen

kamerawillbelichten=(kamerawillbelichten+16)/32

kamerawillbelichten=kamerawillbelichten*32



print ("Gerundet: ", kamerawillbelichten)

sleep (2000)





-- Ich moechte nun aber um 5 EV kürzer belichten und berechne neuen Apex-TV96-Wert:

wert=(kamerawillbelichten+(96*5))

print("5EV kuerzer: ", wert)







sleep(1000)

-- #################################################

-- Hier eine offenbar funktionierende Befehlsreihenfolge mit set_tv96(wert):





set_tv96(wert)

press("shoot_half")

sleep(1500)



press("shoot_full")

release("shoot_full")

release("shoot_half")

repeat

  until get_shooting() ~= true



-- SHOOTING-BEENDET

 
Erstellt in 0.010 Sekunden, mit GeSHi 1.0.8.9



Vielen Dank und viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Beitragvon msl » 08.02.2010, 14:41

Hallo Sinter,

ich glaube nicht, dass Dich Deine Lösung auf die Dauer zufrieden stellen wird.

Schauen wir noch einmal in denAlles-rund-um-das-Shooting-Beitrag. Da steht:
set_tv96 kann man nur verwenden, nach dem die Kamera fokussiert und berechnet hat.
Deshalb sollte die Lösung so aussehen.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
press("shoot_half")

repeat

  until get_shooting() == true

set_tv96(wert)

press("shoot_full")

release("shoot_full")

release("shoot_half")

repeat

  until get_shooting() ~= true
Erstellt in 0.004 Sekunden, mit GeSHi 1.0.8.9


Gruß msl

P.S. Zur besseren Lesbarkeit kann man für Skript-Code den BBCode für Syntax verwenden.
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Etwas verwirrend

Beitragvon Sinter » 08.02.2010, 15:11

Hallo msl,

vielen Dank für Deine Verbesserung. Das probiere ich aus. (Edit: Ausprobiert. Scheint bei mir in diesem Kontext nicht zu funktionieren.)

Dein "Alles rund um das Shooting" hatte ich mir ja bereits sehr genau angesehen und auch im Hinterkopf, dass es da eine Reihenfolge einzuhalten gilt. Indes scheint zu meiner Überraschung der Set_tv96-Befehl vor (!) dem shoot_half zu funktionieren. Das hatte ich heute vorhin im intl. Lightning_Photography-Skript (UBASIC) für set_tv entdeckt
Syntax: [ Download ] [ Verstecken ]
Benutze uBasic Syntax Highlighting

set_tv 0

press "shoot_half"

sleep 1500

press "shoot_full"

sleep t

release "shoot_full"

release "shoot_half"



end





 
Erstellt in 0.003 Sekunden, mit GeSHi 1.0.8.9


und versuchshalber so für LUA übernommen. Plötzlich hat das LUA-Skript funktioniert.

Für mich ist die Sache noch etwas verwirrend und ich bin gespannt, was sich letztlich als solide Lösung herausstellt.

Viele Grüße,
Sinter


EDIT:

Falls ich noch nicht den Überblick verloren habe dann funktioniert der Befehl ausschließlich VOR dem shoot_half manchmal: Wenn man bei set_tv96(wert) einen festen Wert einträgt scheint es zuverlässiger zu funktionieren.
Zum Ausprobieren die beiden Varianten:

A_GTest.lua funktioniert manchmal
A_HTest.lua funktioniert nicht.

Jedenfalls sehr verwirrend. Ich glaube das werde ich die nächsten Tage in Ruhe noch weiter austesten müssen...
Dateianhänge
A_GTest.lua
set_tv96 VOR shoot_half funktioniert manchmal, vor allem wenn man einen festen Wert einträgt
(1.31 KiB) 291-mal heruntergeladen
A_HTest.lua
set_tv96 NACH shoot_half funktioniert nicht
(1.31 KiB) 293-mal heruntergeladen
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Beitragvon msl » 08.02.2010, 20:32

Hallo Sinter,

ja, Du hast da Recht. Da war ein anderes Problem mit dieser Befehlsfolge. Es gibt Probleme, wenn Du länger als eine Sekunde belichten willst. Bei Gelegenheit muss ich das alles noch einmal testen und den Thread zum Shooting ergänzen. Aber gut, dass Du dass mal mit einer kleinen Ixus durchprobierst. Da gab es ja auch noch das ein oder andere ungeklärte Problem mit dem Shooting-Befehl.

Ich persönlich habe die ganzen Möglichkeiten zum Setzen der Verschlusszeit auf den Befehl set_tv96_direct reduziert. Der Befehl funktioniert immer und kann immer vor dem Shooting gesetzt werden.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Werde ich probieren

Beitragvon Sinter » 11.02.2010, 11:21

Hallo msl,

vielleicht sollte ich dann auf set_tv96_direct ausweichen. Wobei ich noch nachlesen muss, welche Vor- und Nachteile bzw. Unterschiede/Einschränkungen bei den Befehlen bestehen.

Ich muss gestehen, ich bin in den letzten beiden Tagen nicht mehr dazu gekommen, mich dem Thema zu widmen. Stattdessen habe ich mich bei der DOF-Diskussion eingeklinkt, die mir noch zu sehr in der Schebe scheint.

Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 Gäste

cron