2022.2.24 Open |
||||
ファームウェアに組み込むレリーズとステッピングモータの制御 |
||||
|
||||
|
||||
プログラムリスト (Down Load) |
||||
1 /* 2 * File: newmain.c 3 * Author: M?@Lab. of Eclipse code 4 * 5 * Created on 2020/11/07 6 * Modified on 2020/12/15 7 */ 8 9 10 #include <xc.h> 11 #include <stdlib.h> 12 #include <stdio.h> 13 14 #pragma config WDTE = OFF 15 #pragma config PWRTE = ON 16 #pragma config MCLRE = ON 17 #pragma config BOREN = ON 18 #pragma config LVP = OFF 19 #pragma config CPD = OFF 20 #pragma config WRT = OFF 21 #pragma config CCPMX = RB3 22 #pragma config CP = OFF 23 #pragma config FOSC = HS 24 25 #define _XTAL_FREQ 12000000 //12MHz 26 27 void ContCapture(void); 28 void Polarization(void); 29 void Rotation(void); 30 void HDRCapture(void); 31 32 void main(void) { 33 34 TRISA = 0b00000011; 35 TRISB = 0b00000111; 36 ANSEL = 0x00; 37 38 int i, k; 39 40 RB3 = 0; 41 RB4 = 0; 42 RB5 = 0; 43 RB6 = 0; 44 RB7 = 0; 45 RA0 = 1; 46 RA1 = 1; 47 RA2 = 0; 48 49 k = 0; 50 while(1){ 51 52 // 53 while(k == 0) 54 { 55 //音信号が入る迄、90秒に1回E-M10mkIIにフォーカス信号を送る 56 for(i=1; i<=9000; i++) 57 { 58 __delay_ms(10); 59 //音信号が入ったら動作開始LEDを点灯し 60 //Z6を連写し偏光撮影を開始する 61 //終了後ループを抜ける 62 if(RB2 == 0) 63 { 64 RB3 = 1; 65 k = 1; 66 67 //休眠打破のため、E-M10mkIIへフォーカス信号 68 RB6 = 1; 69 __delay_ms(100); 70 RB6 = 0; 71 //Z6IIで連続撮影・ダイヤモンドリング対応 72 ContCapture(); 73 //E-M10mkIIで偏光撮影 74 Polarization(); 75 RB3 = 0; 76 break; 77 } 78 //偏光撮影 79 elseif(RB1 == 0) 80 { 81 Polarization(); 82 } 83 //緊急時スイッチ1での動作 84 //偏光撮影をしてZ6IIの18秒連写 85 elseif(RA1 == 0) 86 { 87 Polarization(); 88 ContCapture(); 89 } 90 //緊急時スイッチ2での動作:Z6IIで連写する 91 elseif(RA0 == 0) 92 { 93 ContCapture(); 94 } 95 } 96 //撮影終了のLED点灯 97 RB6 = 1; 98 __delay_ms(50); 99 RB6 = 0; 100 } 101 102 //2度目の音信号を得たらZ6II連写を行う 103 while(k == 1) 104 { 105 __delay_ms(20); 106 if(RB2 == 0 && k == 1){ 107 k = 0; 108 ContCapture(); 109 110 break; 111 } 112 } 113 k = 0; 114 } 115 return ; 116 } 117 118 //Z6IIを18秒レリーズする 119 void ContCapture(void) { 120 121 RB4 = 1; 122 __delay_ms(50); 123 RB5 = 1; 124 __delay_ms(9000); 125 __delay_ms(9000); 126 RB5 = 0; 127 __delay_ms(50); 128 RB4 = 0; 129 130 return; 131 } 132 133 //偏光撮影 134 void Polarization(void) { 135 //シャッターを切る 136 void HDRCapture(void); 137 //偏光板を回転させる 138 void Rotation(void); 139 140 141 for(int j=1; j<=5; j++) 142 { 143 HDRCapture(); 144 Rotation(); 145 //ブレ止め 146 __delay_ms(1000); 147 } 148 HDRCapture(); 149 150 //表示LEDを切る 151 __delay_ms(100); 152 RB6 = 0; 153 } 154 155 //E-M10mkIIをレリーズする 156 void HDRCapture(void) 157 { 158 RB7 = 1; 159 __delay_ms(2500); 160 RB7 = 0; 161 __delay_ms(100); 162 return; 163 } 164 165 //フィルタターレットを1/5開店する 166 167 void Rotation(void) 168 { 169 int i, j, k; 170 171 //30msから10msに加速 172 for(i = 10; i>= 1; i--) 173 { 174 for(k = 1; k <= 2; k++) 175 { 176 RA2 = 1; 177 for(j=0; j<i; j++){ 178 __delay_us(1000); 179 } 180 __delay_ms(5); 181 RA2 = 0; 182 for(j=0; j<i; j++){ 183 __delay_us(1000); 184 } 185 __delay_ms(5); 186 } 187 } 188 189 //10msから30msに減速 190 for(i = 1; i<= 10; i++) 191 { 192 for(k = 1; k <= 2; k++) 193 { 194 RA2 = 1; 195 for(j = 0; j <= i; j++){ 196 __delay_us(1000); 197 } 198 __delay_ms(5); 199 RA2 = 0; 200 for(j = 0; j <= i; j++){ 201 __delay_us(1000); 202 } 203 __delay_ms(5); 204 } 205 } 206 return; 207 } |