皆既日食2015撮像自動化プロジェクト - III-2 - D7100制御用ファームウェアの作成

 

1.ハードウェア
  回路図・部品配置図はここ、縦位置グリップの改造はここここここ
2.ファームウェア
  タイムシーケンスとフローチャートは下の図1.と図2.にあります。
3.使い方 
  1. D7100の連写を2駒/秒に設定する。記録はRAWのみ。ロスレス圧縮、14bitで記載ができます。ISOの自動調整、ADL、ノイズリダクションなどは切っておきます。
  2. シャッター速度を1/2000secに設定します。
  3. リモコンコードのスライドスイッチをオンに、のちにシャッターレリーズボタンを押します。
  4. 自動で撮像が進みます。
4.まとめ
 III-1'にある通り、ロータリースイッチをエミュレートするGP0, GP2ピンの接続が逆になっているときは、ファームウェアのGP0とGP2を入れ替える必要があります。私の場合、このファームウェアで1/2の確率でうまくいったためファームウェアを弄ることはなかったです。また、2コマ/秒以下の速度で連続撮像するため、延々撮像してくれるようです。D600はこれに比べると癖があるので、ファームウェアを調整する必要がありました。

図1.タイムシーケンス

図2.ファームウェアのフローチャート

D7100Ctrl.c
  1 /*
  2 *File:CameraCtrl.c
  3 *Author:M氏
  4 *
  5 *Createdon2014/06/27,21:48
  6 */
  7 
  8 #include<stdio.h>
  9 #include<stdlib.h>
 10 #include<xc.h>
 11 #define _XTAL_FREQ 1000000;
 12 
 13 
 14 /*****Configuration********/
 15 #pragma config FOSC=INTOSCIO, WDTE=OFF, PWRTE=ON, BOREN=ON, MCLRE=OFF, CP=OFF, IESO=OFF//, FCMEN=OFF;
 16 
 17 int i,j,k;
 18 
 19 
 20 
 21 int main(void){
 22 
 23     //OSCCON = 0x40;  //set1MHz
 24     ANSEL=0x00;     //alldigital
 25     CMCON0=0x07;    //Comperlator off
 26     WPU=0x14;       //set pull up bit on
 27     nGPPU=0;        //pull up activate
 28     TRISIO0=0;  //GP1 output
 29     TRISIO1=0;  //GP2 output
 30     TRISIO2=0;  //GP3 output
 31     TRISIO3=1;  //GP4 input
 32     TRISIO4=0;  //GP5 output
 33     TRISIO5=0;  //GP6 output
 34     
 35         GP0 = 1;    //Speed down
 36         GP1 = 1;    //Shutter
 37         GP2 = 1;    //Speed up
 38         GP4 = 1;    //Focus
 39         GP3 = 1;
 40     while(1){       //All out off
 41         if(GP3 == 0){
 42             goto Start1;
 43         }
 44     }
 45         Start1:
 46                 _delay(25000);     //wait 100ms
 47             GP4 = 0;            //Focus on
 48                 _delay(25000);     //wait 100ms
 49             GP1 = 0;            //Shutter release
 50                 _delay(14000000);     //wait 12sec
 51             GP1 = 1;            //Shutter off
 52                 _delay(25000);     //wait 100ms
 53             GP4 = 1;            //Focus off
 54                 _delay(25000);     //wait 100ms
 55             GP2 = 0;            //Preconfig
 56                 _delay(25000);     //wait 100ms
 57         
 58             for(j=1;j<=6;j++){  //Speed up from 1/1000 to 1/8000+alpha
 59                 GP0 = 0;
 60                 _delay(25000);
 61                 GP0 = 1;
 62                 _delay(25000);
 63             }
 64 
 65         while(1){
 66             GP2 = 1;
 67                 _delay(25000);
 68             for(i=1; i<=7; i++){    //1/8000-1/60sec
 69                 GP4 = 0;            //Focus on
 70                     _delay(25000);     //wait 100ms
 71                 GP1 = 0;            //Shutter release
 72                     _delay(25000);     //wait 100ms
 73                 GP1 = 1;            //Shutter off
 74                     _delay(25000);     //wait 100ms
 75                 GP4 = 1;            //Focus off
 76                     _delay(500000);     //wait 500ms
 77                 GP0 = 0;            //Preconfig.
 78                     _delay(25000);     //wait 100ms
 79                 for(j=1; j<=2; j++){  //Speed Down
 80                     GP2 = 0;
 81                     _delay(25000);
 82                     GP2 = 1;
 83                     _delay(150000);
 84                 }
 85                 GP0 = 1;
 86                     _delay(25000);
 87             }
 88             for(i=1; i<=3; i++){    //1/30-1/8sec
 89                 GP4 = 0;            //Focus on
 90                     _delay(25000);     //wait 100ms
 91                 GP1 = 0;            //Shutter release
 92                     _delay(25000);     //wait 100ms
 93                 GP1 = 1;            //Shutter off
 94                     _delay(25000);     //wait 100ms
 95                 GP4 = 1;            //Focus off
 96                     _delay(750000);     //wait 1s
 97                 GP0 = 0;            //Preconfig.
 98                     _delay(25000);     //wait 100ms
 99                 for(j=1; j<=2; j++){  //Speed Down
100                     GP2 = 0;
101                     _delay(25000);
102                     GP2 = 1;
103                     _delay(25000);
104                 }
105                 GP0 = 1;            //Preconfig.
106                    _delay(150000);     //wait 100ms
107             }
108 
109                      _delay(25000);
110                 GP4 = 0;            //Focus on
111                     _delay(25000);     //wait 100ms
112                 GP1 = 0;            //Shutter release
113                     _delay(25000);     //wait 12sec 30000000=12000*250
114                 GP1 = 1;            //Shutter off
115                     _delay(25000);     //wait 100ms
116                 GP4 = 1;            //Focus off
117                     _delay(750000);     //wait 800ms
118 
119                 
120 
121             for(i=1; i<=3; i++){    //1/8-1/30sec
122                 GP2 = 1;
123                     _delay(25000);
124                 GP4 = 0;            //Focus on
125                     _delay(25000);     //wait 100ms
126                 GP1 = 0;            //Shutter release
127                     _delay(25000);     //wait 12sec 30000000=12000*250
128                 GP1 = 1;            //Shutter off
129                     _delay(25000);     //wait 100ms
130                 GP4 = 1;            //Focus off
131                     _delay(750000);     //wait 800ms
132                 GP2 = 0;
133                     _delay(25000);
134                 for(j=1; j<=2; j++){  //Speed Down
135                     GP0 = 0;
136                     _delay(25000);
137                     GP0 = 1;
138                     _delay(25000);
139                 }
140                 GP2 = 1;
141                     _delay(150000);
142             }
143 
144             for(i=1; i<=7; i++){    //1/60-1/8000sec
145                 GP2=1;
146                     _delay(25000);
147                 GP4 = 0;            //Focus on
148                     _delay(25000);     //wait 100ms
149                 GP1 = 0;            //Shutter release
150                     _delay(25000);     //wait 12sec
151                 GP1 = 1;            //Shutter off
152                     _delay(25000);     //wait 100ms
153                 GP4 = 1;            //Focus off
154                     _delay(500000);     //wait 800ms
155                 GP2 = 0;
156                     _delay(25000);
157                  for(j=1; j<=2; j++){  //Speed Down
158                     GP0 = 0;
159                     _delay(25000);
160                     GP0 = 1;
161                     _delay(25000);
162                 }
163                 GP2 = 1;
164                     _delay(150000);
165             }
166 
167                     _delay(25000);
168                 GP4 = 0;            //Focus on
169                     _delay(25000);     //wait 100ms
170                 GP1 = 0;            //Shutter release
171                     _delay(25000);     //wait 12sec
172                 GP1 = 1;            //Shutter off
173                     _delay(25000);     //wait 100ms
174                 GP4 = 1;            //Focus off
175                     _delay(500000);     //wait 500ms
176 
177             for(i=1; i<=3; i++){
178                  GP2 = 0;
179                     _delay(25000);
180                  for(j=1; j<=4; j++){  //Speed Down
181                     GP0 = 0;
182                     _delay(25000);
183                     GP0 = 1;
184                     _delay(25000);
185                 }
186                 GP2 = 1;
187                     _delay(25000);
188             }
189 
190                 k++ ;
191                 if (k >= 6)
192                 {
193                     goto Multi ;
194                 }
195         }
196 
197     Multi:
198     GP0 = 0;            //Preconfig.
199         _delay(25000);     //wait 100ms
200     for(j=1; j<=4; j++){  //Speed Down
201         GP2 = 0;
202         _delay(25000);
203         GP2 = 1;
204         _delay(25000);
205     }
206     GP0 = 1;
207         _delay(25000);
208     GP4 = 0;            //Focus on
209         _delay(25000);     //wait 100ms
210     GP1 = 0;            //Shutter release
211         _delay(20000000);     //wait 15sec
212     GP1 = 1;            //Shutter off
213         _delay(25000);     //wait 100ms
214     GP4 = 1;            //Focus off
215         _delay(25000);     //wait 100ms
216 }
217 //return();
218 
inserted by FC2 system