MasterFX
Themenersteller
Hallo zusammen,
ich habe mich mal gestern ein wenig hingesetzt und einen RC-1 Clone gebastelt. Größtenteils aus Reste die ich hier so rumliegen hatte. Habe von daher eigentlich nur die Mikrocontroller (ATtiny25) kaufen müssen. Für 1,25€ funktioniert das Ding echt gut.
Reichtweite ca. 3-4m. Schaltplan und Quellcode folgt...
UPDATE #1:
Ich habe jetzt versucht den Code so anzupassen, dass er auch für die Pentax Kameras geht (IR-Ferbedienung F). Dafür einfach das entsprechende "#define" auskommentieren. Falls das jemand testen kann, wäre es nett wenn er kurz Rückmeldung gibt, ob es klappt
UPDATE #2:
Ich habe jetzt auch die Codes für Nikon ML-L3 und Olympus RM-1 implementiert. Ich habe das jetzt einfach blind programmiert, da ich keine dieser Cams besitze. Also wenn jemand das testen und eben eine Rückmeldung geben könnte, wäre das sehr nett. Insbesondere bei der Olympus bin ich mir nicht sicher, ob das so klappt. Es ist von allen nur die sofortige Auslösung drin, also kein Zoom etc.
So hier nun der Schaltplan:
Der 18 Ohm Widerstand kann auch weggelassen werden, dadurch wird die Reichweite nochmals erhöht.
Der ATtiny25 wird mit dem internen 8MHz Oszillator betrieben. Der Haken bei CKDIV8 muss daher ENTFERNT werden, da er sonst nur mit 1MHz läuft.
Und der Quellcode:
Codegrößen: (AVR-GCC mit -O2)
Canon: 360 Bytes
Pentax: 316 Bytes
Nikon: 422 Bytes
Olympus: 444 Bytes
Da ist also noch genug Platz für mehr Funktionalität. Ich hatte mir schon überlegt, an den übrigen Pin einen weiteren Schalter anzubauen um so z.B. automatisiert Langzeitbelichtungen von >30s zu machen.
Die Stromaufnahme liegt bei weniger als 0.5µA wenn man keine Taste drückt. Die Lithiumbatterie hält so also über 20Jahre!
Wer nicht selber kompilieren will/kann, dem kann ich auch gerne das HEX-File schicken. Einfach ne PN schicken!
Hier nochmal die Timings:
ich habe mich mal gestern ein wenig hingesetzt und einen RC-1 Clone gebastelt. Größtenteils aus Reste die ich hier so rumliegen hatte. Habe von daher eigentlich nur die Mikrocontroller (ATtiny25) kaufen müssen. Für 1,25€ funktioniert das Ding echt gut.
Reichtweite ca. 3-4m. Schaltplan und Quellcode folgt...
UPDATE #1:
Ich habe jetzt versucht den Code so anzupassen, dass er auch für die Pentax Kameras geht (IR-Ferbedienung F). Dafür einfach das entsprechende "#define" auskommentieren. Falls das jemand testen kann, wäre es nett wenn er kurz Rückmeldung gibt, ob es klappt
UPDATE #2:
Ich habe jetzt auch die Codes für Nikon ML-L3 und Olympus RM-1 implementiert. Ich habe das jetzt einfach blind programmiert, da ich keine dieser Cams besitze. Also wenn jemand das testen und eben eine Rückmeldung geben könnte, wäre das sehr nett. Insbesondere bei der Olympus bin ich mir nicht sicher, ob das so klappt. Es ist von allen nur die sofortige Auslösung drin, also kein Zoom etc.
So hier nun der Schaltplan:

Der 18 Ohm Widerstand kann auch weggelassen werden, dadurch wird die Reichweite nochmals erhöht.
Der ATtiny25 wird mit dem internen 8MHz Oszillator betrieben. Der Haken bei CKDIV8 muss daher ENTFERNT werden, da er sonst nur mit 1MHz läuft.

