Hier ist ein weiteres Intervall-Script. Die Besonderheit davon ist, dass es nicht nur für Aufnahmen am Tag zu gebrauchen ist sondern für alle(?) Lichtverhältnisse.
Da viele der Kameras nicht Länger als 1 Sekunde belichten wollen(obwohl sie könnten) muss dieses Manko durch das Berechnen und Einsetzen der tatsächlich benötigten Zeit ausgeglichen werden. Die Zeit wird dabei nach einer recht simplen Formel ausgerechnet:
EV
gemessen=EV
gesetzt-->das entspricht BV(Helligkeit) + SV(Empfindlichkeit) = AV(Blendenzahl) + TV(Verschlusszeit) --> BV+SV-AV=TV.
Es gibt zwar auch ein Projekt (Sunset) bei dem die ganze Sache etwas Komplizierter von statten geht, ich fand jedoch, dass bereits mit dieser Formel recht gute Trefferquote erzielt wird und bin deswegen nicht tiefer gegangen.
Features:
- LCD-Abschaltung nach X bildern. Es ist jedoch möglich in den Warteintervallen das Display mit der "Display"-Taste wieder für weitere X Bilder einzuschalten oder es mit einem weiteren Klick wieder auszuschalten.
- Wird in der Pause zwischen den Bildern der Auslöser halb durchgedrückt steigt das Script kontrolliert aus. d.h alle Parameter die am Anfang des Scipts verändert wurden werden in den Zustand vor dem Script zurückgesetzt. Es ist die empfohlene Art dieses Script zu beenden.
- RAW wird generell abgeschaltet, für Blitz gibt es die Modi "auto", "on" und "off". "Blitz aus" ist als Standard eingestellt. --->Danke an msl.
- Desweteren ist es möglich eine LOG Datei im Ordner CHDK/LOGS zu erzeugen. Der Name der Datei beinhaltet das aktuelle Daten und Uhrzeit der Kamera (z.B log17122355.txt (17 Dec 23:55)). Es werden nicht die Ausgaben der Konsole protokolliert sondern tabellarisch(Excel-Kompatibel): die laufende Nummer (1,2,3,4...usw), die Verschlusszeit die Eingestellt wurde, der BV-Wert, der Batteriestand in Volt und die Uhrzeit zu der das jeweilige Foto geschossen wurde.
-Es geht eine LED an, die signalisiert, dass sich die Kamera gerade zwischen 2 Auslösevorgängen befindet und für Tastendrücke empfänglich ist. Dies passiert bei IXUS 80IS noch nicht. Zusätzlich blinkt die LED vor der nächsten Aufnahme 1/10 des Intervalls aber maximal 1.5 sekunden(keine Tastendrücke werden akzeptiert).
-Die Bildgröße wird standardmäßig auf M2 gesetzt und Qualität auf "Normal" (beides einstellbar).
-----> Danke an elektronikfreak.
-Es ist möglich das Script nur in einer bestimmten Zeitspanne arbeiten zu lassen. Von.. - Bis..
-->Beispiel
Es gibt 3 Versionen, einmal (VarTL.lua) für die, die das Display mit der "Display"- Taste ausschalten können(z.B. IXUS 80IS).Die zweite Version (VarTLNoVF.lua) ist für die, die das Display nur über die "Print"- Taste* auschalten können (vorher belegen) (NoVF=
No View
Finder)(z.B. IXUS 860IS) und eine dritte, bei das Display ausgeschaltet wird indem die Kamera zum EVF wechselt (VarTLEVF.lua)(z. B. S5IS) (Blitz Operationen sind bei der letzten Version Probeweise auskommentiert).
*
Bemerkung:Leider ist es bis jetzt nicht möglich mit der "Print"-Taste das LCD dauerhaft auszuschalten. Bei jedem neuen Foto geht es an und bleibt an bis die Nachbearbeitung beendet wurde. Es ist also nur beim Warten zwischen den Fotos aus.....
WICHTIG: Läuft nur ab CHDK Version 0.9.3 Rev 681 !!
Benutzung: am besten IS abstellen, Rückblick abstellen(sonst geht Display immer wieder an), Script starten und da die nötigen Parameter anpassen.
Natürlich bin ich über Rückmeldungen froh, sei es eine Frage ein Problem, eine Fehlfunktion oder ein Verbesserungsvorschlag, auch was den Quelltext betrifft.
--[[
@title VarTL
@param t Time to wait
@default t 5
@param d LCD-off after ... pics
@default d 5
@param w Countdown in sec
@default w 3
@param e Fixfocus
@default e 1
@param s EV-Shift x*(1/3EV)
@default s 0
@param u Flash 0=auto 1=on 2=off
@default u 2
@param q Quality (0,1,2)
@default q 2
@param r Pixel (0..4,6,8 )
@default r 3
@param l ..LOGS/logDATE.txt off/on
@default l 0
@param c Start
@default c 0
@param f End
@default f 23
]]
function lcd
(lcdmode
)
err
=0
repeat
click
("display")
sleep
(10)
err
=err+
1
until get_display_mode
()==lcdmode
or err
==20
if err
==20 then
print("Disp op failed..")
print("continue..")
end
end
-------
function flash
(n
)
if get_propset
() == 2 then
set_prop
(143,n
)
else
set_prop
(16,n
)
end
end
-------
function countdown
()
for h
=1,w
do
m
=w-h+
1
print ("countdown:",m,
"secs")
sleep
(940)
end
cls
()
end
-------
function shooting
()
check1
=get_exp_count
()
print ("Photo ",phc
)
press
("shoot_half")
repeat
until get_shooting
() == true
if phc
==1 and ff
==1 then
set_aflock
(1)
end
z
=get_tv96
()
bv
=get_bv96
()
if z
<=0 then
calcshoot
()
print("shutter: ",y,
" sec")
if logfile
==1 then
file
=io.open("A/CHDK/LOGS/log"..namepart..
".txt",
"a")
file:
write("\n",phc,
"\t",y,
"\t",bv,
"\t",get_vbatt
(),
"\t",
os.date("%X"))
file:
write("\t",get_temperature
(0),
"\t",get_temperature
(1),
"\t",get_temperature
(2))
file:close
()
end
if get_propset
()==2 then
set_prop
(262,g
)
else
set_prop
(69,g
)
end
else
if z
>0 and z
<=32 then y
="0,8" howlong
=1600 end --how long to sleep to let the cam work
if z
>32 and z
<=64 then y
="0,6" howlong
=1200 end
if z
>64 and z
<=96 then y
="0,5" howlong
=1000 end
if z
>96 and z
<=128 then y
="0,4" howlong
=800 end
if z
>128 and z
<=160 then y
="0,3" howlong
=600 end
if z
>160 and z
<=192 then y
="0,25" end
if z
>192 and z
<=224 then y
="0,2" end
if z
>224 and z
<=256 then y
="0,167" end
if z
>256 and z
<=288 then y
="0,125" end
if z
>288 and z
<=320 then y
="0,1" end
if z
>320 and z
<=352 then y
="0,077" end
if z
>352 and z
<=384 then y
="0,067" end
if z
>384 and z
<=416 then y
="0,05" end
if z
>416 and z
<=448 then y
="0,04" end
if z
>448 and z
<=480 then y
="0,033" end
if z
>480 and z
<=512 then y
="0,025" end
if z
>512 and z
<=544 then y
="0,02" end
if z
>544 and z
<=576 then y
="0,017" end
if z
>576 and z
<=608 then y
="0,013" end
if z
>608 and z
<=640 then y
="0,01" end
if z
>640 and z
<=672 then y
="0,008" end
if z
>672 and z
<=704 then y
="0,006" end
if z
>704 and z
<=736 then y
="0,005" end
if z
>736 and z
<=768 then y
="0,004" end
if z
>768 and z
<=800 then y
="0,0031" end
if z
>800 and z
<=832 then y
="0,0025" end
if z
>832 and z
<=864 then y
="0,002" end
if z
>864 and z
<=896 then y
="0,0016" end
if z
>896 and z
<=928 then y
="0,0013" end
if z
>928 and z
<=960 then y
="0,001" end
if z
>960 and z
<=992 then y
="0,0008" end
if z
>992 and z
<=1024 then y
="0,00063" end
if z
>1024 and z
<=1056 then y
="0,0005" end
print("shutter: ",y,
" sec")
if logfile
==1 then
file
=io.open("A/CHDK/LOGS/log"..namepart..
".txt",
"a")
file:
write("\n",phc,
"\t",y,
"\t",bv,
"\t",get_vbatt
(),
"\t",
os.date("%X"))
file:
write("\t",get_temperature
(0),
"\t",get_temperature
(1),
"\t",get_temperature
(2))
file:close
()
end
end
click
("shoot_full")
if z
<=128 then
print("sleep: ",howlong
/2,
" msec")
sleep
(howlong-
80) --80msec, so the sleep time doesn't affect the interval and script wakes up before the cam is done
print("end of sleep")
else
sleep
(10)
end
repeat
until get_shooting
() == false
release
("shoot_half")
if lc
==lcdoff
then
sleep
(1)
lcd
(2)
end
check2
=get_exp_count
()
if check2
==check1
then
repeat
check2
=get_exp_count
()
until check2~
=check1
end
toblink
=(((t
*1000)/10)*1)
if toblink
>1500 then
toblink
=1500
end
if t
>0 then
set_led
(7,
1)
r
=get_tick_count
()
while stilltowait
(r
)>toblink
and br~
=1 do
chill
(stilltowait
(r
)-toblink
)
end
if br~
=1 then
blinkled
(toblink
)
end
set_led
(7,
0)
end
lc
=lc+
1
phc
=phc+
1
end
-----
function chill
(waitforclick
)
wait_click
(waitforclick
)
if is_pressed
"shoot_half" then
br
=1
end
if is_pressed
"display" then
if get_display_mode
()==2 then
lcd
(0)
lc
=0
else
lcd
(2)
lc
=0
end
end
end
------
function blinkled
(blinktime
)
stat
=1
repeat
stat
=stat
*-
1
if stat
>0 then
set_led
(7,stat
)
end
if stat
<0 then
set_led
(7,
0)
end
sleep
(100)
blinktime
=blinktime-
100
until blinktime
<=0
end
------
function calcshoot
()
bv
=get_bv96
()
sv
=get_sv96
()
av
=get_av96
()
g
=bv+sv-av
if 0>=g
and g
>-
32 then g
=0 y
="1" howlong
=2000 end --how long to sleep to let the cam work
if -
32>=g
and g
>-
64 then g
=-
32 y
="1,3" howlong
=2600 end
if -
64>=g
and g
>-
96 then g
=-
64 y
="1,6" howlong
=3200 end
if -
96>=g
and g
>-
128 then g
=-
96 y
="2" howlong
=4000 end
if -
128>=g
and g
>-
160 then g
=-
128 y
="2,5" howlong
=5000 end
if -
160>=g
and g
>-
192 then g
=-
160 y
="3,2" howlong
=6400 end
if -
192>=g
and g
>-
224 then g
=-
192 y
="4" howlong
=8000 end
if -
224>=g
and g
>-
256 then g
=-
224 y
="5" howlong
=10000 end
if -
256>=g
and g
>-
288 then g
=-
256 y
="6,3" howlong
=12600 end
if -
288>=g
and g
>-
320 then g
=-
288 y
="8" howlong
=16000 end
if -
320>=g
and g
>-
352 then g
=-
320 y
="10" howlong
=20000 end
if -
352>=g
and g
>-
384 then g
=-
352 y
="12,7" howlong
=25400 end
if -
384>=g
and g
>-
416 then g
=-
384 y
="16" howlong
=32000 end
if -
416>=g
and g
>-
448 then g
=-
416 y
="20" howlong
=40000 end
if -
448>=g
and g
>-
480 then g
=-
448 y
="25,4" howlong
=50800 end
if -
480>=g
and g
>-
512 then g
=-
480 y
="32" howlong
=64000 end
if -
512>=g
and g
>-
544 then g
=-
512 y
="40,3" howlong
=80600 end
if -
544>=g
and g
>-
576 then g
=-
544 y
="50,8" howlong
=10160 end
if -
576>=g
then g
=-
576 y
="64" howlong
=128000 end
limit
=-
320
if ev~
=0 and g
<=limit
then --possibility to add EV-shift at night in 1/3 Ev steps -->enjoy with care (reason in the next comment line)
g
=g-
(ev
*32)
if g
>limit
then g
=limit
end --everything <10 sec will be 10 sek (increases the time when shutterspeed=10 sek) !!!
if g
==0 then y
="1" howlong
=2000 end --how long to sleep to let the cam work
if g
==-
32 then y
="1,3" howlong
=2600 end
if g
==-
64 then y
="1,6" howlong
=3200 end
if g
==-
96 then y
="2" howlong
=4000 end
if g
==-
128 then y
="2,5" howlong
=5000 end
if g
==-
160 then y
="3,2" howlong
=6400 end
if g
==-
192 then y
="4" howlong
=8000 end
if g
==-
224 then y
="5" howlong
=10000 end
if g
==-
256 then y
="6,3" howlong
=12600 end
if g
==-
288 then y
="8" howlong
=16000 end
if g
==-
320 then y
="10" howlong
=20000 end
if g
==-
352 then y
="12,7" howlong
=25400 end
if g
==-
384 then y
="16" howlong
=32000 end
if g
==-
416 then y
="20" howlong
=40000 end
if g
==-
448 then y
="25,4" howlong
=50800 end
if g
==-
480 then y
="32" howlong
=64000 end
if g
==-
512 then y
="40,3" howlong
=80600 end
if g
==-
544 then y
="50,8" howlong
=10160 end
if g
==-
576 then y
="64" howlong
=128000 end
end
end
-----
function get_display_mode
()
if get_propset
() == 2 then
dm
=get_prop
(105)
else
dm
=get_prop
(181)
end
return dm
end
----
function get_resolution
()
if get_propset
() == 2 then
res
=get_prop
(218)
else
res
=get_prop
(24)
end
return res
end
----
function get_quality
()
if get_propset
() == 2 then
qua
=get_prop
(57)
else
qua
=get_prop
(23)
end
return qua
end
----
function set_resolution
(res
)
if get_propset
() == 2 then
set_prop
(218, res
)
else
set_prop
(24, res
)
end
end
----
function set_quality
(qua
)
if get_propset
() == 2 then
set_prop
(57, qua
)
else
set_prop
(23, qua
)
end
end
----
function stilltowait
(started
)
now
=get_tick_count
()
rest
=(t
*1000+
1)-
(now-started
)
return rest
end
--start script----------
lcdoff
=d
ff
=e
logfile
=l
ev
=s
from
=c
until_
=f
if logfile
>1 then logfile
=1 end
if logfile
<0 then logfile
=0 end
if t
<0 then t
=0 end
if lcdoff
<1 then lcdoff
=1 end
if ff
>1 then ff
=1 end
if ff
<0 then ff
=0 end
if u
>2 then u
=2 end
if u
<0 then u
=0 end
if w
<0 then w
=0 end
if q
<0 then q
=0 end
if q
>2 then q
=2 end
if r
<0 then r
=0 end
if r
>8 then r
=8 end
if from
<0 then from
=0 end
if from
>23 then from
=23 end
if until_
<0 then until_
=0 end
if until_
>23 then until_
=23 end
phc
=1
lc
=1
--backup LCD settings
dmback
=get_display_mode
()
--backup Flash settings
flback
=get_flash_mode
()
--backup RAW settings
rawback
=get_raw
()
--backup Resolution settings
resback
=get_resolution
()
qualback
=get_quality
()
--presets
if get_IS_mode
()~
=3 then
print("Turn IS off! ")
print("to prevent")
print("bad results")
sleep
(2000)
end
cls
()
if u
==0 then
if get_flash_mode
()~
=0 then
flash
(0)
print("Flash \"auto\"")
end
end
if u
==1 then
if get_flash_mode
()~
=1 then
flash
(1)
print("Flash \"on\"")
end
end
if u
==2 then
if get_flash_mode
()~
=2 then
flash
(2)
print("Flash \"off\"")
end
end
set_raw
(0)
print("RAW is off")
set_resolution
(r
)
set_quality
(q
)
if dmback~
=0 then
lcd
(0)
end
if logfile
==1 then
namepart
=os.date("%d%m%H%M")
file
=io.open("A/CHDK/LOGS/log"..namepart..
".txt",
"a")
file:
write("picnumber\tTV\tBV\tvoltage\tclock\toptic\tCCD\tBattery")
file:close
()
end
--run-----
countdown
()
j
=get_jpg_count
()
if j
>1 then
repeat
time_
=tonumber(os.date("%H"))
if from
>until_
then
if time_
>=from
and time_
<=23 then
shooting
()
j
=get_jpg_count
()
elseif time_
>=0 and time_
<=until_
then
shooting
()
j
=get_jpg_count
()
else
print(time_..
":"..
os.date("%M")..
" wrong time")
print("5 mins sleep")
chill
(300000)
end
end
if from
<=until_
then
if time_
>=from
and time_
<=until_
then
shooting
()
j
=get_jpg_count
()
else
print(time_..
":"..
os.date("%M")..
" wrong time")
print("5 mins sleep")
chill
(300000)
end
end
until j
==1 or br
==1
end
--restore settings of LCD,flash,RAW, resolution and quality and exit-----
set_aflock
(0)
if get_flash_mode
()~
=flback
then
flash
(flback
)
end
set_raw
(rawback
)
set_resolution
(resback
)
set_quality
(qualback
)
if get_display_mode
()~
=0 then
lcd
(0)
end
if br
==1 then
print("script canceled...")
if logfile
==1 then
file
=io.open("A/CHDK/LOGS/log"..namepart..
".txt",
"a")
file:
write("\nscript canceled\t\t\t\t",
os.date("%X"))
file:close
()
end
else
print("card is full...")
if logfile
==1 then
file
=io.open("A/CHDK/LOGS/log"..namepart..
".txt",
"a")
file:
write("\ncard is full\t\t\t\t",
os.date("%X"))
file:close
()
end
end
sleep
(1000)
if get_display_mode
()~
=dmback
then
lcd
(dmback
)
end
Erstellt in 0.053 Sekunden, mit
GeSHi 1.0.8.9
Edit:
Stand 27.05.09
Eine "Zeitschaltuhr" wurde eingeführt.
-->Beispiel
Stand 21.05.09
Dank msl ist jetzt keine Anpassung der Taste für den Blitz mehr notwendig. Wird jetzt über Property Case erledigt. Danke!
Stand von 4.05.09
Elektronikfreak hat das Script um ein sehr nützliches Feature ergänzt--> Einflussnahme auf die Auflösung und Qualität der Fotos. Selbstverständlich wird beides nach Beenden wiederhergestellt.
Stand von 1.02.09
Es wurde eine Schwelle eingeführt ab der die Belichtungskorrektur greift. Zur Zeit 10 sek (Variable "limit" im TV96 format). Wenn die Belichtungskorrektur hoch genug ist, bestimmt diese Schwelle gleichzeitig die maximale Belichtungszeit, denn alles was größer als die Schwelle ist wird abgeschnitten-->
Beispiel
Stand vom 25.01.2009 01:00
Ab jetzt besteht die Möglichkeit ab dem Zeitpunkt, wenn das Script die Zeiten ausrechnet eine Belichtungskorrektur einzufügen in 1/3 EV Schritten. Falls sich Werte kürzer als 1 Sekunde ergeben wird dennoch 1 Sekunde belichtet.
Nach dem Auslösen ein Sleep() eingefügt der plötzliches Stoppen im Script verhindern soll. Zusätzlich auf set_aflock() umgestellt (mindestens
Version 0.9.3 rev 681 wird benötigt, sonst Fehler, weil der Befehl unbekannt ist). Anzahl der geloggten Parameter wurde erhöht (Spielerei)
Bitte bei Fehlern bescheid sagen.