Hi Starfire, hab deine PN bekommen. Allerdings seh ich grad, dass mir die Prozessoren ausgegangen sind, muss neue bestellen, es kann also noch maximal eine Woche dauern, bis das Ding bei dir in der Post liegt.
Wie es ohne Batterie funktioniert:
Die Kamera legt eine Spannung an den Auslöser-Anschluss und detektiert das Zusammenbrechen dieser Spannung als Auslösewunsch. Normalerweilse macht der Taster des Fernauslösers einfach einen Kurzschluß zwischen Auslösepin und Masse (Spitze und Mantel des 3-poligen 2,5mm-Klinkensteckers).
Also wir habe eine Spannung von der Kamera, dürfen diese aber nur sehr schwach belasten, weil die Kamera sonst auslösen würde. Das geht mit dem verwendeten Microcontroller, da ich ihn nur mit 16kHz statt 10MHz betreibe, und er sich außerdem zu 99% im 'power down'-Modus befindet und nur jede Viertelsekunde kurz aufwacht, um einen Zähler hochzuzählen, die Schalterstellungen auszulesen und ggf. auszulösen. Die Schaltung braucht ungefähr 10µA und läuft noch mit 1,5V.
Die Schaltung sieht etwas komisch aus, weil am Betriebsspannungsanschluß des µC nur ein Kondensator hängt, die Stromversorgung aber an einem normalen I/O-Pin. Die Schutzdiode im µC leitet die 'Überspannung' am I/O-Pin in den Kondensator ab - der Prozessor bekommt Saft und läuft los.
Nachteil dieser Schaltungstechnik ist, dass die Kamera beim Anstecken/Einschalten des Timers sofort auslöst. Das lässt sich nicht vermeiden, schließlich saugt sich in dem Moment der Kondensator voll.
Als Langzeitbelichtungs-Geber lässt sich die Schaltung ebenfalls nicht einsetzen, denn der Auslösepin darf nur kurz (hier eine Viertelsekunde) kurzgeschlossen werden, solange reicht der Kondensator zur Versorgung des µC aus. (Natürlich könnte man auch den Fokus-Anschluss zur Stromversorgung verwenden...)
Hier der wirklich extrem simple Firmware-C-Code für avr-gcc:
Code:
/*
Pentax istDS battery-less interval timer V1, stef@xxxxxx.de, Oct 1 2008
Might work for other camera models, depending on shutter line pull-up
resistance, pull-up voltage and threshold voltage.
ATtiny25 µC running at 16kHz internal WDT oscillator, fuse low byte is 0x64
PB 7..0 connections: nopin nopin nc shutter nc dip2 dip1 dip0
Dip switches connected to GND, 22µF cap between Vcc and GND replaces battery.
Supply voltage is drawn from camera's pull-up via µC's internal clamping diode.
A fourth dip switch may be used as on/off switch, breaking GND to camera.
2.5mm TRS camera plug: tip=shutter, ring=focus(not used), sleeve=GND
*/
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
/*
dip2 dip1 dip0 setting to tick counter values
off off off 2s
off off on 4s
off on off 8s
off on on 15s
on off off 30s
on off on 60s
on on off 120s
on on on 240s
measured .265625 sec/tick instead of ideal .25 sec/tick */
uint16_t dip2qsec[]={904,452,226,113,56,30,15,8}; //8(2s)..16383(4:30h)
EMPTY_INTERRUPT(WDT_vect); //wdt irq just recovers cpu from power-down
int main(){
uint16_t s; //quarter-seconds counter
PORTB=0b00101000; //dip-switch low, shutter hi-z, nc pull-up
DDRB =0b00000111; //dip-switch as output - conserves power
WDTCR=0b11000100; //start wdt in irq-only mode, 0.25s interval
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //select 'power down' as sleep mode
sei(); //globally enable interrupts
for(s=1;;s++){ //loops every quarter second
sleep_mode(); //power down till next wdt irq
DDRB =0b00000000; //dip-switch and shutter as inputs
PORTB=0b00101111; //dip-switch pull-up, shutter hi-z (btn release)
asm volatile("nop"::); //one clock delay before reading PINB
if(s>=dip2qsec[PINB&0x07]){ //read dip-switch settings
PORTB=0b00101000; //dip-switch low, shutter low
DDRB =0b00010111; //dip-switch and shutter as output
s=0; //reset quarter-second counter
}else{
PORTB=0b00101000; //dip-switch low, shutter hi-z
DDRB =0b00000111; //dip-switch as output - conserves power
}
}
return(0); //ANSI C requires main() to return int
}
Gruß
Stef(an).