初めてのPIC 0x0f
■ このスレッドは過去ログ倉庫に格納されています
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
さ、質問どうぞ〜っ
0x0e 2018/02/13〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1518524799/
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 今時爺くらいしかPICなんかに興味を持たないからな >>284
邪道でもないと思う。
>>282の手法で、PICの通常ポートでもオープンドレインが実現できるわけだし。 アナログ入力電圧がロジック電源の範囲に入ってる状況しか考えられないのか 世の中には抵抗器という部品がありましてな、それをうまく使いこなすと、好きな電圧の範囲に収められるようになったりするんですけどね 今わざわざ新規でPICを選ぶってどういう理由が考えられる? 理由すら分からないのなら使わなければ良いのに。。。 >>308
初めて出てくるような質問ではないですよね? 値段
動作電圧範囲
サイズ
あとの理由は
ユニークなペリフェラルかなぁ
コンパレータとか
ロジックとか >>301
今PIC以外では新規に何をお使い?
そしてその理由は? 一個人の理由を聞いて何の参考になるんだろう。
そもそも参考にするつもりなんて初めか >>311
ATtiny
性能
値段
動作電圧
サイズ PICをやりすぎると人格に障害がでるらしいぞ
もうかなり進行してる人もいるみたいだから注意してね >>313
PICより安いのでしょうか?
電圧は何Vなのですか?
PICよりサイズの選択肢が幅広いのですか? >>313を書いているのは、PICを選択する理由を書いた人だよな。 うちの選択理由は、対ノイズ試験がPICが優れていたから。
あとは旧三菱とか東芝の一部機種がよかったが、入手製と開発問う考えてPICに。
ちなみにAVRは対ノイズはあまり良くない。アーキテクチャはいいんだけどね。 DigiKeyで検索すると
PICは値段が高いと思う
20円から色々なマイコンが1個から買えるのに
PICの最安は42円@3000個のPIC10F200
同価格帯ではダントツに低スペック
PICが安いというのは例えばどれのこと? >>325
ノイズ試験がどういうのかも知らないだろ 静電気試験ならやるけど
ノイズ試験なんていうぼんやりした名前の試験はやらんなあ PICと他のマイコンを同じ製品の同じ基板にのせてテストするってのもなかなかあり得ないと思うし
車とか医療関係だと単体でテストしたりするの? 選定で評価基板でやったりする
オーバースペック耐性がどこらにあるとか
実際はスペック内で使うとしてもだ
ロットごとにやったりする
ロットごとにX線取ったりする
(こっそり変わっていないか) >>327
「ノイズ試験」でググれば色々出てくるよん。
ノイズ耐力だけでなく放出するノイズの試験も含まれるが、
これらを包括してノイズ試験と言うな。機能試験と分けて。 イミュニティ試験だと30MHz〜2GHzまで100V/mくらい晒して誤動作しないか確認するな
昔のマイコンだとこれくらいの強度でプロテクト外れたりレジスタ化けしたりした >>324
色々なノイズの試験全てで優れてたって?
それは単品評価?製品での評価?
何と比べて? >>333
インベーダーゲームをタダで遊べたよな。 >>324は「全て」って書いてないのに。
揚げ足とったり、意図的な誤読や誇張をからめるのは、相手を困らせるためなのかな?
やたらと相手に開示させるのは、結論として相手がやってきた検討なり判断が不十分だとあげつらうためかな?
どこの誰だって限られた時間とお金の中で限られた調査をして部品を選択していることぐらい最初からわかってるだろうに。
分かっててそういう根掘り葉掘りをするのっておかしい。まるでこの場の議論で相手をいてこますことが目的みたいだな。
質問に値するだけの情報開示をしない人が、他人に開示を要求するなんて、お前が言うか、ってレベルじゃないですかね。
技術の板なんだし、この場での議論の勝ち負けはあまり意味ないですよ。お互い出せる情報を出して交換しましょうよ。
で、>>334に質問なんだけど、単品評価ってどうやってするの?
俺自身、開発の現場が長いけど、部品単体でノイズ試験をかけたことなんてない。
どんな場面でそういうことが要求されるのかぜひ知りたい。 説得力が全く無いから、
ちょっとでも説得力を増す為の質問をしてあげただけ
「対ノイズ試験がPICが優れていたから。」
これだけじゃあねえ >>337
自分で情報開示しない人が他人の説得力を語るのですか?
>>336の単品評価についての質問についてはどうです? 欲しかったのは回答ではなく説得力だったんだなw
よくもまあ、そんな気構えで質問できる物だ・・・ 5分間隔でadcの結果をi2cのeepromに保存してるのですが、2〜3日くらいで
i2cのDS1307の読み出しでpendingエラーが発生して止まってしまいます。
リトライしても永遠にpendingエラーで
2c初期化しても同じです。
wdtでリセットも同じです。
電源再突入しか再起動出来ないのですが、何なんだろう。 >>338
ノイズ試験と聞いて静電気とかしか知らない奴に何言っても無駄ですよ。
たぶんノイズ試験でググってノイズ研あたりのトップページをチラミして書いてるのでしょう。 >>340
PIC側の問題かDS1307側の問題か切り分ける
DS1307側の問題なら他のスレへ ここは日大アメフト部となんか似てるな
上がえらそうで >>343
円滑なコミュニケーションを妨げるもの
(1)一方、または双方の非協力的・高圧的な態度。
(2)他方に対する挑発行為。
(3)言語能力の欠如
(4)書きて・話してがそもそも書かない。
>>343は(4)に相当すると思います。 >>340
2〜3日、っていうのが奇妙だな。
単純に頻度が低くて、たまたまそれが2〜3日目に起こっているのかな。
とりあえず再現する最小ソースがあると答えられる人もより出てくるだろね。
I2CにつながってるのはDS1307とEEPROMだけ? ノイズで誤動作してロック状態に陥っている可能性がある。
こういう場合はいくらソースを見ても分からない。 >>347
そういう場合は、ね。
ソースがあれば完璧って話でもないし。
回路図、実際に配線の様子が分かる写真ぐらいが揃えば、かなりいいかな。 2-3日で書き込みアドレスのラップアラウンドが発生して、その時の処理が間違ってるとか >>349
おおー。なんかありそう。
5分に1回。1日で288回。2日めの途中で512回をまたぎますね。 想像してたって解決にならん
PIC側かDS1307側か調べるのが先
現象発生状態で片方だけの電源をいったん落としてみる
これでわかる
3日かけて失敗したらもったいないので事前練習も
PICのWDTで復帰しないということから
DS1307の可能性が高そうだが
WDTでリセットがかからないブロックもあるので
ちなみにマイコンはどれ?
マイコンによってはエラッタで途中で止まることがある
PIC32MZ EFとか あと良くやるのは発生までの時間を早くする方歩を探す
5分を1秒にしてみるとか >>350
書き込んでる完全にソフトの問題ならWDTで復帰しないってのと合わないが
その問題だとしたら
サイズを小さくして周期も狭めればすぐに発生するはず
検証は簡単 pendingって、
・DS1307がACKを返してこない状態で、EEPROMは継続してアクセスできている。
・その状態になったらDS1307もEEPROMもアクセスできない。
のどっちなんでしょ。
どちらかのデバイスがバスを引っ張ったままってことはあるのかな? みなさん、ありがとうございます。
メインループはTMR0で10mSの制限を持たせて、ADCを読み込み積算して、5分間の回数で平均をEEPROMに書き込みます。
デバッグ用にシリアルでTeratermへ時刻を送っているので、0.5秒間でDS1307を読み込んでいます。
I2Cの通信は、0.5秒間隔でDS1307リードと5分間隔のEEPROMライトが発生しています。
EEPROMはページをまたがない用に128Byte単位でライトしています。
EEPROMの書き込みではreturnの前に5mSの待機を入れてます。
PICKit3でプログラムを書き込み終了で自動的に起動して必ずDS1307のエラーでリセットしても変わらずで電源を入れなおします。
秋月のPIC18F46K22搭載基板です。
秋月のDS1307基板に4KBのI2CのEEPROMもありますが、AT24C1024Bのアドレスと同じなのでアドレスSelect Jumperをショートしています。 真剣に解決したいのか雑談したいのかどっち?
解決したいなら情報を小出しにしない
リセットっていうのはPICのリセット端子によるもの?
だとしたらソフトのバグでないことがわかるわけだが
そういう重要な所をちゃんとはじめから書くこと
残りはDS1307かI2Cのエラッタか
確率に頼ったデバッグをせず
確実に原因を切り分けるのか近道 >>356
すみません。
リセットは秋月のPIC18F46K22基板のリセットボタンです。 >>355
追加です。
2〜3日と書きましたが、5台作って止まらないのもあります。
MCCのi2c1.cを使っているのですが、以前にも書きましたが、うまく動作せずで、PIC16シリーズのMCCのi2c.cを参考に改造して使っていました。
それがとっても気になっており、先ほどMCCのファイルを全部消して、Generateしたところi2c1.cは改造なしで動作しました。
しかし、PICKit3で書き込み終了後の再起動でDS1307のPendingは発生して、電源再投入でした。
以前の改造したi2c1.cは Revision 1.55で今回 Generateしたのは1.65.2になっています。
1.65.2のI2C1_MasterTRBInsert関数は私が1.55でパッチした
inline void I2C1_WaitForLastPacketToComplete()
を呼ぶようになっていますので、結局なんの違いもないかもです。 >>358
MCCでTMR0/ADC/UART1/MSSP1と16MHz内部クロックPLLx4を指定して使っています。
ADC以外は割り込み使っています。 >>358
リセットで復帰しないならPIC側の可能性はほぼ無い
少なくとも割り込みとか関係ない
無駄なことを聞くな 使うレジスタは、リセット後に必ず初期化してるか?
pon resetに頼ってる部分はないのか? >>364
MCCからGenerateしてmain.cの先頭にSYSTEM_Initialize()がマージされ。
INTERRUPT_GlobalInterruptHighEnable()と
INTERRUPT_GlobalInterruptLowEnable()と
INTERRUPT_PeripheralInterruptEnable()のコメントを外して、
// Add your application codeの後の行に
TMR0_SetInterruptHandler(timer)を最初に記述して始まっています。 >>362
通信がエラーになるんだからI2Cの通信中に
割り込みかかってプロトコルエラーになってるのかと思っただけだ。
無駄なこと聞いて悪かったな。
けど、そんなムキになることか? MCCの割込み部分です。
void interrupt INTERRUPT_InterruptManagerHigh (void)
{
// interrupt handler
if(PIE1bits.SSP1IE == 1 && PIR1bits.SSP1IF == 1)
{
I2C1_ISR();
}
if(PIE2bits.BCL1IE == 1 && PIR2bits.BCL1IF == 1)
{
I2C1_BusCollisionISR();
}
}
void interrupt low_priority INTERRUPT_InterruptManagerLow (void)
{
// interrupt handler
if(INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
{
TMR0_ISR();
}
if(PIE1bits.RC1IE == 1 && PIR1bits.RC1IF == 1)
{
EUSART1_Receive_ISR();
}
if(PIE1bits.TX1IE == 1 && PIR1bits.TX1IF == 1)
{
EUSART1_Transmit_ISR();
}
} >>359
もう一つ無駄なこと聞くけど、
>5台作って止まらないのもあります。
これは個体差なの?
止まらないやつは何回やっても止まらない? ってかさ、I2C にプロトコルアナライザつないで確認すべきだよ。 >>369
書き方悪かったです。
止まらないと言うのは、精々5日くらいで途中で電源切ったりしてます。
どれもPICKIT3での書き込み後にPICがりスタートするとDS1307のpending は発生します。 >リセットで復帰しないならPIC側の可能性はほぼ無い
I2Cバスの操作の仕方でスレーブがおかしくなってしまって、PIC側のリセットでは復帰しなくなるケースもありえますし。 >>372
>どれもPICKIT3での書き込み後にPICがりスタートするとDS1307のpending は発生します。
>>359
>それがとっても気になっており、先ほどMCCのファイルを全部消して、Generateしたところi2c1.cは改造なしで動作しました。
>しかし、PICKit3で書き込み終了後の再起動でDS1307のPendingは発生して、電源再投入でした。
この「〜改造なしで動作しました。 しかし、PICKit3で書き込み終了後の再起動で」のくだりが気になります。
次のような認識で良いでしょうか?
・PICKIT3を繋がない状態であれば2〜3日でPendingになるもの、ならないものがある。
・PICKIT3で書き込み後に(PICKIT3がつながったまま)リスタートすると、すぐにPendingになる。このときリセットボタンを押しても効果がない。 >>374
お付き合いいただき、ありがとうございます。
>PICKIT3を繋がない状態であれば2〜3日でPendingになるもの、ならないものがある。
はい、PICKKIT3で書き込み後にPICKIT3を外して、電源入れて、Pendingになるものとならないもの(5日程度しか試していませんが)があります。
>PICKIT3で書き込み後に(PICKIT3がつながったまま)リスタートすると、すぐにPendingになる。このときリセットボタンを押しても効果がない。
はい、書き込み後にPICKIT3が刺さった状態でPICは自動的にリスタートしますが、必ずDS1307の読み込みでPendingになり、基板上のリセットスイッチを押してもPendingとなります。Teratermにprintfで表示されます。
15秒のWDTを設定しているので15秒間隔で画面にPending Errorの表示がたまります。 >>373
PICKIT3の書き込み中にI2C信号が乱れてDS1307が応答不可能になるのでしょうか?
その場合、I2Cマスターで回復させることは可能でしょうか?
動作中のPendingエラーと書き込み後の必ず発生するPendingエラーは同じと思い、これに対応できれば動作中のPendingエラーも大丈夫と思っています。 PICKIT3での書き込み中にI2Cバスに使っているピンがばたばたと不用意にLになることが
あるかなあ、ってことですね。
書き込み中は当該ピンがHiZに維持されていて、プルアップされているなら、そうはならない
と思うのですが。(秋月のDS1307モジュールってことなので、そこでプルアップされているかな)
できれば回路図を見てみたい。 >その場合、I2Cマスターで回復させることは可能でしょうか?
I2Cにバスリセットのルールはなかったと認識してます。 PICKIT3から3.3VとかのVDDを供給する設定になってるってことはないですよね… 逆に、書き込み中のVPPがダイオードか抵抗を通じてVDDを押し上げてしまっているとか。 >>380はないですね。秋月のPIC18F46K22搭載基板ってことですし。 >>377
秋月のDS1307モジュール内でプルアップされてます。
最初知らなくて外部でプルアップしてましたが、今は外しています。 >>379
PICKit3での電源供給はオフにしています。 >>365
いや、電源電圧じゃなくて
I2Cのクロックとデータ
PICとデバイスどちらかがLOWに引っ張ったままじゃないかテスターで測れって言ってるの
テスターがなければLEDでもPICの別ポートでもなんでもいいから >>367
割り込みがかかるとなんでプロトコルエラーに?
意味不明
ムキにはなってない
口は悪いかも知れないが >>373
原因のトリガーよりも、
どちらが異常状態かを調べるのが先 ■ このスレッドは過去ログ倉庫に格納されています