初めての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
では、質問どうぞ〜っ >>767
単発ID (www
しつこい妄想野郎 (www
アホか ID:GOrDpMNa
おめでとうございます。
これでやっとチャラですねw
しっかし、ここまで恥をかいてでもIDはキープしたいなんて、よくわかりませんねえ。
もしかして、馬鹿ですか?
http://hissi.org/read.php/denki/20190130/R09yRHBNTmE.html >スイッチにテスタ当てて、ちゃんと「モメンタリ動」するか確認したの?
これが気になって寝れないかも・・・ >>771
Watchdogね、番犬だから。
ご主人に相手してもらえないと吠えるの。
さて、お次は点滅、ウインカーとハザードですが、どうしますかね。
>>685にも書いた通り、おすすめはタイマー割り込みを使うことですが、ちとハードルが高いかもです。
本には何か載ってますかね? >>775
俺がエスパーするとだな、スイッチの中にニードルみたいな物がバネに支えられてる
スイッチを押し込んでいくとバネが縮んで一定の押し込みでニードルがバネに弾かれて接点と接触
すぐにニードルが引っ込んで接点と放れる
これが「モメンタリ(瞬間)動」スイッチだw
ちなみに作動音はノック式ボールペンと酷似してる >>776
あ〜そういうことかw
確かに犬だ
入門書だからかざっと見た感じタイマー割り込みという文言は見当たりませんね
ウインカー右用、左用と12F1822を2個用意して16F1827でスイッチ動作させれば目的は達成しそうですが
ハザード操作の時左右にずれが出たりしないですかね? >>777
>すぐにニードルが引っ込んで接点と放れる
おかしくね?
押してる間はONになっててくれないと困る。
momentaryには「一時的な」という意味もあるよ。
あんたの話のソースはどこ? >>778
そうですか、本では扱ってないですか。
非常に便利で、マイコンの主要装備、ある意味主役的な機能です。
使えるようになれば雲泥の差です。
無理強いはしませんが、あなたならここのソースを試すだけの力はもうあると思います。
http://zattouka.net/GarageHouse/micon/MPLAB/16F1827/TIMERtoLED/TIMERtoLED.htm
実際にやってみてからどうするか決めればいいのでは?
あなたのやりたいことはPIC1つだけでも十分実現可能です。 >>779
あ、これは一般的なモメンタリじゃなくてID:GOrDpMNaのモメンタリな
>>732←参照
>モメンタリスイッチは "押してる間だけ" っていう動作はしない。 >>780
ありがとう
自分もこれからの事を考えたらマスターしたいですね
挑戦したいのでまたご助言よろしくお願いします >>781
ああ、その馬鹿の誤った妄想を揶揄してるわけね。
そんならいいや。 PICの未使用IOピンは、調べてみると不定状態にならないよう出力にしてさらにLOW
に設定するということのようですが、DIPタイプのPICを自作プリント基板で使う
場合、ソケットピンを切り飛ばして穴あけせずに、その下にパターンを配置してよい
ものでしょうか。 そのピンとパターンが電気的にどう関係してると思うの? えーと、寄生容量を形成する、でいいんですかね。何pFかの。 あ、正解じゃないですね。パターンとパターンとの間にはもっと大きな静電容量が
寄生することになりますね。すみません、素人で。 >>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が空くのでハイビームのパッシングに変更したい ■ このスレッドは過去ログ倉庫に格納されています