Software-Problem mit USB-Remote

Kamera-Hardware, Selbstbaufernbedienung und sonstige Hardware-Erweiterungen

Software-Problem mit USB-Remote

Beitragvon S2user » 17.09.2009, 18:08

Hallo allerseits,

angeregt von den verschiedenen Vorschlägen zum Bau einer CHDK-Fernbedienung habe ich mir auch eine gestrickt. Vier Tasten werden (über eine 868MHz-Funkstrecke) in 50/100/150/200ms lange 5V-Pulse umgesetzt. Bei Bedarf auch aus 100m Entfernung. :-)

Bild


Zur Auswertung in der Kamera dient für's erste ein von stb's CanoRemote abgeleitetes Script:
Code: Alles auswählen
@title Zoom and Shoot
rem Remote-Script for S-series PowerShot (which have 128 zoom steps)

@param a Btn1 Len
@param b Btn2 Len
@param c Btn3 Len
@param d Btn4 Len
@default a 6
@default b 12
@default c 17
@default d 22

rem calculate relative zoom value 
z = 25

while 1
   p=0
   do
      p = get_usb_power
   until p>0
   if p<=a then gosub "button1" else if p<=b then gosub "button2" else if p<=c then gosub "button3" else if p<=d then gosub "button4" else gosub "error"
   endif
wend
end

:button1
   print p " - shoot"
   shoot
   return

:button2
   print p " - Btn2"
   return

:button3
   print p " - zoom in"
   set_zoom_rel z
   return

:button4
   print p " - zoom out"
   set_zoom_rel -z
   return

:error
   print p " - error"
   return
   
return


Bis jetzt sind mir folgende Dinge aufgefallen:
- Die Kamera soll sich so verhalten wie in stb's Video im im Thema "Projekt: Infrarot USB Remote mit Apple Fernbedienung". Tut sie aber nicht. Bei jedem USB-Impuls scheint die Kamera auszulösen. Für gut 1s ist die kamera blockiert, die SD-Card-LED blinkt, aber es wird nichts auf die Karte gespeichert. Erst danach wird das gewünschte Kommando ausgeführt.
- Zoom-In/-Out werden erkannt, aber nicht ausgeführt.
- die Messung der USB-Pulslänge ist relativ ungenau (bis zu +/- 2 Zähler).

Muß im CHDK noch was eingestellt werden? Mit dem jetzigen Verhalten erfüllt die Fernbedienung meine Erwartungen nicht. An meiner Hardware liegt es definitiv nicht! :-)
Die im CHDK integrierte USB-Fernbedienung ist deaktiviert. Zur Parametrierung dieser finde ich leider keine brauchbare Erläuterung, deshalb habe ich diese Möglichkeit nicht weiter verfolgt (Ja, ich habe Handbuch und Suche bemüht. Darin steht aber nix.)

Irgendwelche Ideen, was schiefläuft? Bin für jeden Tip dankbar.


viele Grüße
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon gehtnix » 17.09.2009, 18:41

Hi S2user,

schick die mal zu mir, ich pass das an :D ..... habe hier einen Fischreiher, an den komme ich zwar auf 25 Meter ran, aber da ist dann Buschwerk dazwischen. Und ein Quadratzentimeter weiße Haut mehr und schon schwingt es sich zum anderen Ufer. Da dann das gleiche Spiel.


Also,

ich denke mal die p-Zeit ist zu kurz.
Dann würde ich dieses Bandwurm-If mal auf case umstellen, siehe unten.
Da Kannst Du auch Dein a, b usw reinsetzen.
Die Zeit für den button1 setzt Du dann auf 25 usw.
Code: Alles auswählen
   do
      p = get_usb_power
   until p>0
   select p
      case 1 to 50; gosub "button1"
      case 51 to 100; gosub "button2"
      case 101 to 150; gosub "button3"
      case 151 to 200; gosub "button4"
      case 201 to 1000; gosub "error"
   end_select


Zeiten zunächst mal vergrößern und um zu sehen ob die FB funktioniert. Und dann Zeiten verringern.

Schau mal ins uBasic-Archiv. Da ist am Ende bei den USB-Sachen ein reines Testprogramm für USB. Ausprobieren, Zeiten mal ansehen.

gruss gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon S2user » 17.09.2009, 21:40

Hi gehtnix,

kein Problem, 2 Platten hab ich noch. Mußt nur noch 2-3 Designfehler patchen und bestücken. :badgrin:
Bild

Der case Tipp ist gut, hab ich gleich eingepflegt. Basic ist nicht so mein Ding...

Daß es an den Zeiten liegt glaube ich nicht. stb arbeitet bei der Apple-CanoRemote sogar mit 30ms-Timestep. Beim testen mit 200/400/600/800ms-USBpulsen bin ich etwas schlauer geworden: Wenn der USB-Puls kommt, schaltet die Kamera für ca. 2sec. in den Wiedergabe-Modus! Danach wird wieder auf Aufnahme geschaltet und die gewünschte Aktion durchgeführt. Zoom wird weiterhin ignoriert. Scheint ein CHDK-Problem zu sein, da Zoom neuerdings bei anderen Nutzern auch klemmt.

