X



トップページ電気・電子
1002コメント341KB

初めてのPIC 0x0f

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001774ワット発電中さん
垢版 |
2018/05/01(火) 23:12:13.97ID:o4U5k+Rn
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
0894774ワット発電中さん
垢版 |
2018/06/23(土) 22:20:59.76ID:KUsZkuRg
ついでにエラッタ議論も専用スレで
0895774ワット発電中さん
垢版 |
2018/06/23(土) 22:25:51.71ID:jNJ+jrw+
もうネタなんてないだろうし
いまさらPICをはじめようなんて人もなかなかいない
作り話でつないでもしょうがない
このスレ自体不要では?
0897774ワット発電中さん
垢版 |
2018/06/24(日) 04:40:28.59ID:Pvr7sMv0
PICでスタートする人も多いですよ。
・ネッなど日本中に仲間が多い
・情報量がAVRの比じゃなく多い
・パッケージのバリエーションが多い
・秋月で安価に買える
・内蔵周辺モジュールが豊富
0898774ワット発電中さん
垢版 |
2018/06/24(日) 06:14:44.40ID:Bw5Z947a
神様にお願いしといた。
「PICでスタートして後で後悔する、なんて初心者が居なくなりますように」って。

しかし、<美人とブス、どちらでも好きなほうとつきあえる>、という状況で
わざわざブスを推薦するって >>897 は罪作りな奴だなw
後で恨まれるぞww
0899774ワット発電中さん
垢版 |
2018/06/24(日) 06:59:19.70ID:IUiafEkC
ブス!とか言いながら、その子が気になってしょうがない小学生w
0900774ワット発電中さん
垢版 |
2018/06/24(日) 08:36:53.76ID:qfY2MA6a
AVR(のアーキテクチャ)は気になるけど、ardunoがウザイ。
AVRもPICみたいに簡易なデバッガが出て欲しいな
0902774ワット発電中さん
垢版 |
2018/06/24(日) 08:55:42.43ID:z1CV/Wzj
>AVRもPICみたいに簡易なデバッガが出て欲しいな
あるのでは? AVRスレで尋ねてみれば?
0903774ワット発電中さん
垢版 |
2018/06/24(日) 09:06:50.75ID:GnWhyKXX
LPC-Link2 2800円
ST-LINK/V2 3000円
MiniProg1 3650円
PICkit4 5700円
Atmel ICE 11000円

Microchipは高い
0904774ワット発電中さん
垢版 |
2018/06/24(日) 09:10:35.96ID:WyZDZHBz
>>898
PICで何かを作ろうとする気概のある人は
他人に責任を求めたりしないと思うが
0905774ワット発電中さん
垢版 |
2018/06/24(日) 09:13:57.95ID:GnWhyKXX
データシートより他人を頼る人がPICユーザーに多い気がするけど
0907774ワット発電中さん
垢版 |
2018/06/24(日) 09:19:31.82ID:ROB4jaM6
>>905
僕 英語読めません、って素直に白状したら?
0910774ワット発電中さん
垢版 |
2018/06/24(日) 10:53:47.93ID:Pvr7sMv0
先輩方の高いレベルの雑談は、本スレでお願いします。
ここは、僕たち初心者が質問するスレです。

俺は詳しいんだ凄いだろう、AVRは凄いんだ、
と言う雑談は、 あっちのスレでお願いします。
0911774ワット発電中さん
垢版 |
2018/06/24(日) 10:54:53.43ID:u0+igbfY
マイコンプログラミングをはじめるなら
無難に32bitが良いよ
8ビットは色々と特殊すぎて
0913774ワット発電中さん
垢版 |
2018/06/24(日) 10:59:21.83ID:vOANkRU+
PIC←→AVR
フルーク←→フルーク以外
VHS←→β
非喫煙者←→喫煙者
・・・

非主流は姦しい・・・
0917774ワット発電中さん
垢版 |
2018/06/24(日) 12:35:58.24ID:u0+igbfY
次は

カラー画面
アニメの高画質化
表面実装部品による小型化
赤外リモコン送信機能
赤外リモコン受信
リモコン&メニューによる設定
USBを使ってPCから設定

