USB-remote -> Serienbilder in voller Geschwindigkeit

Kamera-Hardware, Selbstbaufernbedienung und sonstige Hardware-Erweiterungen

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Werner_O » 29.07.2014, 10:17

Hallo Andreas,

mit meinen im Vergleich zu msl doch sehr bescheidenen Lua-Kenntnissen bleibt mir als letzte Optimierung nur noch die Reduzierung des Programmcodes auf das allernötigste. Ohne Kommentare und den print()-Befehlen für die Konsolenausgaben bleibt dann folgendes übrig:

Code: Alles auswählen
--[[
**********************
Author: Werner_O
**********************
@title Serienaufnahme2
]]

Aufnahme = false
function restore()
    if Aufnahme == true then
        release("shoot_full")
    end
end
repeat
    x = get_usb_power()
    if x > 0 then
        if Aufnahme == false then
           press("shoot_full")
           Aufnahme = true
        else
           release("shoot_full")
           Aufnahme = false
        end
    end
until is_pressed("menu")
restore()

Downloadlink

Allerdings ändert das nichts an der Funktionsweise des Skriptes:
Nach Erkennen des ersten USB-Impulses wird die Shoot-Taste voll dauerhaft durchgedrückt und danach macht das Skript nichts anderes als auf den nächsten USB-Impuls zu warten. Weggefallen sind nun ja nur die bisher einmalig (!) ausgeführten Printausgaben für die sogenannte "Konsole" (ein definierter Bereich des Bildschirms für u.a. Skript-Textausgaben).

Daher bin ich recht skeptisch, ob diese Art der Optimierung überhaupt zu signifikant schnelleren Serienaufnahmen führen kann.
Auf Deine Ergebnisse bin ich daher gespannt.

Last not least:
Wer hier im Forum mit so einer Frage einsteigt mit schon laufendem CHDK und sogar einer funktionierenden selbstgebastelten USB-FB hat gezeigt, daß er sich bereits sorgfältig selbstätig in CHDK eingearbeitet hat. Das ist hier im Forum beileibe nicht selbstverständlich und verdient Respekt!

Liebe Grüße
Werner_O
Zuletzt geändert von Werner_O am 29.07.2014, 20:56, insgesamt 1-mal geändert.
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1027
Registriert: 22.10.2010, 13:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon msl » 29.07.2014, 15:37

Hallo,

kurzer Ausflug zu den Hintergründen der CHDK-Skript-Technik.

Zuerst gab es uBASIC als Skriptsprache für CHDK. Hier wird wirklich Zeile für Zeile im Skript abgearbeitet. Jede Zeile nimmt bis auf ein paar Ausnahmen 10ms in Anspruch. In uBASIC kann das Einsparen von Skriptzeilen erhebliche Zeitersparnisse mit sich bringen.

Bei Lua, das erst später als Skriptsprache für CHDK eingeführt wurde, sieht es etwas anders aus. Hier werden 25.000 Maschinencodeinstruktionen pro Zyklus abgearbeitet. Dann erfolgt ein Abgleich aller internen Funktionen, um es mal einfach auszudrücken. Kurz gesagt, Lua ist wesentlich schneller als uBASIC. Deshalb bringt die Einsparung von Skriptzeilen nicht unbedingt einen Zeitgewinn. Im Fall der Print-Anweisungen kann es evt. helfen, da diese ja auch noch Zeit für die Anzeige benötigen.

Kommen wir nun wieder zum eigentlichen Skript und dessen Optimierung. Eine mögliche Verbesserung wäre erreichbar, wenn man die Strategie verändert. Dazu habe ich das bestehende Skript als Basis genommen. Die USB-Fernbedienung wird nun wie eine Kamerataste abgefragt. Möglicherweise bringt das Vorteile.

Die Funktionsweise ist wie gehabt. Allerdings lasse ich die Aktivierung der Fernbedienfunktion im CHDK-Menü durch das Skript durchführen. Die Print-Ausgaben könnte man auch weglassen.

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
@title USB-Serie V3
]]


function restore()
    if rec then
        release("shoot_full")
    end
    set_config_value(121,0) --USB remote is disabled
end

