初めての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〜
では、質問どうぞ >>771
>文字間の隙間がないのに、どうやって戻すんですか?
それを>>766のぼくに聞くないで。特定条件だと戻らない、って言ってるんだし。
たとえば、0x20の羅列がずーっと来ているときに、
・それが正しく0x20の羅列なのか
・実はずれて化けて0x02の羅列に見えているのか
を判定できるのは通信仕様の作りようでしかないと思う。
たとえば送信側と受信側で「0x20以外は8バイトを超えて連続しない」という取り決めを作っておいたら
0x02の羅列が続いたら「おかしい」と判断できるから、いったん受信を停止して再開することで修正ができるかもしれない。 受信したビット構成が不正だとオーバーランエラーや
フレーミングエラー、パリティエラーが発生するから
これらを利用しましょう 元質問は、まったく通常の8-n-1の場合な気がするし、事前の取り決めなど無い前提に思える。
>化けた値とストップビットまでのオフセットの関係
と言うけど、化けたことはマイコンにはわからないことでしょ?
期待するデータではないと判断できるのは人間だけ。 だからそれは論外だって言っただろ
良い悪いじゃなくて俎上に載らないの >>778
それはつまり「必ず戻せるわけではない。戻せない条件がある」ということですね。 判別できないんだから戻せないも何もないって話だが?
1ビットずらしていけば必ず戻せるとも言える
でもそんなの意味ないでしょ >>729の質問は「PICの受信モジュールで判別できるのでしょうか? 1度文字化けしたら、最後まで合わない様に思うのですが」だし、
それに対しては「判別できないケースがある。そのケースでは、最後まで合わせようもないことがある」が結論だと思う。
>1ビットずらしていけば必ず戻せるとも言える
合っているかどうかわからないケースで戻せるのかな? 最後まで合わせようもないことがあるが最後まで合わないことは避けられる
何も変なことは言っていないが?
それとも1/2の確率で無益なレスを続けるのと
有益なレスと無益なレスを交互にするのが同じだとでも? 「最後まで合わせようもないことがあるが最後まで合わないことは避けられる」
「で、合っているかどうかわかるのですか」
「神様ならわかります」
そうか、これが変ではない仕事場があるのか。 UARTで確実な通信をするなら、チェックサムやエラー訂正符号をつけるのが確実だよな コマンド&レスポンスみたいな形にするだけでもかなり違うしね。
送受信の手順を自分で決められるなら、一方的な隙間なしの連続送信は避けられるなら避ける方がいい。 UARTでどの程度の対応をするかは、
結局、その通信データがどの程度重要かどうかで決る。
ハード、ソフト共に何重にもエラー対策しても
リトライして最後までエラーになる場合も考慮しないといけないし。
結構めんどうな問題だと思う。 通信エラーの発生が問題になるような状況下ではUARTの連続送信という通信手段自体が不適当じゃね
SPIやI2Cなどのクロック同期式の通信手段の方が適している 調歩同期は長いケーブルを介した機器間通信で使われるものだしね。 ありゃ。へんなこと書いてた。
調歩同期は長いケーブルを介した機器間通信でも使われるものだしね。
でした。 間違ってと不都合な通信ならパリティ付けるなり
ブロックチェック符号付けるよね〜 昔標準的に使われてた8251なんてスタートビットの立ち下がりエッジを
みていなくてレベルだけだったのでエラーになるとなかなか回復しなかった。
PICのUARTが立ち下がりエッジを見ていれば結構回復は早いと思う。
もちろんパターンにも依存するが。
8251が立ち下がりエッジを見ていないのはブレークキャラクタを受信するためなのかな。 皆様方にはUARTについて色々と御不満お有りでしょうがw
信号線1本だけでで複数装置と通信出来る有り難みがあったりします。
(RS485はコンプリメンタリの2本で、信号の種類としては1種)
これからも使われ続けるでしょうね。 >>797
いつの時代の話よ
だいぶ古いやつのことでしょ 私の言ってるPICの送信エラッタってのは
TXREGに2回書くと、TXIFが0になるんだが、
バッファが残っているのにTXIFが1になって、
バッファを上書きし、送信データがおかしくなる現象のことを指してるんだがあってる?
18F26K22とか、古いPICではあった。
TRMTを見て送信が完了してから次のを書けば問題ない。
他にPICのUART関係では、PIC32MXのエラッタが有名だな。
レジスタに書くタイミングと、割り込みのタイミングが一致した場合、
割り込みから帰ってきてもう一度レジスタを叩いてしまうらしい。 ダブルバッファだからバッファが空けばTXIFが1になるのは正常動作なんだけど
TXREGが空の状態で送信が終わってTSRが空く瞬間に書き込むとTSRとTXREG両方に
書き込まれて2回送信してしまうというやつだよね。
普通文字列などを送信するときはTXIFが1になってすぐに書き込むから
そのタイミングにはならず意外と引っかからないね。
中途半端に時間が空いたときは最初の文字を書くときだけTRMTをみればよさそう。 え、そんなのあるの?
私のは
while(..){
while(TXIF == 0);
TXREG = x;
x++;
}
みたいなコードで、バッファがあるのにTXIF==0をすり抜けて
1,2,4,5
みたいな結果を送信してくるんだけど。 なるほど。
>>801が今でもあるUARTの送信バグってことでいいのかな。
できれば現象が起こる型番を教えていただけませんか? エラッタあり PIC16(L)F1574/5/8/9
PIC専用のスレ Part54で報告あり PIC16F1459, PIC16F1454, PIC16F18313
エラッタが存在しないものも同じバグを持っていて、同時期に設計された
ものは共通の可能性が高い。
バグがあってももエラッタ出てないし、修正してもエラッタを改版してるとは
限らないので現状は分からないね。
PIC16(L)F1717/1718/1719 ではRevision A1で修正されてるみたい
4.1 Duplicate Transmission の項目
https://ww1.microchip.com/downloads/aemDocuments/documents/OTH/ProductDocuments/Errata/80000653D.pdf >>804
どうもありがとうございます。
最終的には自分で動かして確かめてみるしかないですね。
確かめるのけっこう大変そうだけど USB HIDのプログラマブルゲームパッドを作りたいので
マイコン
PIC32MX210F016D ttps://akizukidenshi.com/catalog/g/gI-05851/
開発環境
vscode+Rust
デバッグ
シリアルデバッグモニタ
プログラマ
自作4-phase ICSPライタ
ドキュメント
PIC32MX1XX/2XX Family Data Sheet (DS60001168L)
Section 27. “USB On-The-Go (OTG)” (DS60001126F)
PIC32 Flash Programming Specification (DS60001145AA)
PIC32 フラッシュ プログラミング仕様 (DS60001145R_JP)
こんな感じの開発を考えているんだけどマイコン周りで他に読んどけ的な資料とかありますか?
USB周りのデバイスモード関係の解説が少ない気がする。DS60001126FもOTGとあるように
ホストモードが中心に見えるし どう見ても初めてのPICじゃないと思うんだが
どこまで経験があって何が初めてか書かないと >>808
サンキュ。サンプルコード集?があるのか。見てみます
>>809
積極的にPIC系を選ぶこともないし持っているのは秋月のセールで買ったPIC32MX210F016Dだけ
PIC系の開発自体初めて。他社マイコンの開発経験はあります MLAは時期によって入っている物が違うから、旧バージョンもチェックして 開発経験者ならMLAのhid_joystickを雛型として使えば割と簡単だと思う でもRustなんでしょ
まずはCのサンプルが動くことを確認してからの方が無難かと おお、開発環境を見落としてたわ
でもライブラリを使ってるわけでもなし、肝はPICをどう設定するかってことだから
Cからのポーティングもできる人間ならチョチョイなのでは PIC32MX210F016Dは色々と問題があるから苦労するぞ C32でコンパイルしたら最適化が効かなくて016に入らなかったとか MLAのhid_joystickを見ています。USBの割り込みハンドラは一つでその中で割込み要因を判別するタイプか
サスペンドとレジュームは空っぽに見えるけど実装されていないのかな
というかUSBの仕様によればサスペンド時は〜500uAらしいけどこれメインクロック止めないと無理だろ・・・
もっとも無視しても実用上問題ない機能ではあるけど
PIC32MX210F016DへISPで書き込むのに使えそうなアダプタって
・PICkit
・SNAP
・中華のPICkitもどき
・JTAG対応のDAPLink
・JTAGアダプタ(WCH-LinkEは持っている)
・自作ライタ
くらいですかね?
PICkitは流石に単発で使うには高価、SNAPも今や4000円程度とそこそこする
中華のPICkitもどきも3〜4千円程度?と互換品のわりにそこまで安くないし Raspberry PiとかArduinoを持ってれば付加部品少々で書き込めたような デバイスによる違いが大きいことを除けば
PICの省電力モードはそこまで癖が無いと思うけど
アプリケーションにも依るが自分は省電力モードを前提に書いてる Raspberry Pi Picoベースのプログラマがあれば・・・と思ったけど
ttps://github.com/MCJack123/pico-icsp-programmer
こんなのしか見つからなかった
>>818
Arduinoはあまり使わないですし5V系(UNO R4と中華Mega2560もどき)しかありません
Raspberry Piは1B+、4B、ZeroがありますがPCベースの開発では使いにくいそうに思います
>>822
サスペンド時電流〜500uAはコンプライアンステストの項目にあるにもかかわらず
アプリケーションノートなどの具体的な実装情報は多くないように見えます
データシートやマニュアルにサスペンドやレジュームについて、何らかの記載が
あればいい方で、下手すると全く触れられていないとか、バスパワーでの使用は
非推奨というマイコンもあるようです
また根拠不明で2.5mAまでOKみたいな解説も見かけますし(MLA内のサンプルも該当) 車載のマイコンだと、待機時は何mAまで許されるのかな。
海外旅行から帰ってきたらバッテリーがあがってしまったとか、ありそう。
キーレスの受信機は間欠受信だと操作性が悪く感じるので、常時受信でしょうね。 PICごときの電力で車のバッテリーがあがるわけが無い 安物のOBD2の機器でバッテリーがあがることがあるな。 アドバイスがあっても、あれはつかえない、あれはいや、あれはこんなデメリットがある、って言ってる人ってかまってくれるのを楽しんでるね。
すべてを前向きに検討するべき。
ついでにいえば、相手してくださってる人の延べ人件費を考えれば、2万円たらずの正規品なんて安い物。 Pickit4もAtmel Iceもとんでもなく高くなってるのね
ビックリしてる
Pickit5のアナウンスされてるけど販売はまだですか? >>829
円が・・・
マルツの通販だと2種類(どちらもPICKit5)が出てきて
そのうち1方は購入できるみたい
¥17,113.8 ー> ¥18,825.17(税込)
多趣味で家庭がある人は厳しい出費かもね >>830
ホントだマルツにありますね
数年前だとこんな感じでした
↓
MPLAB PICkit4
¥5,700 (税込) 秋月電子通商
MPLAB SNAP
¥1,740 (税込) 秋月電子通商
Atmel-ICE-PCBA 基板のみ
¥5,858 Digi-Key
Atmel-ICE-Basic
以前は7000円くらいだった
¥11,000 (税込) 秋月電子通商
Atmel-ICE Full Kit
¥15,000くらい >>831
この価格は2019年ごろメモったやつです pickit3を未使用で3個まだ持ってますが、まだサポートされますよね? あくまでワシの経験だが、VOlかVOHがスペック外になってしまう。
壊れはしなかった。 スペックって0.6Vとか0.7Vとかでは?
そんなにドロップするの? 保証値と実際の値は違うしね。
それと、実際にやってみて得られた値が、いつもこれからも期待できる値だと思ってはいけない。 しねしね君はいつも分かった風を装って問題解決に貢献しない
タヒねに読み替えた方が精神衛生に良い >>835
AVRのマニュアルに
Exposure to absolute maximum rating
conditions for extended periods may affect
device reliability.
つまり色々な要素(過電圧の程度や時間など)があるので
何ともいえないってことかな。
壊れ方れ方も色々あるでしょうね。
一見壊れていないように見えても、
もしかしたらマージンの低下とか、
時間経過と共に損傷領域が拡大していくとか・・・
昔、CPUの電源ピンに間違えて24V掛けたときは
一瞬でパッケージが割れ、イヤな臭いがしたので
これは壊れたナと迷うこと無く判定できたw >>835
大丈夫です。
半導体は、基本的に電圧と熱です。
電流は熱の要因ですので、半導体が加熱しないうちに収まれば壊れません。 IOピンで直接ドライブする場合SPICEのモデルってどうしてる?
LTSpiceのプリセットにある適当なNMOSとPMOS組み合わせているけど
まあ当てにはならない IOピンで直接ドライブする場合SPICEのモデルってどうしてる?
LTSpiceのプリセットにある適当なNMOSとPMOS組み合わせているけど
まあ当てにはならない メーカーや品種によってはIBISモデルが提供されていることがある
LTspiceでIBISモデルを使用するのは問題が多そうだが LED以外の直接駆動って言ったら
チャージポンプとか圧電スピーカとか? Tiktok LiteでPayPayやAmazonギフトなどに交換可能な4000円分のポイントをプレゼント中!
※既存Tiktokユーザーの方はTiktokアプリからログアウトしてアンインストールすればできる可能性があります。
1.SIMの入ったスマホ・タブレットを用意する
2.以下のTiktok Liteのサイトからアプリをダウンロード(ダウンロードだけでまだ起動しない)
https://tiktok.com/t/ZSNfGFL7M/
3.ダウンロード完了後、もう一度上記アドレスのリンクからアプリへ
4.アプリ内でTiktokで使用してない電話番号かメールアドレスから登禄
5.10日間連続チェックインで合計で4000円分のポイントゲット
ポイントはPayPayやAmazonギフト券に交換できます。
家族・友人に紹介したり、通常タスクをこなせば更にポイントを追加でゲットできます >>850
TikTokから見れば4000円は小銭か プログラム初心者です。質問さしてください。
MPLAB , XC16 で Cを作っています。
外部のスイッチの1,0を8bitのAにセットする書き方で、
A = 0;
A |= (SW7<<7);
A |= (SW6<<6); ・・・ という書き方はできたのですが、
A = { } で1行で代入できないか試しているのですが、エラーが出ます。
たとえば
A = { SW7, SW6, SW5, SW4, 0, SW2, '00' }; のようにです
こういう書き方はできないのでしょうか?
もうひとつすみません。
8bitを2進数で表現するときは、どのように書けば良いでしょうか
16進数の0x12→00010010とかです。
宜しくお願いします コウシャは0b00010010だな
前者は共用体で出来そうかな? 配列や文字列は1行で初期化できるけど1行で全体を代入できないのと同じようにそれを1行では無理じゃね?
関数を作るかC++ならできるかもXC16は使ったことないからわからんが
もしかしてPascalとかやってた?Pascalには集合型があるけどな >>853 854
ありがとうございます。
0b00010010 0bですね。なるほど、ありがとうございます。
1行では書けないみたいですね。
共用体ですか。本には構造体と共用体というのがありました。
勉強してきます。
ありがとうございしまた。 しっかり読んでないが、ビットフィールドで駄目かい? A = SW7|SW6|SW5|SW4|SW2;
ではだめかな #define SW7 0x40 等と定義しておくとAに右辺の論理和である0xf4が入る。組み込みプログラミングの基本。 >>859
bitを落とす時はどのような記述になりますか? MPLAB X IDE 6.15 XC16 PIC24FV32KAで、コンパイルがエラーが出て困っています。
手順は以下の通りです。
新規プロジェクトを作成
MCCでピン設定、クロック設定、タイマー1割込を設定して、Generate します。
そのままBuildすると、以下のfailが出て、エラーで進みません。
nbproject/Makefile-default.mk:207: recipe for target 'dist/default/debug/test.X.debug.elf' failed
nbproject/Makefile-default.mk:85: recipe for target '.build-conf' failed
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
MCCで設定だけしてmainもそのままでBuildしたのに、errorを出します。
「あなたの生成したままで、何も変更してないよ。なぜエラーなの?」と言いたくなります。
何か解決方法はありますでしょうか? >>861
IDEをアップデートしたら、直りました。ありがとうございました。 >>861
そのエラーメッセージって、分かりにくいよね。
ハッキリerrorと出るのはいいけど、レシピが...と言われたって
分からん。ネット探しても触れられていないし。
IDEのコンパイラって不親切だと思う。 switch文のcaseの値に変数って使えないんだね。
初めて知ったよ。 >>860
picでは1ビットならビットフィールドを使うのが普通だが、複数ビットなら
A = A & 0xfc;
とすればビット0と1が落ちる。これは
A &= ~0x03;
と同じ結果になるので
A &= ~( SW1 | SW0 );
とすればよろし。 ていうか>>857のように1行で書くことができるか?という話じゃないの? xc8 2.40 でコンパイルしたものより、xc8 2.46 でコンパイルしたものの方が小さくなる傾向にあるね。 Makefileで何をしようとしてエラーになってるのかを見もしないのか? >>852
ビット単位で読むのでなく、例えばレジスターRAをバイト単位読む方法ではいかんの? >>872
SW入力はRAポートに全部ある訳ではないから。