初めてのPIC 0x20
■ このスレッドは過去ログ倉庫に格納されています
. _ _ PICをさわるのは今日が初めて、という超初心者のためのスレです。 (O>――<O) PIC選び、PICを使った回路は、誰でも最初は不安なものです。 / (・) (・) ヽ 恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。 ○ /▼\ ○ 質問のしかたは、初心者質問スレの発言1を見てくださいね。 |(ヽ二フ ) | /  ̄ ̄ ̄ ヽ f ヽ / | PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。 ヽ \ / ノ ・PIC専用のスレ | \_ )(_/ ! 本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。 | | ここの話がわかるようになれば、あなたはもう一人前のPICerです。 | | ・マイコンソフト 悩み事相談室 | | ̄ ̄| | マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。 (_ノ ヽ_) 質問するときは… ・PICの型番と開発環境を明記しましょう。 ・プログラムは、レス内に直接書き込まず右記を利用しましょう。 ttp://codepad.org/ ttps://pastebin.com/ ・解決したら結果報告しましょう。 ・ここはPICますコンのスレです。AVRの自慢話は「AVRスレ」でお願いします。 回答者の先輩は… ・優しく答えてあげましょう ・先輩たちのAVR vs PIC対談は「PIC専用のスレ」でお願いします。初心者に迷惑です。やめてください。 ハード、ソフト情報 ・統合開発環境 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 ・PIC一覧、スペック検索 ttp://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1005 ttp://www.microchip.com/maps/microcontroller.aspx ・初心者はPIC16F1以降の型番で始めると無理なく始められます。 MCCを使えば、最初からPIC32で始めるのもありです。 ・プログラムの書込みには書込器が必要です。 予算に応じてPICkit4、SNAPなどを購入しましょう。 ttp://akizukidenshi.com/catalog/g/gM-13854/ eBayやAliExpressで買えるPICkit3の中華クローンも十分な性能が報告されています。 過去スレ 0x15 2019/09/07〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1567831628/ 0x14 2019/06/10〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1560111789/ 0x13 2019/02/15〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1550166200/ では、質問どうぞ〜っ 質問いいでしょうか? PIC16F15323などをメインで使っています。 このPICに限らないと思いますが、 MCLRのピンの処理について質問があります。 MCLRのピン接続でネットを検索すると、だいたい3通りくらいの方法があるみたいです。 1. 電源ピンに直接(または抵抗入れて)接続するだけ 2. 1.にコンデンサを付けて、C-Rノイズフィルタ?遅延?のようにしている 3. リセットICの出力を接続 どれでもちゃんと動くと思いますが、 なぜコストのかかる3.のような方法を使うのでしょうか? どういう場面でこの方法を使うのが、使い分けが知りたいです。 (PICに内蔵のパワーアップのタイマーを使えば良い気がします 昔、外部SRAM用のバッテリ・バックアップ切り替え機能が欲しくて リセットICを使った事がある >>2 趣味でPIC使うなら16F15323の場合 MCLRは内蔵プルアップを有効にしてオープン(何も繋がない)かICSP用の配線しとく場合が多いと思う 16F15323の様な世代のPICはネットの工作例で使われているような目的でのリセットICの必要性はないと思う MCLRピンから長い距離の配線を引くなら1or2の手段も必要になると思うけど、3は・・・・ 3.は極端な例を除けば(俺には思いつかないが) 昔リセットICが必要だった頃の思い込み もしくは、よほどの心配性の人が気にして使ってるだけだとおもう みなさん、ありがとうございます。 >>6 そうですよね。 1. 2. の場合、PICの電源端子とMCLR端子は、それほど離れているわけでもないので コンデンサも不要と思いました。 内蔵pull-up抵抗は静電気に弱いので、ICSP端子の横に10kの抵抗付けています。 >昔リセットICが必要だった頃の思い込み 何か特別な事情がなければ、PIC内蔵のPUTで良いですよね。 外付けが必要なのは、マイコンの内部にBROWN-OUT検出とタイマーが無い場合なので、 現在のPICでは、ほぼ不要と覚えておきます。 どうもありがとうございました。大変助かりました。 確か電圧が変動した時に動作が不安定になるのを防ぐ為に設定電圧で確実なリセットをかける為に使うとリセットICのデータシートに書いてた気がする まさにその機能がブラウンアウトリセットです。72msなどのタイマーも付いています。 >>9 回路全体で、電源電圧が動作保証できる電圧より下がったらリセット状態に落と落としたいことがあるわけだけど、 たとえば、とりあげられている PIC16F15323 でBOR電圧を4.5Vに設定できるだろか。 >>10 BORではないですが、VDD約4.5Vを検知してリセットをかける手段は有ります(16F15323) ですが、起動後、動作保証以下に電圧が落ちる(欠陥が無く)回路って有るのでしょうか??? (電源が電池とかならリセットではなくシャットダウン条件を付けると思うので) ですが、>>2 の方の質問の内容に添った回答なら ネットで多く出回ってる作例(PICにリセットICを繋いでる)において 必要性が無いように思われるのに何故リセットICを使ってるか? (この質問には可能性として必要な理由がちゃんと有るのでは?との疑問が含まれてのことだと思う) 俺の回答は > 必要ないのに使ってるだけ >>10 たしかに、16F15323のVBORは、4.5V検出は、できません。 3.3V想定の検出電圧しか選択できないですね。 >>11 質問者の意図はその通りで、RESET ICを付ける理由 だね。 フェールセーフって、少なくとも一つの故障で全体として重大な問題を引き起こさない、なので、 >動作保証以下に電圧が落ちる(欠陥が無く) 欠陥、故障がない、という前提は可能な限り避けます。 >>2 の質問者がWEBで(もしかしたら趣味の方々が公開されている)回路を見て疑問に思ったとするなら、 その限られた例は、たしかに、かならずしも必要ではない Reset IC なのかもしれないです。 でも、Reset ICを接続することが方法として準備されているということは、それが必要とされる用途がある という前提に立って考える方がたぶん有益でしょうね。 >>13 具体的にリセットICの必要な回路の例が見てみたいので、参考になるURLとか有りませんか? 手元に仕事のものはあるけど、さすがに出せないな…。WEBにそういうものが出ているかどうかはわからない、自分で探してみて。 すぐに見つからなくても、用意されている端子は必要とされるから。今日明日来週で納得ができなくても、気にかけていればそのうち引っ掛かるさ。 >>2 リセットのかかる電圧を、PICのデフォルト値から変えたい時。 細かく変えられるのが普通と思ってたけど PICは出来ないのか >>15 URL無し(;ω;) >>17 細かく設定する需要が有れば製品化されると思う >>17 PIC自身を守るためのVBORなので、 電圧を調整できる必要はあまりないと思う。 >>14 PICのMCLR端子にリセットICの出力をつなぐだけ。 リセットICの出力がオープンドレインならプルアップ抵抗つける。 更に、Cを対GNDに付ければ、CRディレイがかかかる。 リセットICを外付けするのは、BOR電圧では仕様を満足しないとき、 BOR-OFFにし、想定するリセット電圧のIC(PICの動作電圧範囲内)を接続する。 または、動作確証の観点で、BORが信用できない or 外付けのリセットICが 信用できるといった場合かな? >>20 >BOR電圧では仕様を満足しないとき、 どのような場合が考えられますか? >>21 BOR電圧ではシステムの保証ができないケースじゃないかな? >>21 PICを1.8Vなど下限いっぱいまで使いたいときBORが2.7V固定だったらどうするかな? 或いは、5Vで動作してて、4.5Vでリセットが掛かってほしいとき、どうするかな? →リセットIC外付けしかないでしょう? >>25 そんなでたらめ書いて、どうするのかな? BORが2.7V固定じゃなかったら、どうするのかな? あなたの物言いが嫌われてるとしたら、どうするのかな? 他に4.5Vでリセットをかける手段が有ったら、どうするのかな? →素直に謝るしかないでしょう? >→リセットIC外付けしかないでしょう? それ以外の選択も有りませんか?よく考えてください ※リセットICを否定するわけではありませんが、リセットICに頼らない手段や設計も数多く存在し、従来リセットICを使ってた箇所をリセットICを使わない設計に置き換え可能なケースも多く存在します。 >>25 実際のシステム設計の経験から書いてるんですが。出鱈目ですか? リセットIC使うのは、システム電圧が不安定になったときに CPUの誤動作を防止する手段だと認識していますが。。。 >>※リセットICを否定するわけではありませんが、リセットICに頼らない手段や設計も数多く存在し、従来リセットICを使ってた箇所をリセットICを使わない設計に置き換え可能なケースも多く存在します。 →是非知りたいです。1つでもいいので公開してもらえますか? >>27 えーっと、私は趣味の1つで少々電子工作する程度の素人ですが >→是非知りたいです。1つでもいいので公開してもらえますか? こちらは初心者質問スレなので、初心者からの質問として回答させていただきますがよろしい?>システム設計の経験者さん https://i.imgur.com/CZ8pysG.png こちらがVDD4.5VでリセットされるPICの回路図です! 夜で良ければ実機で証明するが・・・・ >こちらがVDD4.5VでリセットされるPICの回路図です! 4.5Vを実現する手段を説明する気が全然ないずですね… PIC16F15323では、BOR電圧は2レベルあるみたいね。 Fバージョンでは、2.45/2.7V(typ.) LFバージョンでは、1.9/2.7V(typ.) >>28 がどのPIC想定しているか判らんけど、 BOR=4.5VのPICなんてあったっけ? 知ってる人居たら教えて? まあ、夜にでも実機で動作証明してくれるみたいだし。 データ付きでな。 結果、楽しみに待ちましょう!www >こちらは初心者質問スレなので、初心者からの質問として回答させていただきますがよろしい? Aさんが質問をする Bさんが回答する。 CさんがAさんの質問の内容について質問する。 DさんがBさんの回答について質問する。 このケースにおいてCさん、Dさんの質問を、初心者からの質問として処理する必要はないよ。 初心者質問スレだからというのは機械的、というか病的に頑な。 >>31 事前にいくつか謝まっとく 勢いで夜って言ったが仕事終わるの深夜だから一般的な感覚だと未明とかになってしまう(待たずに寝てくれ) 16F323を持って無いので代用品を使うよ(16F323でも可能な方法を使う) >>ALL スレ汚して申し訳ない、私が幼稚なせいでつい絡んでしまった >>33 がんばってできるようにするのは良いのだけど、それでできたとしても外部リセットIC不要って結論にはならない ことは分かっておいてください。 内蔵デバイスでできるとしても、信頼性に関するポリシーから外付けリセットICや外付けWDTが要求されることも あるわけで、マイコン単独でできればそれで事足りる、ってこともでありません。 動画と回路図を用意しました(百聞は一見に如かずかな) PICにリセット後LEDを点滅させるプログラムを入れてます これが証明になるかどうかの判断はオーディエンスの方々に任せたいところです ttps://streamable.com/3ktg5k ttps://i.imgur.com/MKP4dod.png 誤解してるみたいだけど、リセットICを使わない手段が有る事を主張してるだけで、リセットICが不要とは思ってないよ 私の個人的な事ですが、想定電圧に異常が有ったらリセットするような乱暴な回路設計はしたくないです(検知→エラー処理する) (秋月とかのHP見たらリセットICの取扱数は昔より減ったねTO92とかのリセットIC消えてる・・・・) 誤16F323 正16F15323 >>35 お疲れ様。 回路図見ました。無駄のない、いい感じの回路ですね。 358の出力に直接0.01って、結構やばくないですかね? 回路図は何で書きましたか? KiCADかEagleでしょうか。 押しボタンスイッチの絵が好きなので聞いてみました。 どうやってRESETかけてるのか、ちょっと考えたけど、わからん。 A/D module使ってますか? A/Dで電源電圧を測定して、リセットかな。 >リセットICが不要とは思ってないよ すみません。 上の方でマイコン単体で実現できるならリセットICは要らないと取れるような発言をした人がいたので混同してしまいました。 それも俺の解釈が間違っていたかもしれません。 >想定電圧に異常が有ったらリセットするような乱暴な回路設計はしたくないです あまり感情は入れない方がいいと思います。 要求されている動作によって望ましいとか乱暴とかの感情的な価値観は変わりますしね。 ソフトウェアが動作していなくてもリセットがかかることが望まれることもあります。 動作保証ができない電圧になってから事後処理をすること自体が許されないケースもあります。 >A/Dで電源電圧を測定して、リセットかな。 あ。電圧監視部分で復活待ち、か。 >>38 待って!A/Dで電圧測定してリセットって、正気ですか? ソフトウェアリセット? レジスターを含む周辺回路の初期化。どうするつもりですか? そもそも、A/D変換中に電源電圧揺らいで、BOR効いたらどうするの? 「そういうことは想定していない」っていうことは無しで。 >>39 BORは、機能を止めることができるでしょう? >>40 BORを止めたとして。。。 ソフトウェアリセットってどうやるの? プロセスを知りたいです! リセットベクタにジャンプだけじゃダメだよ。 リセットなんだから、ハードウェア初期化されないと。。。 このやり方、実用化されてんの? 実例があれば知りたい。是非! >>36 どういたしまして KiCADを使ってます、ADコンバータは一切使ってません >358の出力に直接0.01って、結構やばくないですかね? やっちまってますね(〃ノωノ) 容量性負荷なのに・・・・「やばいですね☆」 >>37 >上の方でマイコン単体で実現できるならリセットICは要らないと取れるような発言をした人がいたので混同してしまいました。 私も近い言い方をしてしまってるのですが、要る要らないとかではなく、希望の電圧でリセットしたい場合に リセットICを使わない手段もある位の意味で使ってました(誤解させて申し訳ない) >あまり感情は入れない方がいいと思います。 少々熱くなりすぎてたみたいです以後気をつけます >>39 > >38 >待って!A/Dで電圧測定してリセットって、正気ですか? >>38 へのコメントなら、リセットじゃなくて電圧監視部で復活待ち、ですね。 元ネタの>>35 さんの発想であれば、電圧低下検知で周辺を含めて安全処理を行ってから電圧の回復を待つのではないでしょうか。 そもそも>>35 さんのテーマは、リセットICを使わずに4.5Vで安全に死ぬことだと思います。 この実験回路では実装されていないですが、前提として電圧低下の速さが安全処理の時間の余裕があるようにするのでは。 いまいちわからないのは↓ >そもそも、A/D変換中に電源電圧揺らいで、BOR効いたらどうするの? 電圧監視のA/D変換中に4.5Vより下のBOR電圧まで下がってリセットが効いたときですね…。リセットがかかったらダメなんかな? リセットがかかったときに、不都合な動作をしない回路にするのが先みたいな気がします。 >>42 気にしなくても大丈夫だと思います。 > 、要る要らないとかではなく、希望の電圧でリセットしたい場合に 内臓BOR電圧値よりも高い電圧でRESETを かける方法に興味があります。 >>41 RESET Software Reset Syntax: [ label ] RESET Operands: None Operation: Execute a device Reset. Resets the RI flag of the PCON register. Status Affected: None Description: This instruction provides a way to execute a hardware Reset by software. >>44 BOR以上ということなら、CPU自体は健全に動作しそうです。過電圧は別ですよ。 PIC16F18326だと http://akizukidenshi.com/download/ds/microchip/pic16f183x6.pdf FIGURE5-1 特別な外部接続を使わずにプログラムの中から実施できるとしたら、RESETインストラクションか、WDTのオーバーフローかな。 >>41 さんとか>>44 さんとか、疑問は解決したのかな? それとも、何か別の疑問だったのかな? >>48 この場合は、マイコンの電源の電圧が、許容範囲より高いことを指しますよ。 ID:p0OgD8Nvさん。>>44 の疑問は解決しましたか? ご指摘いただいた LM358の出力に抵抗を入れずに容量性負荷を繋いでる点ですが (その場では確信が無かったのでやっちまったと思ったのですが・・) LM358は出力が定電流回路で構成されてるので、電圧の定格を守ってれば、 例えVCCやGNDに出力を短絡させても問題ないと思ってました ちょっと気になったので、正解を知ってる方いれば教えていただきたいです >>51 通常は、発振の可能性を気にします。 コンデンサによる出力ショートと似ていますが。 51です、よく見たら一覧じゃなくて、グラフの方に上限書いてありました もう気にしないでください >>52 回答ありがとうございます PICのスレっていくつも要るかな 昔より書き込み減ってるから総合スレにして1本でいいと思うのだけど PICのスレを1個立てると 他のスレが1個消えるんだぞ 私も1本でいいと思う 同じ人間があっち行ったりこっち来たりしている。 良くないと思ってる人が分けてるんだし、1本で良いと思ってる人が1本で良いと言ったってあまり意味なさそう。 スレが分かれてて何か損なことってあるんだっけか。書き込みがしばらくなくても落ちることはないよ。 >>54 そう思うお前が総合スレ立ててこっちへ来なきゃいいんじゃね? お前の脳内ではスレは1つってことにになるだろがw ここでいくら呼びかけたって実現せんよ 一つ立てては父のため 二つ立てては母のため 三つ立てては古里の兄弟 下記の2条件から導かれる結論は? A 「金持ちケンカせず」という言葉がある B PIC関連スレや100均スレではしょっちゅうケンカしている しかしなんだな、掲示板ってのは実社会では誰からも相手にされないようなクズが エラそうに大きな顔を出来るところだな。 自分が期待する結論を導くために根拠のない条件をもってきてもね。 そもそもマイクロチップがいつまでも8ビットPICを販売し続けるからPICのスレが荒れるんだぞ さっさと販売を終了すればここにも平和が訪れる(・・・かもしれない) 荒らし、煽りを相手にするからだよな。荒れるのは。 割と古いデバイス、アーキテクチャも継続して入手できること自体は悪いことでもないし。 (Microchipが製造中止にしない、という話を頑なに奉るのはちょっと違うけどね) 8ビートのピックに価値は無い 8ビートじゃないピックにも価値は無い あれ?つまりピック自体に全然価値が無いってこと?(爆笑 >>74 ギターかベースかわからんが、ピックなくてもひけるもんな >>76 ベースはピック使わないし、逆に8ビート、つまりロックギターなら、必ずピック使うだろ? 8bit PICといっても多くの人がC言語で開発してるんでしょ? C言語使って8bitマイコンでできるような簡単なもの作るならPICもAVRも関係ないな FreeRTOSとか使って複雑なことしたいならARMマイコン使えばいいしな >>78 RTOSが必要になる位の処理するなら、16bit以上は欲しいからな。 8bitでRTOSなんて完全に趣味か まともに処理を書けない素人 ここの人たちは何の単語聞いても自分がマウント取る道具としか捉えられないんだろうか? 能力が低い8ビットCPUだからこそ並列処理は役に立つと思う。 自分で書いて動かしてみれば分る。 >>82 能力が低いからRTOSなんかにリソースを割かないで 昔ながらのメインループ&割込みで処理する 私の場合、8ビットCPUプログラミングの5回に1回程度の割合で、 「メインループ&割込みでは処理出来ないぞ(あるいは、処理が複雑になるな) じゃ並列処理でやろうか」 になる。 8ビットCPUの並列処理で追加になる命令数もオーバーヘッドタイムも大した事は無いよ。 (少ないもので10数個、1uS程度) もちろんプログラミングの問題点を解決できるならどんな方法でも構わないとは思う。 まーた例のタスクディスパーチャ君か ほんっと飽きないね >>84 初心者か? 8bitレベルの処理で独立タスクじゃなきゃ処理できないって 作り方に問題有るだろ ディスパッチ君か ディスパッチだけあっても意味がなく いろいろな同期/排他制御の仕組みが必要 それではじめてRTOSと呼べる コードサイズは増えるし 当然タスク分だけスタックが必要になる リソースのチープなPIC 8bitレベルで RTOSなんか使うのは完全に趣味 今は相応にリッチなマイコンすることがほとんどかと思います。 >>89 同意!ほとんどメインループ&割り込みで対応可能と思う。 >>5回に1回程度の割合 こんな不安定な動作している時点で、コードの組み方が変。 イベントドリブン形式での記述が出来れば ほとんど同じ記述でシングルタスクの記述も出来るんだけどねえ という事で ディスパッチ君はイベントドリブンを勉強しようか RTOSや大規模OSを使う上でも当然知っておいた方が良い >>92 「8ビットCPUプログラミングの5回に1回程度の割合で、この手法を選択する」 と書かれているわけだけど、それがなんで 「こんな不安定な動作している時点で」 になるんだろう。 割り込みの中で最低限の処理して、時間がかかる処理はフラグ立てといて、メインの中でやる ってだけだからな。 ソフトの基本的構造が確立されてないから 5回に1回構造を変える羽目になる MPLAB X + Windows10 で、PICkit3 が使えるようになった。 概要 1) 症状は、connection Fail で書込できなかった。(PICkit4を買って凌いだ) 2) 対策は、regedit.exe で、PICkit3のレジストリ値を変更したら、書けた。 3) PICkit3のファームウェア(FW)Verは、 特に気を使っていない。 上記の書込み途中で自動的に最新に更新される。 もう少し詳しく 4) 設定値 1 → 0 にする。 START→regedit.exe→SYSTEM→ControlSet001→Enum→USB→ 5) →VID_04D8&PID_900A→BUR(PICKit3のシリアル)→Device_Parameters→ EnhancedPowerManagementEnabled をW-click。 デフォルト値 1 → 0 、OK。 (参考)VID_04D8&PID_900A = PICKit3 VID_04D8&PID_9012 = PICKit4 04D8はMicrochip 6) PICkit3のUSB 抜いて挿して 7) MPLAB X で書き込んでみる。 前回と違うPICkitだけどいい? 電圧注意してね など、ともにOK。 もしPICkit3のFWが古い場合は、ここで自動的に書き換えられる。 8) しかし不思議な現象があった。 今までUSBに挿したPICkit3のシリアル(BUR#)は全部記憶しているようで、 5)に全部表示されるが、 9) とりあえず、1つ成功させたら、そのとき5)に表示されていたPICkitまで、 値=1のままで何もしないで書けるようになった。 10) さらに、1つ目のPICkit3を再度 値=1 に意地悪してみるけど、 それでも書き込みできてしまう。 11) さらに、これまで未接続だったPICkit3を接続して書き込んでみる。 今度は connection Failが出る。しかし4)〜7)の操作で、書けるようになった。 よくわからないですが、書き込みできるようになりました。 ご参考まで。 (regeditはヤバいので。自己責任で) ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる