初めてのPIC 0x24 ※顔文字は禁則事項です!
.
_ _ PICをさわるのは今日が初めて、という超初心者のためのスレです。
(O>――<O) PIC選び、PICを使った回路は、誰でも最初は不安なものです。
/ (・) (・) ヽ 恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。
○ /▼\ ○ 質問のしかたは、初心者質問スレの発言1を見てくださいね。
|(ヽ二フ ) |
/  ̄ ̄ ̄ ヽ
f ヽ / | PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。
ヽ \ / ノ ・PIC専用のスレ
| \_ )(_/ ! 本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。
| | ここの話がわかるようになれば、あなたはもう一人前のPICerです。
| | ・マイコンソフト 悩み事相談室
| | ̄ ̄| | マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。
(_ノ ヽ_)
質問するときは…
・PICの型番と開発環境を明記しましょう。
・プログラムは、レス内に直接書き込まず下記を利用しましょう。
http://codepad.org/ https://pastebin.com/
・解決したら結果報告しましょう。
・ここはPICマイコンのスレです。AVRの自慢話は「AVRスレ」でお願いします。
回答者の先輩は…
・威張らず、偉そうにせず、上から目線にならず、優しく答えてあげましょう。
・顔文字はやめてください。回答内容と顔文字の使用は別問題です。
ハード、ソフト情報
・統合開発環境 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 https://rio2016.5ch.net/test/read.cgi/denki/1567831628/ 2019/09/07〜
0x16-0x19 欠番です
0x20 https://rio2016.5ch.net/test/read.cgi/denki/1596523661/ 2020/08/04〜
0x21 https://rio2016.5ch.net/test/read.cgi/denki/1617716381/ 2021/04/06〜
0x22 https://rio2016.5ch.net/test/read.cgi/denki/1636738259/ 2021/11/13〜
0x23 https://rio2016.5ch.net/test/read.cgi/denki/1652634500/ 2022/05/16〜
では、質問どうぞ 上書きに関わる信号がORx?と思ったら、オーバーライドだった…
後閑先生、オーバーライドを上書きって翻訳したのかな?
書籍で疑問に思ったらデータシートを見よう。Override control って書いてあって、
- Forced tri-state output (出力遮断強制)
- Forced unity gain (ユニティゲイン強制)
って説明がついてる。
>回路で、OP AMPの出力を切断するときがわかりません
ORM0を1にして、ORPOLが0のときは、ORSELで選んだ信号が1のときに、
OP AMPの出力が遮断されます。 C++でオーバーライドはクラス継承して機能を付加するニュアンスで用いられますな。
字引にあたると 乗り潰すとか 乗り越えるとか 覆すとか 無効にするニュアンスが示されていますな。 そういやPICが入門用としてひろくつかわれている理由のひとつが、相対的に良質なテキストがたくさんあることだよなあ。
特に後閑先生の功績って大きい。PICだけでなく、電子工作そのものの入門ガイドとしても使える本も出してる。
この先生のおかげで、学校やサイエンススクールの電気系の先生の手間がどれだけセーブできてるかとか、
なんもわからん、WEBの情報の探し方もわからん、っていう初心者がよりどころにできているとか偉大だと思う。
彼がいなかったら、電子工作をしてる人はもっと少なかったんじゃないかと思う。
今は、Arduino が幅をきかせつつある領域だけどな。(こっちは中学生、高校生の作品を見てるとPIC以上に遅延多用の
プログラムがたくさん出てくる。割り込みとかタイマーとか使わなくても、そこそこ書けるからだろね) >>304
上書きでも通じないことはないような機能だけど、できるだけ原文の単語の意味は使った方がいいと思うんだ。
レジスタの名前もオーバーライドと覚えていたら、ORxを連想しやすくなるし。 >>298
入門に向くと主張して人に教えてもらえば良いんじゃない?
私は書かないよ
何の得もないから >>303
ありがとうございます。
>後閑先生、オーバーライドを上書きって翻訳したのかな?
ですよね。
上書きは、後閑さん誤訳ということですね。ありがとうございます。
>- Forced tri-state output (出力遮断強制)
>- Forced unity gain (ユニティゲイン強制)
>って説明がついてる。
はい、それは読みました。
外部抵抗で決めたゲインを何かの要因で
x1倍に切り替える、出力をHi-Zにする、というのを、強制というなら、
それはそうでしょうけど、
実際に、
そうしたいときって、どのような使い方を想定しているのでしょうか。
・x1倍 過大入力が来たときに、ゲインを下げたい時?
・Hi-Z 外部のピークホールドのような回路で、次回更新するまで縁を切りたい...?
わからないです。 >特に後閑先生の功績って大きい。
まったく同意です。
日本語訳になっているだけでも、とても助かります。 >>307
>私は書かないよ
>何の得もないから
はい、わかりました。 ごかん先生の本は幾冊かは持っているはずけど 読んだ記憶がないなぁ・・・; いま手元にあるPIC 系の本 いずれも未読
・PIC活用ガイドブック(ごかんせんせい)
・PICマイコンでつくるインドアプレーン(たなかせんせい)
・PICによるホームコントロール工作入門(なかおせんせい) PICファンのみなさん、どうかPICを一生使い続けてください
そうしていただければ他のCPUユーザーの優位性が続きます 技術立国中抜きコンサルタントで1チップマイコンそのものがが廃れちゃったりして。。。 x1倍 余分にピンを消費したくないときとか
DAC等の単なるバッファとして使用するとか
PICって3.3Vで使うことが多いこともあって、増幅することが多いとは限らなくて。
さすがにマイクつなげたりする時はゲイン上げるけど。
HiZこれはそもそもそのピンをOPAMPとして使わないときは
HiZにしとかなきゃいけないからじゃない?
GPIOの時はHiZ
オペアンプ入りのPICを使ったことないか。
私はいつもMCCで使ってるから、設定にはそれほど詳しくないけど。
にしても177XのOPAMPはけっこう入力複雑だねぇ。
PICのOPAMPは電源電圧から考えるとけっこう優秀。
価格面でも。 このオーバーライドの多さ、選択肢の広さにはびっくり。
そもそも何の略だっけ。
CCPとCPWMはいいとして、CxOUTってコンパレータだっけ、CLCだっけ
LCxとCOGxもだれか教えてくださーい、顔文字のひと。 >そうしたいときって、どのような使い方を想定しているのでしょうか。
>・x1倍 過大入力が来たときに、ゲインを下げたい時?
>・Hi-Z 外部のピークホールドのような回路で、次回更新するまで縁を切りたい...?
>わからないです。
そのPICを使ったわけでもないのですけど、たとえば
x1…単にボルテージフォロワとして使いたいとき、外部ピン経由でのフィードバックがいらない。
HiZ…スリープ時に外部フィードバック回路に電流が流れないようにする。 >>315, 317
どうもありがとうございます。
お二人の説明で、ずいぶん理解が進みました。
>- Forced tri-state output (出力遮断強制)
>- Forced unity gain (ユニティゲイン強制)
この場合のForceは、強制とは考えない
私の予想ですが
・OP AMP出力とI/Oピンの切り離し機能
仰るとおり、OPAMPの出力をピンから切り離す機能だと思います。
disableでOP AMP7
全体をoffにすれば、入出力セレクタ回路から切り離され、
I/OピンはOP AMPやCpmparatorから浮きます。
しかしOP AMPの出力をコンパレータの入力に内部接続の選択もできるので、
OP AMPをまるまる機能offにはできない、そんなときこの縁切りを使います。
切り離されたI/Oピンは、さらに別のI/Oピンとして使うこともできそうです。
・x1倍に切換る機能
仰るとおり、OPAMPの出力を内部で直接(-)に接続したいときに使う機能だと思います。
余分にピンを消費せずに済み、
(-)に接続されていたピンは、他のI/Oとして使用可能(未確認)
PICの品種によってGBWが 2MHz、3.5MHzと、2種類あるみたいです。
10MHzくらいあると、もっといろいろ使えるのですが、ちょっと残念です。
でも、定番のLM358, 2904系より10倍高速で性能も良いので、
工作に便利に使えそうです。
みなさん、ありがとうございました。 >>318です。
すみません、間違ったことを書込みました。
Hi-Zにすれば、内部接続でコンパレータに接続できる、というのは間違いでした。
>>300のブロック図を見ると、コンパレータへの接続より上流にSWがありました。
すみません。 PICでストップウオッチを作りたいのですが、
Timerモジュールを使って以下の手順を考えました。
1 TMR値=0にして
2 GPIO start入力ピン→→→Timer0スタート
3 GPIO stop入力ピン→→→Timer0ストップ
4 TMR値を表示
という感じなのですが。
Timerモジュールのブロック図を見てもTMR1H,TMR1LのRESET端子がみつかりません。
どのようにして0にすれば良いでしょうか。(スタートストップもよく分からないんですけど) >>320
MCCを使ってる場合は[ TMR1_WriteTimer(0); ]で0を書き込める
直接の場合は[ TMR1H = 0 ; ] & [ TMR1L = 0; ] で0を書き込み
MCCの場合は[ TMR1_StartTimer(); ] [ TMR1_StopTimer(); ]でON/OFF
直接の場合は[ TMR1ON = 1; ] [ TMR1ON = 0; ]でON/OFF
↑は[ T1CONbits.TMR1ON = 1; ]でも可能 タイマー止める
HとLレジスタに0を書く
タイマー開始する >>320
PICの世代によっては16bitタイマーにバッファーが有るのでH,Lの読み込み&書き込みの順番に注意が必要
【書き込み】TMR1H → TMR1L の順
【読み込み】TMR1L → TMR1H の順
この順番逆だと正しくない値が書き込まれたり読み込まれたるするから要注意!
たぶん\(^o^)/ みなさん、ありがとうございます。
なるほど、0を書けばいいんですね。ありがとうございます。
ということは、途中の値 0x1234を書いたら、そこから加算(減算?)できるんですね。
ありがとうございました。大変よく分かりました。
(ゲートICのフリップフロップで作るときは、
リセット端子をLにできたので、同じかなと思い込んでいました)
スタート、ストップの関数もあるんですか。便利ですね。
ということは、読み出し、書換えもできそうですね。調べて見ます。
本当にありがとうございました。 >>324
それはひどいですね。
PICはPIC16(L)F1773/6-I/SP です。
ありがとうございました。 >>326
PIC16(L)F1773/6-I/SP だとTIMER1等にはバッファーが無いので、読み書きには注意が必要かな!
タイマー停止中(またはバッファー付きの機種)の読み書きなら問題ないけど動作中の場合
16bitのタイマーの値を8bit,8bitで2回に分けて読むのでタイムラグでカウントアップすることがある
なので動作中に読み出す場合は(停止すると都合が悪い場合)カウントアップの有無をソフトウェアで処理する必要がある
(書き込みは停止中してから行えば良いと思う) LHの順で読んで、Lをもう一度読み込んで変化してたらHを再読み込みしている ストップウォッチとして使う時に、どのくらいの精度が必要なのか、
それと、どれくらいの時間を計測するのかで話が変わってきます。
とりあえず、普通に売られているストップウォッチくらいの時間を
8M程度のクロックで計るということで以下の話を進めています。
タイマを止めたりしていると、誤差が増えるのでラップタイムなど継続して計る、
もしくは長期間計るために時間をコントロールしようと
タイマを止めて書いたり、TMR1の値を変更することは推奨できません。
TIMER1は16bitですから長い時間計れそうですが、高クロックで動かした場合、
たかが知れています。ピリオドレジスタがないため、TMR1を指定時間待たせるためには
0~0xFFFFまで回し続けるしか誤差なく測定するのは困難です。
TIMER2などのピリオドレジスタ(PRx)があるタイマーを動かして
20msなどの時間で正確に割り込みがかかるようにし、
タイマー割り込みで変数をカウントアップしていくのが長い時間正確に計るための秘訣です。
(TIMER1でもできないことはありません。CCPのOutputCompareのスペシャルイベントトリガを使うと、CCPRxを超えた時点でTMR1が0になります。)
あと、水晶発信子をつけるのをお勧めします。
PICの内蔵発振はそれほどにはずれませんが。 要求精度を先に決めれば。
60秒ぐらいまでの時間を0.1秒単位で測るなら0.1%ぐらいの誤差で十分。
ってことは、セラミック振動子ではヤバいかもね。 >>329
ありがとうございます。
ラジコンなどの趣味競技の1着2着3着を数値で出してみたいと考えています。
精度はさほど必要なくて、1着2着3着の差が数字で出れば
0.1秒違っていてもいいと思っています。
>タイマー割り込みで変数をカウントアップしていくのが長い時間正確に計るための秘訣
ありがとうございます。
16bitあるので、startは必要ですが、途中で16bitのカウンターの値をcopyができれば
stopは無くても良いかな、と思い始めました。
byte単位で取ると繰り上がりが...のお話もお伺いしましたので、要注意ですね。
数値は計算無しにそのまま0.00秒とか得られると都合が良いので、
分周(プリスケーラ?)の合わせた水晶の周波数にするのもありかと思います。
最長時間は10msのタイマーにすれば、655秒まで測れますので十分です。
データーシートを見ていたら、Timer0(8bit)のオーバーフロー信号を
Timer1(16bit)で数えることもできそうなこともわかりました。
いろいろと教えていただいて、ありがとうございました。
PICは参考本も多いし品種も多いので、入門者には嬉しいです。
全部C言語でできるので、プログラムも楽しめそうです。 8bitや16bitのタイマーの値を32bitや64bitに拡張すればいい キタキタ、質問者が聞いてもいない事まで規定して「ねばならぬ」口調で語り出すオッさん達。 質問自体もただのネタ作りの為で
本当に知りたいわけでもないし サッカーのボールにチップ仕込まれてたってのもガセだろ
かりにボールやラジコンカーにチップ仕込んだとして
着順やライン通過判定に使える精度をどうやって出すんだよ >>332
成功することをお祈りしております。
がんばってください。
わからなくなったらまた戻ってきてくださいね。 >>338
ありがとうございました。
プログラム、作ってみます。
また教えてください。ありがとうございました。 初心者向けの実質的な質問スレだしね
自分でやっているところに割り込んでくる、教え魔、○○警察と一緒にするのはアホだと思います。
それに該当するのは、PICをディスりに来る行為でしょう。 ズレるだけなら構わないけどさ、安いセラミック振動子がたまたま不良品で
発振しなかったことがあってトラウマだってのは俺だけではあるまい・・・
>ねばならない
ゲームは一日一時間!!(^p^) わざわざ相談に来てアドバイスを受けておいて「教え魔」とか
さすがPICスレ PICスレのプロ素人、教えられ魔さんパネェゼ!!(^p^) >>343
発振したかどうかってどうやってやってます?
素直に質問です そういうときはオシロスコープですん なんかすみません; >>346
オシロがなくても、プログラムで既知の周期でLEDを点滅させて、その通りになるかどうかでも。
オシロがあっても、発振子の足にプローブを当てたら条件もかわってしまうので。 オシレータの足って、ロジックのみで来てないのよね?たしか。
LPにしたらなんか、OUTも100kΩくらい挟んで設計してあるんだよね?
発振ってけっこう大変だった記憶がある。 32.768kHzの水晶で時計を組もうとしたらコンデンサの値に注意はいるね。
適当だと、月差1分ぐらいは簡単にずれるし。 >>348
> オシロがあっても、発振子の足にプローブを当てたら条件もかわってしまうので。
まさにここを危惧してた
数pFでも効いてくると思うし >>353
なので、直接ピンには触らずに、(確認のために一時的に追加するバッファでなく)もともとついているバッファなり、
それがないなら、マイコンの回路を通ったあとで確認することになります。
発振条件が厳しいとかそうでないとかは、発振余裕度の検証方法とかが水晶屋さんの技術資料にあるのでぐぐって。 “発振してるかどうかの確認”ならxーtalの脚にぢかにプローブ当ててるぞ(^p^) クリスタルだけど各極20pFのコンデンサで発振失敗したこどないけどね。
ユニバーサル基板でもプリント基板でも
PICでも他でも >>346
発振しているかの確認なら、ラジオでその周波数を受信して、
マイコン電源on/offで受信もon/offするなら、それでOKです。
正しい周波数を見るのでしたら、
PICのOSCxx(NOTゲートの出力側)ピンに高抵抗を繋いでそれをOp AMPでバッファして
オシロで波形OKを確認した後、周波数カウンターで測定ですかね。 その手の問題は
1)どういうわけかプログラムが動かんぞ
2)そもそもクロックは出てるんか?
3)オシロで確認
ですしおすし (暴論)プローブ当てて発振しなくなるような基板なら、そのうち勝手におかしくなる。 なんか変だな、動かないな、と思ってプローブを当てて確認したらちゃんと発振してるのに。 水晶とCPUのピンンとの距離を5p程度にしたら発振が不安定になった。
解決策・・・発振器から供給した USB HOST、Ethernet、特殊な用途
くらいしか思い浮かばない USBはデバイスでも必要じゃないかな。デバイスによっては高精度内蔵オシレータとか、
ホストに合わせるタイプのがあるけど。PICのUSBデバイスのクロックはどうだったけか。
今はセラロックで良いような用途だったら、内蔵でもそこそこ大丈夫だし、外付けが必要なのは
時間精度が必要な場合に限られるね。
ArduinoのUNOの本家とかはセラミックオシレータ。それで世界の多くの人がまあまあ使っているところを
見ると、多くのアプリがそれでいいということなんでしょう。 >>365
お!確かにUNOのクロックはセラミック発振だ
USB用のATmega16U2は水晶なのに・・・
どうせ付けるんだったら水晶にしてくれればいいのに・・・ PIC16F1454もホストに合わせるようになってますね。 USB規格書にもデバイスの48Mクロック源は
セラロックで良いと書いてある。確か。
市場がそれを超えるモノを求めるならそれはそれ。 USB LS 1.25%
USB FS 0.25%
USB HS 0.05% USB 2.0 HighSpeed 対応の PIC ってあったっけ。
1.1 FullSpeed 対応は見かけるけど。 >>368
PIC16F1454は私のお気に入り
後継を望む ディスコンにもなってないのに後継を望むとはこれいかに 秋月で買えなくなるのはディスコン
異論は他一店だけ認めるw >>376
値上げしたけどまだ売ってる
もうちょっと値上げしたらBluePill, BlackPillに全面的に移行する 10年もUSB搭載8ビットが出てない
8ビットじゃなきゃ他行くし この10年で8ビットMCUになんか進化ある?
ヨソでも構わない。 8ビットに求められる価格帯で、高速で大量のデータを扱うのはバランスが悪いのでは。 変化と進化って違うし、何が変化で何が進化なのかは恣意的。
どの程度の変わりようで変化・進化とみなすかも、恣意的なものだしね。 こんな違いはあるけれど、って言っても、挑発的ともとれる「なんか進化ある?」だったら、
「そんなの進化に入らない。次」ってなる雰囲気いっぱい。
原因作っておいて、無能呼ばわりはおかしい。
リアルでもなんらかの(地位的や心理的な)優位な立場を使って、自分が下とみなしている人に
こういう吹っ掛け方をしてそう。 それを業界では「枯れた/mature」って言うんだわ。
供給さえ続いてたら何も問題ない分野。ま、供給出来てないから問題なんだけど今。 USB機能付き8ビットマイコンの供給ができてない、ってことはなさそう。 とりあえず老害と言っておけば、面倒な思いは低減できると思ってる人いるね。 過去の風習に固執し、モヒカンと肩パッドの流行が来たときに良心を捨てられないのが老害
柔軟に変容して ヒャッハーして火炎放射器で汚物を消毒できるのがナウなヤング
おまいらもし将来その時期が来ても、老害がいなかったら
いったいだれにヒャッハーするや? だから、貴重な資源としての老害を みんなでたいせつにしやう(^p^) 昔バラした扇風機のリモコンが4ビットだったな
きっと10年どころじゃない進化をしてるだろう >>376
> 秋月で買えなくなるのはディスコン
割と同意
気軽に買えるから使ってるだけだし 幾ら老害とか吠えようが月1000個も使わない
ホビイストの意見が省みられる事ないけど。 さあみんなぁ! 老害の捨て台詞コンテスト、はっじまっるよ〜!!!(^p^)
おめーによませるエラータはねえ!!! 400
知らんがな
知らんて
知らんわ
知っとるけ