set_sv96(sv96) set_av96_direct(av96) set_tv96_direct(tv96) shoot()
set_sv96(sv96) set_av96_direct(av96) set_tv96_direct(tv96) if(get_nd_present()>0) then set_nd_filter(2) end shoot()
I'd like to use the ND filter for setting exposure, but I need to know the precise Apex96 exposure change of the filter. I assume it's different for each camera.
There's also a CHDK menu parameter to set the ND filter IN, OUT, or OFF. I wonder if setting it to OUT would work.
I'd like to use the ND filter for setting exposure, but I need to know the precise Apex96 exposure change of the filter. I assume it's different for each camera. Has anyone every tested ND exposure change with a script? I think you could just measure bv96 with the filter in and out and the camera pointed at the wall with constant lighting.
--[[ @title ND Filter@param a Av96 Offset @default a 0 @range a 0 480 --]] --setup set_console_layout(1, 0, 45, 12) -- switch to shooting mode print("test started...") if ( get_mode() == false ) then sleep(1000) set_record(1) while ( get_mode() == false) do sleep(100) end end sleep(100) set_nd_filter(2) --out sleep(1000) print("checking exposure - ND out") press("shoot_half") repeat sleep(50) until get_shooting() == true release("shoot_half") repeat sleep(50) until get_shooting() == false bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) set_tv96_direct(tv) set_av96_direct(av) set_sv96(sv) set_nd_filter(2) --out sleep(1000) print("shoot") shoot() sleep(2000) bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) sleep(1000) print("checking exposure - ND in") press("shoot_half") repeat sleep(50) until get_shooting() == true set_nd_filter(1) --in sleep(500) release("shoot_half") repeat sleep(50) until get_shooting() == false bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) set_tv96_direct(tv-a) set_av96_direct(av) set_sv96(sv) set_nd_filter(1) --in sleep(1000) print("shoot") shoot() sleep(1000) bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) set_nd_filter(0) --auto sleep(1000)
When I reviewed the results, some shots (taken into bright sunlight) were showing up underexposed and the exif says they were at f10. So my conclusion here is that set_av96_direct() does not play well with the camera's ND filter logic. (i.e. my exposure calculations assumed f3.5 and when the ND filter engaged, my shots were underexposed)
Canon firmware will still do it's own ND logic, using whatever exposure it calculated. So if you are calculating everything yourself, it is a good idea to force the ND to whatever state you want.
The tricky bit here is that if you use a "half-press" to measure the Bv96 value, the filter does not engage even if you set it to be "in". So you get a Bv96 value without filter.
Also, the exif exposure information will be wrong as the camera does not "subract" the 3-stop difference from the f-stop reported or otherwise indicate that the ND filter was active (although there is a field for that in the maker notes, it does not appear to be used even when the camera itself inserts the filter - it just changes the f-stop reported in the exif instead).
On cameras without adjustable aperture, you should be able to tell if the camera wanted to use the ND filter by comparing the Av prop and the MIN_AV prop.
av=get_av96() min_av96 = get_prop(props.MIN_AV) if av ~= min_av96 then print(" ND in") else print(" ND out") end
I used that in the script posted here http://chdk.setepontos.com/index.php?topic=8066.0
--[[ @title ND2 Filter --]] tv_ref = { -576, -544, -512, -480, -448, -416, -384, -352, -320, -288, -256, -224, -192, -160, -128, -96, -64, -32, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800, 832, 864, 896, 928, 960, 992, 1021, 1053, 1080 }av_ref = {176,208,240,272,304,336,368,400,432,464,496,512,528,560,592,624,656,688,720,752}sv_ref = {378,420,440,462,486,531,576,612,645,678,709,739,772,805}function print_tv(val) local i = 1 local tv_str = { ">64", "64", "50", "40", "32", "25", "20", "16", "12", "10", "8.0", "6.0", "5.0", "4.0", "3.2", "2.5", "2.0", "1.6", "1.3", "1.0", "0.8", "0.6", "0.5", "0.4", "0.3", "1/4", "1/5", "1/6", "1/8", "1/10", "1/13", "1/15", "1/20", "1/25", "1/30", "1/40", "1/50", "1/60", "1/80", "1/100", "1/125", "1/160", "1/200", "1/250","1/320","1/400","1/500","1/640","1/800","1/1000","1/1250", "1/1600","1/2000","off" } while (i <= #tv_ref) and (val > tv_ref[i]-1) do i=i+1 end return tv_str[i]endfunction print_av(val) local i = 1 local av_str = {"n/a","2.0","2.2","2.5","2.8","3.2","3.5","4.0","4.5","5.0", "5.6","5.9","6.3","7.1","8.0","9.0","10.0","11.0","13.0","14.0","16.0"} while (i <= #av_ref) and (val > av_ref[i]-1) do i=i+1 end return av_str[i]endfunction print_sv(val) local i = 1 local sv_str = {"n/a","80","100","125","160","200","250","320","400","500","640","800","1250","1600"} while (i <= #sv_ref) and (val > sv_ref[i]-1) do i=i+1 end return sv_str[i]end--setup set_console_layout(1, 0, 45, 12) props=require("propcase")-- switch to shooting mode print("test started...") if ( get_mode() == false ) then sleep(1000) set_record(1) while ( get_mode() == false) do sleep(100) end end sleep(100) sleep(1000) print("checking exposure") press("shoot_half") repeat sleep(50) until get_shooting() == true release("shoot_half") repeat sleep(50) until get_shooting() == false bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("meter bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) min_av96 = get_prop(props.MIN_AV) if av ~= min_av96 then print(" ND in", min_av96, av) else print(" ND out", min_av96, av) end print(" Tv: "..print_tv(tv).."ISO "..print_sv(sv).." f"..print_av(av)) sleep(100) print("shoot") shoot() sleep(200) bv=get_bv96() av=get_av96() sv=get_sv96() tv=get_tv96() print("shoot bv:"..bv.." tv:"..tv.." sv:"..sv.." av:"..av) min_av96 = get_prop(props.MIN_AV) if av ~= min_av96 then print(" ND in", min_av96, av) else print(" ND out", min_av96, av) end print(" Tv: "..print_tv(tv).."ISO "..print_sv(sv).." f"..print_av(av))
Started by Mirfak Feature Requests
Started by ReDcOX Hello, I'm a NEWBIE - HELP!! (Newbies assistance, User Guides and thank you notes)
Started by Aket « 1 2 ... 21 22 » Feature Requests
Started by kmoreau893 General Discussion and Assistance
Started by berferd « 1 2 » LUA Scripting