[Lua] manuell regelbarer Blitz für alle CHDK-Cams

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

manuell regelbarer Blitz für alle CHDK-Cams

Beitragvon Paparazzi » 06.11.2008, 14:26

Für dieses Skript habe ich das "tv_uni.lua"-Skript von msl in abgespeckter Form als Vorlage / Grundlage genommen. Es stellt für alle Kameras einen manuell regelbaren Blitz zur Verfügung. In Anlehnung an die Belichtungskorrektur kann er im Bereich -6EV bis +6EV in 1/3EV-Schritten verändert werden, bezogen auf die von der Kameraautomatik ermittelte Blitzhelligkeit.

Achtung!
Das Skript ist noch nicht "sicher", es fehlen noch Abfragen, ob der Blitz eingeschaltet ist oder nicht.

Zur Benutzung ist eine aktuelle CHDK-Version notwendig, Stand Okt. 2008.

Mit den Tasten [rechts] und [links] wird die Blitzkorrektur eingestellt.
Mit [SET] oder mit einer Selbstbau-Fernbedienung wird ausgelöst.
Mit [MENU] wird das Skript beendet.

Der eingestellte Wert wird jeweils angezeigt (in 1/3EV).

Bei den Skriptparametern gibt es folgende Einstellmöglichkeiten:

Ganzahlwert für die Karrektur: voreingestellt 0, keine Blitzkorrektur
Tastatur-Delay: voreingestellt 80 ms, dient der Verzögerung der Tastaturwiederholung
Auslöse-Delay: voreingestellt 0s, dient einer Timer-Funktion

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
@title Dim_Flash universal 3
@param a Ganzzahl-Wert  [EV]
@default a 0
@param b Tastatur-Delay [ms]
@default b 80
@param c Auslöse-Delay [s]
@default c 0
]]

 
function print_Fl()
    print_fl = "Flash: "..fl_dim.."/3 EV"
end

function button()
    local x = 0
    repeat
    wait_click(key_delay)
    if is_pressed "remote" then
      key = "SET"
      x = 1
    end
    if is_pressed "set" then
        key = "SET"
        x = 1
    end
    if is_pressed "menu" then
        key = "MENU"
        x = 1
    end
    if is_pressed "display" then
   key = "DISP"
   x = 1
  end
    if is_pressed "left" then
        key = "LEFT"
        x = 1
    end
    if is_pressed "right" then
        key = "RIGHT"
        x = 1
    end
    if is_pressed "up" then
   key = "UP"
   x = 1
  end
  if is_pressed "down" then
   key = "DOWN"
   x = 1
  end
    until  x == 1
    set_led (8,1)
    sleep (10)
    set_led (8,0)
end

--script start

if a < -18 then a = -18 end
if a > 18 then a = 18 end
if b < 50 then b = 50 end
if c < 0 then c = 0 end
fl_dim = a
key_delay = b
shoot_delay = c

repeat
    cls()
    print_Fl()
    print("[<-][->] ",print_fl)
    print("[SET] [Remote]   Auslösen")
    print("[MENU]           Beenden")
    button()
   
    if key == "RIGHT" then fl_dim = fl_dim + 1 end
    if key == "LEFT" then fl_dim = fl_dim - 1 end
    if fl_dim > 18 then fl_dim = -18 end
    if fl_dim < -18 then fl_dim = 18 end
    if key == "SET" then
        if shoot_delay > 0 then
            cls()
            print("Warte "..shoot_delay.." s")
            sleep(shoot_delay * 1000)
        end
        fl = fl_dim * 32
        press "shoot_half"
        repeat
              until get_shooting() == true
        if get_propset() == 2 then
            set_prop(127,fl)
        else
            set_prop(28,fl)
        end
        press "shoot_full"
        release "shoot_full"
        release "shoot_half"
    end

until key == "MENU"
Erstellt in 0.008 Sekunden, mit GeSHi 1.0.8.9


Viel Spaß beim Testen, Rückmeldungen sind willkommen!