この辺に挑戦してください
0918774ワット発電中さん
垢版 |
2018/06/24(日) 12:43:26.96ID:u0+igbfY
ROMサイズが必要ならこの辺を
PIC32MM 20pin 64KB
PIC32MM 28pin 256KB

基板設計もぜひ挑戦してみよう
今はとても安く作れます
0919774ワット発電中さん
垢版 |
2018/06/24(日) 12:47:09.86ID:u0+igbfY
今時電源がトグルスイッチも無いよね

自己保持回路による待機電力ゼロ化
でも良いし
リモコン受信可能なまま省待機電力に挑戦
でも良い
0920774ワット発電中さん
垢版 |
2018/06/24(日) 12:58:32.02ID:u0+igbfY
砂時計だから加速度センサで起動が普通か
1秒に1回くらい値を見て値が大きく変わったら起動

電源は3系統
PIC, 加速度センサ, 画面
0921774ワット発電中さん
垢版 |
2018/06/24(日) 13:18:01.46ID:kwQ67rjL
DC/DCのenableをプッシュボタンで起動して、
動作中はPICがenableを保持すれば、
オートパワーオフが成立しそうなんだが、
1ボタンでそれをやる回路が思いつかなかった。
PICからのenable信号がボタンと競合してしまう。
ダイオードとかで何とかなる?

20ピンの32MM、気になる。
0922774ワット発電中さん
垢版 |
2018/06/24(日) 13:24:37.48ID:7ud+1Wfz
>>921
ダイオード使ってもいいし、enableを駆動できる程度に
pic出力に1K位の抵抗直列に入れればぶつかってもok
0924774ワット発電中さん
垢版 |
2018/06/24(日) 13:31:16.92ID:7ud+1Wfz
>>923
> >>922
> そしたらボタンが押されっぱなしにならない?
ん?
時間来たらpicが切るんじゃないの?
0926774ワット発電中さん
垢版 |
2018/06/24(日) 13:44:27.29ID:kwQ67rjL
>>925
ボタン1個で、起動、砂時計容量変更、ブザーストップをさせたい。
電池はDC/DCに直結するが、動作時のみenableにする。
DC/DCはGNDに落とすとenableになる。

これが解けなかった。
0927774ワット発電中さん
垢版 |
2018/06/24(日) 13:55:11.91ID:KhRIf9c7
プッシュSW1回路の場合、どの電源系につなぐかが面倒くさそう。

卑怯な方法。二回路二接点プッシュスイッチ使い1回路を電源ON用に使う。

別の方法も考えられると思うけど、電源系の電圧が書かれた回路図がないと分からないな。
0928774ワット発電中さん
垢版 |
2018/06/24(日) 14:23:19.43ID:u0+igbfY
>>926
ん?
普通にダイオードと抵抗で出来ないか?
まあ最悪ボタンはADCで検出でも
0929774ワット発電中さん
垢版 |
2018/06/24(日) 16:43:22.81ID:wgVV9TG7
XC8について質問さしてください

XC8で@(アット)マークを付けたら変数領域を指定のアドレスへ配置出来る
と思うんですが、この機能を使えば

myStruct1 AAAA @ 0x500;
myStruct2 BBBB @ 0x500;

と言う感じであえて同じアドレスに2つの変数を配置して、あたかも共用体の
ような使い方が出来ますでしょうか?
0930774ワット発電中さん
垢版 |
2018/06/24(日) 16:47:34.64ID:2J01mMpu
素直に共用体使ったら?
0931774ワット発電中さん
垢版 |
2018/06/24(日) 18:56:15.89ID:3e3r9nFD
同時にインクルード出来ないヘッダで別々に定義されてるとか?
0934774ワット発電中さん
垢版 |
2018/06/24(日) 21:26:44.93ID:hTUJK9g6
賢いコンパイラだと、まずいかも。
たしか、cには、異なるタイプのポインタは同じものを指さない
と言う縛りがあってそれを使った最適化をするコンパイラがある。
アホなコンパイラなら、そんな最適化はしないだろう
それでもvolatileはつけとくべきね。
0938774ワット発電中さん
垢版 |
2018/06/24(日) 22:47:18.36ID:3e3r9nFD
enableの代わりにトランジスタ
マイコンからの制御にデジトラ