Irgendeine Idee, warum die Kiste auf Wiedergabe geht? Da scheint die Kamera-Firmware dem CHDK dazwischen zu funken.

Das Testprogramm kenn ich. Auch damit schwanken die gemessenen Zeiten bis zu +/-2, also +/-20ms! Auf dem Oszi ist der Puls stabil, von ein paar µs Jitter abgesehen. 8)

Gruß,
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon gehtnix » 17.09.2009, 22:52

Hi S2user,

ich bin mal über die Codezeilen gegangen. Dir Formatierung ist jetzt anders, das ist aber wegen der Übersicht. Habe aber ein überzähliges return gefunden, weiß aber nicht ob das einen Fehler erzeugt hat.

Geändert habe ich folgendes:
@param e Zoom Sleep x50
@default e
@param z Zoom Steps
@default z 25

Hier kannst Du jetzt mit den Parametern die Zoom-Steps verändern und was mir ganz gefehlt hat, ist ein sleep nach dem zoom.
Ausprobieren, vor allem mit dem sleep. x50 = 6 sind dann 300ms. Also ruhig mal mit 500ms anfangen.

Code: Alles auswählen
@title Zoom and Shoot
rem Remote-Script for S-series PowerShot (which have 128 zoom steps)

@param a Btn1 Len
@default a 6
@param b Btn2 Len
@default b 12
@param c Btn3 Len
@default c 17
@param d Btn4 Len
@default d 22
@param e Zoom Sleep x50
@default e
@param z Zoom Steps
@default z 25

e=e*50

while 1
   p=0
   do
      p = get_usb_power
   until p>0
   select p
      case 1 to 50; gosub "button1"
      case 51 to 100; gosub "button2"
      case 101 to 150; gosub "button3"
      case 151 to 200; gosub "button4"
      case 201 to 1000; gosub "error"
   end_select
wend

end

:button1
   print p " - shoot"
   shoot
return

:button2
   print p " - Btn2"
return

:button3
   print p " - zoom in"
   set_zoom_rel z
   sleep e
return

:button4
   print p " - zoom out"
   set_zoom_rel -z
   sleep e
return

:error
   print p " - error"
return



Mit dem Umschalten auf den Wiedergabemodus Bild Macht aber das Testprogramm wohl nicht? S2 hat da eine eigene Taste?

Deine genaue Ozi-Zeit hast Du wohl am Mini-USB gemessen der dann in die Kamera gesteckt wird? Sonst kann ich zu den Schwankungen nichts sagen.

Du könntest mal folgendes probieren. Bei diesen Zeilen "set_zoom_rel z" und "set_zoom_rel -z", setze einmal "set_zoom 50" und "set_zoom 100" ein. Der sollte dann nur zwischen diesen beiden Position pendeln. Nur mal um zu sehen ob sich da was tut.

Bietet es sich doch an den Button 2 mit z.B. "set_zoom 80" zu belegen. Dann bist Du mit einem Klick weit vorne.

gruß gehtnix
Zuletzt geändert von gehtnix am 10.10.2009, 13:20, insgesamt 1-mal geändert.
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon S2user » 19.09.2009, 15:17

Hi gehtnix,

prizipiell geht es jetzt. Kleine Ursache, große Wirkung: "USB-Fernbedienung-Parameter->Fernbedienung an/aus" einschalten! :oops: Ich hatte angenommen, Script- und integrierte Fernbedienung seien unabhängig voneinander.

Danke für deine Hilfe.

Grüße
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon gehtnix » 19.09.2009, 15:51

Hi S2user,

prima!

Du kannst im Skript noch folgendes austauschen:
Alt:
Code: Alles auswählen
case 201 to 1000; gosub "error"

Neu:
Code: Alles auswählen
case_else gosub "error"

Dann wird alles abgefangen.

Das sleep kannst Du wieder rausnehmen, habe das Original von stb mal getestet.

Wie schaut es jetzt mit den Zeiten aus?

gruß gehnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon S2user » 19.09.2009, 19:09

Hi,

die Zeiten werde ich wieder auf 50ms-steps zurücknehmen. Weniger macht wegen der Meßungenauigkeit von +/-2 keinen Sinn.
Neues Problem: beim Zoomen schaltet sich die Kamera unregelmäßig ab (stürzt ab?). Ein paar Zoomschritte gehen gut. Dann schaltet dieKamera beim fokussieren ab. Die Powersave-Einstellung hat darauf keinen Einfluß.

Gruß
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon gehtnix » 19.09.2009, 22:37

Hi S2user,

Du kannst mal alles zwischen while 1 und wend löschen und mit dem Untenstehendem ersetzen.

Code: Alles auswählen
      wait_click
      is_key k "right"
      if k=1 then gosub "button1"
      is_key k "left"
      if k=1 then gosub "button2"
      is_key k "up"
      if k=1 then gosub "button3"
      is_key k "down"
      if k=1 then gosub "button4"

