初めてのPIC 0x0C [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
_ _ 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 最近のDIPで定番と言うか人気機種ってどの辺かな? >>200
PIC32を4つ使えば128bit級だよ >>200
そこまでの処理能力必要ならARM に行くべきだろ? >>201
先に作例を見つけて来い。
そこで使ってるのがお前にとっての定番だ。 >>203
PICスレなんだからMIPSを勧めろよ おまいら何に使ってるのか気になってきたわ
自分用にMP3プレイヤーとか作るんなら
ラズパイとか使った方がお手軽だろうに
それともなんかすごい性能の大人のおもちゃか? この流れの中質問しづらいのですがXC8について質問さしてください
ONかOFFか(0か1か)のフラグ「配列」を160個ほど確保したいのですが、普通(?)に
uint8_tで確保するとSRAMが足りないと言われてしまいます
他にも色々変数を確保してたりするので実際足りないんだろうとは思いますが、1bit
あれば事足りる変数にuint8_tで8bit取るのもなんか勿体無い気がしています
XC8でbit配列を沢山(160個)確保する方法はありますでしょうか? 新品はフラッシュメモリが消去されていると期待はできないんでしょうか?
書き込もうとしたら0xFFFFでないのがずらずらっと表示されて、疑問に思いました
新品(先日購入して一度も書き込んでいない)なのは間違いありません
Micropicは初めて使うのですが、これはこれでこういうものなのでしょうかね。 >>208
ビットフィールドを使えば8bit×20で160bit取れると思います。 >>208
もう1個ヒント
uint8_t bits[20];
n ビット目の値を取り出す時
bitn = bits[n/8]&1<<n%8; >>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);
} >>209
フラッシュもEEP-ROMも初期状態は0xFFですよ >>209
実は中古
見方が間違ってる
マチガッテ書き込んだ
マイクロチップの仕様
>>209の頭が悪い
>>216の頭が悪い
のどれか 念のため、
Cで「ビットフィールド」と言ったら、ビット単位で定義した構造体を指す。
これはビット単位の配列としては扱えないから用語は注意した方が良い。 >>217
そうですね^^;
>>208 210の書き込みは無視して下さい。 1を右シフト2回で4、FEhを右シフト2回でF8hでは? mask[8]={0b00000001, 0b00000010, 0b00000100,・・・, 0b10000000}
みたいなマスク変数を使うとちょっとは効率的になるかも あ、すまんバグった
ハズカシイ
素直に以下で
~(1<<(pos&7)) >>221
8bitはバレルシフタが無いのか
マクロにしておけば
posが定数の場合は1<<(pos&7)はコンパイル時に計算するからコストはかからないけど
変数の場合は実行速度重視でテーブル化するか
RAMをケチってコンパイラがループコードを生成するか
初心者ならそんな事を心配する必要の無い32bitを使うのも手
RAMが多いから1バイト保持でも問題ないし、
シフトも乗算も速い 8bitの場合はテーブルを引くのも遅いから、
速度はループと大差ないかも PICには折角BCF,BSFなんていう便利なアセンブラ命令があるから
効率重視ならセット/クリアの部分だけでもインランアセンブラで書くべきだな 位置が即値の場合はコストはかからないってわざわざ書いた後に書くかなあ
変数だとBSF, BCFは使えないでしょ
自己改変コード?
余計遅い そんなことが問題になるくらいならはじめから32bitを使えばいい
最適化が出来ない初心者は特に 低性能な8bitは初心者にはいろいろときびしい
簡単な処理であれば8bitで十分だけど、
初心者は簡単な処理かどうかすら判断できない
ROM/RAM節約や高速化テクニックがあって、
必用なCPUパワーも判断できる上級者が
8bitを使えばいい リアルキチガイ君の ID:ILE12Z1r に行っても無駄だと思うけどさあ
質問者が
>XC8について質問さしてください
って言ってんだから8bitPIC前提の質問だろ
なのにそもそもの前提を否定して解凍するのは正直知恵遅れでしかないよ
とりあえずえらそうに回答者面するまえに擦れたい100回声に出して読んでみたら? >>207
もう世の中に売ってる物なら大人しくそれ買うよ。
モノ作る動機になるのは世の中にまだ無いものとか、有っても物足りない場合だよ。 >>229
初心者にインラインアセンブラを勧めるリアルキチガイ
BSF, BCFでなにが解決するの?
www >>229
まさかPICに32bitがあることを知らない? >>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);
} >>193
レギュレータもクリスタルも無しでDIPでお手軽って言うと、こんなのでしょ。
ROM、RAMはちょっと足りない。
ライバルは中華nanoか。
http://i.imgur.com/wHdKjS4.jpg >>208
今度はリンクを間違えました
すいません >>235
前にも見た
変則ユニバーサル基板使い!
私もPIC16F1455はとてもオススメ モデルチェンジしてくれると嬉しいんだけど
ROM 28KB / RAM 2KB で
USB有りモデルは放置されてる感じ >>237
変則なのか?これ。
前に作ったのはUSB-MIDI変換器だったかな? 必要な領域30バイト確保したくらいで不足したとかいうならそもそもの品種の選択が間違ってたに過ぎないだろ。
何でもかんでも8bit vs 32bitに持って行きたがる奴がおかしいわ。 >>208に対しては普通の回答をした
初心者に対してテーブルを使うだのインラインアセンブラを使うだの言ってるキチガイがいる
32bitはそいつに対しての書き込み >>234でパフォーマンスに問題があるなら、
素直に高性能なCPUを使おう
ごく普通の意見だと思う
少なくとも初めてスレでは 何するかでマイコンなんていくらでも選択肢が変動すると思うけどねー
固まっちゃった人にはそれがわっかんねぇんだろうな。 あんたの所、中華製電源で動かしてるのにCPUの電力効率なんか気にする必要あるの? ありがとう、大人がキーワードなんだね
おいらは電池で動かしてるよ >>245
>>208のような処理を、工夫せずにそのまま簡単に作りたい場合
>>221のような、パフォーマンスを理由に可読性流用性開発効率を犠牲にしたコードを書きたくなるような処理
>>225のような、パフォーマンスが理由でアセンブラが使いたくなるような処理 8 vs 32は無意味だし、初めてスレでする話しではない。 初心者がパフォーマンスを問題にしていたら
32bitを勧めるのは当たり前かと
今回はアセンブラ厨が作り出したパフォーマンス問題であったようだけど 8bitはたしかハーバードアーキテクチャ
32bitはMIPSアーキテクチャ
中身が全く別物 なんかわからないけど否定された気持ちになったのかな? ハーバードとMIPSを並べちゃったよ
同じようにアーキテクチャーとついてるけど、
全然違う階層の単語だよ >>255
CPU周りにパイプラインとかあるから
クロック計算とか単純な4サイクル計算じゃなくなる 16bit命令レジスタとかみると
チップごとに入ってるレジスタが違ったりしてる
アセンブラいじくるとわかる twitterじゃないんだから
言いたいことがあるならはっきり言いな えらく喧嘩腰だね
何かよくわからないけど攻撃に備えているのかな >>264
32ビットマイコンに対して少しでもネガティブなことを言わないか気にしてるだけだよ >>264
それはこっちが聞きたいわけだが
コアの違いについて語りたい?
パリフェラルの違いについて語りたい? >>265
RS232通信をlinuxパソコンとやってみたけど案外スムーズにいけるね!
そこらの産業機器より全然シンプルで優れてるw 8bit, 16bit, 32bitいずれもCとアセンブラ両方の経験があるから、
色々と語れると思うよ UARTは
8bitはFIFOは受信のみ2バイト
16bitとPIC32MMは8バイトFIFO
PIC32MXは16バイトFIFO
3種類で割り込みのポリシーが全部違うんで面白い >>269
パソコン側のシリアル通信のC言語プログラムでちょっとハマったw
設定を構造体でやって
データをファイル形式でやる感じだったから
理解するまで時間かかったw edison とか ラズベリーパイとかより
ドライバレジスタを細かくいじれるし
レベル変換の問題も楽だし
タイミング調整 データ長なんかの設定も楽 C言語でいじれるようになったから
デスクトップとかサーバと連携して
web上からも遊べるように簡単にでけるようになったのはでかいw 8bitのUARTは送信データがダブるエラッタがあるので注意
回避は結構難しい >>273
9600でしかまだやってないし1バイトづつ低速でやってるから
まだエラーでは悩んでない
詳しく! RS485に変換して
長距離伝送とかでエラー回避とかも簡単にでけるべ? ボーレートはあまり関係ないです
送信で、シフトレジスタがちょうど空になるタイミングでTX1REGに書き込むと、そのデータがダブって送信されます
命令サイクル単位でピッタリこのタイミングに合った場合のみ発生します
1バイトずつ、シフトレジスタが空になってからTX1REGに書き込むのであれば問題ありません
(送信速度は落ちますが) >>276
そういえばEEPROMのACKのタイミングも高速でやるとエラーかかんない?
NOPとかで遅延かけないとうまくいかないよね? 送信速度を犠牲にせずに送信するには、
ヤバいタイミングに書き込まないこと
私がやった方法は、
送信モジュールの初期化と同時にフローランタイマーを初期化
タイマーの値を見て偶数奇数を揃えてTX1REGに書き込む
この方法を用いるには、1バイトの送信周期がフリーランタイマーの周期の偶数倍である必要があります >>277
I2CのEEPROMの書き込みで問題があると思ったことはないですね
何種類か使いましたが
データシートと合わせて、エラッタは見ておいてください
マイクロチップの場合、エラッタに記載がなかったりしますが >>278は
どうずらすかをフリーランタイマーを用いて判別する方法
どうずらせば良いかがわからないとNOPをどこにどう入れれば良いかがわからない >>281
まだ実装はしてないからなんともいえないけど
送信シフトレジスタエンプティビットを読み込んで
そのあとNOPでできるんじゃない? 安全なタイミングはシフトレジスタが空であるとき
コードがこうなっていれば問題は発生しない
ただし、空になるまで待っていたら送信が連続して行われないので遅くなるし、
割り込みで処理してる場合は、シフトレジスタが空になるタイミングで割り込みをかけることが出来ない >>285
そういえばintel edison のシリアル通信ですら高速帯域ではエラー出てたし・・・
速度気にするなら他の通信使えば? >>287
ビットレート関係ないって言ってるんだけど 前も同じようなやり取りをしたような
「初めて」相手だと大変だ やっぱドライバ周りはまだまだNOPが必要そうだね!wwwwwwwwww >>290
モーターパルスとか
強電磁波時の誤作動はじゃあどうするnん? >>269
8/16bitFIFOって、FIFOが空になった時に割込みあげてくれるようなのある?
たまにそういう機能がないUARTがあって、RS485とか作ると困るんだけど。 >>285
割り込みで処理してて、シフトレジスタが空になってから1サイクル以内にデータ転送ってできるのか?
要因判別とか割り込みマスクとかソフトウェアのバッファからの転送とかで1サイクルくらいはCPU動くんじゃないの? TSR(シフトレジスタ)が空になるタイミングでTXREGに書き込みを行うと、
TXREGとTSRに同じデータが書かれて、データがダブるってやつだろう。もう飽きた。 ■ このスレッドは過去ログ倉庫に格納されています