PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR-Signal für Canon DSLR erzeugen



Andree-HB
13.06.2008, 17:04
Ich habe beim Stöbern gerade gefunden, wie einfach die Canon DSLR`s per IR ausgelöst werden :

http://www.pixelklecks.de/pictures/rc1.gif

Ich weiss jetzt aber leider nicht genau, wie ich die obigen Signale auf nur einem Pin ausgeben kann - ich könnte zwar einfach per Interruptroutine ein 38Khz-Signal erzeugen und dann zusammen mit einem externen UND-Glied und einem weiteren Pin das Zeitsignal erzeugen...aber das geht doch auch bestimmt ganz einfach intern im MC...RC5 z.B. macht ja nix anders.

...nur stehe ich diesbezüglich gerade auf dem Schlauch.

Edit : Dieser Ansatz klappt leider nicht


$regfile = "m8def.dat" 'Chip definieren
$crystal = 16000000 'Quarzfrequenz definieren

Config Timer0 = Timer , Prescale = 1 '38Khz
On Timer0 Timer_irq
Const Timervorgabe = 34
Enable Timer0
Enable Interrupts

Config Pind.7 = Output
Rc1 Alias Portd.7
Dim Signal As Bit


Do
Wait 5 'Auslöseverzögerung
Rc1 = Signal '38 Khz
Waitus 400 'für 400µs
Rc1 = 0
Waitms 5.5 '5,5ms Signal 0
Rc1 = Signal 'danach wieder 38Khz
Waitus 400 'für 400µs
Rc1 = 0 'wieder 0
Loop
End

Timer_irq:
Timer0 = Timervorgabe
Toggle Signal 'erzeuge 38 Khz Signalbit
Return

Sauerbruch
14.06.2008, 09:36
Ich glaube, der denkfehler liegt hier:



RC1 = Signal
Waitus 400


Auch wenn die IRQ das Signal-Bit regelmäßig toggelt - RC1 wird nur ein einiges mal mit Signal gleichgesetzt, und dann für 400 µs aber nicht mehr!

Du brauchst also eine Funktion, die auch weiterläuft, wenn der Controller gerade in der Wait-Phase hängt - z.B. PWM.[/code]

Andree-HB
14.06.2008, 09:42
...habe mir soetwas Ähnliches schon gedacht, konnte es aber leider nicht mit einem Oszi messen...werde es es dann halt doch mal etwas komplizierter mit einem logischen Gatter probieren.

Danke !

Sauerbruch
14.06.2008, 14:41
werde es es dann halt doch mal etwas komplizierter mit einem logischen Gatter probieren.


Na, na, na... 8-[ das tut dem Mega8 aber auch vielleicht ´n bisschen weh...

Ich würd´s mal so probieren:



$regfile = m8def.dat
$Crystal = 16000000

Config Pind.7 = Output

Config timer0=timer, prescale=1
On timer0 timer_IRQ
Enable interrupts

Do
Enable timer0 'ISR wird freigegeben, 38kHz-Signal startet...
waitus 400 '...für 400 µs...
disable timer0 'und stoppt wieder.
portd.7=0 'Ausgangspin noch schnel resetten...
waitus 5500 '...und nach 5,5ms Pause ab in die nächste Runde.
Loop


Timer_IRQ:
Timer0 = 34
Toggle Portd.7
return


Gruß & Co,

Daniel

Andree-HB
17.06.2008, 20:09
...prinzipiell wohl so genau richtig - nur leider klappt es nicht...muss mir echt mal `n Oszi leihen und messen, was rauskommt.