なところが違う
0946774ワット発電中さん
垢版 |
2018/06/25(月) 06:49:07.59ID:mPzchdJZ
そもそも電源の選定は正しかったのか。

PICと液晶は2.7V<Vcc<5Vだから、18650直結なら簡単だった。

PchMOSFETをDCDC上流に入れた場合、バッテリ電圧の下限はどの程度?
1.0Vで動かなきゃNiMH×1には使えない。
0948774ワット発電中さん
垢版 |
2018/06/25(月) 08:27:22.48ID:8zCYKMmx
>>940だと、
スイッチを押すとスイッチの抵抗側の電圧が変わるようにしておいてADCで検出
とか
0949774ワット発電中さん
垢版 |
2018/06/25(月) 10:41:09.73ID:GonHOTXi
>>929
出来ることはできるが、
変数のアドレス管理誰がやるんだよ
それは普通、アドレスマップのレジスタに対して使う機能
0953774ワット発電中さん
垢版 |
2018/06/25(月) 12:46:28.44ID:sQsmhZbM
色々な使い方があるのに乏しい経験で「普通」とかいってわざわざ用途を絞っちゃう
お前ソフトに向いてない
0954774ワット発電中さん
垢版 |
2018/06/25(月) 19:12:15.18ID:GonHOTXi
アホカ
ただのグローバル変数に絶対アドレス指定したらそこが他で使われていないか、
リンカのマップファイルみて一々確認しなきゃならんだろ
そんなめんどくさいことやる馬鹿いねーよという意味だよ
(普通に共用体で宣言すればいい)
それともあれか、 @ 機能つかったらそのアドレスは他で使われないように
コンパイラが管理してくれるのか?
ヒープの真ん中でも避けてくれるのか?w
それに「普通」ってのが用途を絞っていると断言している根拠はなんだよ
勝手に決めつけるなよw
0956774ワット発電中さん
垢版 |
2018/06/25(月) 19:48:33.81ID:LqX63lra
>>954
じゃあXCには何のためにアドレス指定機能があると思ってんの???
馬鹿?
0957774ワット発電中さん
垢版 |
2018/06/25(月) 19:49:57.38ID:RbY6Qp1Q
だから >949
0958774ワット発電中さん
垢版 |
2018/06/25(月) 20:13:41.49ID:8zCYKMmx
アドレス指定したいっていう人に
アドレス管理誰がやるんだよって
頭おかしい
0959774ワット発電中さん
垢版 |
2018/06/25(月) 20:24:20.92ID:I7aJr4QL
>>954
普通のメモリマップドIOの割り当てをコンパイラやリンカがどうやると思ってるんだろ
0960774ワット発電中さん
垢版 |
2018/06/25(月) 21:25:38.07ID:tW+lH6r5
普通にアドレス指定してるが・・・・・何か?????
0961774ワット発電中さん
垢版 |
2018/06/25(月) 23:13:10.88ID:RkgoG5h3
>>898
美人は3日で飽きるがブスは3日で慣れるという有名な格言があってだな以下略
0962774ワット発電中さん
垢版 |
2018/06/25(月) 23:21:21.99ID:CdGAXxfw
IOやSFRのアドレスと、変数のアドレスをごっちゃにしてはややこしくなる。
変数のアドレスはコンパイラ、リンカに任せればいいという話でしょね。

いやいや、アドレス指定したいって話なんだから、という話もわかるのだけど、
共用体ではなんであかんのでしょ、って疑問はあるのかも。俺もまあそう思う。
0964774ワット発電中さん
垢版 |
2018/06/25(月) 23:24:03.21ID:8zCYKMmx
>>962
疑問に思ったとしても質問の前提だから

