[1] PIC入出力例 バケさん(管理人) 【2008/09/03 06:19:16】[返信][編集][削除] [PC] PICマイコンの回路例をUPします。
入力と出力の例です、解説は時間があるときにします。
| | | [3] Re:PIC入出力例 バケさん 【2008/09/03 08:08:15】[編集][削除] [EZ]W42H 入力の例について
10kの抵抗、これがプルアップ抵抗です。
コンデンサは無くても大丈夫ですが、念のためつけています。
自分としては、チャタリングを軽減するためと5V以上のノイズでPICが壊れないようにと考えて入れています、実際のウインカー基板もこの回路になっています。
どれくらい効果があるかは検証出来ていません。
PICのプログラムを組むときに注意が必要な事があります、該当ビットが0の時にONで1の時にOFFになります。
感覚と違うので気を付けないと間違ってしまいます。
補足
最近のPICは多機能で最初の初期設定が重要になっています。
入出力も初期モードがアナログ入力になっていたり結構苦労します。
データシートにもプログラム例が載っているので参考になります。
データシートが全てと言っていいぐらいの存在なのでデータシートが読めるように努力も必要だと思います。
日本語のデータシートもあるPICも参考にするとどのあたりに何が書いてあるかわかるのではと思います。
英文が読めれば問題なしですね。 | | | [4] Re:PIC入出力例 バケさん(管理人) 【2008/09/03 12:48:28】[編集][削除] [PC] 出力の例について
回路としては電流制限抵抗をつけているだけです。
入力と同様に該当ビットを0にするとLEDが点灯し、1にするとLEDが消えます。
出力も考え方が逆になるのでプログラムを組む時には要注意です。
ここで疑問が湧くと思いますが、なぜプルアップで出力もプラスにつなげるのか。
これをプルダウン抵抗(GNDに抵抗を接続)すると動作しないのか?
出力する時にGNDに接続すると点灯しないのか?
答えは「どちらでも動作します。」
これは過去のPICがこの方が都合が良かったので今でもなごりでこうしています。
この方が経験上トラブルが少ないのも理由にあります。
自分はこの回路で慣れているので特に利点がなくなっても統一して回路を考えています。
| | | [6] Re:PIC入出力例 TAKA 【2008/09/04 11:15:26】[編集][削除] [PC] おはようございます!
回路図と説明を拝見しました。
わざわざすみませんm(__)m
プルアップ抵抗については、何となくですが理解できて来ました!
私もバケさんに習って、プルダウンではなくプルアップ抵抗にします。
ちなみに、添付した画像のような回路図をネットで見たのですが、1KΩと100Ωの抵抗の役割とはなんでしょうか?
回路図は私がエディタで初めて書いた物なので、見づらかったらスミマセンm(__)m
プログラムを組む際に逆になるんですね?
分かりました、気をつけてやってみたいと思います(^^)
コンデンサは、積層セラミックコンデンサで良いのでしょうか?先だって添付して頂いた写真には、電解コンデンサらしきものが見当たらなかったので、積層セラミックコンデンサで良いのかなぁ…と。
おバカな質問ですみません(^^;)
初期設定の件ですが、既にハマッております(笑)
データシートは、日本語の16F84のを参考に16F648Aのを眺めていますが、84に無い機能については英語が高校生レベルで止まっているので翻訳しながら読んでいて、もの凄い時間がかかってます(汗)
ひとまず、Bポートだけを出力に使って、6LEDでのナイトライダーのプログラムを組む練習をしています。
まだスイッチ入力の部分が組めないので、流れるパターンを時間毎に変えるだけの単純なものですが。
溜まっては消えていくというようなのを作ってみたら、もの凄い数の命令数になってしまって、これを何とか簡略化できないか…とネット検索をしまくってます(笑) | | | [7] Re:PIC入出力例 バケさん(管理人) 【2008/09/04 12:58:37】[編集][削除] [PC] あまり、自分も詳しくないのでたぶんですが、
1kの抵抗はPICの保護のためではと思います。
ON/OFFは電圧で見ていて電流はほとんど関係ないので1kの抵抗があっても十分ON/OFFの判断ができます。
間違って大電流が流れないようにつけてあるのではと思います。
相手がSWではなく電圧を発生させる他の機器の場合は必須の抵抗になるのではと思います。
100Ωの抵抗はチャタリング防止に関係するものではと思います。
SWをONにしたときにコンデンサの放電が始まりますがこの抵抗があると放電に時間がかかります。コンデンサを大きくせずにチャタリング防止の効果をだしているのではと思います。
コンデンサはすべて積層セラミックコンデンサにしています。
深い意味は無く部品の形がかっこよく、他の方の例でもよく使われていたので使っています、もしかしたらもっと意味があるかもしれません。
やっぱり、はまっていますか。ちなみにPICは何を使われているのでしょう?
16F88は手元にあるので試すことが出来ます。
流すのを簡単にするのはシフト命令を使えばいいと思います。
Bポート自体を1バイトとしてまとめて考えて
そのワード単位でシフトをすると1命令で流れます。
その時にキャリーフラグをどうするとか、1ビット立てるとかすれば溜まったりとかも簡単にできる(と思います)
まとまった1バイトを直接Bポートで考えず、ワークの1バイトを確保してそのワーク上で変化(流す)させて、あとでビット単位でBポートに出力すると考えるのが楽になります。
同時にトラブルも防げます。
| | | [8] Re:PIC入出力例 TAKA 【2008/09/04 14:55:51】[編集][削除] [PC] こんにちは!
あの回路図の抵抗には、そういった意味があるんですね…
電子回路って奥が深いし面白いですね(^^)
積層セラコンは、先日のアキバでの買い物の際に余分に買ってきてあるので、それを使ってみようと思います。
今持っているPICは、16F648Aと16F88だけです。
ひとまず16F648Aを使って練習しているので、まだ16F88には触れてないです…
最初、Aポートを出力に使おうと思っていたのですが、Aポートの上位5ピン(だったと思います)が全く反応してくれず、Bポートを使ったら平気だったので、そのままBポートを使うようになっています。
シフト命令は、RRFとかRLFとかの事ですよね?
最初の方に試しに使ったのですが、シフトの途中で戻ったり、溜めたりするのが出来ないと思い込んでました…
一番最後に書かれていた内容については、勉強不足の為に理解できませんでした…(汗)
頑張って勉強します(^^;)
| | | [9] Re:Re:PIC入出力例 バケさん 【2008/09/05 08:04:31】[編集][削除] [EZ]W42H 自分もPIC初心者かつ独学で始めたので、結構苦労したくちです。
同じ所ではまって、出力はBポートとつい考えてしまいます。
回路例もBポートでかいてしまった。
Aポートも初期設定を正しくすれば使えます。
モードを出力にするのはもちろんの事ですが、クロックをどう使うか、その他の機能を無効にしないといけないとかありました。
Bポートには内部でプルアップ抵抗がつけられるようになっていますが、例の回路でしたらあっても無くても大丈夫だと思います。
| | | [10] Re:PIC入出力例 TAKA 【2008/09/05 10:05:57】[編集][削除] [PC] おはようございます!
コンフィギュレーションは、一応下記のように記述してあります。
__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
あと、夕べネット検索をしていて見つけた記事に、デフォルトでCMCONになっているので、コンパレーターをOFFにする必要があるとなってました。
'111'でCMCONの設定をするとだけ書いていたのですが、こんな感じで初期設定に追加すれば良いのでしょうか?
clrf PORTA
movlw B'111'または0x07h
movwf CMCON
まだまだ先の話ですが、ウインカーのプログラムを組むにあたって、左右のウインカー入力に2ピン、モード切替スイッチに1ピン、半固定抵抗などを使ったスピード調整のために1ピンで、16F88を使った場合、残りの12ピンをLEDの出力に充てたいと考えてます。
| | | [11] Re:PIC入出力例 バケさん(管理人) 【2008/09/05 12:29:11】[編集][削除] [PC] データシートの31ページあたりに、PORTAの初期設定の例が載っています。
参考になると思います。
CLRF PORTA
MOVLW 0x07
MOVWF CMCON
BCF STATUS, RP1
BSF STATUS, RP0 ;Select Bank1
MOVLW 0x1F
MOVWF TRISA
このデータシートの例では
RAの0から4はが入力(出力に出来ます)
RAの5は常に入力
RAの7,6はoscillatorモードにより使用不可?
になっています。
BCF STATUS, RP1
BSF STATUS, RP0 ;Select Bank1
MOVLW 0x10
MOVWF TRISA
これでRAの0から4が出力になるのかな。
RAの7,6を使うにはもっと他の設定が必要(クロック関係)だと思います。
データシートを斜め読みして回答しているので間違っているかもしれません。参考程度にしてみてください。 | | | [13] Re:PIC入出力例 TAKA 【2008/09/06 00:01:07】[編集][削除] [PC] こんばんは!
データシートの31ページには、まだ到達していませんでした(笑)
で、以下の記述にしてみたら、RA5を除く全てのI/Oポートが出力に使えるのでは…と思ったのですが、すぐに試せないので、時間を取ってやってみたいと思います!
RA6とRA7に関しては、コンフィギュレーションワードで『_INTOSC_OSC_NOCLKOUT』と設定すれば、内臓の4MHz発振になるはずなので、出力に使えると思うのですが…これも実際にやってみて確かめてみます(^^)
********************
clrf PORTA
movlw 07h
movwf CMCON
bsf STATUS,RP0
movlw 10h
movwf TRISA
clrf TRISB
bcf STATUS,RP0
******************** | | | [14] Re:PIC入出力例 TAKA 【2008/09/13 01:34:49】[編集][削除] [PC] こんばんは!
なかなか時間が取れずにいたのですが、やっとテストをしてみました。
結果的に、RA4はLEDの駆動には使えない事が分かりました。
いろいろと設定を試したのですが、何をどうやってもLEDが点灯せず、またもネットを検索しまくりました(笑)
それで分かったのは、16F648AのRA4はオープンドレインという出力しかしないらしい…という事です。
私は、このオープンドレインというものの意味が分からず(今も分かっていませんが)、懸命にHレベルで使おうとしていたようです。
多分、ちゃんとデータシートを読めば書いてあるのでしょうが、手を抜いたせいでバケさんにもご迷惑をおかけしました。申し訳ありませんでしたm(__)m
ですので、16F648Aを単体で使っている限り、私のやりたかった事は出来ないようです。
16F648Aは、別の場所のイルミネーションを制御するのに使うなどして、早めに16F88へ使用PICを変えた方が良いような気がしてきました(笑)
バケさんは16F88を使われているとの事ですが、ウインカーやテール&ストップの制御にあたって、何か気をつける点などはありますでしょうか? |
|