rec = false
set_config_value(121,1) --USB remote is enabled

repeat
    wait_click(500)
    if is_key("remote") then
        if rec == false then
           press("shoot_full")
           rec = true
           print("start")
        else
           release("shoot_full")
           rec = false
           print("stop")
        end
    end
until is_key("menu")

restore()
Erstellt in 0.009 Sekunden, mit GeSHi 1.0.8.9


Die Schleife läuft hier aller 500 ms durch. Das ist ein Kompromiss zwischen Reaktionszeit und möglichst wenig Schleifendurchläufe. Eigentlich wollte ich die Schleife immer bis zur nächsten Fernbedieneingabe warten lassen. Dann hätten wir eine Möglichkeit ala Wait geschaffen. Allerdings scheint es an der Stelle einen Bug im CHDK zu geben. Der kann evt. behoben werden. Dann können wir das Skript noch einmal verändern.

Ob mein Vorschlag nun wirklich eine Verbesserung bringt, kann ich wegen fehlender Tests nicht sagen.

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

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 29.07.2014, 18:10

Hallo,

@ Werner: ich versuche immer zuerst alleine soweit wie möglich zu kommen und lese erstmal passiv einige Forenthreads mit, bevor ich die Spezialisten die immer gleichen Frage stelle. Meiner Meinung nach der richtige Weg, machen aber viele nicht.
Den versprochenen Test habe ich gleich heute Nachmittag durch geführt, mit dem Ergebnis, welches Du auch schon prognostiziert hast => 0 Unterschied.

@ msl: Wow! den Code werde ich allerdings erst morgen testen können, weil ich gleich Besuch bekomme.
Gebe aber bestimmt wieder Feedback. Gestoppt wird das Script ja wieder mit "Menü", wie ich sehe.

Bzgl. Scriptprogrammierung in Verbindung mit den CHDK-Möglichkeiten hoffe ich mich auf kurz oder lang etwas reinfuchsen zu können.
Ist aber immer nicht so leicht mit Frau und 2 kleinen Töchtern. Da werde ich Euch wohl ab und zu nochmal 'ne dumme Frage stellen. ;)

Gruß
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 30.07.2014, 16:34

Hallo,

so hab's eben mal getestet.
Bei den eben genutzten Einstellung und mit meinen bescheidenen Messmitteln, ist das Skript von msl genauso schnell wie die manuelle Auslösung. =D>
Eine effektive Verzögerung durch die 500ms Wartezeit konnte ich im Vergleich zum anderen Skript nicht feststellen.

Allerdings stelle ich bei beiden Skripts, im Vergleich zum manuellen Auslösen, eine leichte Verzögerung bis zum ersten Auslösen fest.
Das kann aber auch nur rein subjektives Empfinden sein kann, oder auch an meiner Fernbedienung liegen.
Die besteht aus einer kleinen (ehemaligen) 1€-4,5V-LED-Schlüssel-Taschenlampe die einen Taster mit so 'nem klickenden Blech hat.
Sollte eigentlich nur mal ein schneller Prototyp sein. Aber wie es immer so ist ...

So, wenn nun bei uns endlich mal wieder schöneres Wetter ist, werde ich mich mit meiner neuen Raynox-Makrolinse beschäftigen.
Vielleicht gelingen mir mittels meiner FB zum Test ein paar Schnappschüsse irgendwelcher Insekten auf irgendwelchen Blüten.

Bin nach wie vor begeistert von der Hilfe, die ich hier von Euch beiden erhalten habe.

Beste Grüße & nochmals Danke!
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Werner_O » 31.07.2014, 11:48

Hallo Andreas,

prima, daß der alternative Lösungsansatz von msl, die USB-Impulse wie eine Kamerataste abzufragen, nun endlich den gewünschten Erfolg gebracht hat :-)

Ansonsten scheint msl zudem folgenden CHDK-Fehler
msl schrieb:
Eigentlich wollte ich die Schleife immer bis zur nächsten Fernbedieneingabe warten lassen. Dann hätten wir eine Möglichkeit ala Wait geschaffen. Allerdings scheint es an der Stelle einen Bug im CHDK zu geben. Der kann evt. behoben werden. Dann können wir das Skript noch einmal verändern.

