初めてのPIC 0x0e
■ このスレッドは過去ログ倉庫に格納されています
.
_ _ PICをさわるのは今日が初めて、という超初心者のためのスレです。
(O>――<O) PIC選び、PICを使った回路は、誰でも最初は不安なものです。
/ (・) (・) ヽ 恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。
○ /▼\ ○ 質問のしかたは、初心者質問スレの発言1を見てくださいね。
|(ヽ二フ ) |
/  ̄ ̄ ̄ ヽ
f ヽ / | PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。
ヽ \ / ノ ・PIC専用のスレ
| \_ )(_/ ! 本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。
| | ここの話がわかるようになれば、あなたはもう一人前のPICerです。
| | ・マイコンソフト 悩み事相談室
| | ̄ ̄| | マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。
(_ノ ヽ_)
質問する時のコツ
・性格の悪い回答者はスルーしよう(相手すると逆効果)
・素人玄人などと 上から目線の回答者は、無視してください。相手してはいけません。
・そこそこ良い回答が出るまでしばらく再発言しないのもあり(良回答は後に出やすい)
・回答者のアドバイスで後日解決したら、結果報告しよう(とても喜ばれる)
・回答者は、僕たち初心者に優しくしてください。あなたも通ってきた道のはずです。
必要なソフトなど(基本無料)
統合開発環境 MPLAB X ttp://www.microchip.com/mplab/mplab-x-ide
コンパイラ (XC8 XC16 XC32) ttp://www.microchip.com/mplab/compilers (高機能版は有料)
コード生成プラグイン (MCC) ttp://www.microchip.com/mplab/mplab-code-configurator
マイクロチップ ライブラリ (MLA) ttp://www.microchip.com/mplab/microchip-libraries-for-applications
必要なハードなど
初心者はPIC16F1、PIC18F1以降の型番で始めると無理なく始められます。
プログラムの書き込みには書き込み器が必要です。持っていない場合はPICkit3(中華クローンでもまず大丈夫)を使いましょう。
PIC一覧、スペック検索 ttp://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1005
さ、質問どうぞ〜っ
0x0d 2017/10/25〜 ttp://rio2016.5ch.net/test/read.cgi/denki/1508935254/
0X0C 2017/07/27〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1501157324/
0x0B 2017/05/08〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1494235320/
0x0A 2017/01/04〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1483498857/
0x09 2016/09/07〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1473238791/
0x08 2016/04/30〜 ttp://rio2016.2ch.net/test/read.cgi/denki/1461994030/
0x07 2016/02/05〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1454648249/
0x06 2015/07/18〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1437151298/
0x05 2015/04/07〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1428391368
0x04 2015/01/02〜 ttp://wc2014.2ch.net/test/read.cgi/denki/1420205108 (())))(())()(())((())()((()))))((()())()))(((()((()()()()))((())()(()()))(()
)(((((()())(())(((())()())()())())(()()())(())))())))((()))(()))))((()(((()(
()))()((()()())((()((()())())()(()((()))(())))))(()()()((()(())((())())))()(
))()((())))()(((()()()((())))()))))()((())())()()((()())((()()(()))))(()((((
(()))())))))()())))))((((()(()(((())())()((()))))()()())()())()((()(((()((((
()((((()))((((()())(()(()(()()()()())))())(()((())()(()))))())(()(())()())))
())))(())(((()(((((()))(((())(((()())()())()((()(()()))()))()))())((())())))
))()(((())((()))((()(())))((((()()()())(())()(()))()())(())))))))((((()()()(
()()()((())()))()(()((((())()()))))((()()()((())()()())))()()(())))()()(((()
)()()))()))((())(()))))()))()))(((((()))((()(()(((((()()()(()())(()())())(()
(((()((()((((()(()))()()((())())))))(())(())))())(()()(())))())(()(()((())))
)((())(())((()(()))))())()(()((()()((()((()()()))))())()((())(())(())))(()()
)()))(((()()()))()(()()())))((((()())()()())(()()))))(()))))(((((())()(((()(
))(()()))()()(((((((()(()(()))))))(((((())))()))(()()((()(((()))(()(()))))))
()())((()(()))(())))()()))))())()(()())))()(((())()((()(())()(()(((()())(()(
))()()(()((())((()))(())(()(()(()))()()((()()(((())()()))()()())()))(()))(()
()))())()()()(()(()))))))(((((()((()()))()(((((()))(()()(())))())()())((()()
)((((()))((()((())())(()())())))((())))()))))))(()(())))()))(()()((((()(((((
((()))))()()))(()(()()(())(((()))())())()(((()))))()())((()()))((())(((()(()
)(())()()))))()())())(()))))(()((()((()(()((()()(((())((((()()())())(()))))(
)((()(())))())(()()()))((())()(((())(((())))())((()))())())))()(()(((()())((
))(())((((())((()(()))()))(())(((()())))()()()())))(((()))(()()())((()(()())
))((())))(((((()()()))))())))()))()((()))((((((()())))())(())(())((()()(()((
()((((()())(()((()())((())())((((()((()))))())(((()())())())(()))()))()))())
()))))())))()())(()(()()(())(((()))())))(())))((()()))(()()()((()())((((((((
)()())()((())))(()()())())(()(()))))((())()()()())())(()(())(()(()()()()((((
(((())())))()))((())()))())(()(()(()(((()())()(())(()()()(((()))())))))(()((
())((())(())))()()()()))(((()()()(()())))((()((((((())))()))()((((())))))(()
()())(()))()((((()((())())(()))))()()())))(()))()()(()((((()(())()((())))()(
)))(())()())()()()))(()(()(((((()())(()((()))((())()()())(())))(()((()()()))
(()(((()(()()((((())))()(((((()))(()))((())(())(())()(())))))))()()))))(())(
))(((()())(((()))))((((()())()())))(((())(()(()()()(()))())()(()())()())))((
)((((())))))(()(()(()())((()())())())())(()(()((()(()((())))))(((()))(()()))
()(((()(()()))(())(()(()()((())()))((()))((())(())(()((())())())(()())))()))
()))())(()((((((((()))((((()())())()()))(())(()()))(()(()))((()))((()))))())
())))(((()((()()((()()(((()(()))))()))())(())())(())((())))())()()(()(())(()
))))))))())()((()))(((()()(())((((()(((()()())()(((((((())(())()))(()())))))
()(((())(())(())))(()((()()(()()))()(((((())()())())()(())(())(()())))()))()
((((((()))(()())()())()()))))()()))(())()()))()(()((((()((()())))()(()())()(
(()))))))))()(()))()(())(()))((((()(())(())(((()))(())())())())(((())(()((((
)()(())()(((((())())))(())(((()))((())(()())))())())()))(()))(())(()()(((()(
(((())()()()))())(()(()(()(((((()()))(()((()))((((())()()((())()))))))()))))
)(()()()()())))())((())((()))()(()()()))())()()))))(((((())()())()((((())(((
)()(()(()())))))()())(((()(())((()()(())())((((())()))(())))(((((()))(()))()
)()))(()()((())((())((()()))()()))((()((()()((())()()((()(())())()))(()))))(
(((()))()()(()(()))())))())))())((()((()())()()()(())((()(()()(())()()))()((
)()))))))))))(())(()))(((()(()())(()(()))))((()((((())(((())())(()))(()(((((
))()()((())(()))(()((()())())))(()(())((())()())))))()))())(()()((((()(()(((
))))(())))(()))()(()()(()((())()()()))())(()((())((()((()()())))(()()()()(((
(())()())))(())(())(((()(()()(())(()()()()(())))))())(()((())()()()))()(((() 電電板でこのスレだけが16進数表記なんやね…
MPASM的にはH'0E'なんだろうけど Cでは、0x0e だけど、
MPASMでは、
H'0e' と、最後にも ' が要るの? それでもいいし0x0eでもいい
MPASM/MPLINK User's Guideを読むべし MPLAB の、Mはマイクロチップ、LABはラボですよね。
Pは何の略でしょうか? Microchip Pic Love Adurt Boy なるほど、PICのPですね。
ありがとうございました。 12LF1822を使って赤外線リモコン送信機を作りたいと思い調べてみました
PWMを1ピンで出力すると20-30mAしか取れませんが数ピン並列にすることで電流を稼ぐとWebで見たのですが
SinglePWM(CCP1)の出力を複数ピンに同じ内容で出すにはどのような方法があるのでしょうか?
Trなどの部品数を減らせないものか、アイデアをご教授ください >>9 >>14
マジレスすると、adult 。。。
>>12のご指南お待ちしております PICの割り込みフラグについて教えてください。
たとえば、Timer1割り込みが発生すると、PIR1のTMR1IF=1になると思うのですが、
このTMR1IFは、処理後に自分でクリアしないといけないようです。
でも、UARTのFERRなどは、次の受信をすれば自動的にクリアされます。
PICが フラグセットしてくれるのはいいのですが、
処理後に自分でクリアしなければならないフラグなのか
自動的にクリアされるフラグなのかの区別がわからなくて、躓いています。
データシートを見たのですが、例えばTMR1IFの説明では
割り込みフラグビットは、INTCONレジスタの対応するイネーブルビットまたは
グローバルイネーブルビット(GIE)の状態にかかわらず、
割り込み条件が発生するとセットされます。
ユーザーソフトウェアは、割り込みを有効にする前に
適切な割り込みフラグビットがクリアされていることを確認する必要があります。
と書いてあって「自分でクリアしなければなりません」とは書いてありません。
クリアされる要因や、あるいはフラグセットされた後に、私がしなければならないこと
の区別は、データシートのどこかに書いてありますでしょうか?
宜しくお願いします。 あー
データシートと喧嘩しちゃうタイプね
僕はそういうの面倒だから関わらない様にしてるんだ 俺面倒だから理由や根拠を考えずにMCCに書かせちゃうから、データシートをしっかり調べるのは偉いと思う! >>16
the TMR1IF bit should be cleared before enabling interrupts
と書いてあるな、手元のデータシートには。 >>16
データシートの「割り込み」の説明にクリアしろと書いてあるよ。
TMR1IF説明の部分じゃなくて。 >>16
勝手にリセットされる割り込みフラグってあったっけ? >>19
そうです。それが>>16で書いた、
>ユーザーソフトウェアは、割り込みを有効にする前に
>適切な割り込みフラグビットがクリアされていることを確認する必要があります。
なんですが、割り込みを有効にする前に というのが、初回に有効にする前のことなのか、
毎回のことなのか、はっきりわからないんです。
>>20
ありがとうございます。
>「割り込み」の説明にクリアしろと書いてあるよ。
それば「次の割り込みを知りたいなら、クリアしなさいよ」と言うことでしょうか。
初期設定のGIE=1の前に、xxIF=0にしてからGIE=1にしないと、
いきなり割り込み処理が走り出すよ、という意味にもとれてしまうのですが。
>>21
>勝手にリセットされる割り込みフラグってあったっけ?
そうなんですよ。そういうことがデータシートに一覧で書いてないかな、と思ったんです。
xxxIF セットはPIC クリアは 1)○○が△△した時に自動クリアされる 2) ユーザーが毎回クリアする
などと書かれていると嬉しいのですが。
割り込みばかりでなく、FERRやOVERRでのエラー復旧のサンプルを探したんですが、
どれもFERRはdummy read、OVERRはCREN=0, CREN=1するだけでした。
本当にそれだけで良いのか、チップを設計したMicroChipがお手本を示してくれないかな、
と いつも思っています。 データシートにその辺の仕様が十分に載って無かったりするからな 割り込みはちょっと手を出してない範囲なので「明確に載ってなかったら全部手動でクリアしたらいいのでは?」と思うんだが。
チップごとにとか、機能ごとに挙動が違うとか言われても相手PICの専門家じゃないからは分からんと思うよ。 >>16
基本、割り込みフラグが立ってたら、割り込み禁止にしてない限りは、割り込みが発生する。
おおむねだが、検出されたら立つ 奴はクリアが必須。
タイマーとか、コンパレータとか。
処理の結果で立つ 奴は、自動的にクリアされるのが多い。
受信完了なら、データを読み出すだけでクリアされるとか。 >>26
何の情報にもなってない
データシートの方がはるかに多くの情報がある
そのデータシートにも十分な情報が無かったりする >>27
そうなんか?
XCは使う予定はないんだが、CCSCでもだめ?
どういう所で弊害出るん? >データシートの方がはるかに多くの情報がある
情報が多くて読み切れないことはわりとある話。
しかし、他人の書き込みに対して「何の情報にもなっていない」という人が
「データシートにも十分な情報が無かったりする」ことの具体例を
書かないのはおかしくないか? 皆さんありがとうございます。
結局のところ、それぞれのプラグに対して、どのように後始末しなければならないか、
どこかに書いてあるものでしょうか?
また、皆さんはどのようにして対処しているよでしょうか?
とにかく使用後は、クリアしまくるのでしょうか?
りーどおんりーでもクリアしてるのを見たことありますが、
訳もわからずやってるな、って感じです 皆さんありがとうございます。
結局のところ、それぞれのプラグに対して、どのように後始末しなければならないか、
どこかに書いてあるものでしょうか?
また、皆さんはどのようにして対処しているよでしょうか?
とにかく使用後は、クリアしまくるのでしょうか?
りーどおんりーでもクリアしてるのを見たことありますが、
訳もわからずやってるな、って感じです データシート
サンプルコード
実験
の順に情報を集める ほんとに載ってないかなと思ってデータシートみたが、ブロック図とかみればわかるじゃん 同じ用途で上手く動くソースを探して、何でそうなってるか考える >>32
素直にプログラムを書けば、割込み関連のフラグのセット/リセットでそんなに悩む事は無いと思うけどナ。
割込み要求フラグの大原則は
「割込みを使えば自動的にリセットされ、使わないときは自分でリセットする」
です。
通信ハードエラー(フレーミング、オーバーラン、パリティ)発生フラグに関しては、
受信完了フラグが立ったら、通信エラーフラグが立っていないかどうかをチェックし、
立っていれば必要なエラー回復処理を行う。
立っていなければ受信データを読み取って処理する。
かな。
割込み開始時に、すでに割込み要求が発生しているなら(例えば通信でデータを受信済みなら)、
そのデータを捨てるか取り込むかはプログラムの仕様次第です。
不要なら要求フラグをクリアしてから割込みを許可します。 枝葉末節が気になって仕方ないヤツを相手したって仕方ないだろ。
何がしたくて、それが分からないとどういう支障が出るのかって話。
たぶん、そいつの脳内を除けば何も困ってないはず。 >>34
ありがとうございます。
>ほんとに載ってないかなと思ってデータシートみたが、ブロック図とかみればわかるじゃん
ありがたい情報、ありがとうございます。
ちなみにこれは、どの型番のデータシートのどのブロック図でしょうか、よかったら教えてください。
僕が見たデータシートPIC16F193x で、例えばUART受信のブロック図では、
割り込みで言えば、事前に僕がRCIEを1にしてあれば、
RCREGに受信データが入ったらRCIF=1になる(?)ようなので、and結果で割り込みがかかります。
割り込みはかかりますが、andの先は→で書かれていて、
誰が記憶を消すかは書かれていないみたいです。 >>36
ありがとうございます。
>「割込みを使えば自動的にリセットされ、使わないときは自分でリセットする」です。
この場合の"使えば"とは、具体的にどのようにすることでしょうか?
・割り込みを設定すること
・割り込みが発生すること
・割り込み結果を参照すること
ありがとうございます。 ISRから帰ればだろJK
実機持ってるんだろ?
不明点があれば仮説を立ててそれを検証すればいい
イミフな説明書いてエスパーの返事を待つよりずっと早いぞ 割り込みがかかったことを知りたかった奴が、
また次に割り込みがかかったことを知りたきゃクリアする。
そんだけのこと。
アンタが何をしたいかだよ問題は。 >>39
「割込みを使えば」とは
割込み処理ルーチンを書き、割込みを許可して、発生した処理要求(例えばUARTの1バイト受信など)を
割込み処理ルーチンで処理することです。
UART受信割込み要求フラグはCPUが割込み受付け時に自動的にリセットします。
「割込みを使わない」場合
割込みを使わないときは、1バイト受信フラグ(UART受信割込み要求フラグ)を
必要に応じてプログラマがチェックし(これをポーリングと言います)、
オンになっていれば必要な処理を行います。
受信割込み要求フラグはプログラマが適切にリセットしなければいけません。
なお、CPUによってはハードウェアで(プログラムの介在無しで)入出力処理が可能です(DMA)
で、ここで細かく聞くよりも >>40 の言うように実践を! >アンタが何をしたいかだよ問題は。
もしかして: 本人にもわかっていない 流量センサーの電圧出力(1V〜5V)をPIC(5V,PIC18F46K22)でA/Dして取り込んでいますが、最大出力が5Vなのでセンサーの方が僅かにVDDを越えるかも知れないと思って抵抗で分圧入力しているのですが、VDDをどれくらい超えたらPICは壊れるのでしょうか? >>38
お前みたいな粘着系のめんどくさそうなやつに教えて、良かったと思うわけないだろ。
ちなみに俺が見たのは12F1822と16F87Xだが、ちゃんと書いてある。 >>44
>VDDをどれくらい超えたらPICは壊れるのでしょうか?
I/Oが壊れるのは大きい要因として
(1)電圧による破壊(をふせぐために決められた上限)
(2)内部の保護ダイオードや内部配線の限界
があります。
データシートの Absolute Maximum Ratings にI/Oピンの電圧限界として、
Voltage on any pin with respect to VSS…-0.3V to (VDD + 0.3V)
と書かれています。VDDが5Vなら5.3Vが上限ってことになりますが、
こういう表現は、たいていの場合、(2)のダイオードにでかい電流が流れないようにする電圧範囲です。
これを遵守するのが望ましいのですけど
Input clamp current, (VI < 0 or VI > VDD) …±20mA
とも書かれています。ダイオードのVFが0.6Vなら、電圧が高くなって(2)の電流が流れ始めるのは
5.6Vになってから。この時点で上の5.3Vは超えているのですが、これでは実際のところ壊れません。
偶発的に電圧が上がった場合でも(2)のダイオードに流れる電流を抑えるようになっていれば大丈夫。
たとえばセンサーとPICのあいだに入れておけば、
PIC5Vのとき、センサー出力が間違って6Vまで上がっても、クランプダイオードに流れる電流は
(6V-5.6V)/1k=0.4mAに抑えられます。
PICに電源を供給せずに、センサーだけに電源が供給される場合でセンサーが6Vまで上がっても、流入は5.4mAにとどまります。
どちらの場合もクランプダイオードを通じてセンサーから流れ込んだ電流をPIC側の電源ラインが吸収できることも必要ですが。
>>38
http://www.microchip.jp/docs/41364B_JP.pdf
77ページにRCIFがいつクリアされるか書いてありますぞ。
↓コツ
・PDFを開いたときに、RDIFで検索して見つかったところの前後を集中的に読むといい。
・日本語データシートがあるなら、無理に英語に拘らずにとりあえず頼ってみる。
・日本語データシートは古かったり翻訳に間違いもあったりする。見つかった役に立ちそうな情報は、英語の最新データシートでも確認してみる。 この調子で、PICのすべてのフラグについて、延々と質問が続くのであった…。 >>39
単純に考えればいいと思う
・割り込み要求は勝手にリセットされないからプログラマが自分でリセットする
・シリアル送受信のフラグは明確に書き込み/読み取りの動作でリセットされる 型式も分かんないのによくアドバイスする気になるよね >>51
PICは、16Fならほとんど同じだからね。
よく分かって回答しているのは一部の人だけで、
他の人は適当にやって動いたから良し、
あるいは全然分からずにやってるみたいだね。
質問者が叩かれてるので、まさか自分もわからないと言えなくてね。 >>52
へえ、そうなんだね。
良く分かっている人のレスとそうでない人のレスを
具体的にレス番で教えて、参考にするから。 >>46
詳しくありがとう。
センサーのアンプ出力に約1K抵抗が内蔵されているから大丈夫だね。
分圧抵抗入れて、100と1000で何故半分しか出てこないのか悩んでいて内蔵1Kに気付いた。
出力短絡保護と思うが、分圧抵抗を撤去してダイレクトに入力する事にします。 割込処理ルーチンの入口でフラグクリアするのがよいのか
出口でフラグクリアするのがよいのか何時も迷うぜ 迷う?
どちらですべきか考えれば迷うことなんか無い気がするが
割り込み要因を取り除かないとクリアしても即セットされる物は要因を取り除いてからクリア
処理後、クリアまでに再度割り込み要因が発生する場合はクリアしてから処理 よく考えずに適当な場所でクリアすると
いずれ問題が起こる
多重割り込みが有効な場合は
クリア方法もよく考えないと ■ このスレッドは過去ログ倉庫に格納されています