素直に共用体にしたくない理由はいくつか考えられるし
共用体はおまけでアドレス指定が主な目的かもしれない
0965774ワット発電中さん
垢版 |
2018/06/25(月) 23:26:06.77ID:8zCYKMmx
質問に答えるだけならその理由は不要
代替案を知りたいなら理由も書くでしょう
0966774ワット発電中さん
垢版 |
2018/06/25(月) 23:28:40.09ID:8zCYKMmx
変数のアドレスを指定したい理由も色々と考えられます
経験の浅い人はそういう発想もないでしょうけど
0967774ワット発電中さん
垢版 |
2018/06/25(月) 23:34:40.64ID:8zCYKMmx
質問者も、
やって見ればすぐわかることをいちいち質問しないでやってみればいいんですよ
出来たならここに理由と共にテクニックとして紹介する
初心者同士そうやって高め合えば良い
0968774ワット発電中さん
垢版 |
2018/06/26(火) 00:05:08.91ID:MH2X+Y+e
>>964, >>966
>素直に共用体にしたくない理由はいくつか考えられる
アドレス指定とは別にして、共用体にしたくない理由って具体的にどんなこと
でしょうか。


>変数のアドレスを指定したい理由も色々と考えられます
昔のパソコンでVRAMをワークエリアに使うようなときにはアドレス指定をしていた
けれど、8bit PIC で変数のアドレスを指定するほかないようようなことって
どんなことなんでしょうか。

いろいろ考えられるうちの3個4個ぐらいを教えていただけると勉強になります。

と、こういう疑問は持ってますが、技法としての元質問の価値はあると思ってます。
必要なら自分でやっつければ済むことですけど。
0969774ワット発電中さん
垢版 |
2018/06/26(火) 06:52:22.86ID:U2j8GMB0
>>968

●共用体
◇文字数の削減や移植の手間や見易さの為
(※無名共用体が使えない場合)

◇ファイルやモジュールの分離性確保の為
・同時にインクルード出来ないヘッダ
・コンパイル依存性(コンパイル時間)
・ライブラリ化

◇共用体に出来ない構造体への対応
(※C++の場合)
0970774ワット発電中さん
垢版 |
2018/06/26(火) 07:09:48.97ID:U2j8GMB0
>>968

●アドレス指定したい場合

◇部分ビルドする場合のインターフェース
ブートローダーとアプリケーションや
複数のアプリケーションなど
ROMの複数エリアを別々にビルドする場合のインターフェースとし
エントリーポイントのテーブルなど

◇周辺モジュールとのインターフェース
DMAのバッファなどで特定の番地にしたい場合

◇高速化や簡略化の為
配列の先頭や終端のアドレスが特定の値で有ることで高速化やコードの簡略化を行う
+と&でリングバッファのポインタを更新するなど

◇セクタ考慮
ROMのセクタやRAMのバンクなどを考慮したい場合
境界を跨ぎたくないとかセクタ先頭からはじめたいとか

◇デバッグ性
よくデバッガで書き換える変数の固定アドレス化
外部からアドレス指定でアクセスしたい変数の固定アドレス化
0972774ワット発電中さん
垢版 |
2018/06/26(火) 07:33:03.70ID:MH2X+Y+e
>>969-971
共用体を避ける理由については、正直なところ俺にはピンとこないものでしたが、
アドレス指定については思い当たるところもなくはなく。
ただ、とても個人的な事情にすぎないことで、俺のPICの使い方ではあまり縁がないものばかりでした。

あと、俺の思い込みもありました。8ビットPICってPIC18も含まれるのですね。

ありがとうございました。
0973774ワット発電中さん
垢版 |
2018/06/26(火) 08:11:42.65ID:W4z6KEwg
>>972
アドレス固定にすれば、エンディアンとかの考慮要らないから、移植しやすい とかかな?
0975774ワット発電中さん
垢版 |
2018/06/26(火) 09:48:57.87ID:oi/2MisI
>>973
アドレス指定をするとエンディアンの何が解決出来るって?
少なくとも考慮要らないなんてことはない
0976774ワット発電中さん
垢版 |
2018/06/26(火) 10:18:31.43ID:+FLk9oh3
>929
GCC (XC8含め) のリンカは別の名前が同じアドレスをさしていても問題ない。
だからやろうと思えば適当にリンカへの指示を加えることで可能にはなる。
ただ、リンカへの明示的な指示なしでコンパイラが、暗黙のうちにリンカでエラーにならないように
セクションや名前を選定してくれるかは別で、