an das internationale CHDK-Forum weitergegeben zu haben, und mit dem seit heute verfügbaren CHDK 1.3 v3549 wurde dieser Bug inzwischen sogar bereits behoben!
Ab jetzt kann also auch bei Verwendung einer USB-FB der Lua-Befehl "wait_click(0)" angewendet werden, was ich eben an meiner S3 mit installiertem CHDK 1.3 v3549(!) erfolgreich getestet habe.

Hier darum eine neue Skriptversion von mir, welche neben der Verwendung von "wait_click(0)" zwei weitere Neuerungen hat, um das Skript noch etwas benutzerfreundlicher zu gestalten.
Für dieses Skript mußt Du aber erst zwingend Dein CHDK auf mindestens 1.3 v3549 updaten!

1) Eine USB-FB ist ja nur normalerweise nur dann verwendbar, wenn in CHDK für den USB-Port die Remote-Funktion aktiviert wurde, wobei der USB-Port dann aber nicht mehr für Dateiübertragungen an den PC verwendet werden kann.
Das Skript von msl hatte da "klammheimlich" (weil nicht im Thread erwähnt) eine automatische Aktivierung/Deaktivierung der USB Remote-Funktion bei Skriptstart bzw. Skriptende eingeführt, was im Grunde auch sehr sinnvoll ist.
Bei dieser Skriptversion kann man nun selber über den neuen Skript-Vorgabeparameter "Enable Auto-Mode USB-Port" (per default aktiviert) darüber entscheiden, ob man diese automatische Umstellungen des USB-Ports wünscht.
Hinweis: Dieser neue Vorgabe-Parameter kann im Menü "Skript-Einstellungen" jederzeit geändert werden.

2) Die neue Skriptversion fragt nun zusätzlich ab, ob an der Kamera überhaupt der Serienmodus (Continuos mode) eingestellt ist. Wird beim Start der Modus Einzelaufnahmen (Single shot) gefunden, bricht das Skript mit einer Fehlermeldung ab.
Auf diese Weise sollen mögliche Fehlbedienungen des Skriptes verhindert werden.

Hier der neue Skriptcode:
Code: Alles auswählen
--[[
*************************
Authors: Werner_O and msl
Version 1.03
Date: 2014/07/31
Licence: GPL
*************************
@title USB-Serienaufnahme
@param     a Enable Auto-Mode USB-Port
  @default a 1
  @range   a 0 1
]]

usbautomode = 0
rec = false

--Define console layout:
set_console_layout(0, 0, 28, 5)

function restore()
    if rec then
        release("shoot_full")
        cls()
        print("Stop")
    end
    if usbautomode == 1 then
        set_config_value(121,0) --USB remote is disabled
        print("USB remotefunction disabled")
    end 
end

if get_drive_mode() == 1 then  --True with enabled continuous shooting

    usbautomode = a
    if usbautomode == 1 then
        set_config_value(121,1) --USB remote is enabled
        print("USB remotefunction enabled")
    end                       
                     
    repeat                   
        wait_click(0)         
        if is_key("remote") then
            if rec == false then
               press("shoot_full")
               cls()         
               rec = true     
               print("Start")
            else             
               release("shoot_full")
               rec = false
               cls()
               print("Stop")
            end
        end
    until is_key("menu")
   
else
    print("Please first enable")
    print("continuous shooting!")
    sleep(3000)
end

restore()