Gruß
Der Paparazzi

PS:
In diesem Zusammenhang nötige / interessante Property cases:
#15, #28 & #29 (Digic II) bzw. #121, #127 & #141 (Digic III)
Dateianhänge
flash_uni3.lua
(1.72 KiB) 91-mal heruntergeladen
A550 und SX10IS, beide mit aktuellen CHDK-Versionen
Paparazzi
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 70
Registriert: 11.04.2008, 09:35

Beitragvon msl » 06.11.2008, 14:39

Cool 8)

ich werde es bei Gelegenheit ausführlicher testen.

Die Blitzabfrage kannst Du relativ einfach einbauen - siehe Lua-Belichtungsreihe.

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: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon msl » 06.11.2008, 22:16

Das Skript funktioniert genau wie die bei verschiedenen Typen eingebaute Blitzstärkeregulierung.

Ich habe das Skript etwas erweitert:

-Abfrage, ob Blitz eingeschaltet ist. Wenn nein, wird das Skript zum Umschalten unterbrochen.
-Bestimmung von Minimum und Maximum, da die Vorgabe (18 entspricht +/- 6Ev) vom Original (+/- 2ev) ganz schön abweicht.
-Grenzwerte sollen nicht überschritten werden.

Anmerkend sei gesagt, dass die Taste zum auslösen [SET] solange gedrückt werden muss, bis ready signalisiert wird.

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

@title flash adjust

@param a Start-Wert  [Ev]

@default a 0

@param b Tastatur-Delay [ms]

@default b 80

@param c Auslöse-Delay [s]

@default c 0

@param d Grenzwert +/- [Ev]

@default d 6

]]


 

function print_Fl()

    print_fl = "Flash: "..fl_dim.."/3 EV"

end



function button()

    local x = 0

    repeat

    wait_click(key_delay)

    if is_pressed "remote" then

      key = "SET"

      x = 1

    end

    if is_pressed "set" then

        key = "SET"

        x = 1

    end

    if is_pressed "menu" then

        key = "MENU"

        x = 1

    end

    if is_pressed "display" then

   key = "DISP"

   x = 1

  end

    if is_pressed "left" then

        key = "LEFT"

        x = 1

    end

    if is_pressed "right" then

        key = "RIGHT"

        x = 1

    end

    if is_pressed "up" then

   key = "UP"

   x = 1

  end

  if is_pressed "down" then

   key = "DOWN"

   x = 1

  end

    until  x == 1

    set_led (8,1)

    sleep (10)

    set_led (8,0)

end



--script start



if a < -18 then a = -18 end

if a > 18  then a = 18  end

if b < 50  then b = 50  end

if c < 0   then c = 0   end

if d > 18  then d = 18  end



fl_dim      = a

key_delay   = b

shoot_delay = c

min         = d * -1

max         = d

flash       = get_flash_mode()



if fl_dim > max then fl_dim = max end

if fl_dim < min then fl_dim = min end



if flash ~= 1 then

    print("Blitz einschalten!")

    sleep(3000)

    exit_alt()

    sleep(2000)

end



repeat

    cls()

    print_Fl()

    print("[<-][->] ",print_fl)

    print("[SET] [Remote]   Auslösen")

    print("[MENU]           Beenden")

    button()

   

    if key == "RIGHT" then fl_dim = fl_dim + 1 end

    if key == "LEFT"  then fl_dim = fl_dim - 1 end

    if fl_dim > max   then fl_dim = min end

    if fl_dim < min   then fl_dim = max end

    if key == "SET" then

        if shoot_delay > 0 then

            cls()

            print("Warte "..shoot_delay.." s")

            sleep(shoot_delay * 1000)

        end

        fl = fl_dim * 32

        press "shoot_half"

        repeat

              until get_shooting() == true

        if get_propset() == 2 then

            set_prop(127,fl)

        else

            set_prop(28,fl)

        end

        press "shoot_full"

        release "shoot_full"

        release "shoot_half"

    end



