初めてのPIC 0x0A [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
.
_ _ 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 どんな言語使ってもちゃんと動けば良いだけ!!
アセンブラ使ってもバグだらけではどうしようもない
開発効率が良いもの使って、精度が必要なとこだけアセンブラ使ったほうが
短時間で開発できる。
趣味でどれだけ時間がかかってもいいようなものなら別だけど?? 開発時間が掛かるのは能力無いから。
趣味でも向き不向きがあるから辞めとくのが吉 以下の理由で、趣味であっても私はフルアセンブラを推薦する。
+ PICのような低レベル(低速、低容量、低機能)のCPUではアセンブラの方がパフォーマンスを発揮できる
+ たかだか数Kベイトのプログラムをアセンブラで書いても大した作業量では無い
+ フルアセンブラとインラインアセンブラでは根本的に設計方針(アルゴリズム)が異なる
趣味なら開発効率よりも達成感、充実感では?
妥協していたら進歩しない PICってPIC10からPIC32MZまであるんですがご存知?
あとさ、趣味もいろいろあって、
手っ取り早く機能を実現したい場合は、フルアセンブラなんて遠回り過ぎて
移植性、可読性、メンテ、この辺を多少でも求める人にも向かない
回路は凝るけどソフトはそれほど興味がないとか
フルアセンブラは、PIC10にどれだけ機能を入れられるかとか、そういうことにこだわりがある人がやればいい
単にパフォーマンスが問題なら、問題となるところだけをアセンブラにするのがはるかに効率的 C言語、C++などで実現出来る機能をフルアセンブラで組むなんてのは、ソフト開発的にはアホ
趣味なら人それぞれ
8bit PICの糞命令を堪能したいとか、MIPSを勉強したいとか、そういう用途ならフルアセンブラはオススメですが 限界に挑戦するならアセンブラは必須
そういうごくごく一部を除けばアセンブラなど不要
仮にアセンブラが必要な場合でも、フルアセンブラである必要性は極めて低い ポートに出力したり、レジスタに値セットする程度で
アセンブラ使う必要性があるのか???
しかもPIC程度のプログラム量で・・・・・ どっちかっていうと8bit PICみたいな超貧弱マイコンの方がアセンブラが必要になることは多い
もちろん大規模プログラムでも使いどころでは使うが、率的には非常に低い
DSPが一番出番が多いかな
特殊な命令で非常に限られた処理時間で処理をする必要がある場合が多いので 必要性にかかわらずアセンブラを勧めるようなヤツ、特に℃玄人は素人
アセンブラの欠点を理解した上で、必要であれば使えば良い
趣味なら御自由に XC8の無料版2ヶ月しか最適化されない問題が解決しないからASMで書くしかなかんべ -O1出来るんなら、それで十分だわ、俺には。
1バイトでも少なくナイト〜 とか 1サイクルでも早くナイト〜 とか、
興味ねえ。 xc8の無料版、最適化なしは1バイト多くなるとかいうレベルじゃない印象 アセンブラでガリガリため息つきながらプログラム
DMA使いだしてからCでフンフン♪ 無料版ってアンインストールして再インストールしたら試用期間リセットされるっていう話は都市伝説なのかな。
サイズもスピードも厳しい用途ではないから試用期間過ぎてもそのまま使っているけど。 32KB選んでも256KB選んでも¥100も違わないんなら迷わず256KB選ぶよ、趣味だし。 @PIC32MX2xx PIC32MX270F256B-50
いっぱい買っちゃったよ
容量小さいのよりエラッタが微妙に直ってたりする
微妙にクロックが速かったりするし >>828
32bit で容量けちりながらソフト組むのはバカバカしいからな。 Lチカってエロチカと読んでしまう。
俺っておかしい? >>830
コードサイズはもうすでに気にする時代じゃないね
データサイズや実行速度は気にするべき情況はまだまだある Harmonyが超贅沢に(無駄に)コードを精製してくれるけど256kBあれば全く問題なし
スクラッチで組めば32kBでも全く問題ない
画像データとかフォントデータとか音声データとか、そういうデータだとまだまだ圧縮が必要 そういうのは読み出しに速度が必要でないなら外にEEPROMでも置いておくべき 普通に考えたら SPI NOR Flash
256kBで足りないのにEEPROMは無いだろ
普通に買えるるのは128kBまでだぞ
いずれにしろ圧縮は普通やる >>835
光ファイバー通信でも下でやってるこたあLチカみたいなもんだから >>838
素人が見るとそうかもね
技術的には全然違うけど そもそも趣味のフルアセンブラ派は命令が貧弱なPICなんか使わん いやいや、世の中にはマゾがいるんだよ
糞マイコンである程燃えるヤツが >>834
EEPROM はバイト単位での書き込みが簡単な分、割高。 >>800
> スルーされたからってしつこく書かなくて良いぞ
べつにスルーしなくたっていいのになあ
ここの人はなんかみんなギスギスしてるから、余裕とかほしいと思ったんだけどな 10種類の10は二進法だったのか!
って感じで良い? W25Q128使えば無敵だ〜〜〜〜〜
ただし、書き込みは遅いけどな!!!! FRAMもいいよ。FM25V01Aとか。値段はちょっと高いけど。 >>853
あー。もしかしたら固定データか。だったら書き込み速度は気にしなくていいね。 連休は別に楽しくなくても良い。
ストイックに自宅に篭って普段時間がなくて出来ないことをする。
今日はPICのライブラリが少し充実した。 過去に作った趣味の PIC ソースコードの
タイムスタンンプが GW ばかりだった。 一年中2chで他人をおちょくってるだけの人生の方がもっと寂しい人生を送ってると思われてるよ 8bitマイコンでアセンブラで必死に最適化するより
32bitマイコン使ってC言語で書いたほうが楽
趣味なら尚更だな 8bitマイコンでアセンブラで必死に最適化する趣味もあるし、
32bitマイコン使ってC言語で書く趣味もあるし、
64bitCPUでアセンブラで必死に最適化する趣味もある >>864
8bit PIC にそんな複雑な処理させないし。 >>864
趣味なら「楽」を求めないだろ?
「楽しさ」なら求めるかもしれないが。 今のプログラマーに
480kB制限でビジュアルRPG作れと言ったら
脱糞するだろうな 32bitは割り込みレイテンシが糞すぎる
25MHz品は致命的
8bitの方が勝手よろしいわ >>870
ワーストケースで32命令サイクルだもんなぁ
8bitアセンブラ大好き人間には到底受け入れられないわ 楽にテストをするならCを使ってタイミング重視ならアセンブラを使う。
時と場合によりだなぁ。
>>869
プログラムが32KBで収まらずに
キャラROMにプログラムを入れてワークRAMにコピーして使うと言う荒業やってる。 測定してみました。
ICNを使って、
ポートが変更されたら別のポートを変更する処理でオシロスコープで遅延を測定してみました。
どちらもC言語で作成、フリー版コンパイラの最高の最適化を行い、
割り込みハンドラの先頭でポートを変更しました。
PIC32の方はシャドーレジスタを使用するかどうかと、
割り込み時に実行している命令によって時間に差が出ますので、
最短と思われる、単純命令中のシャドーレジスタ使用時と、
最長と思われる、除算命令中のソフトレジスタ退避時と、
を測定してみました。
結果は、
PIC16F1454 (48MHz) : 1.2us
PIC32MM0064GPL028 (24MHz) : 1.5us〜1.65us
若干PIC16の方が速いですが、
通常よりクロックが1.5倍速い48MHzですので、
32MHzであれば逆転すると思われます。 通常の処理は圧倒的にPIC32MMの方が速く、
割り込みハンドラはPIC16はすべての割り込みで共通、
PIC32はプライオリティ付き多重割り込み可
ですので、
割り込み応答性能が要求される普通の処理では当然PIC32の方が有利かと思います。 >>874
突然まだマイナーなPIC32MMが出てきてびっくりした。
PIC32MXの50MHz使えば楽勝で勝てるでしょ。
なんでMMなん? >>876
>>870の書き込みに対して測定したからです
25MHz品と言えばPIC32MMでしょう
当然PIC32MXなら圧勝と思います >>877
アセンブラ同士はじゃあ後程
PIC32MXとPIC24もやりますか?
----
全ての割り込みプライオリティレベル用に個別にシャドーレジスタがあるようなマイコンもありますね
全くレジスタ待避を考えなくて良いので、パフォーマンスを考えて使用するレジスタを制限する必要が無くて最適化が楽です
実際は複数のプライオリティの割り込み全ての応答性能が重要なんて事はないんですが >>880
>PIC32MXとPIC24もやりますか?
お手数かけますが、お願いします。 入力〜出力の割込み遅れ時間、興味が湧いたので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
; 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
今日は無理そう
明日は忙しいので明後日以降にやります 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 >入力ポートの値を読んで、その値を出力ポートに設定しているので、
bit3のマイナスエッジ割込みから両エッジ割込みに変更して
割込み内では入力ビットのH/Lレベルを出力ビットにコピィする。
sbis PinD,3
cbi PortD,4
sbic PinD,3
sbi PortD,4
命令が3個増えるので100nS程度の増加かな(パイプライン処理があるので)
PIC18やPIC24はどの程度なんだろ? >>886
割り込みの応答、12F1822@32MHzで700n前後だった気がする。
ちょっとプログラミング能力足りないんじゃね? 12F1822に下記プログラムを書くと、3ピンの入力エッジ毎に、2ピンにパルスを出力する。
遅延時間は600n秒位。
5ピンに500Hz位を出力するので、5ピンと3ピンを接続してオシロで見れば観察出来る。
:020000040000FA
:020000000928CD
:0800080080168012270093010D
:100010000900200000308C0023008C0024000030F8
:100020008C00210010308C002000F030210099005D
:0400300020000D2976
:100200005E30FD000B30FE000130FF00FD0B0629C3
:10021000FE0B0629FF0B062908000C30840085011F
:100220002700103091009200FF3013069305210043
:100230008B158B1720000021220004308C061A2910
:020240001A2979
:020000040001F9
:02000E00A40943
:02001000FF1DD2
:00000001FF 最適化が目的じゃなくて比較が目的なので
元の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 普通の処理であれば、
割り込み要因の確認が入ったりレジスタの退避を行ったりするので、
これでもずいぶんと少な目な値
本当であれば、割り込みフラグも先にクリアするのが正しい
割り込みフラグのクリア前にポートの値が変わった場合に取り逃すので は?ワーストケースでの話じゃないの?
データシートみたら割り込み遅延は
PIC32MXで 11〜34命令サイクル
8bitPICで 3〜3.75命令サイクル
16bitPICで(16〜40MIPS品で) 4命令サイクル
16bitPIC(70MIPS品)で 10〜11命令サイクル
PIC32MMは見つけられなかった PIC16F18325で、割り込み後の1命令目でポートが変わるようにして測ったら575nsでした。
4.6命令サイクルなので、ポート設定1命令後にポートが切り替わるとするとほぼスペック通り
>>890
600nsってことは4.8命令サイクルなので、
上の測定結果と同じで、割り込み後の1命令目でポートが変わるようにしてますよね?
てことは、明らかに >>884 の処理とは違いますよね?
それとも、PIC12F1822の割り込みは速い?
>>890の中身は見てませんが。
>>893
PIC32MXの34命令サイクルってのは、一番時間がかかる除算命令中ですよね?
除算命令以外は速いんで、遅延が問題なら割り算を使わなければ良いのでは?
8bitPICには除算命令が無いんで
除算中を除けばクロック数にして同程度、時間ではPIC32MXの方が速いですよ >>893
MM はフラッシュアクセスのWaitが入らないから、MXより、サイクル数としては少ない。 ん???
>>871 と >>893 で内容が食い違ってるけど
どういうこと?
データシートを見たら、PIC32MXの割り込み遅延も見つからなかったんですが。
もしかして
「Early-in iterative divide. Minimum 11 and
maximum 33 clock latency (dividend (rs) sign
extension-dependent)」
を割り込み遅延のスペックだと勘違いしてたりしませんか? >>891
>最適化が目的じゃなくて比較が目的なので
結果が倍も違ってたら割り込み応答速度の比較にならんだろうにって話なんだが?
最適化云々の問題じゃない。Cしか出来ない奴はこれだからwww ■ このスレッドは過去ログ倉庫に格納されています