P.S.:
Die Krönung wäre noch eine automatische Aktivierung/Deaktivierung der Serienaufnahmen über das Skript.
Leider habe ich dazu aber keine Lua-Funktion gefunden, die das machen könnte :-(

Liebe Grüße
Werner_O
Benutzeravatar
Werner_O
CHDK-Legende
CHDK-Legende
 
Beiträge: 1027
Registriert: 22.10.2010, 13:12
Wohnort: Köln
Kamera(s): SX20 1.02d
SX240 1.01a
S100 1.01a
S3 1.00a

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 01.08.2014, 05:49

Guten Morgen,

ich merke, Ihr lasst nicht locker. :D =D>

Habe sogleich CHDK und Skript aktulisiert.
Läuft prima.
Start und Stop per USB-FB funktioniert nun tadellos, Speed passt und ich konnte auch keine Verzögerung beim Skriptstart per FB mehr feststellen.
Die Verzögerung war vorher aber auch nur marginal, wenn überhaupt vorhanden. Könnte auch nur Einbildung gewesen sein.

Beim "Spielen" ist mir noch aufgefallen, dass ich im Alt-Modus bei geladenem Skript (ohne dass es läuft) nicht zoomen kann.
Bisher hatte ich immer im P-Programm getestet, als ich ein C-Programm angewählt hatte, bei dem ich Vollzoom mit abgespeichert hatte, wollte ich rauszoomen und das ging nicht.
Wenn ich zoomen möchte muss ich den Alt-Modus verlassen, zoomen und dann den Alt-Modus wieder starten.
Leider hatte ich nicht genug Zeit zu testen, ob es bei dem alten Skript auch schon so war.
Versuche das im Laufe des Nachmittags nachzuholen.

Gruß und einen schönen Start in den Freitag
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon msl » 01.08.2014, 10:30

Hallo Andreas,

du brauchst wegen der Zoom-Funktion die älteren Skriptversionen nicht zu testen. It's not a bug it's a feature. ;)

Nutze die Zeit für das CHDK-Handbuch. Im ALT-Modus stehen die normalen Tastenfunktionen nicht zur Verfügung. Im ALT-Modus kann man ausschließlich Skripte ausführen, das CHDK-Menü benutzen und einige besondere CHDK-Einstellungen vornehmen. Die Tasten werden für die Menüsteuerung benötigt.

Man könnte eine Zoom-Steuerung in das Skript einbauen. Diese wäre aber ein Kompromiss, weil man immer nur in definierten Schritten zoomen könnte. Da ist es einfach, zum Zoomen den ALT-Modus kurzzeitig zu verlassen. Das funktioniert auch während eines laufenden Skriptes. Das Skript wartet dann, bis der ALT-Modus wieder aktiviert ist.

Wir bauen dir aber bei Bedarf gerne auch eine alternative Zoom-Steuerung in das Skript ein. 8)

edit:

@Werner_O: Leider ist eine Funktion zum Umschalten in den Serienmodus nicht verfügbar. Da wird schon so lange nach einer Lösung gesucht, wie ich CHDK kenne. Einzige Möglichkeit wäre, per Tastatursimulation in das Func.Set-Menü zu navigieren und die Einstellungen vornehmen. Diese Variante kann ich aber nicht befürworten. Das Skript müsste für viele Kameras unterschiedlich angepasst werden. Außerdem hat dieses Menü außer bei Kamerastart keinen definierten Startpunkt. Das kann zu bösen Nebeneffekten führen.

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

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 01.08.2014, 12:45

Hallo msl,

dass in CHDK anders denken muss, muss ich noch lernen.
Ich dachte tatsächlich eher an einen bug als an ein feature. :idea:
Dass ich zum Zoomen kurz das Alt-Menü verlasse ist vollkommen OK, eine Erweiterung des Skriptes ist aus meiner Sicht nicht notwendig.

Ich wünsche allerseits ein schönes Wochenende
Gruß
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon msl » 03.08.2014, 14:51

Hallo,

so, ich hätte da noch eine Variante zum Thema Zoom-Funktion im Skript. Damit kann ich bei meinen Kameras eine fast realistische Zoom-Funktion nachempfinden. Sprich, man kann nun den Zoom-Hebel im Skript verwenden.
Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
--[[
*************************
Authors: Werner_O and msl
Version 1.03
Date: 2014/07/31
Licence: GPL
*************************
@title USB-Serienaufnahme
@param     a Enable Auto-Mode USB-Port
  @default a 1
  @range   a 0 1
]]


usbautomode = 0
rec = false

function restore()
    if rec then
        release("shoot_full")
        cls()
        print("Stop")
    end
    if usbautomode == 1 then
        set_config_value(121,0) --USB remote is disabled
        print("USB remote disabled")
    end
end