until key == "MENU"
Erstellt in 0.013 Sekunden, mit GeSHi 1.0.8.9


Gruß msl
Dateianhänge
flsh_adj.lua
Blitzstärke einstellen
(2.05 KiB) 533-mal heruntergeladen
■ "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: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon Paparazzi » 07.11.2008, 11:27

Moin!

msl hat geschrieben:Das Skript funktioniert genau wie die bei verschiedenen Typen eingebaute Blitzstärkeregulierung.

...die die A550 leider nicht hatte... bis gestern! :D

Endlich gibt es auch die Welt zwischen "kein Blitz" und "ganz viel Blitz"(der jede Lichtstimmung killt)! *stolzaufmichbin*

Ich habe das Skript etwas erweitert:

Danke!

-Bestimmung von Minimum und Maximum, da die Vorgabe (18 entspricht +/- 6Ev) vom Original (+/- 2ev) ganz schön abweicht.
-Grenzwerte sollen nicht überschritten werden.

Die Grenze kannte ich nur für die Belichtungskorektur bei ausgeschaltetem Blitz. Bezüglich des Blitzes sind die Infos sowieso äußerst spärlich gesät.
Habe aus Unwissenheit auch mit stärkerer Abschwächung des Blitzes Tests durchgeführt, hat die Kamera anstandslos und korrekt mitgemacht.

Anmerkend sei gesagt, dass die Taste zum auslösen [SET] solange gedrückt werden muss, bis ready signalisiert wird.

Jepp, so ist es. Habe ich in weiteren Tests auch festgestellt.

Gruß
Der Paparazzi
A550 und SX10IS, beide mit aktuellen CHDK-Versionen
Paparazzi
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 70
Registriert: 11.04.2008, 09:35

Beitragvon holgi09 » 05.12.2008, 21:36

Hallo Jungens,
wahrscheinlich habe ich nur wieder alles falsch verstanden, aber ich dachte, in den LUA Scripts braucht man die prop_case Variablen nicht zu ändern bzw. es gibt gar keine ?!?!!?

bei meiner Ixus 75 kann ich jedenfalls keine Auswirkung feststellen. :(
Das Script startet, ich kann dann mit links <-> rechts die Werte verstellen. Drücke ich dann die set Taste, focussiert er, rechnet ein bischen und löst dann aus. Egal, welchen Wert ich einstelle, ist das Bild immer gleich belichtet....
Canon Digital Ixus 130, leider noch nicht portiert...
Benutzeravatar
holgi09
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 144
Registriert: 13.06.2008, 09:04
Wohnort: 31xxx
Kamera(s): EOS 10D.

Beitragvon msl » 05.12.2008, 21:45

Du brauchst doch keine Propcases zu verändern. Es wird abgefragt, welche Propcases Verwendung finden sollen.

Und natürlich kann man unter Lua Propcase-Variablen verwenden. Teilweise gibt es noch keine adäquaten Befehle.

Warum es nun bei der Ixus75 nicht geht, kann ich nicht sagen. Da müßten sich mal andere Ixus-Nutzer melden. Vielleicht ist es wieder ein spezielles Ixus-Problem.

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: 4510
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Beitragvon pterozaurus » 06.12.2008, 13:48

hab das 2. skript mit meiner Ixus55 getestet und es funktioniert:

Langsyncblitz +6/3
Bild

Langsyncblitz -6/3
Bild

Langsyncblitz 0/3

Bild

Blitz -10/3
Bild

Blitz 0/3
Bild

Blitz +10/3
Bild

Viele Güße und einen netten Nikolaus

Stephan
SX220 HS; Fw. 101b; CHDK_DE 1.2.8 Rev. 2099
Ixus55:chdk ixus55_sd450-100c-1.0.0-DE
Benutzeravatar
pterozaurus
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 65
Bilder: 0
Registriert: 18.06.2008, 11:41
Kamera(s): SX220 HS
Ixus 55


Zurück zu Code-Ecke

Wer ist online?

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