Damit kannst Du dann mit links/rechts oben/unten Deine FB simulieren. Wenn das geht liegt es nicht an der Kamera.

gruß gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon S2user » 21.09.2009, 13:23

Hi gehtnix,

der Trick mit dem FB-Simulator ist ja nett. :-) Leider tauchen die Probleme hier auch auf. Mit dem FB-Sim habe ich verschiedene Zoomvarianten getestet. Immer mit mind. 10sec. Pause zwischen den Tastendrücken, damit sich die Aktionen garantiert nicht überschneiden.
Code: Alles auswählen
   rem Zoom relativ zum Istwert
   set_zoom_rel z

Die Kamera schaltet wie im letzten Posting beschrieben nach einer variierenden Anzahl Zoomschritte ab.

Code: Alles auswählen
   rem direktes Setzen der Zoomstufe
   get_zoom Z
   Z=Z+z
   if Z>128 then Z=128
   set_zoom Z

gleiches Verhalten wie bei set_zoom_rel

Code: Alles auswählen
   click "zoom_in"

Keine erkennbare Reaktion. Klick-Zeit zu kurz, nehme ich an.

Code: Alles auswählen
   press "zoom_in"
   sleep 100
   release "zoom_in"

Funktioniert, allerdings nur mit langsamer Zoomgeschwindigkeit. (die S2 hat zweistufigen Zoomschalter für langsame / schnelle Zoomfahrt).

Die Kamera hat anscheinend Probleme, wenn Parameter direkt verstellt werden. Über die Zoomring-Emulation mit press/release geht es, aber nur langsam.

Kamera und CHDK sollten zusammenpassen:
PowerShot S2IS, P-ID: 30F0 PAL, FW: GM1.00E E18, Apr. 24, 2005
CHDK: s2is-100e-0.9.8-800-full
Speicher-Info: 1.072.760 Byte frei, CHDK-Größe 283.280 Bytes, geladen bei 0x6EF50

Gibt es evtl. ein Out-of-Memory Problem?

Gruß,
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon msl » 21.09.2009, 13:40

Hallo S2user,

Gibt es evtl. ein Out-of-Memory Problem?

Das sollte nicht der Fall sein. Nach Deinen Angaben gibt es genügend Reserven. Du kannst aber Speicher sparen, indem Du selbst CHDK kompiliert und diverse optionale Funktionen (Spiele, Textreader, Lua u.s.w.) im Setup weglässt. Ein weiteres Einsparpotential ist der Verzicht auf Sprachdatei, externe Fonts, Symboldateien.

Zur Zoomgeschwindigkeit: Hast Du schon mit dem Befehl set_zoom_speed experimentiert?

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

Beitragvon S2user » 25.09.2009, 12:09

Hallo msl,

danke für den Tipp mit set_zoom_speed. Hat bei der S2 leider keine Auswirkungen. Egal welchen Wert ich setze, die Zoomgeschwindigkeit bleibt immer gleich.

Gruß,
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32

Beitragvon gehtnix » 25.09.2009, 14:44

Hi S2user,

Du könntest Dir mal das Hdr-Hyper-Skript für die S3/S5 laden. Da kann man ja auch mittels Tasten den Zoom schnell verstellen. Die "kameraspezifischen Daten" sind für Dich nicht von Interesse, spielen keine Rolle, bzw. es würden Fotos mit falschem Fokus entstehen.

Wäre doch ein Versuch wert ob die Kamera mit diesem Skript auch aussteigt.

gruss gehtnix
Bild
Benutzeravatar
gehtnix
CHDK-Legende
CHDK-Legende
 
Beiträge: 2406
Bilder: 8
Registriert: 17.04.2008, 13:42
Wohnort: München
Kamera(s): A610 100e+f + IXUS50 101b

Beitragvon S2user » 12.10.2009, 11:06

Hallo gehtnix,

dein Name ist Programm, leider. Auch mit dem HDR-Hyper-Script schmiert die Kamera nach etwas Spielerei mit dem Zoom ab.
Als Alternative zu µBasic habe ich das Zoom-Shoot Lua-Script probiert. 3-4x Zoom rein und raus mit der Funktion get_zoom_time(), klack, Kamera läßt sich nur mit Power-Knopf aus dem Koma wecken.

Entweder habe ich ein Hardware-Problem oder das aktuelle CHDK harmoniert nicht mit der (doch recht betagten) Powershot S2. Zumindest, was die direkte Manipulation der Kamera-Parameter angeht. Press/Release <button> funktioniert anstandslos.
Gibt es hier evtl. noch ein paar Leute mit Powershot S2, die das mal testen könnten? Wär ganz prima. Dann ließe sich vielleicht die dritte Möglichkeit ausschließen: ich bin zu blöd...

viele Grüße
S2user
Powershot S2 IS + CHDK S2is-1.00e-0.9.8-800-full
4-Tasten Fernbedienung 868 MHz
S2user
CHDK-Einsteiger
CHDK-Einsteiger
 
Beiträge: 7
Registriert: 22.12.2008, 22:32


Zurück zu Technik-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron