PIC-1で行う制御とファームウェアの最終3型
|
|||
このPICはD7200がC2の15秒の連写後に、USB-PICがTeraTermから信号"D"を受けてコロナの偏光撮像を開始します。 しかしその前にE-PL5は5分で自動パワーオフとなってしまいます。なので、C2の5分前に電源を入れるというアクロバット的なことを要求されます。なので、3分おきにシャッターボタンを半押しして焦点を合わせる信号を与えるようにしました 偏光撮像は、
E-PL5はスリープの設定は出来ますが、スリープしない事に出来ない(最長5分でスリープする)ので、3分毎にフォーカス信号を送信するファームウェアに変更しました。 加えて回数が増えるとバッファがきつくなる現象を起こすので撮像後500ms待ち時間を入れました。 |
|||
駆動回路の回路図・部品配置図はこちらにあります。 | |||
|
|||
1 /* 2 * PolarizationCapture 3 * Author: M_shi_Lab 4 * ForPIC-1+E-PL5 5 * Startedat 2018/Apr/22 6 * Tentativecompletionat 2018/May/26 7 * Completionforeclipsat 2018/Sep/02 8 */ 9 10 11 #include <xc.h> 12 #include <stdlib.h> 13 #include <stdio.h> 14 #pragma config FOSC = HS 15 #define _XTAL_FREQ 12000000 16 #pragma config MCLRE = OFF 17 #pragma config WDTE = OFF 18 #pragma config PWRTE = ON 19 #pragma config CP = OFF 20 #pragma config CPD = OFF 21 22 void Captor(void); 23 24 void main(void) 25 { 26 ANSEL = 0b00000000; 27 TRISA = 0b10000000; 28 TRISB = 0b00001001; 29 30 int i; 31 32 PORTBbits.RB0 = 1; 33 PORTB = 0b11000000; 34 35 while(1) //レリーズ信号待ち 36 { 37 PORTBbits.RB2 = 1; //ここでフォーカス信号を出す 38 __delay_ms(30); 39 PORTBbits.RB2 = 0; 40 for(i=0; i<=18000; i++) //3分待つ間にレリーズ信号が入ると動き出す 41 { 42 __delay_ms(10); 43 if(PORTBbits.RB0 == 0) 44 { 45 Captor(); 46 } 47 } 48 } 49 } 50 51 void Captor(void) 52 { 53 int i, j; 54 55 for(j=0; j<=18; j++) 56 { 57 PORTBbits.RB2 = 1; 58 __delay_ms(50); 59 PORTBbits.RB1 = 1; 60 __delay_ms(2200); 61 PORTBbits.RB1 = 0; 62 __delay_ms(50); 63 PORTBbits.RB2 = 0; 64 __delay_ms(500); 65 66 for(i=1;i<=12;i++) 67 { 68 PORTB = 0b11000000; 69 __delay_ms(15); 70 PORTB = 0b01100000; 71 __delay_ms(15); 72 PORTB = 0b00110000; 73 __delay_ms(15); 74 PORTB = 0b10010000; 75 __delay_ms(15); 76 } 77 PORTB = 0b1100000; 78 __delay_ms(15); 79 PORTB = 0b01100000; 80 81 __delay_ms(1000); 82 83 PORTBbits.RB1 = 1; 84 __delay_ms(50); 85 PORTBbits.RB2 = 1; 86 __delay_ms(2200); 87 PORTBbits.RB2 = 0; 88 __delay_ms(50); 89 PORTBbits.RB1 = 0; 90 __delay_ms(500); 91 92 PORTB = 0b00110000; 93 __delay_ms(15); 94 PORTB = 0b10010000; 95 __delay_ms(15); 96 for(i=1;i<=12;i++) 97 { 98 PORTB = 0b11000000; 99 __delay_ms(15); 100 PORTB = 0b01100000; 101 __delay_ms(15); 102 PORTB = 0b00110000; 103 __delay_ms(15); 104 PORTB = 0b10010000; 105 __delay_ms(15); 106 } 107 108 __delay_ms(1000); 109 } 110 return; 111 } 112 |