if get_drive_mode() == 1 then  --True with enabled continuous shooting

    usbautomode = a
    if usbautomode == 1 then
        set_config_value(121,1) --USB remote is enabled
        print("USB remote enabled")
    end

    repeat
        wait_click(0)
        if is_key("remote") then
            if rec == false then
               press("shoot_full")
               cls()
               rec = true
               print("Start")
            else
               release("shoot_full")
               rec = false
               cls()
               print("Stop")
            end
        elseif is_key("zoom_in")  then press("zoom_in")  while is_pressed("zoom_in")  do sleep(20) end release("zoom_in")
        elseif is_key("zoom_out") then press("zoom_out") while is_pressed("zoom_out") do sleep(20) end release("zoom_out")
        end
    until is_key("menu")
   
else
    print("Please first enable")
    print("continuous shooting!")
    sleep(3000)
end

restore()
Erstellt in 0.010 Sekunden, mit GeSHi 1.0.8.9


Gruß msl

Evt. muss man das sleep(20) noch etwas anpassen, um die Zoom-Funktion zu optimieren.

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

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 03.08.2014, 16:39

Hallo msl,

funktioniert einwandfrei.
Hab mir schon fast gedacht, dass Dir das keine Ruhe lässt. ;)
Vielen Dank!

Gruß und einen schönen Sonntag
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 03.08.2014, 20:03

Hallo msl,

ich habe mit dem sleep-Wert etwas gespielt um ihn zu verstehen.
Ist es richtig, dass er sowohl die Zoom-Schritte beeinflusst, als auch die Reaktion auf den USB-Auslöser verändert?
Wenn ich den Wert erhöhe, werden die Zoomschritte größer, wenn ich ihn verringere darf ich den USB-Auslöser nur sehr kurz drücken.
Ist das so?
Der Wert mit 20 passt schon sehr gut.

Gruß
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 04.08.2014, 06:19

Guten Morgen,

der Vollständigkeit halber möchte ich noch anmerken, das es sich natürlich umgekehrt genauso verhalten müsste.
Ich es aber nicht wirklich wahr genommen hätte, wenn die Zoomschritte etwas kleiner, bzw. die "Auslöserabfrage" länger geworden ist.
Falls es überhaupt so ist, wie ich es wahr genommen habe.

Oje, jetzt fange ich schon gleich am Montag Morgen an mit "hätte, wäre, wenn"... :roll:

Ich würde mich auch gerne etwas näher mit den Möglichkeiten beschäftigen, die man mit LUA und CHDK hat und ggf. auch mal selber das eine oder andere kleine Skript schreiben.
Gibt es evtl. dazu eine kleine Hilfe, oder Doku bzgl. LUA in Verwendung mit CHDK?
Wäre klasse, wenn es auch noch leicht verständlich wäre, da sich meine bisherigen Programierkenntnisse auf kleine und sehr einfache VBA-Makros beschränken.

Gruß
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon msl » 04.08.2014, 13:57

Hallo Andreas,

das Auslöseverhalten kann sich eigentlich durch Änderung der Wartezeit in der Zoom-Schleife nicht ändern. Diese Schleife wird nur abgerufen, solange du den Zoom-Hebel betätigst.

Wenn du einfache VBA-Makros erstellen kannst, solltest du grundsätzlich auch mit Lua klarkommen. Die Lua-Syntax ist relativ einfach. Kompliziert ist nur der Umfang der kameraspezifischen Funktionen. Da muss ich auch immer wieder in die Dokumentation schauen.

Ich habe mal einen Thread angefangen, wo wir über grundsätzliche Lua-Fragen diskutieren können.

viewtopic.php?f=7&t=3369

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

Re: USB-remote -> Serienbilder in voller Geschwindigkeit

Beitragvon Andreas71 » 05.08.2014, 15:02

Hallo msl,

werde versuchen mich bei Gelegenheit näher mit dem Thema zu beschäftigen.
Den neuen Thread werde ich dann bestimmt nutzen.

Danke & Gruß
Andreas
Andreas71
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 22
Registriert: 27.07.2014, 10:16
Kamera(s): Canon SX40
Canon S2
Canon Ixus 70

Vorherige

Zurück zu Technik-Ecke

Wer ist online?

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

cron