X



トップページ電気・電子
1002コメント386KB
初めてのPIC 0x0A [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2017/01/04(水) 12:00:57.16ID:x9LH1FlU
.
   _       _    PICをさわるのは今日が初めて、という超初心者のためのスレです。
  (O>――<O)    PIC選び、PICを使った回路は、誰でも最初は不安なものです。
  / (・) (・) ヽ    恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。
  ○ /▼\ ○    質問のしかたは、初心者質問スレの発言1を見てくださいね。
  |(ヽ二フ ) |    
  /  ̄ ̄ ̄ ヽ  
 f ヽ     / |  PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。
 ヽ \  / ノ    ・PIC専用のスレ
  | \_ )(_/ !       本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。
  |       |       ここの話がわかるようになれば、あなたはもう一人前のPICerです。
  |       |    ・マイコンソフト 悩み事相談室
  |   | ̄ ̄|  |      マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。
 (_ノ    ヽ_)

 質問する時のコツ
  ・性格の悪い回答者はスルーしよう(相手すると逆効果)
  ・素人玄人などと 上から目線の回答者は、無視してください。相手してはいけません。
  ・そこそこ良い回答が出るまでしばらく再発言しないのもあり(良回答は後に出やすい)
  ・回答者のアドバイスで後日解決したら、結果報告しよう(とても喜ばれる)
  ・回答者は、僕たち初心者に優しくしてください。あなたも通ってきた道のはずです。

 さ、質問どうぞ〜っ
  0x09 2016/09/07〜  http://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
  0x03 2014/09/22〜  ttp://wc2014.2ch.net/test/read.cgi/denki/1411314715
  0x02 2014/05/20〜  ttp://wc2014.2ch.net/test/read.cgi/denki/1400522979
  0x01 2013/11/17〜  ttp://ai.2ch.net/test/read.cgi/denki/1384626558
0801774ワット発電中さん
垢版 |
2017/04/26(水) 17:49:38.04ID:Y/yZXMB8
Cは甘え
0804774ワット発電中さん
垢版 |
2017/04/26(水) 22:19:13.15ID:ukdQvwBe
どんな言語使ってもちゃんと動けば良いだけ!!
アセンブラ使ってもバグだらけではどうしようもない
開発効率が良いもの使って、精度が必要なとこだけアセンブラ使ったほうが
短時間で開発できる。
趣味でどれだけ時間がかかってもいいようなものなら別だけど??
0805774ワット発電中さん
垢版 |
2017/04/26(水) 23:40:21.74ID:ZczdK8/1
開発時間が掛かるのは能力無いから。
趣味でも向き不向きがあるから辞めとくのが吉
0807774ワット発電中さん
垢版 |
2017/04/27(木) 15:57:02.85ID:T2sZxQHd
以下の理由で、趣味であっても私はフルアセンブラを推薦する。
+ PICのような低レベル(低速、低容量、低機能)のCPUではアセンブラの方がパフォーマンスを発揮できる
+ たかだか数Kベイトのプログラムをアセンブラで書いても大した作業量では無い
+ フルアセンブラとインラインアセンブラでは根本的に設計方針(アルゴリズム)が異なる

趣味なら開発効率よりも達成感、充実感では?
妥協していたら進歩しない
0808774ワット発電中さん
垢版 |
2017/04/27(木) 16:20:25.41ID:nFjcxth6
PICってPIC10からPIC32MZまであるんですがご存知?

あとさ、趣味もいろいろあって、
手っ取り早く機能を実現したい場合は、フルアセンブラなんて遠回り過ぎて
移植性、可読性、メンテ、この辺を多少でも求める人にも向かない
回路は凝るけどソフトはそれほど興味がないとか

フルアセンブラは、PIC10にどれだけ機能を入れられるかとか、そういうことにこだわりがある人がやればいい

単にパフォーマンスが問題なら、問題となるところだけをアセンブラにするのがはるかに効率的
0809774ワット発電中さん
垢版 |
2017/04/27(木) 16:24:08.21ID:nFjcxth6
C言語、C++などで実現出来る機能をフルアセンブラで組むなんてのは、ソフト開発的にはアホ

趣味なら人それぞれ

8bit PICの糞命令を堪能したいとか、MIPSを勉強したいとか、そういう用途ならフルアセンブラはオススメですが
0810774ワット発電中さん
垢版 |
2017/04/27(木) 16:58:30.21ID:42HTgePb
Lチカしかしないならアセンブラは要らないな
0814774ワット発電中さん
垢版 |
2017/04/27(木) 20:41:39.96ID:X8m+3fLj
限界に挑戦するならアセンブラは必須
そういうごくごく一部を除けばアセンブラなど不要
仮にアセンブラが必要な場合でも、フルアセンブラである必要性は極めて低い
0815774ワット発電中さん
垢版 |
2017/04/27(木) 20:48:15.75ID:YJemsAiP
ポートに出力したり、レジスタに値セットする程度で
アセンブラ使う必要性があるのか???
しかもPIC程度のプログラム量で・・・・・
0816774ワット発電中さん
垢版 |
2017/04/27(木) 20:58:04.44ID:X8m+3fLj
どっちかっていうと8bit PICみたいな超貧弱マイコンの方がアセンブラが必要になることは多い

もちろん大規模プログラムでも使いどころでは使うが、率的には非常に低い

DSPが一番出番が多いかな
特殊な命令で非常に限られた処理時間で処理をする必要がある場合が多いので
0817774ワット発電中さん
垢版 |
2017/04/27(木) 21:02:35.59ID:X8m+3fLj
必要性にかかわらずアセンブラを勧めるようなヤツ、特に℃玄人は素人

アセンブラの欠点を理解した上で、必要であれば使えば良い

趣味なら御自由に
0818774ワット発電中さん
垢版 |
2017/04/27(木) 21:11:31.31ID:fSoH3WeS
XC8の無料版2ヶ月しか最適化されない問題が解決しないからASMで書くしかなかんべ
0820774ワット発電中さん
垢版 |
2017/04/27(木) 21:19:23.69ID:1Sco5vO4
-O1出来るんなら、それで十分だわ、俺には。
1バイトでも少なくナイト〜 とか 1サイクルでも早くナイト〜 とか、
興味ねえ。
0823774ワット発電中さん
垢版 |
2017/04/27(木) 22:57:57.26ID:cbw9yFHz
xc8の無料版、最適化なしは1バイト多くなるとかいうレベルじゃない印象
0824774ワット発電中さん
垢版 |
2017/04/28(金) 01:52:55.01ID:ANLUF9Cg
アセンブラでガリガリため息つきながらプログラム
DMA使いだしてからCでフンフン♪
0825774ワット発電中さん
垢版 |
2017/04/28(金) 02:15:05.49ID:dhuWO2+i
無料版ってアンインストールして再インストールしたら試用期間リセットされるっていう話は都市伝説なのかな。
サイズもスピードも厳しい用途ではないから試用期間過ぎてもそのまま使っているけど。
0826774ワット発電中さん
垢版 |
2017/04/28(金) 06:46:33.11ID:D4TTV0r8
Lチカならサイズもスピードも厳しく無いだろうな
0828774ワット発電中さん
垢版 |
2017/04/28(金) 07:10:00.03ID:FQ9CRD4h
32KB選んでも256KB選んでも&#165;100も違わないんなら迷わず256KB選ぶよ、趣味だし。 @PIC32MX2xx
0829774ワット発電中さん
垢版 |
2017/04/28(金) 07:14:52.28ID:aiz3Nj7I
PIC32MX270F256B-50
いっぱい買っちゃったよ
容量小さいのよりエラッタが微妙に直ってたりする
微妙にクロックが速かったりするし
0832774ワット発電中さん
垢版 |
2017/04/28(金) 08:04:14.24ID:aiz3Nj7I
>>830
コードサイズはもうすでに気にする時代じゃないね
データサイズや実行速度は気にするべき情況はまだまだある
0833774ワット発電中さん
垢版 |
2017/04/28(金) 08:09:03.38ID:aiz3Nj7I
Harmonyが超贅沢に(無駄に)コードを精製してくれるけど256kBあれば全く問題なし
スクラッチで組めば32kBでも全く問題ない

画像データとかフォントデータとか音声データとか、そういうデータだとまだまだ圧縮が必要
0834774ワット発電中さん
垢版 |
2017/04/28(金) 08:13:36.66ID:toX+alHR
そういうのは読み出しに速度が必要でないなら外にEEPROMでも置いておくべき
0837774ワット発電中さん
垢版 |
2017/04/28(金) 08:21:04.49ID:aiz3Nj7I
普通に考えたら SPI NOR Flash

256kBで足りないのにEEPROMは無いだろ
普通に買えるるのは128kBまでだぞ

いずれにしろ圧縮は普通やる
0842774ワット発電中さん
垢版 |
2017/04/28(金) 13:03:43.49ID:x+113Uwm
そもそも趣味のフルアセンブラ派は命令が貧弱なPICなんか使わん
0843774ワット発電中さん
垢版 |
2017/04/28(金) 13:16:27.81ID:O6DSaIjX
いやいや、世の中にはマゾがいるんだよ
糞マイコンである程燃えるヤツが
0845774ワット発電中さん
垢版 |
2017/04/28(金) 13:37:04.17ID:g81DkVic
>>800
> スルーされたからってしつこく書かなくて良いぞ


べつにスルーしなくたっていいのになあ
ここの人はなんかみんなギスギスしてるから、余裕とかほしいと思ったんだけどな
0849774ワット発電中さん
垢版 |
2017/04/29(土) 00:53:40.91ID:oD+sj+g0
W25Q128使えば無敵だ〜〜〜〜〜
ただし、書き込みは遅いけどな!!!!
0850774ワット発電中さん
垢版 |
2017/04/29(土) 06:59:25.59ID:MOSqG4fd
>>848
電飾彼女?
0854774ワット発電中さん
垢版 |
2017/04/29(土) 09:50:06.91ID:7fCIqlGR
>>853
あー。もしかしたら固定データか。だったら書き込み速度は気にしなくていいね。
0857774ワット発電中さん
垢版 |
2017/04/29(土) 23:04:53.88ID:8IJ4WcMc
連休は別に楽しくなくても良い。
ストイックに自宅に篭って普段時間がなくて出来ないことをする。
今日はPICのライブラリが少し充実した。
0858774ワット発電中さん
垢版 |
2017/04/30(日) 00:06:11.05ID:lRbNiGAM
過去に作った趣味の PIC ソースコードの
タイムスタンンプが GW ばかりだった。
0861774ワット発電中さん
垢版 |
2017/04/30(日) 05:40:39.31ID:xNrfEFr0
有限要素法、
0862774ワット発電中さん
垢版 |
2017/04/30(日) 09:47:07.32ID:lRbNiGAM
一年中2chで他人をおちょくってるだけの人生の方がもっと寂しい人生を送ってると思われてるよ
0864774ワット発電中さん
垢版 |
2017/05/01(月) 15:48:51.55ID:y4IQ0UTD
8bitマイコンでアセンブラで必死に最適化するより
32bitマイコン使ってC言語で書いたほうが楽
趣味なら尚更だな
0865774ワット発電中さん
垢版 |
2017/05/01(月) 16:03:05.13ID:WhxKxkpc
8bitマイコンでアセンブラで必死に最適化する趣味もあるし、
32bitマイコン使ってC言語で書く趣味もあるし、
64bitCPUでアセンブラで必死に最適化する趣味もある
0867774ワット発電中さん
垢版 |
2017/05/01(月) 16:44:09.04ID:uKpFtYkE
>>864
趣味なら「楽」を求めないだろ?
「楽しさ」なら求めるかもしれないが。
0868774ワット発電中さん
垢版 |
2017/05/01(月) 16:56:52.65ID:vN/u6K7o
今のプログラマーに
480kB制限でビジュアルRPG作れと言ったら
脱糞するだろうな
0870774ワット発電中さん
垢版 |
2017/05/02(火) 01:37:36.41ID:dafhF/sN
32bitは割り込みレイテンシが糞すぎる
25MHz品は致命的
8bitの方が勝手よろしいわ
0871774ワット発電中さん
垢版 |
2017/05/02(火) 02:15:24.89ID:DVmrWiHV
>>870
ワーストケースで32命令サイクルだもんなぁ
8bitアセンブラ大好き人間には到底受け入れられないわ
0872774ワット発電中さん
垢版 |
2017/05/02(火) 06:29:16.06ID:xPNxA8Um
楽にテストをするならCを使ってタイミング重視ならアセンブラを使う。
時と場合によりだなぁ。

>>869
プログラムが32KBで収まらずに
キャラROMにプログラムを入れてワークRAMにコピーして使うと言う荒業やってる。
0874774ワット発電中さん
垢版 |
2017/05/02(火) 11:55:05.97ID:qlEnXsDW
測定してみました。

ICNを使って、
ポートが変更されたら別のポートを変更する処理でオシロスコープで遅延を測定してみました。
どちらもC言語で作成、フリー版コンパイラの最高の最適化を行い、
割り込みハンドラの先頭でポートを変更しました。

PIC32の方はシャドーレジスタを使用するかどうかと、
割り込み時に実行している命令によって時間に差が出ますので、
最短と思われる、単純命令中のシャドーレジスタ使用時と、
最長と思われる、除算命令中のソフトレジスタ退避時と、
を測定してみました。

結果は、
PIC16F1454 (48MHz) : 1.2us
PIC32MM0064GPL028 (24MHz) : 1.5us〜1.65us

若干PIC16の方が速いですが、
通常よりクロックが1.5倍速い48MHzですので、
32MHzであれば逆転すると思われます。
0875774ワット発電中さん
垢版 |
2017/05/02(火) 12:01:34.81ID:qlEnXsDW
通常の処理は圧倒的にPIC32MMの方が速く、
割り込みハンドラはPIC16はすべての割り込みで共通、
PIC32はプライオリティ付き多重割り込み可
ですので、
割り込み応答性能が要求される普通の処理では当然PIC32の方が有利かと思います。
0876774ワット発電中さん
垢版 |
2017/05/02(火) 12:23:14.76ID:/JEBgCyz
>>874
突然まだマイナーなPIC32MMが出てきてびっくりした。

PIC32MXの50MHz使えば楽勝で勝てるでしょ。
なんでMMなん?
0878774ワット発電中さん
垢版 |
2017/05/02(火) 12:28:20.95ID:KC6CBPEs
>>876
>>870の書き込みに対して測定したからです
25MHz品と言えばPIC32MMでしょう

当然PIC32MXなら圧勝と思います
0880774ワット発電中さん
垢版 |
2017/05/02(火) 12:43:45.99ID:KC6CBPEs
>>877
アセンブラ同士はじゃあ後程
PIC32MXとPIC24もやりますか?

----
全ての割り込みプライオリティレベル用に個別にシャドーレジスタがあるようなマイコンもありますね
全くレジスタ待避を考えなくて良いので、パフォーマンスを考えて使用するレジスタを制限する必要が無くて最適化が楽です
実際は複数のプライオリティの割り込み全ての応答性能が重要なんて事はないんですが
0882774ワット発電中さん
垢版 |
2017/05/02(火) 15:27:54.51ID:twjbMQ0H
入力〜出力の割込み遅れ時間、興味が湧いたのでtiny2313(20MHz)で測定してみたら、
450nS〜550nS程度だった。
資料によると、
リターンアドレス退避などの割込み応答処理で4クロック
ベクタテーブルのジャンプ命令で2クロック
出力操作命令で2クロックという事で、計算上は8クロックx50nS =400nSだけど
割込み入力回路のサンプリングやディレイが関係しているのかも?

測定プログラム
;***** setup
RESET:
 LDI R30,0b11101111 ;Port-D input with pull up, output Low
 OUT PortD,R30
 LDI R30,0b00010000 ; output:bit4, input:bit0~2,4~7
 OUT DDRD,R30
;
 LDI R30,stack   ;set stack
 OUT SPL,R30
;
 LDI R30,0b00001000 ;triggered by -edge of INT1
 OUT MCUCR,R30
 LDI R30,0b10000000 ;enable INT1 interrupt
 OUT GIMSK,R30
 sei
;
;***** main
Loop:
 rjmp Loop
;
;***** INT1
IRQ2:
 sbi PinD,_Out ;toggle output
 reti
;
0883774ワット発電中さん
垢版 |
2017/05/02(火) 15:29:31.31ID:twjbMQ0H
大文字、小文字が混在してスマヌ
0884774ワット発電中さん
垢版 |
2017/05/02(火) 17:18:48.42ID:qlEnXsDW
C言語
PIC16F1454 (48MHz) : 1.2us
PIC16F18325 (32MHz) : 1.6us
PIC32MM0064GPL028 (24MHz) : 1.5us〜1.65us

アセンブラ
PIC16F18325 (32MHz) : 1.1us
PIC32MM0064GPL028 (24MHz) : 0.85us

入力ポートの値を読んで、その値を出力ポートに設定しているので、
>>882 とは微妙に処理が違います。

>>881
今日は無理そう
明日は忙しいので明後日以降にやります
0886774ワット発電中さん
垢版 |
2017/05/02(火) 17:46:18.94ID:qlEnXsDW
PIC32MXを追加しました

C言語
PIC16F1454 (48MHz) : 1.2us
PIC16F18325 (32MHz) : 1.6us
PIC32MM0064GPL028 (24MHz) : 1.5us〜1.65us
PIC32MX270F256B-50 (50MHz) : 0.9us

アセンブラ
PIC16F18325 (32MHz) : 1.1us
PIC32MM0064GPL028 (24MHz) : 0.85us
PIC32MX270F256B-50 (50MHz) : 0.75us
0887774ワット発電中さん
垢版 |
2017/05/02(火) 17:54:55.66ID:twjbMQ0H
>入力ポートの値を読んで、その値を出力ポートに設定しているので、
bit3のマイナスエッジ割込みから両エッジ割込みに変更して
割込み内では入力ビットのH/Lレベルを出力ビットにコピィする。
 sbis PinD,3
 cbi PortD,4
 sbic PinD,3
 sbi PortD,4
命令が3個増えるので100nS程度の増加かな(パイプライン処理があるので)
PIC18やPIC24はどの程度なんだろ?
0888774ワット発電中さん
垢版 |
2017/05/02(火) 18:32:26.63ID:OWZZ5U9w
888
0889774ワット発電中さん
垢版 |
2017/05/02(火) 19:52:56.38ID:E5i8LINT
>>886
割り込みの応答、12F1822@32MHzで700n前後だった気がする。
ちょっとプログラミング能力足りないんじゃね?
0890774ワット発電中さん
垢版 |
2017/05/02(火) 20:21:55.63ID:E5i8LINT
12F1822に下記プログラムを書くと、3ピンの入力エッジ毎に、2ピンにパルスを出力する。
遅延時間は600n秒位。
5ピンに500Hz位を出力するので、5ピンと3ピンを接続してオシロで見れば観察出来る。

:020000040000FA
:020000000928CD
:0800080080168012270093010D
:100010000900200000308C0023008C0024000030F8
:100020008C00210010308C002000F030210099005D
:0400300020000D2976
:100200005E30FD000B30FE000130FF00FD0B0629C3
:10021000FE0B0629FF0B062908000C30840085011F
:100220002700103091009200FF3013069305210043
:100230008B158B1720000021220004308C061A2910
:020240001A2979
:020000040001F9
:02000E00A40943
:02001000FF1DD2
:00000001FF
0891774ワット発電中さん
垢版 |
2017/05/02(火) 21:36:01.47ID:qlEnXsDW
最適化が目的じゃなくて比較が目的なので

元のCコードはこれ
void interrupt isr(void){
LATCbits.LATC4 = PORTCbits.RC3;
IOCCFbits.IOCCF3 = 0;
PIR0bits.IOCIF = 0;
}

これの動作を保ったまま普通にアセンブラにしたのが以下
特別冗長にしたわけでもないし、
ギリギリまで最適化したわけでもない

ISR CODE 0x0004
movlb 0
btfss PORTC,3
goto l1
movlb 2
bsf LATC,4
goto l2
l1: movlb 2
bcf LATC,4
l2: movlb 7
bcf IOCCF,3
movlb 0
bcf PIR0,4
retfie
0892774ワット発電中さん
垢版 |
2017/05/02(火) 21:42:19.12ID:qlEnXsDW
普通の処理であれば、
割り込み要因の確認が入ったりレジスタの退避を行ったりするので、
これでもずいぶんと少な目な値

本当であれば、割り込みフラグも先にクリアするのが正しい
割り込みフラグのクリア前にポートの値が変わった場合に取り逃すので
0893774ワット発電中さん
垢版 |
2017/05/02(火) 22:23:38.48ID:DVmrWiHV
は?ワーストケースでの話じゃないの?

データシートみたら割り込み遅延は
PIC32MXで 11〜34命令サイクル
8bitPICで 3〜3.75命令サイクル
16bitPICで(16〜40MIPS品で) 4命令サイクル
16bitPIC(70MIPS品)で 10〜11命令サイクル
PIC32MMは見つけられなかった
0894774ワット発電中さん
垢版 |
2017/05/02(火) 22:58:26.62ID:qlEnXsDW
PIC16F18325で、割り込み後の1命令目でポートが変わるようにして測ったら575nsでした。
4.6命令サイクルなので、ポート設定1命令後にポートが切り替わるとするとほぼスペック通り

>>890
600nsってことは4.8命令サイクルなので、
上の測定結果と同じで、割り込み後の1命令目でポートが変わるようにしてますよね?
てことは、明らかに >>884 の処理とは違いますよね?
それとも、PIC12F1822の割り込みは速い?
>>890の中身は見てませんが。

>>893
PIC32MXの34命令サイクルってのは、一番時間がかかる除算命令中ですよね?
除算命令以外は速いんで、遅延が問題なら割り算を使わなければ良いのでは?
8bitPICには除算命令が無いんで
除算中を除けばクロック数にして同程度、時間ではPIC32MXの方が速いですよ
0895774ワット発電中さん
垢版 |
2017/05/02(火) 22:58:52.82ID:Drqqsjtq
>>893
MM はフラッシュアクセスのWaitが入らないから、MXより、サイクル数としては少ない。
0896774ワット発電中さん
垢版 |
2017/05/02(火) 23:26:41.65ID:qlEnXsDW
ん???
>>871>>893 で内容が食い違ってるけど
どういうこと?

データシートを見たら、PIC32MXの割り込み遅延も見つからなかったんですが。
もしかして
「Early-in iterative divide. Minimum 11 and
maximum 33 clock latency (dividend (rs) sign
extension-dependent)」
を割り込み遅延のスペックだと勘違いしてたりしませんか?
0897774ワット発電中さん
垢版 |
2017/05/03(水) 00:22:22.61ID:xoCUtK0w
>>891
>最適化が目的じゃなくて比較が目的なので

結果が倍も違ってたら割り込み応答速度の比較にならんだろうにって話なんだが?
最適化云々の問題じゃない。Cしか出来ない奴はこれだからwww
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況