初めての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 >>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に気付いた。
出力短絡保護と思うが、分圧抵抗を撤去してダイレクトに入力する事にします。 割込処理ルーチンの入口でフラグクリアするのがよいのか
出口でフラグクリアするのがよいのか何時も迷うぜ 迷う?
どちらですべきか考えれば迷うことなんか無い気がするが
割り込み要因を取り除かないとクリアしても即セットされる物は要因を取り除いてからクリア
処理後、クリアまでに再度割り込み要因が発生する場合はクリアしてから処理 よく考えずに適当な場所でクリアすると
いずれ問題が起こる
多重割り込みが有効な場合は
クリア方法もよく考えないと アマチュアでやりがちなのが
xc.hで定義されてるフラグにそのまま代入しちゃうこと
IFS1bits.U1RXIF = 0;
とかやっちゃうといずれ問題が起こる >>61
えっ? 1bit単位で読み書きする方法があるの?
リードモディファイなんとかライトだから、
読み出してから書き戻す間に、
ハードウェアによって変えられても、
古い情報で上書きされてしまう、
と言うことじゃないの? >>54
PICのADCはつなぐ相手の出力インピーダンス10kΩ以下を推奨してた気がする。
1kなら大丈夫と思うけど。
絵入りでわかりやすく説明してるページがあった気がする。 >>58
それ、いつもやってる。
>いずれ問題が起こる
とても心配なので詳細を教えてください。
>>61
へえ、どうやって回避すればいいの? >>54
わりと多くのマイコン内蔵A/Dコンバータが図のような構成になっていて、
変換直前に一瞬だけスイッチをONにしてCにチャージしてから変換を行う。
この一瞬でCをチャージして、誤差が分解能の1LSB以内に収まる。
ソースの直列抵抗が小さいほどチャージの収束が速くなる。
それゆえ、分解能が高くなれば、ソースの抵抗は小さくないと性能を引き出せなくなるし、
逆に、要求分解能が低いなら、ソースの抵抗は大きくてもよくなる。
で、外部回路や応答性に問題がない範囲で、青のコンデンサを付けておくと
抵抗が大きくても外付けコンデンサが内部コンデンサへのチャージを助けてくれるよ。
>>58
はやくみんなの疑問に答えてください。
場合によってはMicrochipに報告しとかないと世界中に影響が出ると思うんで、
よろしくお願いします。 ピン変化割込IOCIFレジスタはIOCAFレジスタでないとクリア出来ないトラップに
はまって一週間くらい悩んだ…マニュアルはちゃんと読まないとダメだね >>60
>>65
>>67
わからないならスクラッチで組もうとせずに
素直にMCCやHarmonyを使いなさい >>69
MCCやHarmonyはあなたがダメ出ししたコードを吐く。
全く答えになってないね。
まあ、回答できないんだろうけど。 >>70
MCCやHarmonyが >>58 のようなコードを吐いてるMCUは大丈夫
決して >>58 のようなコードを吐かないMCUがある
それだと>>58のコードはNG >>71
>決して >>58 のようなコードを吐かないMCUがある
具体的にPICの型番でお願いします。 あと
>それだと>>58のコードはNG
の理由もね。
そっちが元の質問なんで、いいかげん話をそらさず、よろしく。 結局、大丈夫な理由もNGな理由も出ずじまいか。
予想通りだな。 初心者さんには気の毒だけど
幾度かつついても具体的な回答を出せない>>ID:MZkAGnSRのようなヤツは無視
知識のあるヤツだけが回答してるわけではないから時間の無駄 >>71
吐いてるMCUと吐かないMCUの型番マダー?
みんな待ってるよ 質問者です。
みなさん、貴重なご意見ありがとうございました。
やはり、全部のフラグについて、データシートにも
はっきりと書かれていないみたいですね。
また、みなさん先輩の中でも十分な理解でなく使って
いらっしゃる方も、いるようです。
そういう特性のことかもしれませんね。
みなさんのご意見を参考に、
フラグは、ReadOnlyも含めて、全部自分で上げ下げする
という自分なりの決まりを持つことにしました。
みなさん、どうもありがとうございました。
>>58の発言は、気になるところですが、>>77のような執拗な言動も
どうかと思いました。
ありがとうございました。 勝手に決めるな、書いてある。
アンタが読んでないだけ。 データシートに全部書いてある
なんて時代は終わったのだよ
例えば非常にシンプルなUART
8bit, 16bit, 32bitで割り込みの仕様はまったく異なるのだが
データシートに1行書いてあるだけ
ここに十分な仕様が記述されているわけがない
条件が整っている時にセットされ続けるのか
条件が整った瞬間に1回セットされるのか
FIFO付きでもFIFO4, FIFO8 でその辺が異なる USBのデータシートを見たことがある?
レジスタが書いてあるだけ
あんなんで設計なんて出来ない 8bitのUARTはエラッタシートに載ってないエラッタがあるから注意
タイミングによって送信がダブる >>77
Harmonyって書いてるんだからわかるだろうに
コードを検索すればたくさんヒットするよ
なぜ>>58がマズいか?
それは自分で考えなさい いやでも、PIC32のCLR, SET, INVは非常に便利だよな
他のマイコンも真似してほしいくらい
他のマイコンだと
クリアのみ可能
とかにすることで問題が発生しないようにしてたりするね
まあそういうことを一生気にしない人もいる
ごく稀に問題が発生してもノイズのせいにしたり
趣味の電子工作ならそれでも良いのかもしれない 自分のスキルを誇示して詳細は語らないいつもの御仁ですか ID:H6YmXlV3の見ているデータシート(とID:H6YmXlV3が呼んでいる何か)と
私が見ているデータシートは別物だということが分かった。
したがってID:H6YmXlV3 から何かを得るのは不可能。
どうもお疲れでした>>ID:H6YmXlV3 >>83
>なぜ>>58がマズいか?
>それは自分で考えなさい
説明出来ないなら出てこなければいいのに。 >>87
苦労して会得したんだから、
簡単には教えたくないんだと思いますよ。
知っていても教えない
知らないから教えられない
黙っていれば、どっちかわからないから、
都合よく振舞っているんだと思うよ。 バカ「その問題間違っていまーす」
生徒「え?何処?何処?俺解いちゃったよ」
先生「何処が間近っているのかな?」
バカ「それは自分で考えなさい(キリッ」
どう考えてもコミュニケーションがとれないキチガイだろw 教える気も無いのに初心者スレでホラを吹く。
これ、品性の問題だからどうしようもないね。 ん?
場所と品性は関係ない。
どこだからどう振舞うかとかぶれること自体が品性の無さの表れ。 >場所と品性は関係ない。
だからですよ。ここ、5chですよ。 判らないですか?
ここ、5chですよ 馬鹿も居ますよ 最近のゆとりは、ただ反駁したいだけで中身が無い。
なので、「だって〜」「だから〜」と幼児並み。 あ、そうそう、返す言葉は必ず「判らないですか〜」と決まってる。 あぁ、そうだった。
少し前に馬鹿と阿呆の罵り合いに飽きてこのスレ見限っていたのに。
ちょっと怖いもの見たさで除いたら、結構有用な情報があったものでズルズルと見続けてしまっていた。
データ削除します。 PICスレには残念な人が居座っているから諦めた方がいい。 >>66
直結で期待通りだけどRssば1K位でセンサーの出力インピーダンスは1K位で分圧されないのはキャパシタがチャージするからでしょうか? >>102
追加する抵抗R1は信号源抵抗Rsに直列に入るだけですので、分圧というのは違うように思います。
センサーの直列抵抗が大きくなっていても大丈夫なのは、サンプリングのスイッチが短い時間だけ
ONしたときに、CHに一気にチャージするときに流れる電流をC1から供給できるからですし。
>>44で書かれていた「分圧」は右下の赤の回路ですよね?
>>103
>サンプリングのスイッチが短い時間だけONしたときに
ちょっと認識が違う気がする。
サンプリングのスイッチは常にオンになっていてGO/DONEビットを
セットするとオフになってからA/D変換が開始される。
前回A/D変換したときにチャンネルセレクトを切り替えておけば
ずっとチャージしたままになる。 >>103
レスありがとうございます。
直結前の回路は赤色の通りです。
勉強になりました。 >>104
あーっ。ご指摘の通りです。別のA/Dと混ざっていました。
PICのA/Dの場合は、サンプルスイッチはチャンネルセレクトを切り替えてから
変換開始までどれぐらい待つかを決定するために信号源抵抗(とコンデンサ)を考慮するのでしたね…。
チャンネルを切り替えてから変換開始までに時間的余裕がある場合で、変化も遅い信号をサンプルするときに
信号源抵抗を考慮する理由は端子のリーク電流でした。
>>105
…ということでして、おはずかしい。
チャンネルを切り替える必要がなく、変化の小さい信号源なら外付けコンデンサにあまり意味ありません。 アホの知りたがりは必要悪
アホの教えたがりは社会悪 教えたがりでも知りたがりでも無いと思いますし、
少なくとも「>>107 アホの意味の無いイヤがらせ悪」よりはずっとマシだと思いまぁす。 馬鹿なほど知ったかして、得意げに教えたつもりになってるから卯財 >>106
別のA/Dとは?
参考にしたいので教えてください。 >>114
16bit PIC なら、メモリー容量的にSPI モードで十分だしな。 >>109
> 馬鹿なほど知ったかして、得意げに教えたつもりになってるから卯財
教えようとしてるだけエライじゃん
イヤなのは、なんにも教えず説教をたれたいだけのジジイ >>109
お前はバカだ、知ったかだ。と言うなら
どこが間違っていて、正しくはこうだ。
と書かないと、
あなた自身が、馬鹿な知ったか、に見えるよ? 初心者です。教えてください。
2つあります。
MPLAB Xをダウンロードしてインストールして、ふー炉じぇくとを作って、コンパイル(ビルド?)をしました。
画面の下部にあるエラーとかワーニングが出る窓の文字が小さくて、とても使いにくいです。
この文字を大きくするのは、どこをさわればいいでしょうか?
Toolsのoptionsの中にfont設定があるようですが、
outputペインのfont設定までは見つけられませんでした。
今まではMPLAB IDE8.92を使っていたのですが、それに比べるとコンパイルに時間がかかります。
もっさりした感じです。これで正解なのでしょうか?
どうぞよろしくお願いします。 >>119
マウスのホイール押しながらホイール回す。
デフォルトだと、一度に8つ?のファイルを同時にコンパイルしようとするから、非力なマシンだと、かえって遅くなる。 シングルコアCPUマシンならMPLAB 8.92の一択
最近は安くて早いPC充実してるからMPLAB X使うなら買い替え そりゃPCがボロ過ぎる
サクサク条件は64bit4コア8ギガかな
今時中古ノートでも2万もあればそろえられる
ケチって買わないならコンパイルのんびり待ちましょう
待つのは無料だからね JAVAで開発された物って
開発は楽チンなんだろうけど
メモリバカ食いだよな
オイラもXの遅さに耐えられなくなって
去年PC新調した口
ついでにSSD化も
デュアルディスプレイ化もして超快適 >>120さん
どうもありがとうございました。できました。
この設定は、どこかのプロパティを開いて調整できるものではないのでしょうか?
よろしかったら、教えてください。
>>121,122
みなさん、ありがとうございました。
僕のノートPCは、17インチ1920*1200で広いんですが、
コア2ディュオというCPUですので遅いです。もっさり感たっぷりです。
あと、もう一つ教えてくださいませんか。
文字を大きくしたoutput paineですが、エラーの表示はどこを見れば良いのでしょうか。
どうせ僕のプログラムミスなので、
○○行目にsyntax error ; が必要 とか出れば良いのですが、
いろいろと表示されすぎて、わからないです。 英語のNotice Caution、コンパイル時のエラーメッセージなんかは、
同じ単語が結構出てくるので、一冊ノートを作ってわからない単語を書き出してその意味を書いておくといいよ
ノートの単語が増えてこなくなったら、アルファベット順に再編するとかなんかしておく
その頃にはだいたい意味がわかるようになってる。
PCにText文章で作ってもいいけど、書いたほうが覚える感じがする(個人的に ■ このスレッドは過去ログ倉庫に格納されています