初めてのPIC 0x12
■ このスレッドは過去ログ倉庫に格納されています
PICを触り始めて比較的日が浅いという初心者のためのスレです。
もちろん、日は経っているが自分はまだ初心者という方も大歓迎です。
PIC選びやPICを使った回路設計は誰でも最初は不安なものです。
恥ずかしがらずに何でも尋ねてみましょう。
なお、PIC関係のスレにはもう1つ「PIC専用のスレ」があります。
質問・回答する際は…
必ずPICの型番と開発環境を明記しましょう。
プログラムはレス内に直接書き込まず以下を利用しましょう。
http://codepad.org/
その際心がけることは…
品格に劣る回答者はスルー(相手すると逆効果)
素人玄人などと上から目線の回答者は無視
良い回答が出るまでしばらく再発言しないのもあり(良回答は後に出やすい)
回答者のアドバイスで後日解決したら結果報告
回答者は初心者に優しく
Atmel買収以降アンチによる荒らしも横行してるので見かけても無視
(特にスレ立て当初はこぞって荒らしに来るのでスルー)
必要なソフトなど(基本無料)
統合開発環境 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以降の型番で始めると無理なく始められます。
最初からPIC32で始めるのもあり。
MCCの利用でハードルはむしろ低いです。
http://akizukidenshi.com/catalog/g/gI-11902/
プログラムの書き込みには書き込み器が必要です。
持っていない場合はPICkit4などを購入しましょう。
なお、eBayやAliExpressで買えるPICkit3の中華クローンも十分な性能が報告されています。
PIC一覧、スペック検索
ttp://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1005
ttp://www.microchip.com/maps/microcontroller.aspx
過去スレ
0x11 2018/08/05〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1533446166/
0x10 2018/06/29〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1530265723/
0x0F 2018/05/01〜 ttps://rio2016.5ch.net/test/read.cgi/denki/1525183933/
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
では、質問どうぞ〜っ あ、正解じゃないですね。パターンとパターンとの間にはもっと大きな静電容量が
寄生することになりますね。すみません、素人で。 >>782
ぜひマスターしてほしいね 人間必要に迫られないと新しいことにはなかなか挑戦しないものだから でもすぐに必要になると思う
例えば…
ウインカーを点滅中にブレーキが踏まれてもブレーキランプが点かない なんておかしいでしょ?
ウインカーの点滅を止めないとその他の動作ができないなんて不便でしょうがないよね
点滅動作にかかりっきりだと他の処理ができなくなっちゃうから割り込みを使ったほうが簡単に実現しやすいんだよ
タイマー割込みじゃなくても状態変化割り込みやメインループを素早く回すためにdelay関数での時間を多くても1/100秒くらいにするとか他の方法もあるけど
理解しやすくても機能追加していくほどバグを作り込みやすくなるんじゃしょうがないしね まあいろいろやってみて >>785
説教じじいがそろそろでてきそうだな
今まで我慢してたもんなあ >>780のやつはこうやったらだめですか?
https://pastebin.com/FwkZKjjs
10行目で点滅させるようにしました。 いいよ。
それくらいの処理なら直接そこに書く方がわかりやすくていい。 AVRでLEDごとにタスクを分ければ簡単に実現出来るのに・・・
(当然フルアセンブラで)
もちろんPICのシングルタスクでも実現可能です。
ご苦労さん! & ガンバってね! そう言えば将棋用語に「下手の考え休むに似たり」ってのが有ったなw 三流のCPUを使ってると三流の技術しか身につかないのに・・・。
ま、いいか、あえて茨の道を選ぶってこともあるだろうな。 >>ID:SrI/q0bL
そこまでご自身を卑下なさらなくてもいいですよ。
お気を確かに、もう古巣へお帰りください。
https://rio2016.5ch.net/test/read.cgi/denki/1538195104/ >>792
PIC16F1827なんでしょ?
タイマー4つくらいあるよね。
左右で1つずつ使ってもまだ2つある。 3つめはPWMで使って点灯パターンをかっこよく作っといて
タイミングは2つのタイマーで取ってPWMのルーティンを呼び出せばいいね。
何か楽しそうだな、おい。 実際にプログラム組んで下さった方、知識不足で活用出来なくて申し訳ないです…
とりあえず保存して休日にゆっくり試してみます
>>798
フムフム
タイマー機能がいくつか使えるので
ウインカーの点滅リレーとして左右で22つ
ヘッドライトをじわっと点灯とかのパターンもタイマーで作る
それをスイッチ入力で各ピンに出力するプログラムを組む
こういう考え方ですかな? >>769
半角スペースは1個まで。それ以外は全角スペースしか使っちゃだめって小学校で
習わなかった? >>724
とても分かりやすいと思うけど。
1つ直すとしたら、
sw=onのあいだ、毎回LED=offしない。
その状態に来る前にonしておくといいね。 >>769
変数の前についてるwって、何のwなんでしょうか?
ワーク? >>803
ちょっと、はしょりましたね。
状態遷移を把握して
あとは、waitループでぐるぐる回すなり、
timer待ち合わせで、処理振り分けするか、
timer割込みで処理するか、
状況において使い分けるということですよ。
Cさえ動けば、picだろうと、avr だろうとほぼ同様のソースになりますね。 >>803
>とても分かりやすいと思うけど。
とても分かりやすい「自画自賛」ですねw
今時、フローチャートでもなく、コード貼るでもなく箇条書きで手順書かれてもねえ…。 >>804
ウインカー
回路を見るとウインカーも想定しているようなので、ハザードとウインカーの変数を分離してみた
あとタイマーは中身を理解してもらえそうに無かったので使ってない >>807
アホ
番号そのものが状態遷移なので、
すぐにプログラムが作成できるじやないか。 >すぐにプログラムが作成できる
じゃそれ貼れば?
って言ってんだけどなw >>812
ソースを春より、状態遷移図の方が、わかりやすいと思うけど >>814
>状態遷移図の方が
確かに「図」ならわかりやすいかもな。
それどこにある?
はよ貼ってください。 >>814
何だお前、
>すぐにプログラムが作成できるじやないか。
って言ったの嘘か?
いつまでかかってんだよ、無能か?
で、今度は、
>ースを春より、状態遷移図の方が、わかりやすい
ってか。
コードと図、さっさと両方貼れよ。
お前の「すぐに」は5時間もかかるのかよ、馬鹿なのか? >>809
>あとタイマーは中身を理解してもらえそうに無かったので使ってない
なんか、とても失礼だね、あんた。
自分がタイマー割り込み書けないだけなんじゃないの?
どう見てもコードが泥臭いっていうかカビが生えてそうなんですけどw >>817
解決の糸口なり、洗礼されたコードを出しているのなら有意義なので何も言いませんが、文句を言いたいだけならただのクソですね
割り込みは当然使える。
本当はチャタリング対策も後回しでいいんじゃないかと思うけど。 http://codepad.org/az6kV9MR
スイッチの状態管理を別関数でやって、
LEDのon/off状態を確定して、
mainループでは、それを元に、単純点灯かエフェクトつけるか、
もしくは、関数作って外だししてもいいと思います。 >>808
>あとタイマーは中身を理解してもらえそうに無かったので使ってない
偉そうだな、無能呼ばわりか、上から、品性低そう。
>>818
>割り込みは当然使える。
>本当はチャタリング対策も後回しでいいんじゃないかと思うけど。
どれどれ、他人をクソ呼ばわりする品性で書いたコード、見してみな。 >>819
タイマー割り込み使わない前提だと臭っさいコードになるという典型だねえ。 >>821
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
この辺の #include が必要かな。
スイッチのポートとか、LED出力のポートはそっちで決めてね。 MCCでやってみた。
スイッチを押す度に、
右ウインカー点滅、左ウインカー点滅、ハザード(全点滅)、全点灯、前消灯
をトグルで実行する。
MCCでTimer0の500ms間隔の割り込みを作った。
下は自分で書いたり変更した部分だけ。
https://pastebin.com/raw/Za7Xhk02 質問です。
MPLAB X IDE Ver3.xx + XC16 で作ったプログラムを、
MPLAB X IDE Ver4.15 + XC16 で再コンパイルしたら、
ポート設定(TRISやLAT)の部分で、大量のエラーが出ました。
こんなことって、あるのでしょうか? プロジェクトのチップ名変わってたりはしてないんだよね?
なんだろうな >>827
これは怖い話
俺もver3.15だし
むやみにバージョンアップするなってことか >>827
ヘッダのincludeができてないか、別のものになってる予感 PICいいよなー
今arduino pro miniでやってるけど
これ以下にできるのがPIC
一通り揃えてるけどまだやってない・・
今年中にチャレンジしたい PICはarduinoと違って型番ごとに設定違うっぽいが
・フランス語
・イタリア語
・ドイツ語
をそれぞれ覚えるくらいめんどうなのかな
かつ「なんとか地方の方言」までついてくるのかなと うーん大変だ >>827 は何してる?
まだエラーメッセージの詳細もコンパイラのバージョンも書けないのか。
それともただの荒らしか? >>833
うむ、確かに PIC は arduino 以下だな。 PIC32MM0064GPL028でもMCCでやってみた。
LEDは1ずつに減らしたけど。
https://pastebin.com/raw/dDGz3BJP
自分で書く部分はこれだけで、PICが違ってもほとんど同じ。 MIFESX(エディタ)でアセンブルプログラム書いて
MPASMでアセンブルして
XIDEにインポートして
PICKIT4を5Vセットして書き込むだけ。
アセンブラはシンプル。動作時間も正確に管理できるし。
突然ウインカー入力が変化したら最初に戻って、スタックをゼロにして・・・ ウインカー入力2+ブレーキ入力1で3ビットだから8通りしかない。
8つのパターンテーブル作っておいて入力に応じて選択してジャンプするかデータを吐き出せばよい。
ブレーキ点滅、ウインカ点滅パターンも自在にプログラムできる。
たとえばそれぞれを16行で2秒間にするとか。 ヘッドライト上(遠)
ヘッドライト下(近)
ヘッドライト・パッシング
スモールランプ
フォグランプ
バックランプ
ウインカー右
ウインカー左
ウィンカー・ハザード
ウインカーのカチカチ音(たとえば小さなリードリレーをオンオフ)
クラクション(例えば圧電ブザー)
輝度調整、流れるウィンカーまで入れるとそりゃもう大騒ぎだな ID:1EvTv2jF
残念ながら、XC8でという前提の質問なので全く参考になりません。
次からは脳内だけでおやりください、それはあなたの自由です。
ご苦労様でした。 >>780
このサイトと全く同じようにテストしたつもりなのですがエラーが出てしまいます
バージョン違いだからですかね?
https://i.imgur.com/bb1u8XNh.png >>847
そもそもその項目が無いという事は根本的に間違ってるんですかね?
最初からやり直してみます
https://i.imgur.com/XtiZh0Ph.png >>848
IDEとコンパイラのバージョンを書いて。
なぜ回答者が書いてくれてるのに質問者が書かないんだろう。 初心者ほど自分の知識と知恵が露呈することを嫌うから。 >>849
MPLAB X IDE v3.61
XC8 v1.42
ですね >>850
自分が初心者の頃の心理を告白してんの?w
いやお前は最初から玄人だったよなw >>850
で、バージョンを書くと何が露呈するんだろ。
>>851
ならば、>>847のリンク先にあるエラーは出ないはず。
あなたのために自分の環境のバージョンを下げる気はないので、
あなたが最新バージョンにしない限りはバージョンがらみのエラーについては未知数のままです。
バージョンはそのままだとしても、
>ファイルをダウンロードしてプロジェクトに読み込んでビルドしてみた限りではエラーは出ません。
のようにやり直してみてどうでした?
そのサイトのバージョンは2.15、1.32なので普通なら問題無いはず。 あ、ちなみに、
C99以外は一切変更せず、ビルドして実際にPICに書き込んで、
期待した通りの動作で問題なく動いてます。 >>853
全く同条件で最初からやり直してみたらうまくいきました
どこかでミスしていたのかもしれないですが原因はわかりませんでした
ちなみにC99という項目は>>848と同じで無いですね
バージョンに関しては一回最新のものではじめたのですが購入した本と同じ動作をしなかったので本と同じバージョンでテストしてます >>855
心当たりがあるとすれば、Cleanしなかったからかな、くらいですね。
v2.0の前後を除けば、あまりバージョンを気にした記憶もなく、だいたい最新にしてますね。
Microchipは常に全バージョン入手可能なので…。 ハザードとしてRA3、RA4を点滅にしました
RB5をプルアップで点滅させるにはどうしたらいいでしょうか?
http://codepad.org/4uTH6otz
ハイビーム、ロービーム、ポジションを組み込みたいのですがどう組めばいいですか?
http://codepad.org/BcnXXXaj
あとRB2、RB3でウインカーも作動させたいのですが
https://i.imgur.com/jKF0jdvh.png MCCをインストールすると、コメント行の単語にもいちいち赤い下線がひかれて邪魔なのですが、どうすれば消せますか?(16F886使用中なので、現状MCCそのものは使えていない、IDEはv5.10)
MCCを消すのが手っ取り早い?
https://i.imgur.com/muzTsTQ.png >>858
if (LEDflg == 0) LEDflg = 1 ;
else LEDflg = 0 ;
は
LEDflg ^= 1;
と同じこと。
排他論理和を調べてみてください。
なので、これでも同じはず。
https://pastebin.com/raw/7sxbC1Ex >>860
それ、MCCは関係なくスペルチェックなんじゃないでしょうか?
スペルチェックをオフにしたらどうなります? >>862
MCCありの状態だと、スペルチェックをオフにすれば消えます。
MCCをPluginsからDeactivateして再起動すると、スペルチェックがオンのままだと表示されず、オフにしたあとオンにしなおすと出てくる、という感じでした。
というかスクロールすると、画面内の位置によって出たり消えたり不安定ですね…
とりあえずスペルチェックはオフのままにします。ありがとうございます。 >>864
多分、点滅しっぱなしなので次は点滅を止めたいですよね。
^= 1 でなく = 1 なら点きっぱなし = 0 なら消えっぱなしにできます。
あとタイマー割り込みを止めるという手もあります。
この行です。
TMR2IE = 1 ; // タイマー2割込みを許可する
いろいろやってみてまた質問してください。 >>866
映像にも書いてますが、MCCP1のPWMでスピーカーを駆動して鳴らしてます。
音データはプログラム・メモリに書き込んであります。
いまクラクションも準備中w >>869
>今回は「電飾しましょっ!2 PIC編」では触れなかったタイマー割り込みという処理をしています。
とあるから、もう本を見ても参考にならないね。
サイトの記事も、whileのポーリングで検知してるだけだから、限りなく素のタイマーに近い使い方。 色んなサイトのプログラムを切り貼りしてなんとか形になりましたがまだやりたい事は達成出来てません
アドバイス頂けたら嬉しいです
http://codepad.org/IaxrCenU
https://i.imgur.com/sraOYrZh.png
出来てない事
・ハザードは時間指定じゃなくてスイッチで点滅維持-停止の切り替えがしたい
・ポジションスイッチを押す度に
消灯 → ポジション → ポジション+ロービーム → ポジション → 消灯
と切り替えたい
・上記が可能になればRB1が空くのでハイビームのパッシングに変更したい >>872
雑なアドバイスだが、while ループの中で、
スイッチの操作により、現在の状態を表す変数の値のみを変更する。
現在の状態を表す変数の値によってLED の点灯、消灯、点滅の処理をする。 ふとトランジスタアレイ使った方が良いんじゃね?と思った >>872
>>859や>>873を見ればわかるけど、点滅中でも音が鳴っている。
__delay_msを使わずに割り込みでやらないとそうは出来ない。
点滅の処理を関数に書き、割り込みでその関数を呼ぶようにする。
点滅を止めるときは割り込みを禁止にすれば止まる。
他でよほど重い処理をしない限り勝手に点滅していてくれる。
参考にしたサイトが割り込みを生かし切ってないサンプルだから仕方ないけどね。 >>876
えー?
割り込みから関数呼ぶの?この程度の要求速度で?
しかもPIC8だよね?あなたほんとにPICで割り込み使ったことあるの?
タイマ割り込みでフラグ立ててメインで処理だろ >>874
>>876
>>877
ありがとう
でも初心者なので具体的に何をどうすればいいのかちょっと分らないです
>>875
トランジスタの省スペースになるけど点滅回路にはならない? >>878
>>840にコードがあるから参考に、PICは違うけど考え方は同じ。
>>874や>>877の言うことは私にもよくわからない。
>>875は基板作る段階になったら考えればいいこと。 >>877
それ、僕もその程度の処理で割込み使うかな〜と思っていた。
deley関数使わずに、timerのオーバーフローフラグで、タイミングを取るのは
よくやるよ。
割込みは、通信処理や、LCDの転送処理などにとっておく。
もちろん、Lチカでも、正確なパルス幅で点灯させたいときは、割込み使う。 割り込みは基本だろ
なにも使わなくたって変数カウントアップさせとけ
その変数のbit取り出すだけで何種類もの矩形波が出来る
1024Hz、512Hz、256Hz、128Hz・・・4Hz、2Hzとかだと
2Hzのbitとon信号とandするだけで点滅信号に早変わりだ
サーボの左右、中立位置だって簡単 >>880
いろいろよくわからないです。
>timerのオーバーフローフラグで、タイミングを取るのはよくやる
「timerのオーバーフローフラグ」って具体的に何のことで、
実際にはどういう処理をするんですか?
>割込みは、通信処理や、LCDの転送処理などにとっておく。
模型の電飾で通信処理やLCDですか、またずいぶん盛りましたね。
にしても、5つもあるタイマーを使わずに温存する理由にはなってないですね。
>Lチカでも、正確なパルス幅で点灯させたいときは、割込み使う。
割り込み使わなくても不正確になんて出来ませんよね。
これもどういう意味か具体的に教えてください。 >>873
音鳴るのいいね。
そのうち模型の電飾屋さんがマネしそうw >>884
ありうる。
ここで割り込みの話が出たとたんにあちらでもやり出したしw 割込は非同期入力に使うことが多いなぁ
キー入力とかインプットキャプチャとか >>883
ハードウェアタイマーが満了になったら、ハードウェアが立てるフラグのこと。
そのフラグを見て、例えば1msが100回で0.5sたったら、LEDを点灯消灯するとか、
mainのif分で作る。
その間はLEDは触らない、というようにすれば、残りのCPUパワーをすべて使えるということ
ハードウェアタイマーのフラグでなく、ハードウェタイマーの割り込み処理でソフトで変数を1にして
戻ってきても同じ事
PICの割り込み処理内で多段に関数をコールするとハードウェアの都合で戻って来れなくなる場合もあるので、
不用意に呼ばないほうが良い。
模型の電飾で通信処理は普通に使う。まぁ使うときになるまで考えなくても良い
通信処理と言っても232cなどだけではない。i2cから赤外線までいろいろ ■ このスレッドは過去ログ倉庫に格納されています