ゼロ以外で初期してたらだめ、
ゼロで初期化するやつは初期化しないやつとならマップ OK、
初期化してなければOK、

とかそんな感じになると思うけど、
GCC でファイルをまたぐ名前の扱いが 2012年あたりからちょいちょい変わってるので
XC の元ネタの GCCの版によって挙動がかわるかもだから保証はしない。

あと、異なる名前が同じアドレスを占めていて、それを一つの関数内で両方の名前を扱うなら、最適化で O2 以上は禁止な。
gcc -O2 は異なる名前は異なるアドレスをアクセスする前提で最適化する。volatile 関係ない。
ここ 2年くらいエイリアスの最適化の動作確認してないけど変わっとらんと思う。
0977774ワット発電中さん
垢版 |
2018/06/26(火) 13:08:30.85ID:WR7nqvMw
XC8ってアドレス指定すると何の警告も無しに同じエリアに値を割り振るんだね
怖い怖い
0978774ワット発電中さん
垢版 |
2018/06/26(火) 13:18:35.17ID:WR7nqvMw
最適化に関してはunionでも悪影響が無い保証なんて無いよね

volatileは読み書きの順番や回数はバイナリ上では保証されるから意味が無いことは無いけど
最適化が非常に制限されるからなるべく使いたくない

そもそも、最適化で変わるような関連が密なデータであれば素直にunionにした方が便利な事が多いと思う
0979774ワット発電中さん
垢版 |
2018/06/26(火) 18:05:45.28ID:ex7MjJy5
XC8ってリンカスクリプトとかスキャッタロードとかって無いの?
0980774ワット発電中さん
垢版 |
2018/06/26(火) 22:26:29.21ID:KQN0txZ5
>>976
>> gcc -O2 は異なる名前は異なるアドレスをアクセスする前提で最適化する。volatile 関係ない。

これ、gccドキュメントのどこに書いてある?
前に書いたように、異なるポインタタイプは同じものを指さないという仮定=strict-aliasingルールはドキュメント上にある。
-O2はstrict-aliasingを仮定して最適化するとドキュメントに書いてある。
GCCのドキュメント(gcc6のね)から、

'-fstrict-aliasing'
前略
In particular, an object of one type is assumed never to reside at the
same address as an object of a different type, unless the types are
almost the same. For example, an 'unsigned int' can alias an
'int', but not a 'void*' or a 'double'. A character type may alias
any other type.
中略
The '-fstrict-aliasing' option is enabled at levels '-O2', '-O3', '-Os'.

volatile周りも、理解してないね。
0981774ワット発電中さん
垢版 |
2018/06/26(火) 22:39:29.47ID:KQN0txZ5
>>976
念のため例つけとくと、

void f(int *x, int *y)
{
int a = *x;
// a == *x に決まっている。
*y = 0;
// これ以降は、a != *xかもしれないと考えて最適化する

ということだからね。
同一視の可能性は名前じゃなく、ポインタの型だよ。
なお、int *とunsigned int *は類似の型なので、同一型のように扱う。
0982774ワット発電中さん
垢版 |
2018/06/27(水) 00:47:47.51ID:Qlu5v5Vu
先輩方の高いレベルの雑談は、本スレでお願いします。
ここは、僕たち初心者が質問するスレです。

俺は詳しいんだ凄いだろう と言う雑談は、 あっちのスレでお願いします。
0983774ワット発電中さん
垢版 |
2018/06/27(水) 01:11:03.22ID:9TsXY6B2
>>976
>>980
話題がそれてるけど
ポインタじゃなくてスタティックな変数への直接アクセスの話
unionとunionじゃない同じ番地の変数が同じように扱えるか
が質問内容

一旦ポインタを経由したら最適化が同じになることは容易に想像がつく
コードはポインタの中身に依存しないので
0990774ワット発電中さん
垢版 |
2018/06/29(金) 18:23:25.68ID:VAjBY0do
きみに
レス数が950を超えています。1000を超えると書き込みができなくなります。