Und der Quellcode:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <util/delay.h>
#include <avr/sleep.h>
/* Uncomment for your Camera Type */
#define CANON
//#define PENTAX
//#define NIKON
//#define OLYMPUS
/* defines for RC-1 IR Protocoll */
#define NR_PULSES 16
#define DELAY_SHOT 7.33
#define DELAY_DSHOT 5.36
/* Macros for IR LED */
#define LED_ON() PORTB |= (1<<PB0) | (1<<PB1) | (1<<PB2)
#define LED_OFF() PORTB &= ~((1<<PB0) | (1<<PB1) | (1<<PB2))
#define PULSE_36k() LED_ON(); _delay_us(15.24); LED_OFF(); _delay_us(15.24)
#define PULSE_38k() LED_ON(); _delay_us(13.15); LED_OFF(); _delay_us(13.15)
#define PULSE_38_4k() LED_ON(); _delay_us(13.02); LED_OFF(); _delay_us(13.02)
#define PULSE_40k() LED_ON(); _delay_us(12.5); LED_OFF(); _delay_us(12.5)
int main(){
DDRB = (1<<PB0) | (1<<PB1) | (1<<PB2); /* PB0-2 as Output for IR LED */
PORTB |= (1<<PB3) | (1<<PB4); /* Pullup for PB3 and PB4 */
PCMSK = (1<<PCINT3) | (1<<PCINT4); /* Pin Change Interrupt for Pin3+4*/
GIMSK |= (1<<PCIE); /* Enable Pin Change Interrupt */
sei(); /* Enable Interrupts */
/* Power-down Mode until Key pressed */
while(1){
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
/* Wait 100ms after Keypress */
_delay_ms(100);
}
return 0;
}
/* Pin Change Interrupt ISR */
ISR(PCINT0_vect){
#ifdef CANON
uint8_t i;
/* Key pressed for undelayed Shot ? */
if((PINB & 1<<PB3) == 0){
for(i = 0; i < NR_PULSES; i++){
PULSE_36k();
}
_delay_ms(DELAY_SHOT);
for(i = 0; i < NR_PULSES; i++){
PULSE_36k();
}
}
/* Key pressed for delayed Shot ? */
else if((PINB & 1<<PB4) == 0){
for(i = 0; i < NR_PULSES; i++){
PULSE_36k();
}
_delay_ms(DELAY_DSHOT);
for(i = 0; i < NR_PULSES; i++){
PULSE_36k();
}
}
#elif defined PENTAX
uint16_t i;
uint8_t j;
if((PINB & 1<<PB3) == 0){
for(i = 0; i < 494; i++){
PULSE_38k();
}
_delay_ms(3);
for(j = 0; j < 7; j++){
for(i = 0; i < 38; i++){
PULSE_38k();
}
_delay_ms(1);
}
}
#elif defined NIKON
uint8_t i;
uint8_t j;
if((PINB & 1<<PB3) == 0){
for(j = 0; j < 2; j++){
for(i = 0; i < 77; i++){
PULSE_38_4k();
}
_delay_ms(27.83);
for(i = 0; i < 15; i++){
PULSE_38_4k();
}
_delay_ms(1.58);
for(i = 0; i < 16; i++){
PULSE_38_4k();
}
_delay_ms(3.58);
for(i = 0; i < 16; i++){
PULSE_38_4k();
}
if(!j)
_delay_ms(63.2);
}
}
#elif defined OLYMPUS
uint8_t i,j;
/* Code for Shot */
uint32_t code=0x61DC807F;
uint32_t mask=0x80000000;
if((PINB & 1<<PB3) == 0){
for(i = 0; i < 152; i++){
PULSE_40k();
}
for(i = 0; i < 22; i++){
PULSE_40k();
}
_delay_ms(4);
j = 32;
while(j--){
if(code & mask){
_delay_ms(1.5);
for(i=0; i < 20; i++){
PULSE_40k();
}
}
else{
_delay_us(500);
for(i=0; i < 20; i++){
PULSE_40k();
}
}
mask >>= 1;
}
}
#endif
}
Canon: 360 Bytes
Pentax: 316 Bytes
Nikon: 422 Bytes
Olympus: 444 Bytes
Da ist also noch genug Platz für mehr Funktionalität. Ich hatte mir schon überlegt, an den übrigen Pin einen weiteren Schalter anzubauen um so z.B. automatisiert Langzeitbelichtungen von >30s zu machen.
Die Stromaufnahme liegt bei weniger als 0.5µA wenn man keine Taste drückt. Die Lithiumbatterie hält so also über 20Jahre!
Wer nicht selber kompilieren will/kann, dem kann ich auch gerne das HEX-File schicken. Einfach ne PN schicken!
Hier nochmal die Timings:

Zuletzt bearbeitet: