|
|
|
とある筋でお知り合いになったNさん(仮称)から、幾つか先に提示した回路に関していくつもの示唆を頂きました。私自身は設計法をきちんと勉強していた訳ではないので、「ああ、こういう訳だったのか!」という事ばかりでした。今回の変更点は、
- 直流成分をカットするコンデンサを入力に入れる事
- 入力インピーダンスを落とすために10kΩ位の抵抗を入力のところにアンプと並列に入れると回路が安定して良い
- オペアンプからトランジスタに入力するとき、低電圧なら良いが、本来なら抵抗がある方がトランジスタの保護になるので良い
と言ったところです。あと、4.のところで部品配置図は正しいけど回路図が間違ってますよ、という事や他に動作していることを示すLEDを入れては?トランジスタの代わりにFETを使うのもいいでしょう、とかもありました。
と言う訳で新たに作った回路と部品配置図をUpしました。実は回路図は良いのだけど、いざ組み立て、という時に部品配置図に間違いを発見し、焦りつつ、結局作ってしまいました。
作ってみたら、上手く動いたので、万々歳、が、基盤をバッテリトレイに収めて動作チェック中上手く行かず、リチウムイオン電池が過熱していることを発見、外した時はすでに遅く、炸裂音と共に電池の正極が弁になって吹っ飛びました。テスターで計ると電池ホルダの正極と負極は導通していました。回路を探ると、出力になる端子部分を裏面からリード線で取り出してバッテリトレイの端子にはんだ付けしたのしたときに、7番と8番が微妙に短絡してしまったようでした。盛り上がっていた半田を少し減らし、再度配線しました。その後バッテリトレイに取り付けて、電池ホルダの端子の抵抗を見て大丈夫だろう・・・という事としました。音信号を起点にLEDの点滅による動作チェックも行い、後はバッテリグリップの改造です。 |
|
↑回路図 ↓部品配置図表面と裏面図 |
|
|
|
左がNLC、右がROWAのトレイのバッテリ端子、ROWAは使えない |
全体を組みこんだモノ |
|
|
トグルスイッチを入れるためにトレイを大きく切り取りました |
スイッチ下、右が電源、左が信号で光るLED |
|
E:\Mshi_Lab\MPLABXProjects\D7100Sequencer_V1.X\Sequence.c |
1
2
3
4
5
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <xc.h>
10 #define _XTAL_FREQ 1000000;
11
12
13 #pragma config FOSC=INTOSCIO, WDTE=OFF, PWRTE=ON, BOREN=ON, MCLRE=OFF, CP=OFF, IESO=OFF
14
15 int i,j,k;
16
17 int main(void){
18
19 ANSEL=0x00;
20 CMCON0=0x07;
21 WPU=0x14;
22 nGPPU=0;
23 TRISIO0=0;
24 TRISIO1=0;
25 TRISIO2=0;
26 TRISIO3=1;
27 TRISIO4=0;
28 TRISIO5=0; 29
30 GP0 = 1;
31 GP1 = 1;
32 GP2 = 1;
33 GP4 = 1;
34 GP3 = 1;
35 GP5 = 1;
36
37 while(1){
38 if(GP3 == 0){
39 goto Start;
40 }
41 else
42 {
43 GP0 = 1;
44 GP1 = 1;
45 GP2 = 1;
46 GP4 = 1;
47 GP5 = 1;
48 GP3 = 1;
49 }
50 }
51 Start:
52
53 GP5 = 0;
54
55 _delay(25000);
56 GP4 = 0;
57 _delay(25000);
58 GP1 = 0;
59 _delay(14000000);
60 GP1 = 1;
61 _delay(25000);
62 GP4 = 1;
63 _delay(25000);
64
65 GP2 = 0;
66 _delay(25000);
67 for(j=1;j<=6;j++){
68 GP0 = 0;
69 _delay(25000);
70 GP0 = 1;
71 _delay(25000);
72 }
73 GP2 = 1;
74 _delay(25000);
75
76 while(1){
77 for(i=1; i<=5; i++){
78 Shutter();
79 _delay(250000);
80 GP0 = 0;
81 _delay(25000);
82 for(j=1; j<=4; j++){
83 GP2 = 0;
84 _delay(25000);
85 GP2 = 1;
86 _delay(25000);
87 }
88 GP0 = 1;
89 _delay(25000);
90 }
91
92 for(i=1; i<=2; i++){
93 Shutter();
94 _delay(400000);
95 }
96
97 for(i=1; i<=5; i++){
98 GP2 = 0;
99 _delay(25000);
100 for(j=1; j<=4; j++){
101 GP0 = 0;
102 _delay(25000);
103 GP0 = 1;
104 _delay(25000);
105 }
106 GP2 = 1;
107 _delay(25000);
108 Shutter();
109 _delay(250000);
110 }
111
112 GP2 = 0;
113 _delay(15000);
114 for(j=1; j<=2; j++){
115 GP0 = 0;
116 _delay(15000);
117 GP0 = 1;
118 _delay(15000);
119 }
120 GP2 = 1;
121 _delay(15000);
122
123 k++ ;
124 if (k >= 19)
125 {
126 goto Multi ;
127 }
128 }
129 Multi:
130 GP0 = 0;
131 _delay(25000);
132 for(j=1; j<=4; j++){
133 GP2 = 0;
134 _delay(25000);
135 GP2 = 1;
136 _delay(25000);
137 }
138 GP0 = 1;
139 _delay(25000);
140 GP4 = 0;
141 _delay(25000);
142 GP1 = 0;
143 _delay(16000000);
144 GP1 = 1;
145 _delay(25000);
146 GP4 = 1;
147 _delay(25000);
148 GP5 = 1;
149 }
150
151 int Shutter(void){
152 GP4 = 0;
153 _delay(25000);
154 GP1 = 0;
155 _delay(25000);
156 GP1 = 1;
157 _delay(25000);
158 GP4 = 1;
159 _delay(25000);
160 return 0;
161 }