X



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

初めてのPIC 0x0C [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2017/07/27(木) 21:08:44.24ID:RXHb67WK
  _       _    PICをさわるのは今日が初めて、という超初心者のためのスレです。
  (O>――<O)    PIC選び、PICを使った回路は、誰でも最初は不安なものです。
  / (・) (・) ヽ    恥ずかしがらずに何でも聞いてください。速攻で教えてくれますよ。
  ○ /▼\ ○    質問のしかたは、初心者質問スレの発言1を見てくださいね。
  |(ヽ二フ ) |    
  /  ̄ ̄ ̄ ヽ  
 f ヽ     / |  PIC関係のスレは、レベルに合わせて以下のスレもありますので、活用しましょう。
 ヽ \  / ノ    ・PIC専用のスレ
  | \_ )(_/ !       本家本元のPICスレです。口の悪い人もいますが、楽しくやってるみたい。
  |       |       ここの話がわかるようになれば、あなたはもう一人前のPICerです。
  |       |    ・マイコンソフト 悩み事相談室
  |   | ̄ ̄|  |      マイコンソフトやツールの質問は、こちらでどうぞ。的確な回答があります。
 (_ノ    ヽ_)

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

 さ、質問どうぞ〜っ

  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
  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
0207774ワット発電中さん
垢版 |
2017/08/15(火) 17:46:28.23ID:g4gp5Vlu
おまいら何に使ってるのか気になってきたわ
自分用にMP3プレイヤーとか作るんなら
ラズパイとか使った方がお手軽だろうに
それともなんかすごい性能の大人のおもちゃか?
0208774ワット発電中さん
垢版 |
2017/08/15(火) 18:07:29.97ID:FF094cfC
この流れの中質問しづらいのですがXC8について質問さしてください

ONかOFFか(0か1か)のフラグ「配列」を160個ほど確保したいのですが、普通(?)に
uint8_tで確保するとSRAMが足りないと言われてしまいます
他にも色々変数を確保してたりするので実際足りないんだろうとは思いますが、1bit
あれば事足りる変数にuint8_tで8bit取るのもなんか勿体無い気がしています

XC8でbit配列を沢山(160個)確保する方法はありますでしょうか?
0209774ワット発電中さん
垢版 |
2017/08/15(火) 18:09:31.36ID:pwuI3juO
新品はフラッシュメモリが消去されていると期待はできないんでしょうか?
書き込もうとしたら0xFFFFでないのがずらずらっと表示されて、疑問に思いました
新品(先日購入して一度も書き込んでいない)なのは間違いありません

Micropicは初めて使うのですが、これはこれでこういうものなのでしょうかね。
0211774ワット発電中さん
垢版 |
2017/08/15(火) 18:23:32.69ID:T+sFmMqd
>>208
もう1個ヒント
uint8_t bits[20];
n ビット目の値を取り出す時
bitn = bits[n/8]&1<<n%8;
0212774ワット発電中さん
垢版 |
2017/08/15(火) 18:28:17.92ID:ILE12Z1r
>>208
20バイト確保して、
マクロなり関数なりで自力でビットアクセスする

uint8_t data[20];
BOOL get_bit(int pos){
return (data[pos>>3] & 1<<(pos & 7)) != 0;
}
void set_bit(int pos){
data[pos>>3] |= 1<<(pos & 7);
}
void clr_bit(int pos){
data[pos>>3] &= 254<<(pos & 7);
}
0216774ワット発電中さん
垢版 |
2017/08/15(火) 18:37:37.89ID:ILE12Z1r
>>209
実は中古
見方が間違ってる
マチガッテ書き込んだ
マイクロチップの仕様
>>209の頭が悪い
>>216の頭が悪い
のどれか
0217774ワット発電中さん
垢版 |
2017/08/15(火) 18:47:04.09ID:lWGXEjxy
念のため、

Cで「ビットフィールド」と言ったら、ビット単位で定義した構造体を指す。
これはビット単位の配列としては扱えないから用語は注意した方が良い。
0220774ワット発電中さん
垢版 |
2017/08/15(火) 19:00:31.85ID:U8Mbo7MG
>>219
右じゃなく左
0221774ワット発電中さん
垢版 |
2017/08/15(火) 19:05:04.12ID:W9NXELVR
mask[8]={0b00000001, 0b00000010, 0b00000100,・・・, 0b10000000}

みたいなマスク変数を使うとちょっとは効率的になるかも
0222774ワット発電中さん
垢版 |
2017/08/15(火) 19:08:52.97ID:ILE12Z1r
あ、すまんバグった
ハズカシイ

素直に以下で

~(1<<(pos&7))
0223774ワット発電中さん
垢版 |
2017/08/15(火) 19:19:56.63ID:ILE12Z1r
>>221
8bitはバレルシフタが無いのか

マクロにしておけば
posが定数の場合は1<<(pos&7)はコンパイル時に計算するからコストはかからないけど

変数の場合は実行速度重視でテーブル化するか
RAMをケチってコンパイラがループコードを生成するか

初心者ならそんな事を心配する必要の無い32bitを使うのも手
RAMが多いから1バイト保持でも問題ないし、
シフトも乗算も速い
0224774ワット発電中さん
垢版 |
2017/08/15(火) 19:20:59.26ID:ILE12Z1r
8bitの場合はテーブルを引くのも遅いから、
速度はループと大差ないかも
0225774ワット発電中さん
垢版 |
2017/08/15(火) 19:31:22.14ID:W9NXELVR
PICには折角BCF,BSFなんていう便利なアセンブラ命令があるから
効率重視ならセット/クリアの部分だけでもインランアセンブラで書くべきだな
0226774ワット発電中さん
垢版 |
2017/08/15(火) 19:39:00.54ID:ILE12Z1r
位置が即値の場合はコストはかからないってわざわざ書いた後に書くかなあ

変数だとBSF, BCFは使えないでしょ

自己改変コード?
余計遅い
0227774ワット発電中さん
垢版 |
2017/08/15(火) 19:41:44.83ID:ILE12Z1r
そんなことが問題になるくらいならはじめから32bitを使えばいい
最適化が出来ない初心者は特に
0228774ワット発電中さん
垢版 |
2017/08/15(火) 19:45:34.03ID:ILE12Z1r
低性能な8bitは初心者にはいろいろときびしい
簡単な処理であれば8bitで十分だけど、
初心者は簡単な処理かどうかすら判断できない

ROM/RAM節約や高速化テクニックがあって、
必用なCPUパワーも判断できる上級者が
8bitを使えばいい
0229774ワット発電中さん
垢版 |
2017/08/15(火) 19:50:41.21ID:W9NXELVR
リアルキチガイ君の ID:ILE12Z1r に行っても無駄だと思うけどさあ
質問者が
>XC8について質問さしてください
って言ってんだから8bitPIC前提の質問だろ

なのにそもそもの前提を否定して解凍するのは正直知恵遅れでしかないよ
とりあえずえらそうに回答者面するまえに擦れたい100回声に出して読んでみたら?
0230774ワット発電中さん
垢版 |
2017/08/15(火) 19:51:07.81ID:UP+0PxLF
>>207
もう世の中に売ってる物なら大人しくそれ買うよ。
モノ作る動機になるのは世の中にまだ無いものとか、有っても物足りない場合だよ。
0231774ワット発電中さん
垢版 |
2017/08/15(火) 19:55:40.92ID:ILE12Z1r
>>229
初心者にインラインアセンブラを勧めるリアルキチガイ

BSF, BCFでなにが解決するの?
www
0234774ワット発電中さん
垢版 |
2017/08/15(火) 20:09:21.96ID:ILE12Z1r
>>207

間違わないように訂正しておきます
今ビルド環境が無いので、さらに間違ってたらごめんなさい

uint8_t data[20];
BOOL get_bit(int pos){
return (data[pos>>3] & 1<<(pos & 7)) != 0;
}
void set_bit(int pos){
data[pos>>3] |= 1<<(pos & 7);
}
void clr_bit(int pos){
data[pos>>3] &= ~(1<<(pos & 7));
}
void inv_bit(int pos){
data[pos>>3] ^= 1<<(pos & 7);
}
0238774ワット発電中さん
垢版 |
2017/08/15(火) 20:15:05.39ID:ILE12Z1r
モデルチェンジしてくれると嬉しいんだけど
ROM 28KB / RAM 2KB で

USB有りモデルは放置されてる感じ
0240774ワット発電中さん
垢版 |
2017/08/15(火) 20:34:59.88ID:UP+0PxLF
必要な領域30バイト確保したくらいで不足したとかいうならそもそもの品種の選択が間違ってたに過ぎないだろ。
何でもかんでも8bit vs 32bitに持って行きたがる奴がおかしいわ。
0242774ワット発電中さん
垢版 |
2017/08/15(火) 20:40:06.00ID:ILE12Z1r
>>208に対しては普通の回答をした

初心者に対してテーブルを使うだのインラインアセンブラを使うだの言ってるキチガイがいる
32bitはそいつに対しての書き込み
0243774ワット発電中さん
垢版 |
2017/08/15(火) 20:43:10.16ID:ILE12Z1r
>>234でパフォーマンスに問題があるなら、
素直に高性能なCPUを使おう
ごく普通の意見だと思う
少なくとも初めてスレでは
0244774ワット発電中さん
垢版 |
2017/08/16(水) 00:01:56.25ID:YFrQecgz
何するかでマイコンなんていくらでも選択肢が変動すると思うけどねー

固まっちゃった人にはそれがわっかんねぇんだろうな。
0247774ワット発電中さん
垢版 |
2017/08/17(木) 06:43:11.93ID:G66Fe5Hl
↑↑↑↑↑
大人になってもわからない
0248774ワット発電中さん
垢版 |
2017/08/17(木) 07:20:18.82ID:i1idTUCB
あんたの所、中華製電源で動かしてるのにCPUの電力効率なんか気にする必要あるの?
0249774ワット発電中さん
垢版 |
2017/08/17(木) 08:07:12.57ID:JElVQ22d
ありがとう、大人がキーワードなんだね
おいらは電池で動かしてるよ
0251774ワット発電中さん
垢版 |
2017/08/17(木) 20:54:17.80ID:tY+ftZwp
>>245

>>208のような処理を、工夫せずにそのまま簡単に作りたい場合

>>221のような、パフォーマンスを理由に可読性流用性開発効率を犠牲にしたコードを書きたくなるような処理

>>225のような、パフォーマンスが理由でアセンブラが使いたくなるような処理
0252774ワット発電中さん
垢版 |
2017/08/17(木) 22:27:30.20ID:i1idTUCB
8 vs 32は無意味だし、初めてスレでする話しではない。
0253774ワット発電中さん
垢版 |
2017/08/17(木) 23:06:42.03ID:uTwsurZE
初心者がパフォーマンスを問題にしていたら
32bitを勧めるのは当たり前かと

今回はアセンブラ厨が作り出したパフォーマンス問題であったようだけど
0254774ワット発電中さん
垢版 |
2017/08/17(木) 23:36:23.04ID:twtdz0hD
8bitはたしかハーバードアーキテクチャ
32bitはMIPSアーキテクチャ

中身が全く別物
0257774ワット発電中さん
垢版 |
2017/08/17(木) 23:40:37.90ID:uTwsurZE
ハーバードとMIPSを並べちゃったよ
同じようにアーキテクチャーとついてるけど、
全然違う階層の単語だよ
0259774ワット発電中さん
垢版 |
2017/08/17(木) 23:41:57.20ID:twtdz0hD
>>255
CPU周りにパイプラインとかあるから

クロック計算とか単純な4サイクル計算じゃなくなる
0261774ワット発電中さん
垢版 |
2017/08/17(木) 23:44:11.71ID:twtdz0hD
16bit命令レジスタとかみると

チップごとに入ってるレジスタが違ったりしてる

アセンブラいじくるとわかる
0262774ワット発電中さん
垢版 |
2017/08/17(木) 23:46:08.33ID:uTwsurZE
twitterじゃないんだから
言いたいことがあるならはっきり言いな
0263774ワット発電中さん
垢版 |
2017/08/17(木) 23:46:48.12ID:kDkv5hsn
えらく喧嘩腰だね
何かよくわからないけど攻撃に備えているのかな
0264774ワット発電中さん
垢版 |
2017/08/17(木) 23:49:28.11ID:twtdz0hD
>>262
なんて言ってもらいたいん?
0265774ワット発電中さん
垢版 |
2017/08/17(木) 23:50:58.34ID:kDkv5hsn
>>264
32ビットマイコンに対して少しでもネガティブなことを言わないか気にしてるだけだよ
0266774ワット発電中さん
垢版 |
2017/08/17(木) 23:52:24.49ID:uTwsurZE
>>264
それはこっちが聞きたいわけだが
コアの違いについて語りたい?
パリフェラルの違いについて語りたい?
0267774ワット発電中さん
垢版 |
2017/08/17(木) 23:55:19.92ID:twtdz0hD
>>265
RS232通信をlinuxパソコンとやってみたけど案外スムーズにいけるね!

そこらの産業機器より全然シンプルで優れてるw
0268774ワット発電中さん
垢版 |
2017/08/17(木) 23:55:32.87ID:uTwsurZE
8bit, 16bit, 32bitいずれもCとアセンブラ両方の経験があるから、
色々と語れると思うよ
0269774ワット発電中さん
垢版 |
2017/08/17(木) 23:59:06.63ID:uTwsurZE
UARTは
8bitはFIFOは受信のみ2バイト
16bitとPIC32MMは8バイトFIFO
PIC32MXは16バイトFIFO
3種類で割り込みのポリシーが全部違うんで面白い
0270774ワット発電中さん
垢版 |
2017/08/18(金) 00:09:29.76ID:FEToUUWA
>>269
パソコン側のシリアル通信のC言語プログラムでちょっとハマったw
設定を構造体でやって
データをファイル形式でやる感じだったから
理解するまで時間かかったw
0271774ワット発電中さん
垢版 |
2017/08/18(金) 00:12:47.99ID:FEToUUWA
edison とか ラズベリーパイとかより

ドライバレジスタを細かくいじれるし
レベル変換の問題も楽だし
タイミング調整 データ長なんかの設定も楽
0272774ワット発電中さん
垢版 |
2017/08/18(金) 00:14:02.82ID:FEToUUWA
C言語でいじれるようになったから
デスクトップとかサーバと連携して
web上からも遊べるように簡単にでけるようになったのはでかいw
0273774ワット発電中さん
垢版 |
2017/08/18(金) 00:19:46.24ID:tz/SuERH
8bitのUARTは送信データがダブるエラッタがあるので注意
回避は結構難しい
0274774ワット発電中さん
垢版 |
2017/08/18(金) 00:22:56.66ID:FEToUUWA
>>273

9600でしかまだやってないし1バイトづつ低速でやってるから
まだエラーでは悩んでない
詳しく!
0275774ワット発電中さん
垢版 |
2017/08/18(金) 00:36:40.30ID:FEToUUWA
RS485に変換して
長距離伝送とかでエラー回避とかも簡単にでけるべ?
0276774ワット発電中さん
垢版 |
2017/08/18(金) 00:38:40.25ID:tz/SuERH
ボーレートはあまり関係ないです
送信で、シフトレジスタがちょうど空になるタイミングでTX1REGに書き込むと、そのデータがダブって送信されます
命令サイクル単位でピッタリこのタイミングに合った場合のみ発生します
1バイトずつ、シフトレジスタが空になってからTX1REGに書き込むのであれば問題ありません
(送信速度は落ちますが)
0277774ワット発電中さん
垢版 |
2017/08/18(金) 00:43:08.45ID:FEToUUWA
>>276
そういえばEEPROMのACKのタイミングも高速でやるとエラーかかんない?

NOPとかで遅延かけないとうまくいかないよね?
0278774ワット発電中さん
垢版 |
2017/08/18(金) 00:43:57.27ID:tz/SuERH
送信速度を犠牲にせずに送信するには、
ヤバいタイミングに書き込まないこと

私がやった方法は、
送信モジュールの初期化と同時にフローランタイマーを初期化
タイマーの値を見て偶数奇数を揃えてTX1REGに書き込む
この方法を用いるには、1バイトの送信周期がフリーランタイマーの周期の偶数倍である必要があります
0279774ワット発電中さん
垢版 |
2017/08/18(金) 00:45:21.57ID:FEToUUWA
NOPで遅延でいいんじゃね?
0280774ワット発電中さん
垢版 |
2017/08/18(金) 00:50:18.30ID:tz/SuERH
>>277
I2CのEEPROMの書き込みで問題があると思ったことはないですね
何種類か使いましたが

データシートと合わせて、エラッタは見ておいてください
マイクロチップの場合、エラッタに記載がなかったりしますが
0282774ワット発電中さん
垢版 |
2017/08/18(金) 01:03:10.33ID:tz/SuERH
>>278
どうずらすかをフリーランタイマーを用いて判別する方法

どうずらせば良いかがわからないとNOPをどこにどう入れれば良いかがわからない
0284774ワット発電中さん
垢版 |
2017/08/18(金) 01:03:56.14ID:FEToUUWA
>>281
まだ実装はしてないからなんともいえないけど
送信シフトレジスタエンプティビットを読み込んで
そのあとNOPでできるんじゃない?
0285774ワット発電中さん
垢版 |
2017/08/18(金) 01:06:46.32ID:tz/SuERH
安全なタイミングはシフトレジスタが空であるとき
コードがこうなっていれば問題は発生しない
ただし、空になるまで待っていたら送信が連続して行われないので遅くなるし、
割り込みで処理してる場合は、シフトレジスタが空になるタイミングで割り込みをかけることが出来ない
0287774ワット発電中さん
垢版 |
2017/08/18(金) 01:13:39.81ID:FEToUUWA
>>285

そういえばintel edison のシリアル通信ですら高速帯域ではエラー出てたし・・・ 

速度気にするなら他の通信使えば?
0288774ワット発電中さん
垢版 |
2017/08/18(金) 01:14:16.19ID:FEToUUWA
>>286
なんでだよぉw
0290774ワット発電中さん
垢版 |
2017/08/18(金) 01:20:52.69ID:tz/SuERH
前も同じようなやり取りをしたような
「初めて」相手だと大変だ
0291774ワット発電中さん
垢版 |
2017/08/18(金) 01:37:32.83ID:FEToUUWA
やっぱドライバ周りはまだまだNOPが必要そうだね!wwwwwwwwww
0292774ワット発電中さん
垢版 |
2017/08/18(金) 01:57:58.80ID:FEToUUWA
>>290
モーターパルスとか

強電磁波時の誤作動はじゃあどうするnん?
0293774ワット発電中さん
垢版 |
2017/08/18(金) 02:00:19.17ID:FEToUUWA
EMCによる誤作動って案外怖い
0294774ワット発電中さん
垢版 |
2017/08/18(金) 02:01:27.56ID:FEToUUWA
もう・・・・のぷのぷしちゃう!
0295774ワット発電中さん
垢版 |
2017/08/18(金) 06:50:23.16ID:XhAwehmq
>>269
8/16bitFIFOって、FIFOが空になった時に割込みあげてくれるようなのある?
たまにそういう機能がないUARTがあって、RS485とか作ると困るんだけど。
0298774ワット発電中さん
垢版 |
2017/08/18(金) 15:33:55.13ID:XhAwehmq
>>285
割り込みで処理してて、シフトレジスタが空になってから1サイクル以内にデータ転送ってできるのか?
要因判別とか割り込みマスクとかソフトウェアのバッファからの転送とかで1サイクルくらいはCPU動くんじゃないの?
0300774ワット発電中さん
垢版 |
2017/08/18(金) 16:39:48.46ID:wcQJ4+Pt
TSR(シフトレジスタ)が空になるタイミングでTXREGに書き込みを行うと、
TXREGとTSRに同じデータが書かれて、データがダブるってやつだろう。もう飽きた。
■ このスレッドは過去ログ倉庫に格納されています

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