Page: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
maboさん、こんにちは。
今日自分、休みで朝からPIC弄っています。
No196の記事にあるmaboさんの図面が気になって、自分も、フォトカプラー噛ませました。
しかし、ポートBの発光LEDが、端子の番号が大きくなるにつれて、電圧が下がってしまい、
RB3の発光LEDはつかなくなります。
ちなみに、フォトカプラを外していると、点灯します。
No196の図面を見ると
PICとフォトカプラーの間にトランジスタアレイを噛ませています。
理由を教えて下さい。
宜しくお願いします。
PS
秋月のPIC3と新品の16F627Aが来ました。
電圧4.75Vです。
問題なしです。
Re: フォトカプラーを噛ませると接続関係をまず確認してください
フォトカプラの1つ目の接続は
1次側
RB0→抵抗→LED→フォトカプラ一LED→GND
2次側
RB2→抵抗→LED→フォトトランジスタ→GND
フォトカプラ2つ目の接続が
1次側
RB1→抵抗→LED→フォトLED→GND
2次側
PB3→抵抗→LED→フォトトランジスタ→GND
となっています。
まずマイコンピンはこの関係のプログラムになっていますか?
光らすこと自体は可能な配線ですけど目的の配線ではないと思います。
(1次、2次ともにHにすると2次側も発光)
特に2次側は本来は「5V」→抵抗→LED→フォトトランジスタ→GNDの筈ですがそのあたりの事を確認してください。
追記
冷静に考えてみると、きっと4本をアイソレートしようとしたのでしょうね。
フォトカプラはリレーのように1次側と2次側があります。
1次側(LED)を光らすと、それが2次側のフォトトランジスタのベース電流になり2次側の電流を通します。
このフォトカプラで2回路入りですから2本しかアイソレート出来ませんよ。猛牛ロック 2015/12/05(Sat) 13:06 No.315Re: フォトカプラーを噛ませるとあ〜、もう、まいりました。
おかしくなったので、
MPLABアインインストールして、再度、インストールしました。
で、ビルトしようとしたら、
写真のエラーがでました。
どうしようもありません。
対処方法を教えて下さい。
お願いします<(_ _)>TR 2015/12/05(Sat) 14:03 No.316Re: フォトカプラーを噛ませると「元に戻す」方法は私には??です。
取りあえず新規にプロジェクトをを作って必要なのはコピーすれば動くんじゃないですかね猛牛ロック 2015/12/05(Sat) 14:29 No.317Re: フォトカプラーを噛ませるとTRさん、猛牛ロックさん、こんにちは。
TRさん、MPLABのエラーですが、main.cのファイル残ってると思いますので、新しい名前で、プロジェクト作製し、main.cをそのプロジェクトにいれた方がてっとり早いと思います。
それから、間に、トランジスターいれた件ですが、一つのポートで、LEDとカプラーのLED二つをドライブすることになるので、PICのドライブ能力超えるかなと思い、いれました。
能力は、25ma程度でしたでしょうか?。詳しい数値確認してないのですが、余裕がある分には、こまらないと思いいれました。mabo 2015/12/05(Sat) 15:49 No.318Re: フォトカプラーを噛ませるとmaboさん、レス有難うございます。
トランジスタアレイの件分かりました。
mplabですが、
newmain.cをクリックして、ビルトしたら、出来ましたが、
今度は、ダウンロードのボタンが消えてしまい、押せません。
どうしたら良いのでしょうか?TR 2015/12/05(Sat) 16:25 No.319Re: フォトカプラーを噛ませると皆様方、ご心配をおかけして済みません。
PIC3をMPLABで、選択したら、
ダウンロードできました。
とにかく不慣れなソフト
日本語じゃ無い、
悪戦苦闘です。TR 2015/12/05(Sat) 17:01 No.320Re: フォトカプラーを噛ませるとmaboさん、猛牛ロックさん。
復活しました。
不慣れな作業で、悪戦苦闘でした。
写真は、現在の配線です。
SEC基板へ繋ぐ部分は、現在は、仮の抵抗を付けております。
なんとかなりましたよ〜。
みなさんに感謝感謝です。
MPLABの、立ち上げに関しては、何回もやりました(激(;´・ω・)(笑TR 2015/12/05(Sat) 19:19 No.321Re: フォトカプラーを噛ませるとTRさん、こんばんは。頑張っておられますね。
今出先から、戻ってきました。
>今度は、ダウンロードのボタンが消えてしまい、押せません。
多分、PICKITが選択されてないのかな、と返信しようと思いましたが、自己解決されてしまいましたね。
プログラムですが、配線も考えて、組まれるといいと思います。
入力→PORTA
出力→PORTB
と分けるのも分かり易いですが、
PICのVdd側→出力
PICのVss側→入力
なんていいう分け方もあると思います。この分け方の場合プログラムがちょっと煩雑になりますので、次のように冒頭で宣言しておくのも一つの手です。
Vdd側を
#define Out_put0 RA1
#define Out_put1 RA0
#define Out_put2 RA7
#define Out_put3 RA6
#define Out_put4 RB7
#define Out_put5 RB6
#define Out_put6 RB5
#define Out_put7 RB4
Vss側を
#define In_put0 RA2
#define In_put1 RA3
#define In_put2 RA4
#define In_put3 RA5
#define In_put4 RB0
#define In_put5 RB1
#define In_put6 RB2
#define In_put7 RB3
などと、PICの上からの端子の順に宣言しておくと、配線や、プログラムのおりに間違いが少なくなります。
以下、プログラムでは、
Out_put0=1;
のように書くことが可能になります。こう書いておくと、コンパイラーが解釈して、
RA1=1;
に直してくれるので便利です。同じように、
#define On 1
#define Off 0
と宣言しておくと1,0等を使うよりも、視認性がよくなります。ロジックを変更して、1と0を反対にしたいときなと、プログラムの各区部分を何カ所も変更するのではなく、#defineの、1、0、を入れ替えてあげるでけで、変更がすんでしまいます。
もっとも、猛牛ロックさんのプログラムのように、PORTを一括で処理するのであれば、必要ではないと思います。mabo 2015/12/05(Sat) 21:43 No.322Re: フォトカプラーを噛ませるとmaboさん、
この考えは、代数ですね。
覚えておきます。
RA0のプルアップ抵抗は不要に思うのですが、
如何でしょうか?
というのも、ロータリースイッチOFFであって、
OEMコードは、204で、動作は、JOG mode continuouです。
この位置は、常に、ローにしておくべきかと思うのです。TR 2015/12/05(Sat) 22:29 No.323Re: フォトカプラーを噛ませるとTRさん、こんばんは。
>RA0のプルアップ抵抗は不要に思うのですが、
入れておいた方がいいと思います。RA0は、入力にお使いだと思いますので、必要だと思います。詳しいことは、わからないのですが、入力端子は、プルアップかプルダウンをしておかないと、動作が不安定になると思います。
もし、TRさんのお考えのようにするなら、出力の方を反転するか、MACHの設定で対応できると思います。ActiveLow←→ActiveHighのどちらかにすることで、大丈夫のような気がします。
>この考えは、代数ですね。
はい、そうお考えになると分かり易いと思います。関数との大きな違いは、全部が置き換わってしまうことです。複雑なものやもうちょっと長いものは、関数と違って、メモリーをくいます。
関数だと、一つの関数を何回呼び出しても、それほど大きなメモリーはつかいませんが、この、マクロは、全部おきかわりますので、メモリーくうことになります。mabo 2015/12/05(Sat) 23:04 No.325Re: フォトカプラーを噛ませると> 関数と違って、メモリーをくいます。
え??メモリーは全くくわないと思っていました。
プリプロセッサ処理なので、コンパイル以前に変換されるので多分、そのままでの表記と、全く同じだと思いますよ。猛牛ロック 2015/12/05(Sat) 23:45 No.326Re: フォトカプラーを噛ませると猛牛ロックさん、こんばんは。
またまた、間違ったことかいてしまったかなあ。
昔のCの学習では、マクロ記述されたところが、そのまま置き換わるので、関数の呼び出してと違って、メモリーを食う、そう理解してました。これ、覚え違いでしょうか・・・・。
ちょうどよかったです。お聞きしたいことがあったので。以前、猛牛ロックさんとoldmanさんが、トーテムポールのお話してましたが、今日、TRさんに刺激されて、627Aのデーターシートみてました。
恥ずかしながら、出力のタイプのCMOSとオープンドレインの違いがわかりませんでした。
調べて見たところ、オープンドレインの出力は、吸い込みしかできない、の記述も見かけました。こんな風に理解していいんでしょうか。
それと、両方できるCMOSの出力は
CMOS出力=トーテムポール
そんなふうに理解していいんでしょうか。
調べて見ると、オープンドレインだと、mabo 2015/12/06(Sun) 00:11 No.327Re: フォトカプラーを噛ませるとTRさん。私にとってのOFFは電気を落とすことです。
つまり、出来ればこのOFFで手パ自体の電気を切る、もしくはPICへの電源供給をとめる、
という考えに則って、配線を考えます。つまりマイコン入力ではなく全体の配線に使います。
(それによってマイコンを再起動させる)
この辺りが考え所だと思います。
もう一度、全体像を考え直して、逆に言えば1つ1つ確定していく時期の様な気がします。
ボタン(機能)の数や使用マイコンの選定、アクディブハイもしくはロー、ケース、スイッチ、(led)の配置など。
マイコンなので出力はどちらでもいけます。また、MACHの方もどちらでも可能です。
でも、ベースになるのはマイコン(手パからの信号)を切った時に変な動きにならないか?
と言う事だと思います。コードを抜いた(抜けた、切れた)等の時にトラブルにならないようにすべきです。
となると、やはり、SEC基板への信号はローで送るのが最善だと考えます。
(それがMACH上でアクティブハイになるかローになるかは判りません)
MABOさん
オープンドレインは吸い込みだけです。
CMOSはコンプリメタリのMOSFETを使ったもので両方いけます。
トーテムポールがCMOSとイコールなのかその一部なのかは判断付きませんけど、ほぼ同じと考えていいと思います。猛牛ロック 2015/12/06(Sun) 00:25 No.328Re: フォトカプラーを噛ませると猛牛ロックさんお答えありがとうございます。
ちょっと理解できました。データーシートを見ていたら、627AのRA4の出力はオープンドレインだけと出ていたので、あれと思いました。
ブログの方で実験したもの、RA4では、できないんですね。
いままで、全然きづかなかったところです。
マクロですが、そのプリプロセッサがそのまま置き換える、というところの理解がちがってたんでしょうか。
同じ働きをするマクロと関数で、10回マクロを記述するのと、関数を10回呼び出す場合では、結果はおなじでもプログラムの量は、マクロの方が増えると理解してました。
追伸です。やはり、下記のようなこともあるようです。
マクロは展開されるたびにコンパイルされる
非常に複雑な長い表現に展開されるようなマクロを定義したとしましょう。 そのマクロを何度も使うと、そのたびに長い表現に展開され、それらが全てコンパイルされるので、プログラムの大きさが膨張してしまいます。 記憶容量がたっぷりあるコンピュータでは多少プログラムが大きくなっても問題になりませんが、ごく小型のコンピュータでは問題になり得ます。 これに対して、関数定義は一度だけしかコンパイルされませんし、関数をたびたび呼び出してもプログラムはそう長くなりません。mabo 2015/12/06(Sun) 00:44 No.329Re: フォトカプラーを噛ませると猛牛ロックさん、おはようございます。
昨晩は、今回の件でくたびれてしまい、早めに寝ました。
年齢には勝てません(笑。
>もう一度、全体像を考え直して、逆に言えば1つ1つ確定していく時期の様な気がします。
有難うございます。
>ベースになるのはマイコン(手パからの信号)を切った時に変な動きにならないか?
ということは、
SEC基板は、ポートBが、ローとなった時、
SEC基板が、動作しないようにするのでしょうか?
であれば、
現在の設定で、良しと思いますが、私の間違いでしたら、済みません。
maboさんへ
自分も、RA5を調べました。
テキストでは、入力専用となっています。
それと、RA5の機能、627Aのデータシート 頁98 ↓
1、RA
2、MCLA ← MCLRE:RA5/ MCLR/ VPPピン機能選択ビット
1= RA5/ MCLR/ VPPピン機能はMCLRです
0= RA5/ MCLR/ VPP端子機能は、デジタル入力、MCLRは内部でVDDに接続されています
そして、
__CONFIG(MCLRDIS):外部リセット信号は使用しない、RA5がデジタル入出力で使えます。
リセット信号を使用する場合は、MCLRENとします。 ↓
https://sites.google.com/site/rakucho119/home/mplab-ide/config-wado-no-settei/16f648a
◆ Master clear reset pin function
MCLREN : 有効
MCLRDIS : 無効
大変勉強になりました。
まだよく分かりませんが、使用上要注意ですね。
それから、フォトカプラーは使わないかもしれません。TR 2015/12/06(Sun) 07:26 No.330Re: フォトカプラーを噛ませるとTRさん、おはようございます。書き込みありがとうございます。
そうですね.私も、いままで、なんで、○ドインのRA5だけピンヘッダーの所からぬけてるのか思ってましたが、
よく考えると、リセットピンへ割り当てられてるので、外されてると気がつきました。mabo 2015/12/06(Sun) 08:31 No.331Re: フォトカプラーを噛ませるとMABOさん
つまり、纏められるものは関数や変数に纏めた方が良い、と言う事ですね。
> マクロは展開されるたびにコンパイルされる
私の言ったのは、マクロを使わなくても元のままコンパイルされるので全くの同一、と言う事です。
つまり、元とマクロで記述されたものとの比較です。
TRさん
> ということは、
> SEC基板は、ポートBが、ローとなった時、
> SEC基板が、動作しないようにするのでしょうか?
いいえ、逆ですね。何もしないとき(切れたとき)に何もないようにするのです。
つまり、SEC基板がハイなので基準(ベース)がハイです。ハイで何もしない。ローが(オン)信号です。
ベースをローにした場合は信号がHです。しかしそれだとアクシデント(切断)があった場合、
全てのラインがSEC基板のプルアップによりHが(オン)信号としてMACHに行きます。猛牛ロック 2015/12/06(Sun) 09:33 No.332Re: フォトカプラーを噛ませると猛牛ロックさんへ
今のプログラムは以下のとおりです。
これでは駄目なのですか?
//RA0*****************************
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
//PORTB=0x00;
RB0 = 1;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else {
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RB0==1){
RB0 = 0;// LED1消灯
sw0=0;
}
それから、フォトカプラーをPICとSEC基板の間に設けるのは、意味がない感じですが??TR 2015/12/06(Sun) 12:28 No.334Re: フォトカプラーを噛ませるとTRさん、猛牛ロックさん、こんばんは。今日もありがとうございます。
猛牛ロックさん、マクロは、視点の置き方がちがってただけですね。
この辺も、後で実際に比較してみようかなと思います。
TRさん、頑張られてますね。私には、ちょっと、分からない部分も沢山あるのですが、
プログラムだけでなく、回路等も含めて考える必要がある、ということだと思います。
プログラムの方は、回路に合わせて、柔軟に、変更できると思います。
私の回路のにフォットカプラー入れてるのは、第一にアクティブローで、SS(MACH)をコントロールしたかったのでいれました。
かりに、手パの電源が切れても、カプラーが働くなり、
結果、入力信号がグランドに落ちなくり、
SSの入力が全部Highになり、
軸やX1等が未選択状態になるので、安全かな、と考えました。
トランジスター等を使っても、カプラーと同じことできると思いますが、
私は、好みで、フォットカプラーにしてあります。mabo 2015/12/06(Sun) 20:44 No.335Re: フォトカプラーを噛ませるとmaboさんへ、
フォトカプラーは、スイッチと同じ役目ですね?
であれば、
RAがONの時、RBをONにし、
SEC基板からの電流をフォトカプラーを通じてGNDに落とす。
さすれば、SEC基板は、ローになる。
マッハの設定をアクティブにハイにして、フライスを稼働せる。(この行は、自信が無いです)TR 2015/12/06(Sun) 22:00 No.336Re: フォトカプラーを噛ませるとTRいろいろ考えられてますね。
MACHの設定をアクテイブハイにすると、○ECさんの入力は、プルアップされてますので、スイッチで言うとONの状態で立ち上がってしまって、フルード等のコントロールしてると、MACHが立ち上がっただけで、フルードが出てしまうということになると思います。
猛牛ロックさんもおっしゃられるように、私も、PICへの電源が止まるとカプラーも停止して,入力がグランドに落ちなくなってOFFになるように、考えました。
MACHの設定をアクティブハイの設定で、4つ端子があるときに、一つの端子をONにするのには、他の3つの端子を全部グランドに落とすということが必要になってくるので、ちょと、てもかかるかなと思います。mabo 2015/12/06(Sun) 23:58 No.337Re: フォトカプラーを噛ませるとmaboさん、レス有難う。
>MACHの設定をアクテイブハイにすると、
○ECさんの入力は、プルアップされてますので、
スイッチで言うとONの状態で立ち上がってしまって、
フルード等のコントロールしてると、MACHが立ち上がっただけで、
フルードが出てしまうということになると思います。
思い出しました。
有難うございます。
その対処方法は、
PICの電源を入れた刹那、
SEC基板の入力端子がローとなるように、フォトカプラー(スイッチ代わり)がONとなるようにしたわけですね。
そういえば、と思い、昨晩、自分の近接センサーの動作を確認しました。
近接センサーに電圧を掛けただけで、電流が流れました。
以上整理すると、
RA側のスイッチを押さなくても、RB側は、ONとなり、フォトカプラーもONとなり、SEC[基板からの電流を流さすようにしなければいけない。
ということは、今のままでは駄目??TR 2015/12/07(Mon) 07:31 No.338Re: フォトカプラーを噛ませるとTRさん,猛牛ロックさんおはようございます。
猛牛ロックさん、333に掲載してくださったプログラムと動画ありがとうございます。
気がつきませんでした。さすがです。解釈するのに、時間かかりそうです。
TRさん、回路には全く自信ないということで、お聞きください。
入力については、以前掲載してくださったものの方がいと思います。それ、掲載します。
出力については、LEDを直列にいれて、フォットカプラー入れてますが、これは、私は、いいかどうか不明です。
好みとしては、信号線に関係あるところに、抵抗以外のもの、あんまり入れたくないかなと思います(単なる好み?)。
LEDとフォットカプラドライブする場合、私だったら、念のためトランジスターいれます。
ということで、全く自信がありませんが。mabo 2015/12/07(Mon) 10:15 No.339Re: フォトカプラーを噛ませると> PICの電源を入れた刹那、
> SEC基板の入力端子がローとなるように、フォトカプラー(スイッチ代わり)がONとなるようにしたわけですね。
違います。「電源を入れた刹那」は何もしないで、(SEC基板の)プルアップのままハイです。
そうすれば、不意に切れた、若しくは切った時に何もしません。
逆にすれば「付ける順番」、「切る順番」等々の問題も起こります。
完全にSEC基板の一部として動作させれば、逆でも、きっとPICの方が起動が速いと思われるので通常、
不具合は起こらないように思います。
一部追記
しかし、プログラムの最初でウェイトを取っていれば遅れる可能性
も多くなります。基本的にはこのような接続は推奨しません。
MABOさん。この図面で2つ疑問があります。
1つはロータリースイッチの「OFF」は何をしようとしているのかが不明です。何のために付けるのですか?
2つ目は出力でダイオードと抵抗が付いています。しかし、記憶によればSEC基板の方のロジックICの前に抵抗が
付いていたと思うので不要のように思います。ただ、それ以上の疑問はダイオードをそこに付けるとローには
ならないですよね?逆向きなのですか?
と思ったら、これ自体、TRさんの図面でしたね。TRさん、どうなのでしょうか?
また、話自体がNo.321の図面ですね。
No.321の図面でしたら、MABOさんの意見と同様、入力は駄目です。
出力は凡そ良いです。LEDを2つドライブさせるので抵抗は幾らか低めが良いです。10〜15mA程度を流すように
すればOKです。2次側の抵抗はSEC基板の抵抗が確か100kΩだったので全く不要です。
後はその抵抗の先の点の処に間違わないように「SIG」と入れておいてください。猛牛ロック 2015/12/07(Mon) 12:38 No.340Re: フォトカプラーを噛ませるとTRさん、猛牛ロックさん、こんにちは。
猛牛ロックさん、いつもながらありがとうございます。
OFFの件ですが、MACHは、デフォルでJog Modeが選択されてます。手パのOFFは、
私の場合や諸兄のHP等では、このJog Modeが選択されるようにしてあります。
X軸選の選択位置で、はじめて、同時にMpg Modeを選択するようにしてます。
OFFの状態では、不用意にMPG動かしても影響ないようにするためと思います。
TRさんの回路で、入力(RA側)は339、出力(RB側)は、321がいいということですね。
別件(無線手パ)で、oldmanさんのアドバイスいただきました。
A相B相の立ち下がりの検出方法が分からなくて、受信側で信号生成してました。
NANDゲート使うと立ち下がりの検出もできるというので、
送信側の信号に合わせて、受信側で信号生成してみようと思います。mabo 2015/12/07(Mon) 13:34 No.341Re: フォトカプラーを噛ませるとMABOさんへ
無線手パ(ブログ)の方は難しそうなので半スルーしていました。
NANDゲートが出てきて、「なんで今更」と思ったのですが、「立ち下がり」を「立ち上がり」に変えて検出しよう、という事なのですか?
ちょっと、なんでNOT回路ではなくNANDなのかよく判りませんけど、帰ってから読み返してみたいと思います。
それ以前に、なぜ「立ち下がり」が検出できないのですか?割り込みかけて、読み取るだけのような気がするのですが、問題点自体が???
の状態で把握出来ていません。猛牛ロック 2015/12/07(Mon) 15:29 No.342Re: フォトカプラーを噛ませると猛牛ロックさん、こんばんは。書き込みありがとうございます。
NANDゲートですが、これ一つでNOTもOR等も出来るというので、NOTゲートに
してつかいます。
作り始めた時、状態割り込みの使い方良く分からなくて、混在できないという思い込みがありました。
今回、勉強もかねて、NANDゲートでNOT回路を使って立ち上がりの変化でやってみようと思いました。mabo 2015/12/07(Mon) 16:25 No.343Re: フォトカプラーを噛ませるとMABOさん。
送信ブログラムを見てみました。
感想は色々あるのですけど、話題になった割り込みの部分だけ。
多分、手パの信号がINTピンを使っているから、立ち上がりか立下りかどちらか、だと考えていると思います。
データシートをみると(違うチップのINTピンの所の説明です)
> INTEDG ビットがセットされている場合、立ち上がりエッジで割り込みが発生します。
> INTEDG ビットがクリアされている場合、立ち下がりエッジで割り込みが発生します。
とあります。とするとINTEDGをセットして立ち上がりエッジで割り込み→割り込み処理中でINTEDGをクリア
として、立ち下がりでの割り込みを待てばいいのではないかと思うのですが?どうでしょうか?
(当然次の立下りの割り込み処理中でINTEDGをセット)猛牛ロック 2015/12/07(Mon) 21:53 No.344Re: フォトカプラーを噛ませるとmaboさんへ、色々と、有難うございます。
入出力端子は、難しいと思っています。
自分的には、トーテムポール構造とか分かりやすい 下が 好きです。
http://www.picfun.com/pic22.html
現在のプログラムは、マッハの設定をアクティブローで、フライス盤が動くようになっています。
実験
SEC端子に繋ぐフォトカプラの端子に330Ωの抵抗を付け、抵抗の両端の電圧を計りました。
結果
SW :ONとなると、電圧が3.9V。電流が流れている。
これにより、SEC基板の端子は、電圧が下がるはずですので、
マッハをアクティブローに設定した場合、フライス盤が稼働するはず。
RB端子の稼働状況を確認したい為、LEDをRBとフォトカプラーの間に入れました。
PICのRB側の最大電流は25mAくらいなので、多分、めいっぱいと思われます。TR 2015/12/07(Mon) 22:29 No.345Re: フォトカプラーを噛ませると猛牛ロックさん、こんばんは。書き込みありがとうございます。
アドバイスありがとうございます。今日、プログラム変更していて、両方できそうだと、はたと気がつきました。
猛牛ロックさんがおっしゃるように、RB0の外部割り込みを使うという頭があって、外部割り込みは、一度設定したら、立ち上がりか、立ち下がりのどちらかしかできないと思い込んでしまったようです。
>とあります。とするとINTEDGをセットして立ち上がりエッジで割り込み→割り込み処理中でINTEDGをクリア
>として、立ち下がりでの割り込みを待てばいいのではないかと思うのですが?どうでしょう
おっしゃる通りだと思いました。思い込みでした。
それと、状態割り込みで検出すれば、両方できると資料にあることに、今日、気づきました。設定も、立ち上がりと、立ち下がりの指定が、それぞれ別レジスタでできるようなので、こちらの方が、煩雑にならないようなので、こちらを選びました。
頭、かたくなってます。
立ち上がりと立ち下がりの両方で判定すれば、NANDゲートのNOT回路経由しなくてもいいようですが、まだ使ったことないので、経験のために?使ってみようと思います。
ただ、割り込みに送信が追従できるか、やってみないと分からないかなと、ちょっと、気がかりです。
送信もバッファーいれようと思っているのですが、理解が進んでいません。mabo 2015/12/07(Mon) 22:32 No.346Re: フォトカプラーを噛ませると> 送信が追従できるか
そうですね。結局、送受信にどれ位時間が掛かるかが一番の問題ですね。
無線だとその辺りの時間が全く判りません。
※ルーターなんて再起動させるとかなり時間が掛かりますよね?
以下はその辺りを全く考えないでの感想です。
処理的には全てリアルタイムで送っているのですよね?
となると、私なら、全ての情報を送ります。以下、「私なら」ですから。
また、OLDMANさんと同じでPUL-DIRではなく、A相、B相そのままですね。
まず、図の様に2つのロータリースイッチを結線して、4ピンで受けます。
(そのまま1つずつ受けてもいいですけど、2ビットx2で送信します)
ここまで、6ピン=6ビットです。後はスイッチ3つ(今回の場合、ボタンの意味からすると
3つの同時押しはありえませんよね?)まで可能です。
チャタリング対策(AB相以外)はソフトでするので、タイマーで飛ばすかもしれません。
あと、割り込みはINTCONを使い、どこの割り込みでも処理は同じです。必要なポートを読み、
並び替えputch。分岐はしません。
(受信側はその場でデコードしてピンに流すだけだと思います。つまり全く分岐はさせません。
読んた通りに出力です)猛牛ロック 2015/12/07(Mon) 23:00 No.347Re: フォトカプラーを噛ませるとTRさん
> 330Ωの抵抗を付け、抵抗の両端の電圧を計りました。
これはどちらの抵抗でしょうか?「仮」と書いてある抵抗は付けては駄目ですよ。
一次側の抵抗は100Ω辺りが適当の様な気がします。LEDを取るのなら330Ωで良いです。
> SW :ONとなると、電圧が3.9V。
この結果は「仮」の抵抗ですよね?その結果は全く駄目な結果です。
つまりその3.9Vはそのままの出力ですのでハイのままです。
フォトカプラーに残る抵抗分の電圧+(そこの「仮」抵抗分の電圧)がロジックICの受ける電圧です。
「駄目」とは、その抵抗のこと以上に「フォトカプラーに残る抵抗分の電圧」が高い、と言う事です。
つまり、一次側に流す電流が少なすぎると思われます。ちゃんと一次側の抵抗部「のみ」の電圧を測ってください。
あと、「SEC基板10KΩでプルアップ」とありますけど、記憶によると100kΩだったような気がするのですが?猛牛ロック 2015/12/07(Mon) 23:30 No.348Re: フォトカプラーを噛ませると猛牛ロックさんへ
実際は、写真のようにするつもりです。
この場合、SEC基板の入力端子へ信号を送れますか(黒→)?
宜しくお願いしますTR 2015/12/07(Mon) 23:56 No.349Re: フォトカプラーを噛ませるとTRさん
「仮」Rの下の緑の点が「SIG」です。その「仮」Rは取ります。
後は以前のままです。(左側はGND、5Vは繋がない)
MABOさん忘れていました。
> OFFの状態では、不用意にMPG動かしても影響ないようにするためと思います。
これは、無通電と言う事ではなく、意図的にマイコン(ソフト)上で機能を停止させる、と言う事ですね。
機能的には納得しました。だけど、実際に使っている時にそこに持っていくかは??な感じですね。
LEDとかが付いていてそれも消すなら、終わった後にそこに持っていくかもしれません。猛牛ロック 2015/12/08(Tue) 00:19 No.350
実は言いにくいのですが、先ほど、遅ればせながら、PICで初のLチカをしてみました。
チップは16F1705です。
ポートA(6本)が全部内部プルアップの入力、ポートC(6本)が全て出力(HでLED点灯)です。
初回はRC2のみが全く光らず、残り5本は正常動作。
データシートをよく読むとZEROクロスなるものがRA2(対応する入力ピン)に割り当てられていたので
それを無効にした結果、求めていた動作になりました。
チャタリングが起こった気配は全くありませんでしたけど、プログラム自体がチャタリングを感知するような
プログラムではないので当然ですね。
内部「弱」プルアップも当然ながら全く問題ありませんでした。
PICの一番(最初?)の難関は「設定」ですね。これには参りました。
AVRの場合はデフォルトで色々な機能はoffで直ぐにプログラムを書き始められます。
使いたいものだけ、onにして使えばいいだけです。
でも、プログラム自体は書きやすいですね。といっても今回は数行ですが。
取りあえず、動いてホッとしました(^^)/
void WaitTime(int cnt)
{
while(cnt > 0)
cnt--;
}
void main(void) {
OSCCON = 0b11110000; //SPLLEN=1 IRCF=1110(8MHz/PLL32MHzHS) SCS=00 (config)
OPTION_REG=0b01111111; //内部プルアップを有効に
ANSELA = 0b00000000; // PORTA all digital
ANSELC = 0b00000000 ; // PORTC all digital
TRISA = 0b111111 ; // PORTA all input
TRISC = 0b000000 ; // PORTC all output
PORTC = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする)
WPUA = 0b111111 ; //全てプルアップ
while(1){
LATC=~PORTA;
WaitTime(40000);
}
}
Re: チカチカ皆様おはようございます。
この記事に直接関係ないことですが、ご容赦願います。
工具です。
今まで、はんだ付けする際、導線の端をラジオペンチで、
半円になるようにしていました。
何か良い工具をご存知ではないでしょうか?
以下の品などはどうでしょうか?
http://page3.auctions.yahoo.co.jp/jp/auction/c535521571TR 2015/12/05(Sat) 06:50 No.311Re: チカチカ猛牛ロックさん、TRさん、おはようございます。
猛牛ロックさん、さすがですね。
これだけのもので、目的が達成されてしまうので、すごいです。
>PICの一番(最初?)の難関は「設定」ですね。これには参りました。
これですね。諸兄のHPにもいろいろ記事があるようで・・・。「デフォルトは、アナログ」なんてのも、逆だったら、私なんかにも使いやすいかなあ・・・・。
それに、なんで、configで設定なんだ?、と以前から思ってました。
多機能な分、複雑なんでしょうか・・・。
ちょっと前は、WDTではまりました。意図してないのに、デバッグ用につけたLEDが点滅しました。
思い至るのに、時間かりました。
TRさん、書くの遅くなりましたが、
http://akizukidenshi.com/catalog/g/gT-06356/
のご紹介ありがとうございます。いろんなものがあるんですね。
私も、珍しいものに、興味あります。
>今まで、はんだ付けする際、導線の端をラジオペンチで、
>半円になるようにしていました。
IC等の半田付けに丸くされてたのでしょうか。芸が細かいと思います、これもTRさんらしいかな。私は、ずぼらなので、まっすぐしてました。
半田付けの不良が毎回でます。mabo 2015/12/05(Sat) 08:26 No.312Re: チカチカTRさん、なかなかいい質感ですけど、ちょっと小さいですかね?
頭部の細さと実測130mmからすると、「汎用」として使うには貧弱さがありますね。
「細かいもの用」として欲しいならアリだと思います。
MABOさん。最初、チャタリング感も全くしないので喜んだのですが、
良く考えると、チャタリングしていてもしていなくても違いが判るプログラムではありませんでした。
このプログラムではWaitTime()自体が不必要でしたね。本文は
while(1) LATC=~PORTA;
の一行(「while」で「{}」無し!?)でも同じだと思います猛牛ロック 2015/12/05(Sat) 12:07 No.314Re: チカチカ折角配線したんだから、ちょっと書いてみるか!
とLチカ第2弾を作りました。回路は前回と全く同一です。
ボタン0-周波数確認BLINK
ボタン1-チャタリング確認(+)
ボタン2-チャタリング確認(-)
ボタン3-ウェーブ(++)
ボタン4-ウェーブ(--)
ボタン5-停止
です。
当たり前ですが、AVR流の表記でも全く問題ありませんでした。(ごちゃ混ぜです)
今回はDELEYとタイマーどちらで時間を測るか悩み、タイマを使う事にしました。
チャタリング対策は単に40ms間隔を空けただけですが起こる気配はありませんでした。
動画も撮ってみました。プログラムだけを見てもなかなか理解しがたいでしょうから。
https://www.amazon.co.jp/clouddrive/share/3fTegXe2uaB1tCNorJIhBAN3Yb42LkcVBUtsCgtyZV?ref_=cd_ph_share_link_copy
追記
4.65V程度の設定で順調にPICKIT3が動いていたのですが、今回エラーが起こりました。(一度)
それで4V程度にしたらOKでした。
結構低くした方が安定するのかもしれません猛牛ロック 2015/12/06(Sun) 10:00 No.333
点灯しました!
これで、OKですか?
Re: 無題入力の配線としては良いと思いますよ
LEDが無くなりましたけど猛牛ロック 2015/12/02(Wed) 23:33 No.289Re: 無題猛牛ロックさん、大変有難うございます。
ヒントを頂いて、本を見ました。
良かったです。
ポートBからの出力は小さいです。
出力は、どうやって調べたらよいですか?
実際は、SEC基板に繋ぐので、問題ないと思いますが。
http://ww1.microchip.com/downloads/en/devicedoc/40044f.pdfTR 2015/12/02(Wed) 23:44 No.290Re: 無題picは25mAまで可能でしょうから
10〜15mA程度ledに流せば良いんじゃないですかね?
適当に、330Ω程度使って光らせれば良いんじゃないですか?
sec基板へはもう1本出力ピンから繋げます
(sec基板の方は1mAも使いません)
追記
ところで、正常に(スイッチと連動して)出力は点滅したのですか?猛牛ロック 2015/12/02(Wed) 23:52 No.291Re: 無題猛牛ロックさん、レス有難う。
>picは25mAまで可能でしょうから
抵抗無しでは、計測すると12mA程でした。
何故か低い!。
>sec基板へはもう1本出力ピンから繋げます
ポートピンは、8本ありますが、、、?
スイッチと同じテンポで点滅しました。
改めて感謝申し上げます。
maboさんへ、
すっかりドツボにはまってしまい、
ご心配をおかけしました。
済みませんでした。
自分的には、
色々と考えさせていただきまして、
ずいぶんと理解が進んだと思います。
良かったです。
それと、PICの端子数ですが、
もう少しい多いいPICをご存知でしたら、
教えて下さい。
朗報があります。
EジスPenです。
ご存知かもしれません。
http://akizukidenshi.com/catalog/g/gT-06356/TR 2015/12/03(Thu) 07:17 No.292Re: 無題> 抵抗無しでは、計測すると12mA程でした。
電流は普通?計算するんですよ。例えば抵抗の両端の電圧とと抵抗値で。
LEDだけとなると普通、LEDが壊れます。
電流を測れるテスターなら直列に入れます。
しかし、何も抵抗をいれないで繋ぐのはダメです。完成された回路に直列に入れ込みます。
多分計測ミスの様な気がします。
> ポートピンは、8本ありますが、、、?
その一本に対して言ったのです。
つまり、そのピンをLEDに光らしたいならピンのところで分岐させて片方はLEDへ片方はSEC基板へ、です。
> スイッチと同じテンポで点滅しました。
それは良かったですね(^^)/
> もう少しい多いいPIC
20ピンのPIC16F677-I/P http://akizukidenshi.com/catalog/g/gI-02163/
28ピンのPIC16F883-I/SP http://akizukidenshi.com/catalog/g/gI-02239/
PIC16F1933-I/SP http://akizukidenshi.com/catalog/g/gI-04431/
を取りあえず薦めておきます。
1933は新しいものなのでちょっと扱いが違うかもしれません。でも魅力があります。
I/Oピンの数は減りますから。自分で選択する際はオシレータ(クロック)を内蔵しているものを選ぶと良いです。猛牛ロック 2015/12/03(Thu) 08:26 No.293Re: 無題TRさん、猛牛ロックさん、おはようございます。
猛牛ロックさん、いろいろありがとうございます。私も理解が一段と、進みました。
回路を考える時、特に出力にするときは、配慮が必要ですね。
それから
>あと、今になって言いにくいのですけどHIGHTではなくHIGHです。
ありがとうございます。「何とかGHT」の昔スペルを覚えた時のフレーズがいつのまにか結合してしまっていたようです。
これから、恥ずかし思いしなくてすみます、ありがとうございます。
TRさん、よかったですね。ドツボにはまるの、PICに限らず、プログラムの醍醐味です。
一つ一つ原因を探りながら、つぶしていって、完成した時の喜びは、最高?です。
>それと、PICの端子数ですが、
>もう少しい多いいPICをご存知でしたら、
>教えて下さい。
猛牛ロックさんもご紹介くださっていますが、私はF1ファミリーと呼ばれる新しいと言われるPICいくつか使いました。
私は、16F1***という表記のものお勧めします。
ただ、このPICもそうですが、ドツボの罠がいっぱい潜んでます。
そう訳で、私は、市販の書籍、NET等、情報の多いものをえらんでます。
あと一つは、入手性のよさでしょうね。それぞれの店での取り扱いがあるものとないものがあります。
いくつかF1ファミリのPIC使いましたが、「電子工作のためのPIC16F1ファミリー活用ガイドブック」を見て、選択しました。
8ピンのものから、64ピンのものまであるようです。
それぞれ特徴があるみたいですが、一応廉価版ということで、16F19**あたりがいいのかなと思います。
具体的には、
16F1933(28ピン、4kwプログラムメモリー)○月140円
16F1938(28ピン、16kwプログラムメモリー)○月230円
あたりでしょうか。
ワイヤレス化に使ったのは、状態変化割り込みのピンが多く使える16F1783です。mabo 2015/12/03(Thu) 10:10 No.294Re: 無題MABOさんはてっきり、3桁の物を薦めるのかと思っていました。
> 一応廉価版ということで、16F19**あたりがいいのかなと思います。
安いけれど「廉価版」ではないと思います。PIC24の良い所を取り入れたPIC16の(現行)最上位だと自分は位置づけています。
「All single-cycle instructions except branches」と1サイクルで命令を実行するので
32Mhzは従来の16F(4サイクルで1命令)の128Mhz(ホントカ?)に相当するという高機能機種です。猛牛ロック 2015/12/03(Thu) 12:40 No.295Re: 無題猛牛ロックさん、こんにちは。書き込みありがとうございます。
正直分からない部分が多くて、三桁のものは、627ぐらいしか使ったことがありません。
16F1**については、たまたま、手元に有名な後閑さんの本があり、このなかから選んで、
いくつか使ったことがあります。それで、本のなかで廉価番の紹介のあったものを書きました。
コスパ考えると、ちょっと?かもしれませんが、140円は、魅力ですね。
(ただ、多機能だと、設定も面倒になるのも事実ですね。
データシート読めばいいのでしょうけど横文字苦手で、
行き当たりばったりです。今回使った、16F1827 も
ANSEL、CMCONあたりから、ドツボが始まりました。)
「PIC16F1ファミリ活用ガイドブック」の本の存在が大きいです。
私は、この本がなかったら、ドツボから抜けるのにえらい時間かかったと思います。mabo 2015/12/03(Thu) 13:25 No.296Re: 無題猛牛ロックさん、レス有難うございます。
>例えば抵抗の両端の電圧とと抵抗値で。
言われてみて、なるほどと思いました。
今まで、テスター棒を直列に入れて、計測していました。
今夜やってみます。
また一つ勉強になりました。
>つまり、そのピンをLEDに光らしたいならピンのところで分岐させて片方はLEDへ片方はSEC基板へ、です。
了解です。
PICのご紹介有難うございます。
やはり、色々とあるものですね。
ただ、使いこなすとなると、それなりのノウハウが必要でしょうから、今回は、止めます。
というのも、もう直に、中華手パが来るからです。
勉強する時間もなさそうです。
maboさん、レス有難うございます。
今回は、初めてのPICということで、端子の使い方、プログラムと、考えていたら、
頭が、ごちゃごちゃになりました(笑
入力端子、出力端子、こういった端子の使い方も、色々とある様です。
意外だったのが、入力端子で、プラス電圧を入力端子に印可していない!! ↓
https://www.nmri.go.jp/eng/khirata/mcon/ch02.html
本当に難しそうです。
入力端子とする場合、プラスの電圧を入力端子に印可する必要があると思っていました。
本当に不思議と思います。
>ただ、このPICもそうですが、ドツボの罠がいっぱい潜んでます。
私は、市販の書籍、NET等、情報の多いものをえらんでます。
あと一つは、入手性のよさでしょうね。それぞれの店での取り扱いがあるものとないものがあります。
やはり、創造していたとおりです。
使いこなすには、経験と時間が必要な感がありますね。
今回は、アドウインのキットについていたPICを秋月から買ったので、
これを、2個使います。
それで、とりあえず、手パには、対応しようかと思います。
追伸
秋月電子のテクノペンをお持ちでしょうか?TR 2015/12/03(Thu) 18:43 No.297Re: 無題> 意外だったのが、入力端子で、プラス電圧を入力端子に印可していない!! ↓
何を言ってるんですか?昨日の回路と全く一緒でしょ?私が
・黄色の線をとってプルアップ抵抗をつけてくれ
・ピンからスイッチへと繋いでくれ
と言いましたよね。全く同じ回路ですよ。(これからTRさんが作る入力回路も)
取りあえず、よく見て、昨日自分で組んだ回路と同じか確認してください。
私が普段作る回路はNo.225の様な回路です。
内部プルアップを使っているので抵抗を付ける必要は無いのですが、これも、内容的には全く同じ事です。猛牛ロック 2015/12/03(Thu) 20:52 No.298Re: 無題猛牛ロックさん、レス有難うございます。
プルアップ抵抗が分かりました。
PICの端子では、難しく感じました。
RA1でプログラムを作りました。
しかし、RB1側の発光LEDは点灯しません。
プログラムがおかしいのでしょうか?
見て頂けませんでしょうか?
宜しくお願いします。
if(RA1 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA1 == 0){//もう一度確認する。
RB1 = 1;// LED1点灯
sw1=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw1==1 && RB1==1){
RB1 = 0;// LED1消灯
sw1=0;
}
}TR 2015/12/03(Thu) 21:39 No.300Re: 無題プログラムはおかしくないと思います。
写真もはっきりとしたおかしな箇所は見つかりません
下記の事を確認してください。
・プログラムで投稿されたところ以外のミス(入出力設定等々)
・黄色LEDの足と抵抗の片側が同じラインにあるかは写真では判りません。
・RA0と繋がっている使わない線は抜いておいた方が良いです。
・今まで同じ種のコードを利用した際、コードの両端が繋がって異なことが1度ありました。(不良品)
(使用コードの両端も確認してください)
・ブレットボードにちゃんと刺さってない場合もあります。
(ちゃんと繋がっているかテスターで確認)
・LEDが生きているか確認猛牛ロック 2015/12/04(Fri) 00:36 No.301Re: 無題TRさん、こんばんは。
もしかして、原因は、ブレッドボードかもしれません。
いくつかブレッドボードもってますが、動作するのとそうでないのがありました。
TRさんのプログラムと同じものだと思いますが、白×肌色○でした。
後ほど、動作したプログラム載せておきます。mabo 2015/12/04(Fri) 01:54 No.302Re: 無題みなさま方、多々色々と有難うございます。
途中報告の中でも言いましたが、
動作が不安定になりまして、 以下の表示
PICkit3、MPLABへの接続...
PICkit3に現在ロードされたファームウェア
ファームウェアのスイートバージョン.....01.40.05
ファームウェアの種類..............ミッドレンジ
VDDは5.000000ボルト= - 電源をターゲットとするプログラマーが有効になっています。
ターゲットデバイスIDが(0x3fe0)予想と一致しないデバイスID(0x1040)。
以下のメモリ領域(s)は、プログラムされます。
プログラムメモリ:アドレス=0x0の、終了アドレス=0x3ffを開始
構成メモリ
デバイスが消去されました...
プログラミング...
プログラムメモリ
住所:0期待値:2bfe受信した値:0
デバイスをプログラムに失敗しました。
電圧を変えても駄目になりました。
上記の文章は、文章の途中で表記されます。
そして、文章の最後には、
Programming/Verify completeと表示されます。
もともとダメもとで買った品なので、
秋月で買い買えます。
偽物と思われますが、
安価だったので、PIC学習のきっかけとなり、学習もできました。
今後の発展のためにも、良しと思いました。TR 2015/12/04(Fri) 07:22 No.303Re: 無題TRさん、猛牛ロックさん、こんばんは。
ブレッドボードが原因と書きましたが、間違いのようです。
今出先なので、戻ってから確かめますが、,MCLRピンの未処理だと思います。
configでMCLRのリセットが有効になってました。
◯ウインのボードは、リセットの回路が組まれていますが、ブレッドボードでは、それがありません。多分これが原因のような気がしてきました。
確かめて、ご報告いたします。mabo 2015/12/04(Fri) 18:26 No.304Re: 無題TRさんへ
私のPICKIT3も似たような感じです。
取り敢えず、電圧を下げたらエラーは出なくなりましたけど、えらくシビアな印象ですね。
本物のPICKIT3でも類似の症状はあるようです。
http://ww1.microchip.com/downloads/jp/DeviceDoc/J_ETN32_PICkit_3_Operation_at_Low_Voltage.pdf
供給電流もかなり少なそうですね。これでISPは可能なんでしょうかね?
AVRではいつも完成基板でライター(AVRASP)の電圧で試していました。
USBからの電圧(5V)なので500mAや1A位大丈夫と高をくくって試していました。
MABOさんへ
話が戻りますけど、AVRでは大抵の人?は自分でマクロを記述して使っています。
私の場合は
#define cbi(addr,bit) addr &= ~(1<<bit) //BITを0にする
#define sbi(addr,bit) addr |= (1<<bit) //BITを1にする
#define bis(addr,bit) (1&(addr>>bit)) //BITが1なら1、0なら0を返す(ビットがセットされていたら)
#define bic(addr,bit) !(1&(addr>>bit)) //ビットがクリアーされていたら
こんな感じで使っています。PICでRA0を知るまでは変数とPORT(PICではLATに相当)やPIN(PICではPORTに相当)など
特に区別しないで使っていました。
RA0の表記法は便利です。AVR流は汎用(そのままのC言語)なのでどのマイコンでも可能でしょう。猛牛ロック 2015/12/04(Fri) 18:30 No.305Re: 無題TRさん、猛牛ロックさん、こんばんは。
TRさん、動作したプログラムアップしておきます。
ブレッドボードの写真も掲載します。
http://mabo52.sakura.ne.jp/files/2015-12-4.txt
○ドインの基板は、リセットの回路が組まれています。
リセットの回路を組み込まないブレッドボードでは、
動作が不安定になります。両方で、両方で安定して動作させるには,configの変更です。○ドインで、リセットはできなくなりますが、電源のON/OFFで対応できると思います。
configの設定を1カ所、
MCLREN→MCLRDIS
に変えてコンパイルしてください。
猛牛ロックさん、書き込みありがとうございます。
PICKIT3ですが、5Vでは、誤動作して、4.85Vなら大丈夫、
なんて記事も見かけました。今のバージョンのものは分かりませんが、以前のバージョンのものは,頻発したようです。
それで、供給電流が少なくなるので、0Ωのチップ抵抗やら、ジャンパー線等で、2カ所か3カ所取り替えるという、改造の記事もみかけました。
猛牛ロックさん、やはり、AVR使われる方、頭の構造が私とは違います。(笑)
プログラムも初めて、Cも初めて、2進数も忘れてしまった、ということだと、ちょっと、敷居たかいかもですね。mabo 2015/12/04(Fri) 22:17 No.306Re: 無題maboさん、今晩は、苦心のプログラム有難うございます。
if(RA0!=0)
なるほど、RAOが0と異なる場合、としたわけですね。
早速やってみました。
私のPIC3の場合、
アドウインのキット基盤でやる場合は、4.75V設定です。
結果
Programming/Verify complete
しかし、ブレットボードにセットしましたが、
RB側の発光LEDは、つきませんでした。
明日、秋月から、新品の(マイクロチップのマーク付き)PIC3と
新品のPICが来ますので、
maboさんの新しいプログラムでやってみます。TR 2015/12/04(Fri) 22:56 No.307Re: 無題TRさん、こんばんは。書き込みありがとうございます。
ブレッドボードでの動作が不安定だったので、プログラムあれこれいじりました。
直したつもりでしたが、直っていませんでした。動作が不安定だっためにいろいろやった名残りです。
if(RA0!=0)→else
で、大丈夫です。直してください。おっちょこちょいでよくやります。
前スレやブログにも書きましたが、私の場合、PICの動作が不安定だったのは、configの設定でした。
config直さないで、動作を安定したものにするためには、4番(RA5 MCLRピン)のプルアップが必要なようです。
これは、確認してません。
追伸です。*********************
動かなかったのは、ブレッドボードでしょうか。
○ドインの基板で確認なさるといいです。ブレッドボードとは、反対の動作になってれば、OKです。
スイッチを押す→LEDが消える。
もし、なっていなければ、PICの破損あるいは、書き込み不良でしょうか。
○ドインで動いて、ブレッドボードで動かないと、大部分は、多分、回路の間違いだと思います。mabo 2015/12/04(Fri) 23:17 No.308Re: 無題maboさん、な、なんと!
下記の通りエラーが出ました。
相変わらず、動作が不安定ですが、、、、
ポートB側の発光LEDが点灯しました!!!
原因は、
コンフィグでしたか〜。
マッハの設定で、その意味まで調べました〜
*configの設定を1カ所、
MCLREN→MCLRDIS
この話ですが、テキストに有るのは知っていましたので、
早速見ました。
意味は、MCLRピンを使用したり、セットする。
でした、セットじゃなくて、リセットの誤植かな〜?
言われて事の重大さに、気が付いた次第です。
テキストをコピペばかりしていたせいです(激(;´・ω・)
既に、秋月のピック3は発送です。
ま〜、純正品の安定度に期待しますよ。
下のような、エラーが出ているようですは、
この先、心配ですから。
ともかく、自分では、全く気にしていませんでした。改めて、感謝申し上げます。
これで、いよいよ、PICにより制御する第1歩ですから、
これで、本来は、万歳です(^^♪
追伸
三菱のサーボアンプが無料で帰ってきました。
良かったです。
昨晩は、テストしたら、
正常でした。
結局、原因は、良く分かりませんでした。
エラー内容
PICkit3、MPLABへの接続...
PICkit3に現在ロードされたファームウェア
ファームウェアのスイートバージョン.....01.40.05
ファームウェアの種類..............ミッドレンジ
VDDは5.000000ボルト= - 電源をターゲットとするプログラマーが有効になっています。
対象デバイスPIC16F627Aが見つかりました。
デバイスIDリビジョン=8
以下のメモリ領域(s)は、プログラムされます。
プログラムメモリ:アドレス=0x0の、終了アドレス=0x3ffを開始
構成メモリ
デバイスが消去されました...
プログラミング...
プログラムメモリ
住所:2FF期待値:871受信した値:3FFF
デバイスをプログラムに失敗しました。TR 2015/12/05(Sat) 00:32 No.309
maboさん、猛牛ロックさん今晩は。
今夜、写真のように配線と、プログラムを組みましたが、
入力端子(ポートA)は、発光LEDが光って成功。
しかし、SEC基板に繋ぐ出力端子の発光LEDが点灯したままです。
どこかプログラムがおかしいでしょうか?
どうぞ、宜しくお願いします。
// 入出力設定
TRISA = 0b11111110;
TRISB = 0b00000000;
// 永久ループ
while(1)
{
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 1;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RB0==1){
RB0 = 0;// LED1消灯
sw0=0;
}
}
Re: 実験TRさん,猛牛ロックさん、こんばんは。書き込みありがとうざいます。
猛牛ロックさん、AVR初めてわかりました。
>AVRでは基本、ビット演算子を使い、このような表現(RA0)はありません。
ビット演算をするんですね。もしかして、PICと比較した場合、PICとは違う別の取っつきにくさの一因になってるかもしれませんね。
ビット演算がなんとなく分かったのは、プログラム組み始めて、しばらくたってからだったような気がします。
反面、猛牛ロックさんがおっしゃってたように、AVRはどれも同じような感じで取り扱いができる、ということであれば、PICとは、逆に、応用が利きそうな印象をうけました。mabo 2015/12/02(Wed) 01:15 No.265Re: 実験TRさん、こんばんは。入れ違いになってしまったようです。
>SEC基板に繋ぐ出力端子の発光LEDが点灯したままです。
常時点灯ですか。切り替えても変化しない、ということでしょうか。
それから、MACHの設定は、アックティブハイでしょうか。
多分、TRISA = 0b11111110;だと思います。これだと、RA0が出力になります。なんかの拍子にかきかわったんでしょうね。
それから、出力端子に、LEDを直列につないでますが、これだと、○ECさんの端子を、LOWにできないのでは、と思います。
ハードになると(ハードもかな?)分からなくなるのですが、LEDは逆の極性にして、RB0の出力も逆にすると、アクティブローで動きそうに思いますが。mabo 2015/12/02(Wed) 01:54 No.266Re: 実験RA0はというとRA0-OFF-GNDと、実質、RA0とGND直結になります。
なので、ハイ出力(26,29行目)となるとPICが壊れた可能性もあります。
LEDが光っているようなのでDCアダプタまでは被害が及んでいないようですけど、
前にも言ったようにこの回路はSEC基板と共通回路なので気を付けてください。
被害がそちらへも及ぶ可能性があります。猛牛ロック 2015/12/02(Wed) 03:45 No.269Re: 実験> ビット演算をするんですね
違いはマイコンというよりも、コンパイラの違いだと思います。
データシートを読むとマイコンがやっていることは同じようです。
RA0=1;
と書いてもPORTAを読み込み(READ)、ビット演算をして(MODIFY)、PORTA自体を書き換える(WRITE)と
いうのはPICもAVRも同様です。どちらもビットのみの読み書きは出来ません。
AVRはマイコンの動作をそのまま表現する形です。変数のビットと同じです。
PORTA|=(1<<0); //(PORTA=PORTA|0b00000001)猛牛ロック 2015/12/02(Wed) 04:05 No.270Re: 実験
maboさん、ご回答有難うございます。
>常時点灯ですか。切り替えても変化しない、ということでしょうか。
YES
>それから、MACHの設定は、アックティブハイでしょうか。
そのようにしようかと思っていました。
SEC基板は、入力端子と思っていたので、SEC基板の入力端子をハイにしたいと思いました。
現在、実験中なので、SEC基板を使っていません。
SEC基板の代りにDC5V電源をつないでいます。
質問に使った図を直さなくてすみませんでした。
訂正後は、写真のとおりです。
ご指摘を受けての修正項目
1、プログラムを以下のとおり修正しました。
2、PICのポートB側の発行LEDの極性を逆にしました。
}
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 0;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 1;// LED1消灯
sw0=0;
}
}
早速、PICにダウンロードしようとしたら、、、、
Fail・・・となりました。
3個買ったのですが、とっかえひっかえやっている内に、すべてご臨終(-_-;)
最後に一つ質問があります。
SEC基板は、入力端子だと思います。
その入力端子に繋ぐPICのポートBの端子設定は、出力端子にするのでは?TR 2015/12/02(Wed) 12:25 No.271Re: 実験TRさん、こんにちは。書き込みありがとうございます。
ご質問の件ですが、
>SEC基板は、入力端子だと思います。
>その入力端子に繋ぐPICのポートBの端子設定は、出力端子にするのでは?
出力で大丈夫だと思います。
264のプログラムは、
TRISA = 0b11111111;←全部入力(正)
(TRISA = 0b11111110←RA0だけ出力)
TRISB = 0b00000000;
だと思います。
264のようにアノード側のLEDをPICにつなぐと、○ECさんの入力端子をLOWにできなくなると思います。この場合、PIC側がHIGHTになるとことでLED点灯だと思いますが、多分PIC側をLOWにしても、LEDがあるので、○ECさんの入力をLOWにできなくなると思います。
反対にすると、動作は、逆になりますが、PICがLOWになるとPICに○ECさんから電流吸い込まれて、○ECさんの入力をLOWにできると思います。
結果、LEDも点灯するように思います。PICがHIGHTなると、吸い込みがなくなりますので、○ECさんの入力は、HIGHTになるとも思います。
RA0が猛牛ロックさんのおっしゃるように、短絡状態になって、破損したんでしょうかね。だとすると、コモン側に、10kΩ程度の抵抗を入れておけばいいんでしょうか?。
それとも、25,26を
PORTA = 0x00; // 初期値
PORTB = 0x00;
で、対応できるんでしょうか、ここは、不明です。
猛牛ロックさん、こんにちは。
コンパイラの仕様なんですか。だとすると、AVRはちょっと取っつきにくいかもですね。マクロ等くんでおけば、PICと同じようにできるんでしょうけど。
PORTA=PORTA|0b00000001
は、分かりますが、
PORTA|=(1<<0)
は、ちょっと、苦手です。
それから、お聞きしたいことがあるのですが、USARTのTXの信号を二つに分岐して処理してますが、二つに分岐することで、弊害等はあるんでしょうか。mabo 2015/12/02(Wed) 13:09 No.272Re: 実験maboさん、レス有難うございます。
以下のプログラムでは、アドウインのキットは、動作します。
しかし、
ブレットボードでは、
ポートAの発光LEDは、スイッチONで発光、
しかし、スイッチONで、ポートB側発光LEDが動作しません。
参りました〜。
どうしてでしょうか?
// 入出力設定
TRISA = 0b00000000;
TRISB = 0b00000000;
// 永久ループ
while(1)
{
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 0;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 1;// LED1消灯
sw0=0;
}TR 2015/12/02(Wed) 16:59 No.273Re: 実験TRさん、こんばんは。
でさきなので。PORTAとTRISAを混同してるような気がします。273で、TRISAがオール0で出力の設定になってます。ポートAは、入力なので、0b11111111だと思います。mabo 2015/12/02(Wed) 17:55 No.274Re: 実験TRさん、滅茶苦茶です。
1行ずつ確認しましょう。
> // 入出力設定
> TRISA = 0b00000000;
> TRISB = 0b00000000;
全て出力です。あっという間に壊れます。
出力LEDのつなぎ方はNo225を見てください。Lで光らすなら上部のつなぎ方、Hで光らすなら下部のつなぎ方です。
直接SEC基板へとは繋ぎません。分岐させてVCC、若しくはGNDと繋いでください。
> 二つに分岐することで、弊害等はあるんでしょうか。
MABOさん、残念ながら判りません。猛牛ロック 2015/12/02(Wed) 18:05 No.275Re: 実験猛牛ロックさん、レス有難うございます。
プログラムは、下記のとおりしました。
PICのポートAは、入力端子。
PICのポートBは、出力端子。
なので、PICのポートB端子側がアノードとし、カソード側から、GND
に接続しました。
スイッチONで、ポートA側は、点灯。
ポートB側は、スイッチに関係なく常時点灯しています。
駄目です。
// 入出力設定
TRISA = 0b11111111;
TRISB = 0b00000000;
// 永久ループ
while(1)
{
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 1;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 0;// LED1消灯
sw0=0;
}
}TR 2015/12/02(Wed) 20:13 No.276Re: 実験TRさん、すいません。私も同じプログラムで確認してみます。
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){←ここRB0=1にしてはどうですか。
RB0 = 0;// LED1消灯
sw0=0;
}
}mabo 2015/12/02(Wed) 20:53 No.277Re: 実験特にプログラムはおかしくないように思います。
ただ、全て記載されていないので確証はありません。
PICは生きていますか?
直前に、このプログラムをコンパイルしてPICに書いたのですよね?
それならば生きているでしょうけど。
PORTBはどのように設定したのですか?
> スイッチONで、ポートA側は、点灯。
これ自体はPICとは無関係ですのでPICが正しく動作していると勘違いしないでくださいね。
単に入力の確認ですから。
取りあえず、簡単に
// 入出力設定
TRISA = 0b11111111;
TRISB = 0b00000000;
// 永久ループ
while(1){
RB0=RA0;
WaitTime (2000);
}
や、
while(1){
RB0=~RB0;
WaitTime (20000);
}
ぐらいで動作確認されることをおススメします。猛牛ロック 2015/12/02(Wed) 21:48 No.278Re: 実験maboさん、レス有難うございます。
言われた方法や、他の方法もやってみましたが、
ポートB側のLEDは、常時点灯です。
ビルトができて、Programming/Verify completeと最後に表示がでるが、
途中に赤字でFailed to program device
と表示されます。
何処ががおかしいのでは?TR 2015/12/02(Wed) 22:06 No.279Re: 実験TRさん、264の回路で、初期値
PORTA=0;
PORTB=0;
ELSEのif文は、277のようにして、同じ、627Aで確認しました。私のブレッドボードでは、A側もB側もタクトスイッチにつれて、点滅しました。
http://mabo52.sakura.ne.jp/files/2015-12-2.txt
私のプログラム、上記にアップしました。mabo 2015/12/02(Wed) 22:09 No.280Re: 実験TRさん、それなら、書き込みエラーだと思います。
まずはそこをクリアーしてからです。猛牛ロック 2015/12/02(Wed) 22:15 No.281Re: 実験皆様、有難うございます。
maboさんのプログラムをコピペしました。
で、
電圧を4.75Vにして、ビルトしたら、
赤字がなくなりまして
Programming/Verify complete
でも、ポートB側のLEDは、ポートA側のスイッチを押しても、
全く点灯しません。
分かりませんが、
PICとピック3を買ってみます。TR 2015/12/02(Wed) 22:24 No.282Re: 実験MABOさん、No272
> RA0が猛牛ロックさんのおっしゃるように、短絡状態になって、破損したんでしょうかね。だとすると、コモン側に、10kΩ程度の抵抗を入れておけばいいんでしょうか?
抵抗を付ければ保護にはなりますけど、根本は入出力を間違えたことです。
RA0を間違わず、入力にすれば何も問題は無いかと・・・
ボタンを押して繋いだ瞬間に大電流が流れて焼き切れる?ように思います。
あと、今になって言いにくいのですけどHIGHTではなくHIGHです。
TRさん、書き込めたなら全くダメになった訳では無いようです。
PIC16F627Aで行っているのでしょうか?
前掲のプログラムで使われたものなら、他のピン、たとえば書き込みに使われているピンなら
生きているでしょうから、入力はそっちを使ってみるのも手です。
それとも、新規のPICだったのでしょうか?猛牛ロック 2015/12/02(Wed) 22:40 No.283Re: 実験>TRさん、書き込めたなら全くダメになった訳では無いようです。
>PIC16F627Aで行っているのでしょうか?
ご心配をおかけしまして、済みません。
私のは、どうも動作が安定していない感じです。
というのも、アドウインの基板を使い、付属のプログラムは、
動作します。
しかし、
ブレッドボードで、ご提案のプログラムを実行しようとすると、
動作しません。
良く分からないので、
ピック3と、PIC16F627Aも買ってみます。
前掲のプログラムで使われたものなら、他のピン、たとえば書き込みに使われているピンなら
生きているでしょうから、入力はそっちを使ってみるのも手です。
それが、RA0とRB0、RA1とRB1との端子を使っても、
やはり、ポートB側のLEDは点灯しません。
>それとも、新規のPICだったのでしょうか?
朝は、壊れていたと思っていたのですが、
アドウインの基板を使い、付属のプログラムは、
動作したので、PIC自体は、壊れていないと思います。
とにかく、踏ん張ってみます。TR 2015/12/02(Wed) 22:55 No.284Re: 実験回路の間違いです。
黄色の線5VがRA0と繋がっています
スイッチ以前に、5V固定です猛牛ロック 2015/12/02(Wed) 23:07 No.285Re: 実験写真の様にすれば良いのですか?TR 2015/12/02(Wed) 23:11 No.286Re: 実験付加抵抗がプルアップ抵抗です。
数k〜数10kΩにしてください
追記
プルアップ抵抗は無くても動作しそうですが、
LEDの足、RA0-スイッチのコードは絶対要素です。猛牛ロック 2015/12/02(Wed) 23:24 No.287
TRさん、こんばんは。書き込みありがとうございます。
また、深くなったので、新しくスレッドたてます。
TRさんが説明してくださったようにプログラムがながれます。
同じような感じで、判断するための変数設定して、プログラム組んでいきます。
囲碁の定石のように、いろいろテクニック?やり方がありますので、このあたりもやはり、慣れだと思います。
はじめは、お手本のプログラムちょっとだけ改造して、ということで、やられると理解も早いかなと思います。
猛牛ロックさんの書いてくださった251のプログラムは、単純明快で、RA0に入力された値をそのままRB0に出力するというものです。RA0につながれたスイッチがおされO(ロー)になると、RB0の出力を0(ロー)にするというものです。
必要に応じて反転するというのは、0の場合は1にする、1の場合は0にするということです。
この反転するための記号が「~」です。
RB4=~RA4
は、RA4の入力を反転(0→1、1→0にして)して、RB4に入力(代入)するという意味になります。
今日ちょっと、実験してみましたが、PICで遊ぼうの基板で、RA0〜RA3をタクトスイッチにつなぎ、RB0〜RB3をLEDにつなぎ、下記のようなプログラムを動かしてみました。
while(1){
PPORTB=PORTA;
}
すると、これだけで、RA0のタクトスイッチ押すと、RB0のLEDが、RA1だとRB1のLEDを、というように、押したスイッチに応じてLEDを点灯できました。
もちろん、チャタリング等の対策等していませんので、ちらついたりしましたが・・・。
突き詰めると、PICに限らずPCもそうですが、
入力→出力
これだけなんですね。その過程で、入力の判断したり、出力のための加工したりと、変化つけてますが、入力されたものを出力するということをしてるのにすぎないんだなあ、と思ったりしました。
Re: PIC再考「→」はそのままのタブを表しています。
「・」はスペースを表しています。
つまり、普段は表示しない空白を表示させています。
写真はTabキーをどのように設定するか、という箇所です。
デフォルトではタブを打つとスペースつまり「・」4つに変換されて付加されるように設定されています。
そのまま、タブにするのも、スペース○個にするのも、また空白にして表示させないもの自由ですのでこのあたりで設定してください。
(単なるエディタの機能です)
RB0=RA0;
RB4=~RA4;
の意味は左辺の出力は、右辺の入力と同じにする。もしくは、反転したものにする。という
だけの意味です。
たとえばRB5の出力ピンをRA1の状態のまま出力にしたい(つまり繋げたような状態)なら、
RB5=RA1; //RA1の内容(状態HL)をRB5に代入
です。もし反転させたい(インバータを挟んだような状態)場合は
RB5=~RA1; //RA1の内容(状態HL)を反転させてRB5に代入
です。つまり、自由に1本ずつ入出力を設定してください、という意味で書きました。
※「=」は代入演算子です。右辺の結果を左辺に代入します。
全体としては自由に一本ずつ入出力を設定して、十分なウェイトを空ければ何とか動くのでは?という意味です。
※完全に動くという確信はありません。猛牛ロック 2015/11/30(Mon) 21:58 No.256Re: PIC再考成功です!!
はっぴ〜TR 2015/11/30(Mon) 22:20 No.258Re: PIC再考TRさん、猛牛ロックさん、こんばんは。書き込みありがとうございます。
私は、たった、一行で、私も苦労してプログラム組んだことが、できてしまうことに驚きました。猛牛ロックさんは、すごいです。
ただ、これだけでは、いろいろ不都合がでますので、いろいろ判定を入れる必要あると思いますが、多分、これが、基本なんでしょうね。
TRさん、試しに、
PORTB=~PORTA
にして、動かしてみてください。多分、動作が反対になり、最初、4つLEDがついていて、タクトスイッチ押すと、消えると思います。mabo 2015/11/30(Mon) 22:58 No.259Re: PIC再考> 猛牛ロックさんは、すごいです。
いえいえ、全然そんなことないですよ。っていうか、No.194でTRさんが書かれていたのを見て便利な表現だと思い、真似てみただけです。
AVRでは基本、ビット演算子を使い、このような表現(RA0)はありません。
逆に、なぜTRさんは判らなかったのか不思議です。コメントの場所が適切じゃなかったからかな?猛牛ロック 2015/12/01(Tue) 00:32 No.260Re: PIC再考maboさん、おはようございます。
昨晩は、発光LEDを夜間の安全灯代わりにしました。(笑
上手くいきましたよ。
表の記事を見ました。
GoTo0た、Start等に用いるスイッチは、
オルタネート方式でもOK?
若し、OKなら、
プログラムが簡単なので、オルタネートにしようかと。
猛牛ロックさんへ
いや〜、思いもよりませんよ。
サンプルのプログラム ↓
// メイン関数
void main (void)
{
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0b00101111;
TRISB = 0x00;
// 永久ループ
while(1)
{
// SW1がONの場合
if( RA0 == 0 )
{
// SW1がONの間ループ
while( RA0 == 0 )
;
// LED1状態反転
RB0 = ~RB0;
}
}
}TR 2015/12/01(Tue) 07:15 No.261Re: PIC再考TRさん、猛牛ロックさん、おはようございます。書き込みありがとうございます。
ブログの方ですが、すみません、これも言葉が足りなかったようです。
私が作った手パは、モーメンタリーのスイッチ(トグルスイッチ(ON)-OFF-(ON) )を使って、プログラムで、オルタネートの動作になるように処理をしてたと言うことです。
これ結構面倒でした。X軸の選択状態から、Y軸を選択するには、X軸の選択を解除してから、Y軸を選択するということをプログラムで組みました。
ブログの(10)の実験では、モーメンタリーのスイッチを直接SSに結線して実験しました。
オールタネートのスイッチを使うと、問題が起きると思います。
仮に、STARTとSTOPにそれぞれ割り当てたとすると、STARTスイッチをONにしたとき、STRTスイッチを手動で戻してから、STOPスイッチONにするという動作をしないと、STARTとSTOPの両方のスイッチがONになります。
二つのスイッチがONになったとき、MACHがどういう動作するか実験してないので、不明ですが、誤動作のもとのような気がします。
軸選択等→ロータリースイッチ
START,STOP→モーメンタリーのスイッチ
がいいと思います。
それから、
while( RA0 == 0 )
{←が必要です。
// LED1状態反転
RB0 = ~RB0;
}
多分、このプログラムだとRB0の状態が不定になります。
短い時間で、0→1,1→0を繰り返します。
LEDの状態、見た目には変化分からないかもしれませんが、LEDが高速で、点滅を繰り返すことになります。
(ウエイトを入れると、LEDの点滅のプログラムによく使われます。オシロで見ると、写真のようなパルス状に見えると思います。)
多分、RA0が0(スイッチが押される)での処理だと思いますが、押される時間は不定なので、RA0が離されたときの、RB0の状態が0になるか、1になるかわかりません。
次のような動作を繰り返します。
RB0が0の場合,0を1にしてRB0に代入→結果RB0が1
(次の瞬間)
RB0が1なので,1を0にしてRB0に代入→結果RB0が0
この二つの繰り返しになってしまいます。RA0の押されてる時間は、その時々で違うので、ループを抜けたときのタイミングで、0になったり1になったりすることになります。mabo 2015/12/01(Tue) 09:26 No.262Re: PIC再考TRさん、それはLチカのプログラムでしょ?
ちょっと言いたいことが判りません。
私が言いたかったのは
ビット処理でも単に「~」で処理をすればいいんだなぁ、と思ったという事です。
(通常、C言語ではビット処理は元のintなどをビット演算子で処理します。ビットを直接扱いません。
PICではピンの状態のみビットを変数の様に扱えるようにしているようです)
私の言った反転は「入力の反転」ですよ。つまりインバータを通したように反転したいなら入力(例えばRA2)に
チルト(~)を付けてください、(出力ピン=~RA2)
必要なければそのままの信号(出力ピン=RA2)です。
イメージで言えば、入-出力ピン間をそのまま繋ぐか、反転させて繋ぐか、ということです。
> オルタネート方式でもOK?
MABOさんの言う通り、駄目ですよ。
プログラムで処理も可能ですが、全然難しくなります。猛牛ロック 2015/12/01(Tue) 12:40 No.263
TRさん、猛牛ロックさん、こんばんは。書き込みありがとうございます。新しくスレッドたてます。
猛牛ロックさん、スマートなプログラムありがとうございます。
7回キーチェックする。
状態変化のあった場合に1回だけ処理する。
ポートを一括で処理する。
等、スマートな処理だと思います。ただ、このようなスマートなプログラムを書くのはちょっと難易度高いと思います。
私は、TRさんの書かれたプログラムを手直しすれば、いいかなと思います。
TRさんのプログラムは、タクトスイッチを押してる間だけ、LEDががついて、出力がLOWになる、タクトスイッチを離すとLEDが消えて、出力がHIGHTになるプログラムだと思います。
このままでも十分動作すると思いますが、一つ気になるのは、タクトスイッチが押されてない時は、必ずelse以下の文が実行されることです。
そうすると、その度に、出力をHIGHTにする処理が毎回実行されることです。
出力をHIGHTにする処理は、スイッチが離されたときに、1回だけ実行されればいいはずですので、ここが2番目に気になるところです。
1番目に気になるのは、毎回elseでまたされることです。
TRさんの書かれたプログラムに、スイッチが押されたことを保持する変数をいれて、それを判定に使うといいと思います。
if(RA0 == 0){
RB0 = 0;// LED1点灯
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
sw0=1;//スイッチがおされた
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0=1){//スイッチが押された実績がある場合のみ
RB0 = 1;// LED1消灯
sw0=0;
}(たりなかったので加筆しました)
}
こんな感じにすると、出力PINの操作とLEDの操作を1回だけにすることができます。
ただ、このプログラムだと、1回目のチャタリングで、ifに入ることになりますので、正確にはチャタリング防止にはなっていません。
写真のAのチャタリングの部分で、ifの判定になるからです。本当はBの部分で、スイッチが押されたと判断したいです。
より完全にするには、下記のようにすればいいと思います。
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 0;// LED1点灯
sw0=1;//スイッチがおされた
}(足りなかったので加筆しました。)
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==0 RA0==1){//スイッチが押された実績があってRA0が0になった場合←RA0が1になった場合の間違いでした。
RB0 = 1;// LED1消灯
sw0=0;
}(足りなかったので加筆しました)
}
こんな感じにするといいかなと思います。sw0という変数は、ピンの数だけsw0〜sw6まで必要です。
今回ロータリースイッチをお使いになるということを前提に考えました。
通常のタクトスイッチ等では、2回の判定では、取りこぼし等がでてくるかと思います。
キーの判定に、猛牛ロックさんは、7回のキーチェック、私は自作MPGでは、8回のキーチェックを行ってます。
Re: PICチャタリング防止プログラムmaboさん、レス有難う。
流石ですね!
>私は、TRさんの書かれたプログラムを手直しすれば、いいかなと思います。
大変有難うございます。
先ず、気が付きました。
>私は自作MPGでは、8回のキーチェックを行ってます。
この為に、switch関数を使うのか!
言われてから、下の意味がうっすらと感じました。
if(RA0==0){
__delay_ms(100);
if(RA==0 && RB0!=0){syori=0;}
}
if(RA1==0){
__delay_ms(100);
if(RA1==0 && RB1!=0){syori=1;}
}
---------------RA2〜RA5まで同じ
---------------
if(RA6==0){
__delay_ms(100);
if(RA6==0 && RB6!=0){syori=6;}
でも、、、
先ずは、ご提案のプログラムですが、
sw0という変数は、ピンの数だけsw0〜sw6まで必要です。
この、swという変数は、どのように、宣言するのでしょうか?
int sw;// int 型の sw という変数を宣言
このように宣言をして、入れる??TR 2015/11/28(Sat) 22:11 No.235Re: PICチャタリング防止プログラムTRさん、さっそっくありがとうございます。
まず宣言ですが、最初は、次のようにならべてもいいし、
int sw0;
int sw1;
int sw2;
int sw3;
・・・・
コンマで区切っても大丈夫です。
int sw0,sw1,sw2,・・・・・・;
変数名も宣言すれば他の名前でも大丈夫です。
それから、No229のswitchを使ったプログラムでは、キーの入力チェックは、2回しか行っていません。
switch文は、キーの入力チェック後の条件にしたがって処理をしています。
8回行ったというのは、ブログの方にのせたプログラムです。
229では、
if(RA0==0){←1回目のチェック
__delay_ms(100);
if(RA==0 && RB0!=0){syori=0;}←2回目のチェック
}
という風にして、2回キーチェックをしてます。
このif文で、No234に掲載の写真のAとBのところで、判断をしてます。
AでもBでも、ローだった場合にキーが押されたとして、処理内容の0をsyoriに代入します。
その内容にしたがって、次のswitch文で、case 0の部分で処理をします。
if文のなかでRA==0 && RB0!=0という判断をしてますが、
これは、スイッチが押されて(RA0が0になって)なおかつ出力(RB0が)0でないときに、という判断しています。
RB0が0になってると、すでに処理をしてあるということなので、2回同じ処理をしないためです。
猛牛ロックさんの書いてくださったプログラムや私のプログラムでは、カウンターを使って、複数回数キーチェックを行ってます。
TRさんのお使いになったWaitTime()を使って書くと
if(RA0==0){1回目チェック
WaitTime(500);
if(RA0==0){2回目チェック
WaitTime(500);
if(RA0==0){3回目チェック
WaitTime(500);
if(RA0==0){4回目チェック
WaitTime(500);
if(RA0==0){5回目チェック
WaitTime(500);
if(RA0==0){6回目チェック
RB=0;
}
}
}
}
}
}
みたいに書くこともできます。もっとも、このプログラムは、ネストと言いますが、if文のなかにさらにif文を何回も
おいていますので、Xide等では、コンパイルできないかもしれませんが。mabo 2015/11/28(Sat) 22:40 No.236Re: PICチャタリング防止プログラムこのプログラムをループ(while(1))中に行う、と言う事ですか?
外部割り込みではないのですよね?
動作するようにも思いますけど、あまり良くないです。
1つには10ms以上のチャタリング時間があるスイッチがある事です。
次にループに時間が掛かりすぎる事ですね。
それと多分{}がおかしいせいでMABOさんの意図するプログラムになっていない?ように思いますけど、どうでしょうか?
> より完全にするには、下記のようにすればいいと思います。
のプログラムです。
プログラムが正しくて、段落間違いならほぼ誤動作します。
(チャタリングがあれば)
> 写真のAのチャタリングの部分で、ifの判定になるからです
その考えは違います。あらゆるタイミングでの判定になります。
2回目の判定時にチャタリング中の場合もありえます。つまり誤判定です。
しかし、次のループで正しく処理されれば問題もあまり起こりません。
つまり、2度押しのような症状は現れないと思います。
けれども、処理の順番などの問題で複数の軸を選択した状態だったり、又は
どれも選択していない状態だったり、というちょっと嫌な状態には成りえます。猛牛ロック 2015/11/29(Sun) 01:04 No.237Re: PICチャタリング防止プログラム猛牛ロックさん、こんばんは。書き込みありがとうございます。
>このプログラムをループ(while(1))中に行う、と言う事ですか?
いえ、いえ、TRさんがお使いになっているif文だけで、複数回判定するには、こんな書き方もあるという例示のつもりでした。ウエイト時間の問題もありますし、実際的では、ないと思います。
(7回や8回にすると、ネストが深すぎるので、コンパイルできるかどうかも疑問です。)
>その考えは違います。あらゆるタイミングでの判定になります。
猛牛ロックさんのおっしゃる通りだと思います。タイミングによっては、2番目やその後のもので、判定になることもあると思います。ちょっと、複雑になるので、ふれませんでした。
>プログラムが正しくて、段落間違いならほぼ誤動作します。
}がたりませんでしたが、誤動作によりifの判定になったりする可能は排除できないと思います。これも、複雑になるので、ふれませんでした。
チャタリングの時間によっては、2回目の判定がチャタリングの最中の判定になる可能性はありますが、これも、ちょっと複雑になるので、ふれませんでした。
ロータリースイッチをお使いになるという前提でしたので、10msでまだ、誤動作するようなら、もうちょっと長くすればと思いました。ただ、それほどシビア-に考えなくても大丈夫かなと思いました。
失礼な言い方になってしまいますが、今使える文と、理解できている考え方で、プログラムを組むのがいいのかなと思いました。いきなり、完璧なものを組むのは,ハードルが高いような気がしますので。mabo 2015/11/29(Sun) 01:46 No.238Re: PICチャタリング防止プログラムmaboさん、レス有難うございます。
エラーが出てしまいました。
恥ずかしながら、初めての修正作業です。
以下の点について、教えて下さい。
返事は急ぎません。
1、メモ帳で下書きをして、貼り付けると、→矢印が現れません。
→矢印を表す方法?
2、エラーが出たので、デバックかと思い、Debug Projectをクリックしましたが、
ウインドウにDebug用のツールが出ません。
以上宜しくお願いします。TR 2015/11/29(Sun) 06:38 No.239Re: PICチャタリング防止プログラム私の言っていたのは2度チェックの方で6度のネストの方ではありません。
これをwhile(1)でピン毎にそれを行うのですよね?
> }がたりませんでしたが
見た感じ(段落)が合っていたのですね。それなら大凡、正常に動作すると思います。
(問題はelseが最初のifにかかるか、2度目のifに掛かっているのかの違いでした。
2度目のifなら次のループで中に入りませんから)
それと、このプログラムで、elseに入り、if(sw0==1 && RA0==0)で判定されます。
で、右側はRA!=0もしくはRA==1ではないのですか?
> 失礼な言い方になってしまいますが
全然、そんな事は無いですよ。覚えたテキストから改変していくのもベーシックな進め方です。
ただ、重要なのはチャタリングの理解を深めることと、それへの対策を十分にすることです。
(つまり、良いものを作る、と言う事が第一で覚える順番は必ずしもテキストに沿う必要は無いと
思います)
ポーリングでの2度チェックではどうやっても正しいチェックは出来ません。
違う発想で「1回は正しくない」判定をしても動作に支障がないようにするのも手だと思います。
つまり、添付図で赤矢印の判定がどちらでも前後の判定が正しければ2度打ちにはなりません。
それにはループ時間を適切にとれば可能だと思います。
適切とは「絶対にチャタリング時間よりも長い間隔にする」と「早押しでも充分感知出来るだけ短くする」
の2点で良いかと思います。
例えば、ウェイト無しで全てのピン処理をして、30msウェイトをかける→ループ、といった処理でも
チャタリングの対策にはなると思います。
しかし、それではノイズ対策にはならないので一抹の不安は残りますけど。
TRさんへ
矢印を表す方法→「shift」
11行目「__」が消えただけかも知れません。
__CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );猛牛ロック 2015/11/29(Sun) 06:56 No.240Re: PICチャタリング防止プログラムTRさん、猛牛ロックさん、おはようございます。書き込みありがとうございます。
猛牛ロックさん、たびたびご指摘ありがとうございます。おっちょこちょいで、よく、間違いやります。
>それと、このプログラムで、elseに入り、if(sw0==1 && RA0==0)で判定されます。
>で、右側はRA!=0もしくはRA==1ではないのですか?
おっしゃる通りでです。前項、修正しました。これも,ifはなくても同じように動作すると思いますが、配慮しないと一度でいい処理が何度も繰り返されてしまうので、それを回避する意味で書きました。
>ポーリングでの2度チェックではどうやっても正しいチェックは出来ません。
これもそうだと思います。複数回チェックが必要だという意味合いで、2度のチェック、にしました。
これ、厳密にやると、状態変化割り込みや外部割り込みで、変化を検出してから、一定時間たって再度チェックするということが必要だと思いますが、簡易的に単に2度チェックということにしました。
この辺の詳しいことは、分からないのです、ソフトでのチャタリング防止には、サンプリング方式とディレイ方式というような方法があって、2度チェックするのは、このディレイ方式にあたるようですが・・・。
TRさん、私も、よくやります。
コピペするとき気をつけなければいけないのは、時々全角の空白や半角と紛らわし全角の文字が混入することです。
それと、コピペの過程で、今で正しかった文字や記号が削除されてしまうことがあることです。
ですので、コピペは,要注意だと思います。
添付画像のエラーですが、一番下のコンパイルの結果の表示で、
main.c:11
の表示がありますので、11行目がシンタックスエラーになってると思います。
11行目を見ると、猛牛ロックさんがご指摘してくださったようにconfigの前のアンダーバーが消えてます。
ので、原因は、これだと思います。
1カ所、シンタックス(文法のあやまり)があると、その後の行が全部影響うけてしまいます。
それから、デバッグウインドウの件ですが、多分、シンタックスエラーのため、デバッグ用のコンパイルができないためかと思います。(これ、不確かです。)
デバッグは、あくまでも、文法上正しいプログラムで、検証するための道具で、文法エラー(シンタックスエラー)は、チェックできないと思います。mabo 2015/11/29(Sun) 08:22 No.241Re: PICチャタリング防止プログラムみなさんこんばんは。
今日は、職場の日帰り旅行に参加して、今、帰宅したところです。
矢印ですが、 Shiftキーを押しても、写真の様な矢印が出ません。
キーボードの設定が悪いのでしょうか?TR 2015/11/29(Sun) 20:13 No.242Re: PICチャタリング防止プログラム済みません。
先程から、ずっとプログラムを見ているのですが、
エラーが消えません。
どうしても分かりません。
済みません。
見ていただけませんか?
/*****************************
STEP11_Switch.c
*****************************/
#define _LEGACY_HEADERS
// インクルードファイルの読み込み
#include <pic.h>
// コンフィギュレーションワードの設定
__CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
// プロトタイプ宣言
void WaitTime (int cnt);
// メイン関数
void main (void)
{
// int 型の sw という変数を宣言
int sw0;
int sw1;
int sw2;
int sw3;
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0b01111111;
TRISB = 0x00;
// 永久ループ
while(1)
{
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 0;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 1;// LED1消灯
sw0=0;
}
}
}
// 待ち時間関数
void WaitTime (int cnt)
{
while(cnt > 0)
cnt--;
}TR 2015/11/29(Sun) 21:32 No.243Re: PICチャタリング防止プログラムTRさん、こんばんは。書き込みありがとうございます。
お出かけお疲れ様でした。がんばっておられますね。
まず、矢印の件ですが、すみません。当方、不明です。
それから、TRさんのアップされたプログラム、ですが、void WaitTime (int cnt)の前に「}」が一つたりませんでした。くわえるとエラー消えます。
main( ){ }の"}"ありませんでした。私もよくやります。カーソルを順番に移動していくと対応している括弧が黄色になります。対応ができてないと赤のカーソルになります。
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 1;// LED1消灯
sw0=0;
}
}
}
}←}が一つ不足してます。
// 待ち時間関数
void WaitTime (int cnt)
{
while(cnt > 0)
cnt--;
}mabo 2015/11/29(Sun) 22:19 No.244Re: PICチャタリング防止プログラムmaboさん、早速のレス有難うございます。
}を追加したら、成功しました!!
いや〜、}で苦労するとは!(;´・ω・)
で、
一部、改造しては、如何でしょうか?
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){
WaitTime (500);//もう一度確認する ← 1行 追加しました。
それと、モメンタリースイッチの場合、
動作確認は、7回に増やした方がいいですか?
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){
WaitTime (500);//1度目の確認
if(RA0 == 0){
WaitTime (500);//2度目の確認
if(RA0 == 0){
WaitTime (500);//3度目の確認
if(RA0 == 0){
WaitTime (500);//4度目の確認
上の様に回数を7回目まで増やす。TR 2015/11/29(Sun) 22:40 No.245Re: PICチャタリング防止プログラムTRさん、いい加減なこと言ってごめんなさい。
「SHIFT」じゃなくて単なる「Tab」の記号だと思うのですが
どうでしょうか?
エディタによりますけど、複数行選択して「Tab」で段落が出来、
逆に「SHIFT」+「Tab」で戻ります猛牛ロック 2015/11/29(Sun) 22:43 No.246Re: PICチャタリング防止プログラム猛牛ロックさんへ
タブキーで良しと、テキストではなっています。
けれども、→が現れずに、半角スペースをしめす、・・・が現れます。
結果としては、同じ効果ですが、
やはり、→が現れないのが気になりました。TR 2015/11/29(Sun) 22:48 No.247Re: PICチャタリング防止プログラムTRさん、よかったですね。
お訪ねの件ですが、もう一度チェックのWAITは必要ないと思います。もし、チャタリングがでるようなら、最初のWAITの時間を多くすればいいと思います。
TRさんが組まれているプログラムで、何回も判定するのは、ちょっと、きついかなと思います。
それから、sw0の変数は、RA0に接続されているスイッがおされた実績があるかどうかを記憶するためにいれました。
押されたスイッチがはなされた時、RB0を1にしてます。
ですが、この部分は、ループのなかで、何回も実施され、RA0が1だと必ずそのあとのelseが実行されるので、
そのたびに、RB0を1にする処理をすることになります。
いれなくても、同じ動作をすると思いますが、一度だけRB0を1にするためにいれておいてあります。
ループのなかで処理をするので、その処理がされる回数も考えながら、プログラム作られるといいと思います。mabo 2015/11/29(Sun) 22:55 No.248Re: PICチャタリング防止プログラムここまで皆様方に感謝申し上げます。
後は、↓ をロータリースイッチの接点数分
(例:OFF、X、Y,Z,
×1,×10、×100の7回)を繰り返すわけですね??
if(RA0 == 0){
WaitTime (500);// 待ち時間関数の呼び出
if(RA0 == 0){//もう一度確認する。
RB0 = 0;// LED1点灯
sw0=1;//スイッチがおされた
}
}
else{
WaitTime (500);// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
if(sw0==1 && RA0==1){
RB0 = 1;// LED1消灯
sw0=0;
}
}
}TR 2015/11/29(Sun) 23:27 No.249Re: PICチャタリング防止プログラムTRさん、見通しができましたね。
>(例:OFF、X、Y,Z,×1,×10、×100の7回)を繰り返すわけですね??
RA* RB* sw* の*を0から6に変えて、7回同じ処理をすれば、大丈夫だと思います。
それから、今回はロータリースイッチをお使いのようなので、大丈夫だと思いますが、タクトスイッチ等を使う場合は、最初に、
RA0=0;
RB0=0;
などと設定しておいて、どの位置から始まるか指定する必要があると思います。
ただ、何を制御するかによって、よく考えないと、いきなり動き出すなんてことにもなるので、要配慮でしょうかね。
TRさんは、早いですね。私がプログラム始めたのは、20代の遙か昔ですが、理解するのに、ある教科書使って、丸々1年かかりました。mabo 2015/11/29(Sun) 23:57 No.250Re: PICチャタリング防止プログラムタブ表示などはエディタの設定ですので気になるなら変更すればいいです。
C言語的にはタブでもスペースでも構いません。
チャタリングだけの対策なら単に数十ミリのウェイトを入れておけば問題は出ないんじゃないかな?
ノイズ対策として、パスコンを強化しておけば下記だけでも動くように思います。
WaitTimeの引数が2000が可能かは不明です。
while(1){
RB0=RA0; //必要に応じて入力を反転
RB1=RA1;
RB2=RA2;
RB3=RA3;
RB4=~RA4;
RB5=~RA5;
RB6=~RA6;
WaitTime (2000); //40ms?
}猛牛ロック 2015/11/30(Mon) 00:31 No.251Re: PICチャタリング防止プログラム猛牛ロックさん、こんばんは。
さすが、ですね。これだけで、ロータリースイッチだと動くんですねえ。
やはり、私は、頭が硬くなってます。
タブは、4カ所変更が必要、なんていう記事も見かけました。
http://p.twipple.jp/IUxuV
TRさんのWaitTimeは、単に、カウントダウンで作ってるので、2000も大丈夫だと思います。mabo 2015/11/30(Mon) 00:59 No.252Re: PICチャタリング防止プログラムmaboさん、レス有難う。
此処まで来れたのも、皆様方のお蔭です。
自分は、大昔にフォートランとか、ベイシックをちょっとだけでした。
>ループのなかで、何回も実施され
これ、大事!
while(1)関数です。
while関数の中から、抜け出さない限り、whileの中を繰り返す。
流れは ↓
IF文で、RAがローになったら、
WaitTime (500)後、
RAがローになっているかを確認し、
RB0を点灯させ、
sw0を1する。
そして、
ロータリースイッチが接点を離れた刹那
RAがハイになると
else文により
RA0を消灯させ
sw0を0に設定(つまり、ロータリースイッチsw0は、離れていると設定)。
更に、
以上を繰り返すことにより、
sw0~sw7までを操作できることになる。
しかし、即、思い付く皆様方には、流石の一言に尽きます。
猛牛ロックさんへ
折角頂いたプログラムですが、
難解です(>_<)
RB0=RA0; //必要に応じて入力を反転
反転するということは、どういう意味なのでしょうか?
RB4=~RA4;
これも意味が分かりません。
どういった動作をするのかが分かりません。
それから、タブキーですが、
押すと、写真の赤枠の様になります。
→と同じ効果です。
折角、教えてくださった写真ですが、
写真のようにしなくても、
タブキーを押すと写真の赤枠の様になります。TR 2015/11/30(Mon) 19:23 No.254
猛牛ロックさん、レス有難う。
こういったICは、全て、プルアップかプルダウンで、一方に貼り付けておくんですね。
あるサイトで、サージ電流の対処方法もありました。
http://www.kumikomi.net/archives/2009/05/ioledrs-232.php?page=3
ダイオードを付けておくと、良いようですので、やってみます。
それと、モニター用の発光LEDも付けようと思います。
以上の場合、こんな感じでしょうか?
気になるのが、プルアップ抵抗と平行にした点です。
上手く点灯するかな〜?
時定数は、手持ちの本に出し方がありました。
T=C(μF)×R(MΩ)
シュミットトリガーは定番の74HC14です。
ロータリースイッチ以外の押しボタンスイッチも同様な仕掛けにしようと
思っています。
Re: 無題TRさん、猛牛ロックさん、こんばんは。書き込み並びに、アドバイスありがとうございます。
TRさん、ひとまず、サーボ一次で問題なさそうでよかったですね。
それでも、きっと、検査料とかとられるんでしょうね。
それから、回路図ですが、アクティブローでコントロールするには、○ECさんの基板で、プルアップされている入力端子が、グランドに落ちないような気がしますが、どうでしょうか。
今日、タクトスイッチで実験してみました。といっても、ステッピングモーター等はつけないで、SSとMACHの画面だけの確認ですが。
タクトスイッチでも、コントロール可能でした。
ただ、OEM CODE 211 HOME X HOME Z は、危険ですね。
Z軸の前に、X軸が動いてしまいます。mabo 2015/11/26(Thu) 23:02 No.210Re: 無題左下に書かれている「DC5VのGND」の意味は「SEC基板とは別電源」という意味なのでしょうか?
別でも構わないのですが、常にGNDは共通(繋ぐ)にしておいてください。
で、左のスイッチは只のB接点と言う事ですよね?トグルスイッチだからそうしたのでしょうか?
一応アクティブローにはなっていますが、LEDのタイミングは逆ですよ。猛牛ロック 2015/11/27(Fri) 01:48 No.211Re: 無題maboさん、猛牛ロックさん(順不同)
色々とアドバイス有難うございます。
>LEDのタイミングは逆ですよ。
何度もやりなおしていて、思いと違った絵を投稿しました。
本来は、この絵です。
ただ、DC5Vの電源をSEC基板からとると無理があるような?TR 2015/11/27(Fri) 06:22 No.212Re: 無題TRさん、猛牛ロックさん、おはようございます。
猛牛ロックさん,適切な、アドバイスありがとうございます
。やはり、私は、初心者ですねえ。
ただ、74HC14の入力がグランドに落とされる(LOW)と、出力は、Hightになるので、動作が逆のような気がするのですが。
TRさん、電源私も気になったので、回路見てみましたが、大丈夫かもです。
多分、入力に使ってるDCの容量に左右されると思います。mabo 2015/11/27(Fri) 09:13 No.213Re: 無題> 74HC14の入力がグランドに落とされる(LOW)と、出力は、Hightになるので、動作が逆のような気がするのですが
今回のTRさんのはそうですね。逆転しています。
前回のTRさんの図ではノーマル状態でLEDが光り、74HC14の先ではハイになります。
単なるスイッチの見方(切れている状態と入れている状態の区別)だけかと思います。
ただ、ロータリーだったんですね。それではちょっと事情がかわりますね。
短絡したラインがハイ=プルダウンで、かつLEDをドライブさせなければなりません。
となると、No.211で投稿した図の左下に描いてあるものを参考に組んでください。
押釦スイッチがロータリースイッチに変わります。
つまり左の上から5V-ロータリーSWの中心-ロータリースイッチの1ピンになります。
SWの数だけ同じ様にしなければならないので結構面倒ですね。
電源に関しては、電気を食うのはLEDがほとんどなので同時に点灯する数がどれだけあるかに
よりますけど多分大丈夫じゃないですかね?
MABOさんの添付図の意図がよく判らなかったのですが、これは74HC14のあとに更にインバートさせる、という事ですね?猛牛ロック 2015/11/27(Fri) 12:49 No.214Re: 無題猛牛ロックさん、こんにちは。書き込みありがとうございます。
私の添付図ですが、言葉がたりませんでした。これは、○ECさんの拡張基板の配線図です。
http://sec589.blog50.fc2.com/blog-entry-119.html
SL2*−7の端子が5Vの出力端子になっているので、電力的には、大丈夫かなと思った次第です。
多分LEDは、二つだと思いますので、大丈夫のような気がします。mabo 2015/11/27(Fri) 14:22 No.215Re: 無題猛牛ロックさん、mabo(順不同)さん、レス有賀というございます。
サーボアンプの点検料ですが、今日は返事がりませんでした。
自分で、電圧がない個所を特定しなければなりません。
電気音痴の自分位は、不安です。
猛牛ロックさん
>前回のTRさんの図ではノーマル状態でLEDが光り、74HC14の先ではハイになります。
そうです。
ロータリー → ON → SEC基板インプット(ロー) となります。
マッハの設定を、アクティブローにすれば、OKと思っていました。
さすれば
発光LEDがON & OEMコードに係る動作もOK
と思っていたのですが??TR 2015/11/27(Fri) 17:33 No.216Re: 無題>前回のTRさんの図ではノーマル状態でLEDが光り、74HC14の先ではハイになります。
逆の言い方だと、スイッチを入れると「LEDが消え」、SSボードへロー信号が出力されます猛牛ロック 2015/11/27(Fri) 18:24 No.217Re: 無題分からなくなりました。
ロータリーの接点が閉じているとき、電流が流れて、発光ダイオードが点灯、
その時、シュミットトリガー2番は、ローとなり、SEC基板の
入力端子は、ハイとなる。
マッハは、アクティブ「ハイ」と設定すれば、良いのでは?TR 2015/11/27(Fri) 19:00 No.219Re: 無題確か、100kΩでSEC基板はプルアップされていますよね。
あれ?変更(改造)したんでしたっけ?
いや、改造したとしても1本だけですよね?
兎に角、改造されていないSEC基板ではロー信号がいかないと入力を識別できません。
つまり基本的に選択したものをロー信号で送らなければならない、、、と思っていました。
ただ、私にも盲点でした。確かに逆に全ての選択していないスイッチをロー信号で送ればMACHで設定できるように思います。MACHは自由に選択できましたね、確か。
つまり、わたしの思慮不足です。TRさん、御免なさい(*_*;
でも押釦の方はどうでしょうかね?イケるような気もするのですが、テストが必要だと思います。猛牛ロック 2015/11/27(Fri) 19:29 No.220Re: 無題TRさん、猛牛ロックさんこんばんは。書き込みありがとうございます。
たしか○ECさんの拡張基板の入力は、全部プルアップして保護抵抗をいれたの記述がありましたので、MACHは、アクティブローの設定にしないといとだめだと思います。
よく分からないのですが、74HC14と○ECさんの入力端子の間に、トランジスター一個かフォットカプラーいれて、信号反転してやればすんでしまうと思うのですが、どうでしょうか。
**************************
と書きましたが、TRさのおっしゃるようにアクティブハイでもいいんですね。
ロータリースイッチが選択されてないところが、全部ローになって、選択されているところがハイになるので、アクティブハイでもOKかもですね。
確かめてみる必要あると思いまが、もしだめなら,トランジスターかフォットカプラーで、アクティブローにすればいいのでは、と思いました。mabo 2015/11/27(Fri) 20:08 No.221Re: 無題maboさん、猛牛ロックさん、レス有難うございます。
実例を上げます。
インプットの設定です。
フォトセンサーの設定例です。
実は、自分、2種類のフォトセンサーを使っています。
見て貰うと分かりますよね。
アクティブローとアクティブハイ
この設定で、正常に動作しています。
手パの場合も、アクティブハイとし、enableにチェックを入れます。
さすれば、動作すると思いました。
ちなみに、猛牛ロックさん、の言われるとおり、1か所だけ、プルダウンにしています。 SEC基板は、全てプルアップです。
maboさんへ、
74HC14は、6回路です、結果は、2つ使います。
しかし、配線がとてもしんどくなりそうです。
やはり、シュミットトリガー止めて、
ハードウエア(抵抗240Ωとセラミックコンデンサ10μF)だけに使用かな〜??
猛牛ロックさん、maboさん、ださんてきでしょうか??TR 2015/11/27(Fri) 20:27 No.222Re: 無題TRさん、こんばんは。いろいろすみませんでした。
私とは,真逆のお考えでした。
>猛牛ロックさん、maboさん、ださんてきでしょうか??
いえいえ、私は、そう思いませんです。チャタリングで誤動作したときに、なにか不具合があるかなと考えたとき、大きな不具合はないように思います。
それで、シュミットトリガーつけるのは、ちょっと重武装かなとも思ってました。
最低限、スパークの対策があれば、○ECさんの基板にも悪影響はないのかなと思いました。
今日、TRさんや,猛牛ロックさんのお話聞いてて、SSちょっと調べて見ました。
私は、SSの基板のポート2の2〜15まで、DIPスイッチで、プルアップが設定できるようにしてるのですが、いろいろ調べたらデフォルトで、次のようになってました。
ポート2 2〜9ピン プルダウン
ポート2 10〜15ピン プルアップ
ポート3 1〜6ピン プルアップ
でした。という訳で、ポート2の10ピン〜15ピンはダブってプルアップしてました。mabo 2015/11/27(Fri) 21:18 No.223Re: 無題maboさん、レス有難う。
自分も、シュミットトリガーは不要かと思いました。
なぜなら、実例で、GoTo0の仕掛けです。
チャタリング対策は、無しです。
それでも、正常に動作しています。
今回は、折角なので、No219の図で、シュミトットリガーとシュミットトリガー用プルアップ抵抗だけを省いてやってみます。
写真は、GoTo0の仕掛けです。
maboさん、SS基板もp、調べたのですか!!
凄い。
それと、フォトカプラーを付けるのも、良しと思います。
理由は、ショートした時、フォトカプラだけの被害で済みました。
ひょっとして、改造するかもしれません。
しばしご猶予を。TR 2015/11/27(Fri) 21:29 No.224Re: 無題シュミットトリガーはローパスフィルタによって緩やかになった波形を整えるために付けます。
それは受け手になるロジックICが緩やかな波形だと誤動作を引き起こす可能性がある場合に付けます。
つまり、中位の電圧時にICが判断に迷うわけです。
なので、ローパスを付けないならシュミットトリガは付ける意味がありません。
但し、チャタリングが起こるの可能性はあります。
チャタリングはスイッチ個々の特性ですからほぼ、発生しないスイッチもあります。
そういうものを使うのも手ですね。
結構面倒な回路になりそうですけど、私ならマイコン(慣れたAVR)を使っちゃいますね。
凡そ、添付図のようにシンプルになります。
内臓プルアップ抵抗を使い、ソフトでのチャタリング対策です。そして、必要に応じて出力のL,Hに合わせた形で
LEDを配置、です。
(AVRはシュミットトリガなのでローパスから直入れても大丈夫ですけど数が多そうなので)
> フォトカプラだけの被害で済みました。
それは偶然、とも言えます。気を付けましょう。
実際、今回の回路では絶縁はされていません。SEC基板と共通回路です。
絶縁するにはカプラ内の光以外に接するところがあってはいけません。猛牛ロック 2015/11/27(Fri) 22:54 No.225Re: 無題猛牛ロックさん、レス有難う。
>・・・・付ける意味がありません。
おっしゃる通りだと最近分かってきました。
>結構面倒な回路になりそうですけど、私ならマイコン(慣れたAVR)を使っちゃいますね。
「キットで遊ぼうのテキスト」を見ていたら、チャタリング対策有り ↓ ↓
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
これでいけるかも!
若し、これがOKなら、
チャタリング対策用の部品(セラミックコンデンサ10μ㌲、240Ω)点数が、
減らせる!
どうでしょうか?TR 2015/11/28(Sat) 08:10 No.226Re: 無題TRさん、猛牛ロックさん、こんにちは。書き込みありがとうございます。
PIC、AVR使うのも一つの手かと思います。ハードでチャタリング対策しないで、ソフトでということになれば、
部品数は、少なくてすむと思います。
ただ、PICの場合、内部プルアップができるできないがあるようなので、全部、外部プルアップするにしても、
TRさんの想定している入力が7程度なので、
抵抗が7個増えるだけかと思います。
入力判定には、割り込みを使ったりしますが、ポーリング(割り込みを使わない)でも、可能です。
また、チャタリング防止に、ウエイトタイムをもうける方法もありだと思います。MPGの切り替えだと、
それほど応答速度が要求されないでしょうから、ウエイトタイムでチャタリング処理しても大丈夫だと思います。
私の作ったMPGの切り替えのプログラムでは、入力判定とチャタリングの防止のために、割り込みを使ってます。
http://mabo52.sakura.ne.jp/files/MPG.txt
10msecごとにキー入力をチェックして、8回キーが押された状態になった場合に、キー入力があったと判定して、
それぞれにあった処理をしてます。
ウエイトを使ってチャタリングを防止するのであれば、
キー入力の判定をウエイト時間をおいて2回判定してやれば、大丈夫だと思います。
わたなら、次のような感じにします。
PORTA→入力
PORTB→出力
main(){
諸々の初期化;
while(1){
if(RA0==0){
__delay_ms(100);
if(RA==0 && RB0!=0){syori=0;}
}
if(RA1==0){
__delay_ms(100);
if(RA1==0 && RB1!=0){syori=1;}
}
---------------RA2〜RA5まで同じ
---------------
if(RA6==0){
__delay_ms(100);
if(RA6==0 && RB6!=0){syori=6;}
}
switch(syori){
case 0:PORTB=0xFF;
RB0=0;
syori=7;
brak;
case 1:PORTB=0xFF;
RB1=0;
syori=7;
break;
----------
----------
case 6:PORTB=0xFF;
RB6=0;
syori=7;
break;
}
}
}
こんな感じにしますが、ウエイト時間を100msおいてますので、キーチェックに0.1秒以上かかると思います。
また、本当なら、今までローだった出力だけをハイにして、該当出力をローにすればいいのですが、判定が面倒なので、
ポートBを一括でハイにしてから、該当出力をローにしてます。
ifの部分がキー入力の判定で、switchが処理です。2度同じ処理をしないために、処理が終わると、
syoriの変数に7を入れて処理済みということにしてます。mabo 2015/11/28(Sat) 12:45 No.229Re: 無題maboさん、こんにちは。
初心者の自分は、プログラムがあまり良く分かりません。
今さっき、キットで遊ぼうのテキストから、パクって、
プログラムを作りました。
初心者の自分は、switch関数が分からないので、
If文を、、、。
面倒になって、まだ途中です。
理由は、実験をやってみたかった。
やったら、、、、
おー!
点灯!!
I/O(SEC基板)のLED と
ロータリースイッチ(タクトスイッチ)モニター用のLEDも点灯!!
やった〜(^^♪
maboさんの言われるように、
Inputのプルアップ抵抗 10kオームだけですので、簡単!!
/*****************************
STEP11_Switch.c
*****************************/
#define _LEGACY_HEADERS
// インクルードファイルの読み込み
#include <pic.h>
// コンフィギュレーションワードの設定
__CONFIG ( UNPROTECT & LVPDIS & BOREN & MCLREN & PWRTEN & WDTDIS & INTIO );
// プロトタイプ宣言
void WaitTime (int cnt);
// メイン関数
void main (void)
{
// 1,2,17,18端子を入出力端子に設定
CMCON = 0x07;
// 電圧レベルの初期設定
PORTA = 0xFF;
PORTB = 0xFF;
// 入出力設定
TRISA = 0b11111111;
TRISB = 0x00;
// 永久ループ
while(1)
{
// SW1がONの場合
if(RA0 == 0)
{
// LED1点灯
RB0 = 0;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW1がOFFの場合
else
{
// LED1消灯
RB0 = 1;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW2がONの場合
if(RA1 == 0)
{
// LED2点灯
RB1 = 0;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW2がOFFの場合
else
{
// LED2消灯
RB1 = 1;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW3がONの場合
if(RA2 == 0)
{
// LED3点灯
RB2 = 0;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW3がOFFの場合
else
{
// LED3消灯
RB2 = 1;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW4がONの場合
if(RA3 == 0)
{
// LED4点灯
RB3 = 0;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
// SW4がOFFの場合
else
{
// LED4消灯
RB3 = 1;
// 待ち時間関数の呼び出し(約10m秒:チャタリング対策)
WaitTime (500);
}
}
}
// 待ち時間関数
void WaitTime(int cnt)
{
while(cnt > 0)
cnt--;
}TR 2015/11/28(Sat) 13:55 No.230Re: 無題TRさん、こんにちは。書き込みありがとうございます。
今出先なので、今晩詳しく書きす。私が掲載したプログラムは、
正確には、ロータリースイッチ一つ用です。二つにするには、変更が必要です。
TRさんの書かれたプログラムは、正確には、チャタリングの最初の部分でスイッチが
入ります。mabo 2015/11/28(Sat) 15:02 No.231Re: 無題mboさん、レス有難うございます。
出先ということにも拘らず、有難うございます。
返事は急ぎません。
お手すきの時にでも結構です。TR 2015/11/28(Sat) 16:01 No.232Re: 無題チャタリング対策の仕方は多様です。
私もその時々に何となく作ります。
ポーリングの例を書いておきます。
大抵、1msおきのタイマーを作って、そこで処理しています。
※そのままでは動きません。処理の流れだけ見てください。
#define TIMES 7 //TIMES回連続で処理
#define PORTX_REV 0b01000111 //出力で反転させるピン
//以下はタイマー割り込み1ms毎の所に
if((PORTX!=PORTX_OLD)||FLG){
if(PORTX==PORTX_OLD){ //FLGが0以外
FLG++;
if(FLG==TIMES){
//
//ここで出力処理
//PORTY=PORTX_OLD~PORTX_REV;
//
FLG=0;
}
}else { //PIN変化
PORTX_OLD=PORTX;
FLG=1;
}
}
猛牛ロック 2015/11/28(Sat) 16:37 No.233
maboさん、こんにちは。
霜月もそろそろわりですね。
来週は、師走です。
ほんとに早い。
今日は、休暇を取りました。
連休最後は、
PICの割り込みをじくりと(; ・`д・´)
既存プログラムを改造して、動作しました!
写真の赤丸。
// LED2・3・4を状態反転
RB2 = ~RB2;
RB3 = ~RB3;
RB4 = ~RB4;
プチ八ピ〜(笑
キットで遊ぼうに、
USART送信割り込み 、ちょっとありました。
これが、maboさんの無線手パに有るような?
有線手パの方
方針を決定できました。
感謝感謝です。
部品の発注をしたところです。
構想としては、
Start
Stop
Pause
Auto To 0
の機能も追加することにしました。
といっても、
こうなると、線の本数が多くなって、
Dinコネクターじゃ〜無理な感じ。
25Pの多芯のコネクタ〜かな。
でも、maboさんの特殊なクランプが必要だし
妥協して、Dinプラグにしました。
8芯 と 6芯 を買いました。
しかし、肝心のサーボアンプが × (泣
先行して配線までやる計画です。
Re: 方針決定Rさん、こんにちは。書き込みありがとうございます。
そう、年を重ねるたびに一年の過ぎるのを早く感じます。TRさんは、まだ、現役でいらっしゃるので、それほどではないようなきもしますが。
PICの方も進まれてますね。USARTは、受信の方にだけ割り込み使いました。送信側にもバッファー入れるべく、研究中です。
手パおおよそ方針決められたみたいですね。緻密に計画なされているので大丈夫だと思います。
コネクターですが、私は、下記の16ピンを使いました。○ルツです。
http://www.marutsu.co.jp/pc/i/19034/
http://www.marutsu.co.jp/pc/i/19025/
http://www.marutsu.co.jp/pc/i/60691/
http://www.marutsu.co.jp/pc/i/60690/
16ピンですので、余裕あると思います。
>でも、maboさんの特殊なクランプが必要だし
目玉クリップとクランプで代用できると思います。
それから、ふと思ったのですが、手パSSの接続は、直接でしょうか。
あまり参考にはなりませんが、私のMPGの回路図です。
この辺分からない部分も多いのですが、私は、間にフォットカプラーいれました。A相、B相の信号は、直接いれましたが、切り替え等は、カップラー経由です。
諸兄が作られたタッチセンサーでもカプラーが入っていましたので、間に入れた方が安心かもです。
この辺は、猛牛ロックさん等の方がお詳しいと思いますが。
今日は、Cycle Start等のテストをするためアダプターを作ってました。
アダプターといっても、タクトスイッチとカプラーを
抵抗でつないだだけのものです。
サーボアンプ早くなおるといいですね。それに、被害が最小であること、願ってます。mabo 2015/11/24(Tue) 14:51 No.196Re: 方針決定maboさん、レス有難うございます。
今、車庫から、カキコデス。
凄い回路図有難うございます。
集大成でしょうか。
自分は行き当たりばったりですよ。(;´・ω・)
今、SEC基板を見ています。
なんと、、、、
入力端子が、、、
10個!
う〜、
あまり関係のないZ軸の(上下)リミットを直列にするか、、
さすれば、1個余る。
1+10=11
入力端子が11になるので、3軸の切り替え
×1、×10、×100
Start
Stop
Pouse
Go To 0
ギリ。
>目玉クリップとクランプで代用できると思います。
目玉クリップって、?
大き目のやつですかね。
目玉クリップで、コネクターを挟んで、クランプですかね?
クランプはどういったクランプですか?
>それから、ふと思ったのですが、手パSSの接続は、直接でしょうか。
はい、A相、B相の端子でしょうか?
直接、SS基板の緑色の端子に繋ぎます。
他の、3軸切り替えと倍率切り替えは、SEC基板に直接です。
>A相、B相の信号は、直接いれましたが、切り替え等は、カップラー経由です。
切り替えって何でしょうか?
サーボアンプですが、明日、三菱から回答があるそうです。
三菱、H2Aロケット万歳!!TR 2015/11/24(Tue) 16:06 No.197Re: 方針決定TRさん、こんばんは。
ロケット成功ですね。切り離しまで成功するといいですね。「下町ロケット」の世界ですね。
>凄い回路図有難うございます。
いえいえ、とんでもございません。公開は、はばかられる回路図です。Oldmanさんにもアドバイスいただきましたが、LEDの後に抵抗つけると、電圧がかかるので良くないそうです。
流れる電流は同じはずですが。
覚え書き程度の回路図です。
>1+10=11
>入力端子が11になるので、3軸の切り替え
>×1、×10、×100
この辺が悩ましいところですよね。確か、ヒロちゃんさんに、ご紹介いただいたものSSにつけると、多少入力端子が増えたような記憶がありますが、不確かです。
>クランプはどういったクランプですか?
バイスでも大丈夫だと思います。目玉クリップではさんで、バイス(クランプ)咥えれば固定できそうです。
>直接、SS基板の緑色の端子に繋ぎます。
>他の、3軸切り替えと倍率切り替えは、SEC基板に直接です。
私がお話したのは、この切り替えのことです。A相B相の方は、電気的にパルスを生成してるので、直接でも大丈夫だと思います。
ロータリースイッチの方は、○ECさんの基板で、プルアップされている信号線をグランドに落とすだけなので、直接でも大丈夫だと思うのですが、多少なりとも、ロータリースイッチ部分で、スパークがでるかなとおもいました。
このこのスパークが気になったもんですから、
ロータリースイッチ→フォットカプラー→○ECさんの基板
の方がいいかなと思いました。
写真は、今日、作業していた、テスト用の基板です。
タクトスイッチ→抵抗→フォットカプラー
です。フォットカプラーからの端子をSSにつないで、実験しようと思います。mabo 2015/11/24(Tue) 20:33 No.198Re: 方針決定maboさん、レス有難う。
TVでも、下町の工場が三菱重工の下請けとなって、、、
本当に、日本の下町の技術は凄いですね!
>この辺が悩ましいところですよね。
今も、どうしようかと悩んでいます。
グランドは、2枚の基板ごとに分けて、それぞれのグランドを取るべきかな〜。
こんなことを考えていたら、面倒になってきました。
場合によっては、3軸とStrat,Stopだけにするかもしれません。
お写真どうも有り難うございます。
タクトスイッチが4個もありますね。
各機能は
Strat
Stop
Pouse
Goto 0かな。
ワクワクしますね。
接点のスパークですか。
自分も、本格的に勉強したわけじゃないから何とも言えませんが、
リレーに繋がっていたら、絶対、フォトカプラーをつけるけど、
どうかな〜。
SEC基板のシグナルは5Vだし。しかも、数十ミリアンペアですよね。
人柱で、フォトカプラー無しでやってみます。TR 2015/11/24(Tue) 21:06 No.199Re: 方針決定こんにちは
フォトカプラを使う用途としては大きく2つ
・絶縁(ノイズ対策、保護)
・異なる電圧間での信号伝達
だと思います。
私としては(私が作るとして)基本的にこの回路では保護するべきものはPICですのでPICの
入力部に必要を感じたら入れます。
出力部(SEC基板からしたら入力部)は基本的には入れません。(SEC基板の取説等に記述があれば別ですが)
今回の場合もマイコンからの出力なので特別な考慮は必要ないように思います。
(絶縁でも異なる電圧でもないからです)
気になったのが74HC14(シュミットトリガ)を入れている事です。
16F88はシュミットトリガにはなっていないのですか?
16F1705は3,4レベルから選べるようになっていました。
同じ16Fでもかなり違いますね。
また、電界コンを入れるんですね。私ならセラコンで済ませちゃいます。
抵抗*コンデンサ容量が小さいようにも思うのですがMABOさんは(74HC14も考慮して)テストしての値でしょうから
TRさんはもう少し大きくした方が良いかと思います。
(チャタリング時間は付けるスイッチによってかなり違います)
LEDの抵抗位置についてはどちらでも構わないかと・・・
でなければ、アノードコモンの7セグなんかは作られないかと思います。
別の意図で言ったのではないですかね?
下町ロケットは面白いですね。欠かさず見てます猛牛ロック 2015/11/25(Wed) 12:45 No.200Re: 方針決定猛牛ロックさん、こんにちは。
>TRさんはもう少し大きくした方が良いかと思います。
(チャタリング時間は付けるスイッチによってかなり違います)
これ気になってきました。
というのも、キットで遊ぼう、で取り上げている、チャタリングです。
モメンタリの押しボタンの場合、誤動作しました。
maboさんからも、図面のTD62003にある、インバータです!
やはり、面倒でも、非反転のシュミットトリガー、これ付けた方がいいかと、再考しています。
後追いの写真です。
こんなイメージです。TR 2015/11/25(Wed) 18:34 No.201Re: 方針決定猛牛ロックさん、TRさんこんばんは。
猛牛ロックさん、アドバイスありがとうございます。
確か、テスト基板で、チャタリングがでてたので何も考えずにシュミットトリガーいれたんだと思います。
あたらためてデーターシート見ると、STの記載がありました。
>抵抗*コンデンサ容量が小さいようにも思うのですがMABOさんは(74HC14も考慮して)テストしての値
いえ、今回もそうですけど、諸兄のHPの値を拝借して計算はしていません。初心者たるゆえんですね。
抵抗とコンデンサーの値によって、違いがでるというのは、かろうじて、理解してるところですけど・・・・。(汗)
タクトスイッチは、チャタリングの温床?ですよね。
TRさん、いろいろ考えられてますね。はやく稼働するといいですね。
それから、ちょっとのぞいてみたら、SSのイーサネット版は、ポート3も入力に使えるようで、USB版よりもI/Oが多くとれるみたいです。
下町ロケット、続編もやるんでしょうかねえ。それと私は、今からSWの公開楽しみにしています。mabo 2015/11/25(Wed) 21:07 No.202Re: 方針決定maboさん、こんばんは。
三菱から、サーボアンプの1次試験結果報告が告げられました。
異常なしだそうです。
今回故障と思った理由は、
サーボアンプから制御の配線が端子台まで配線が行っていまして、
端子台でアラーム端子から出ているはずのDC24Vをテスターで計測できなかったらです。
サーボアンプ側でもアラームの表示が出ていました。
考えられる原因は、サーボアンプと端子台を繋ぐ配線です。
途中で、断線しているかもしれません。
しかし、大人のおもちゃとしては、高価だし、大変複雑です。
仕事の合間に、調べるしかないっす。
きっと原因は見つかると思いますが、
何時になるやらです。TR 2015/11/25(Wed) 23:07 No.203Re: 方針決定TRさんへ
ローパスの抵抗がありません。そして、0.1uだと10kΩ程度の抵抗は欲しい所ですけど(時定数1ms)それではローレベルにはなりません。(2.5V)
10u(私の持っているセラコンの一番大きいもの)と240Ωにすれば(時定数2.4ms)、なら0.12Vなので全然安心な値です。
(若しくはプルアップ抵抗をもっと大きくしてください)
ソフトでチャタリングは回避出来ますけど、ハードで対策する方が簡単だと思います。
(でも、大抵、ソフトで行っています(^^)/)
MABOさんへ
このあたりがPICの難しさです。AVRなら何も考えずにピンに繋ぐだけなのですが。
大抵、マイコンピン-スイッチ-GNDとシンプルに繋ぎ、あとはソフト処理で誤魔化します。
> タクトスイッチは、チャタリングの温床?ですよね。
小さいよく見かけるやつでしたら、比較的少ないと思います。
マイクロスイッチや特大の押釦スイッチの方が多いと思いますよ。
私の私見ですけど、大きい奴ほど時間も長く厄介です。猛牛ロック 2015/11/25(Wed) 23:09 No.204Re: 方針決定猛牛ロックさんへ
>ローパスの抵抗がありません。
写真の様に、もう1個、追加すれば宜しいのでしょうか?
そして、シュミットリガーは止める。TR 2015/11/26(Thu) 07:19 No.205Re: 方針決定そこではなく左(スイッチの上)です。
ローパスが必要か?
シュミットトリガが必要か?
はそれぞれのスイッチの意味と繋ぐ先を見て判断してください。
ローパスは軸の切り替えと倍率はローパスが必要で残りは不必要?
ローパスによって波形が緩やかになるのですが、そのことによってシュミットトリガが必要になるかは
SEC基板の信号を受け取っているものによって異なります。
そのICのデータシートもしくはテストで判断してください。猛牛ロック 2015/11/26(Thu) 09:17 No.206Re: 方針決定猛牛ロックさんへ
検索したら、有りました。
http://www.palettesoft.co.jp/technology/pic/pic_sample_sw0.htm
こんな感じでしょうか?TR 2015/11/26(Thu) 11:39 No.207Re: 方針決定プルアップ抵抗が無くなっていますよ。
これだと5V-GNDが短絡してしまいます。猛牛ロック 2015/11/26(Thu) 12:34 No.208
maboさんこんにちは。
maboさんに、PICの影響を受けて、ぼちぼちとやっています。
でも、依然として、キットで遊ぼうのテキストで学習中です。
今は、STEP15の外部割込みに入っています。
受信側のプログラムを見ていると、
//***************************************************
// 割り込み処理(受信割込処理)
//***************************************************
void interrupt InterReceiver( void ){
// if (PIR1bits.RCIF == 1) { // UART割込の場合
if (RCIF == 1) {
RCV_Buff = RCREG ; // レジスタからデータの受信
Flag = 1 ; // 受信完了
//PIR1bits.RCIF = 0; // 割込受信フラグのリセット
RCIF=0;
}
}
//****************************************************
良く分かりませんが、
割り込み処理を見かけました。
ハードルが高くて、理解が進みません。
しかし、無線化をやりたいと思っていますが、
道のりは遠く感じます(笑
それと、
某オク製のドリルチャックを買いました。
国産のユキワと云うメーカーです。
写真は、中華の安物との対比です。
ベンツマークのスリットが見えますよね。
月とスッポンでしょ!(笑
ユキワの他にも、バーテックスという、手締めのドリルチャックを持っていますが、
外見は、ユキワと対比しても分かりませんでした。
バーテックスも良品かもしれません。
追伸
手パですが、
東京測定器とFANUCの品を、混同していました。
しかし、外見がすっかりです!
FANUCは、中国に工場を持っていますね。
Aliexpressのお店に聞いたら、
本物と言っていました。
Re: ドリルチャック 他maboさん、続けて失礼します。
手パの話の中で、先達者の話を思い出しました。
ロータリースイッチとは別のスナップスイッチを使い、
OEMコードに有る機能を利用している方がいるという話を思い出しました。
http://blogs.yahoo.co.jp/nag_45poti/60354084.html
この先達者の方は、
OEMコード(下)
1000:Cycle start
1001:Pause (Feed Hold)
211:Home X Home Z (Turn)
213:Home Z (Turn)
この機能を使う場合は、
入力端子にスナップスイッチを使い、入力端子をローにしてやれば、良いのでしょうか?
OEMコードには1007=All ゼロという便利な機能もある様です。
宜しくお願いします。TR 2015/11/22(Sun) 18:28 No.191Re: ドリルチャック 他TRさん、こんばんは。書き込みありがとうございます。
割り込みですね。はじめ面倒と感じるかと思いますけど、これが使えるようになると、幅がでてきます。
割り込みの設定→割り込みの種類の判定→割り込みに応じた処理、ということで、それほど複雑ではないと思います。
ワイヤレス化では、いくつか使ってますが、データの受信に割り込みを使ってます。
FANUCは、中国で生産ですか・・・。それなら、アリでn扱いがあるのも納得ですね。
ユキワですか。諸兄のHPでも、話題になってるようですね。新品は、高いんでしょうね。
その分精度は、抜群でしょうね。
バーテックもよく見かけますね。VERTEXで、台湾のメーカーでしょうか。このメーカーのものも結構な値段しますよね。
それからお尋ねの件ですけど、確認していないという前提でお聞きください。
1000:Cycle start
等の機能を使うには、スナップスイッチではなくて、通常のタクトスイッチのような機能のスイッチを使えばいいのでは、と想像してます。
一度動作が始まってしまえば、いいわけですから、マウスのクリックと同じ動作できればいいのかな、と思います。
アクティブローの設定で、動作が始まるまで、割り当てのピンをグランドにおとせば、いいのかなと推測してます。
この辺は、後日、また、実験してみようと思います。
諸兄のHPの、手パには、ボタン部分もありますが、回路図が載ってないので、詳細は不明ですが、多分、タクトスイッチ等を使ってるのかなと推測してます。
http://blogs.yahoo.co.jp/nag_45poti/58505704.html
市販の手パでも分解できると、いいのですが。mabo 2015/11/22(Sun) 21:26 No.192Re: ドリルチャック 他maboさん、レス有難うございます。
PIC,不慣れなので、時間がかかります。
ぼちぼちと思っています。
>諸兄のHPの、手パには、ボタン部分もありますが、回路図が載ってないので、詳細は不明ですが、多分、タクトスイッチ等を使ってるのかなと推測してます。
それなら知っています。
モメンタリー方式と呼ばれていて、押している間だけ、ONとなるタイプですね。
それから、写真は多かったので、先程、メールも送らせていただきました。
併せて、宜しくお願いします。TR 2015/11/22(Sun) 21:51 No.193
過日報告した、SUS304の自作の治具がやっと、4個揃って、完成です。
問題の座グリですが、最終的には、約500RPMで切削しました。
回転数を低くしたので、ビビりがなくなって、良い感じになりました。
やはり、回転数を上げると、ビビります。
回転数を上げると、切削中でも、フライス盤本体に振動がでます。
コンクリートの床に固定すれば、改善されるかもしれません。
今の自分の環境の場合、エンドミルは、超硬で回転数を上げた切削方法は、
できないと思いました。
PICの方ですが、
途中を端折って、終わりの方にある PWMをやってみました。
根が飽きっぽいので、コピーペーストの繰り返しでなんとなくテキストの終わりの方まで来てしまいました。
一番印象に残ったのは、
PORT Aを利用したスイッチと、
PORT Bに繋いだ、LEDのONとOFFが一番理解できました。
後は、惰性でした。
この辺は、やはり、特に問題意識がなく入門したせいだと思います(笑。
Re: キットで遊ぼうのテキストTRさん、こんばんは。書き込みありがとうございます。
治具完成ですね。それにしても、ML4でもびびるんですね。床に固定してないので、台座ごと共振してしまうんでしょうか。私も、作業が途中になってますが、旋盤、しっかりとしたものに作り変えるべく、作業してますが、作業が、なかなか進みません。
旋盤の上に、何かをのせて、作業すると、振動で、落ちてしまいます。これ、きちんと、固定すると、コーヒーでもこぼれなくなるようです。
http://www.neginoleader.com/mytool/senban/senban.html
PICは、PWMまでいかれましたか。早いですね。PWMのプログラムもくんだことあるのですが、参考書だよりで、ちっとも頭に入っていません。
そのほかの設定もそうですけど、時々、思い出して、プログラムしないと、忘れてしまいます。
そのため、プログラムには、余分な注釈をいれてます。
後で、これがとても役にたちます。
PWMは、専用のモード使うと、設定が多少面倒ですが、ポートのON、OFFだけで、同じようなことできます。
ワイヤレス化するにあたって、A相とB相のパルス発生するのに、二つのポートのONとOFFを交互にしただけす。
これに使ったのは、for( ; ; )の繰り返し文と、switch( )文です。
なれると、それほど難しくはないと思います。mabo 2015/11/14(Sat) 21:17 No.184Re: キットで遊ぼうのテキストmaboさん、レス有難う。
ML4も、振動します。
やはり、モーターが回転しているせいじゃないかと思います。
とにかく振動が悪さをしています。
PICは、、、
理解していません。
コピペできただけです。
大凡ざっくりとだけです(笑
実際、必要な事が出てきたら、必死に学習するのでしょうけど、
今のところ、そういったことがありません。
無線手パはやはり難しいんでしょうね。
有線手パが完成したら、
無線化したいです。
その節は、PICの内、無線化に必要なことについて、頑張りたいと思います。
どうぞ、宜しくお願いします。TR 2015/11/14(Sat) 21:36 No.185Re: キットで遊ぼうのテキスト見落としました。
>ワイヤレス化するにあたって、A相とB相のパルス発生するのに、二つのポートのONとOFFを交互にしただけす。
これに使ったのは、for( ; ; )の繰り返し文と、switch( )文です。
なれると、それほど難しくはないと思います。
調べてみます。TR 2015/11/14(Sat) 21:52 No.186Re: キットで遊ぼうのテキストTRさん、引き続き、書き込みありがとうございます。
>無線手パはやはり難しいんでしょうね。
市販のものは、分かりませんが、私がやっているのは、難しいことではないと思います。
手パからの信号をPICで、処理に応じた信号に変換します。
(MPG)正回転1パルス−−f
(MPG)反回転1パルス−−b
軸選択OFF−−−−−−−1
x軸選択−−−−−−−−−2
y軸選択−−−−−−−−−3
z軸選択−−−−−−−−−4
x1−−−−−−−−−−−5
x10−−−−−−−−−−6
x100−−−−−−−−−7
この処理に応じて変換した信号のfとb、1から7の数字を無線で送ってます。。
受信側では、受け取ったfとbと1から7の数字に応じて処理をしてるだけです。
処理といっても、詰まるところを、それぞれに割り当てたポートのON・OFFをしてるだけです。
その過程で、送信側は、外部割り込み・状態割り込み、
受信側では、USART受信割り込みという、小技を使ってます。
初めての方には、多少抵抗あるかもしれませんが、それほど複雑なことはしてないです。
あとちょとしたテクニックですが、プログラムを見やすくするのに、マクロを使ってます。
ポートの番号等をRA1のように使ってもいいのですが、これを分かり易い他の名前に置き換えることができます。
#define Xjiku RA1
のように記述することで、Xjikuという名前がでてきたら、RA1と読み替えなさい、ということをプログラムに指示できます。
こうしておくことで、RA1のポートは、Xjiku(X軸)に割り当てたということが、分かり易くなります。
と同時に、Xjikuの割り当てをRA2に変更するときは、
#define Xjiku RA2
とすることで、RA1→RA2ということで、1カ所変更することで、プログラム全部に対応できます。mabo 2015/11/14(Sat) 23:58 No.187Re: キットで遊ぼうのテキストmaboさん、おはようございます。
No187の記事を見て、焦っています。
急いで、テキストを見直しています。
・for( ; ; ;)の使い方
・switchは、未確認です。
大凡、条件によって処理を選ぶんでしょうかね〜。
No168の記事
もうちょっと進むと、LCD表示のためのプログラムとそれを使うプログラムというように、
複数のプログラムを作って、一つのファイルにして、実行するということをやります。
この言葉も思い出した!!
表の記事も、見始めました。
−−−自作MPGワイヤレス化 (3)−−−
2015-10-19 Mon
この記事にある、、、、
main.c
おー!
そういえば、自分が、エラーを起こした折、maboさんから、教わった事!!
main.cを開いた、、、
テキストでは、ピンと来なかったことが、説明されている!!
↓ ↓
CMCON = 0b00000111; // コンパレータは使用しない
上は、テキストでは、0X07 と表現
この意味は、コンパレーターを使用しないですか!
No187 の記事
考え方を有難うございます。
今の自分には、大雑把な話しか分かりません。
先に行って、コピペになろうかと思います。
その節はご容赦をお願いします。
#define Xjiku RA1
これ良い関数ですね!
大変分かり安いし、
忘れっぽい時分には、何を示しているのか、分かるのです素晴らしいと思います。
もう、(;´・ω・)出っ放し。
今は、コピペですました、テキスト本を、見直しています。TR 2015/11/15(Sun) 09:27 No.188Re: キットで遊ぼうのテキストTRさん、こんにちは。書き込みありがとうございます。
私は、今日は、ローコストLCDシリアル通信モニター(デバッグモニター)を作ってます。
http://www.ne.jp/asahi/air/variable/picmel/applications/lcd_serial/
作り方、実態配線図まで、でてるので、それみながらやってます。
>CMCON = 0b00000111; // コンパレータは使用しない
>上は、テキストでは、0X07 と表現
>この意味は、コンパレーターを使用しないですか!
はいそうです。特定の端子をコンパレーターの端子(アナログ)として使わないで、通常のデジタルの入出力として使うための設定です。
テキストでは、0x07と表現されてますが、私は、0b00000111と書いています。実は、これ、
0x07=0b00000111
ということで、同じ大きさなんです。0xがつくと、16進数。0bがつくと、2進数の表記になります。
16進数で表現されている数字を2進数に変更してやると、やってることが理解しやすくなると思います。
たとえば、ポートAの2番(RA2)を入力で使う設定は、該当する部分を1にしてやればいいので、
TRISA=0x04
と表現することができます。ただ、これだと、なにを意味してるのか、わかりずらいです。
これを
TRISA=0b00000100
のように2進数で表現すると、わかりやすくなります。RA0は1桁目、RA1は2桁目、RA2は3桁目というように割り当てられていますので、3桁目を1にすると、RA2を1にして、入力の設定にできます。
PICでは、8桁や16桁(例外もありますが)の2進数のある特定の桁(ビット)を1にしたり0にしたりすることで、いろんな設定をします。
そんな訳で、16進数←→2進数のやりとりは、必須だと思います。私は,右手で数えて、16進数を2進数に直したりその逆をやったりしてます。
16進数と2進数の一覧表てもとに置いておくといいかもしれません。
00→00000000
01→00000001
02→00000010
03→00000011
04→00000100
05→00000101
06→00000110
07→00000111
08→00001000
09→00001001
0A→00001010(10進数の10)
0B→00001011
0C→00001100
0D→00001101
0E→00001110
0F→00001111
それから、#defineの意味がわかると、いろんな方の書いているプログラムで、何をしてるのか、少しずつ見えてくるようになると思います。mabo 2015/11/15(Sun) 12:22 No.189