【大人の】PIC専用のスレPart20【おもちゃ!】at DENKI
【大人の】PIC専用のスレPart20【おもちゃ!】 - 暇つぶし2ch569:774ワット発電中さん
08/07/25 00:17:26 a59gaSgu
>>554
変数へのアクセスがatomicにならないのはPIC Cに限定された話じゃないよ。
atomicなアクセスはC言語の仕様に含まれていないから、C言語の標準の範囲内で
プログラムを書く限り、どのCコンパイラを使ってもatomicアクセスの保障はない。

atomicアクセスが必要なら、割り込みを禁止するか、atomicであることが
保障されているアクセス手段でセマフォを作ってアクセスバリアを作るしか
ない。

>>565
「最下位が特定の値のときに二度読み」だと>>568が指摘するような
レイテンシ差が発生する可能性があるので、必ず二度読みするのがお勧め。
これだとレイテンシ差が発生しないようにコードを書くのが容易。


570:774ワット発電中さん
08/07/25 00:29:25 YPd9qSBD
PICで複数(20個とか)のLEDをそれぞれ違う輝度でPWM駆動することは可能でしょうか?
どう考えてよいのかわかりません。

571:774ワット発電中さん
08/07/25 00:37:11 a59gaSgu
>>570
条件次第だが、可能。
20個でどう考えていいのか分からんのなら、まず1個で考えろ。その次は2個だ。
どこまでなら分かるんだ?

もしかして スレリンク(denki板:420番)
の続きか?


572:774ワット発電中さん
08/07/25 01:08:45 Y5E1/Skm
ハードでのPWMは1個しかないけど、ソフトでやればOK

ループでもタイマ割り込みでもいいけど一定間隔で
{
 カウンタを+1する(カウンタが上限いったら0にする)
 LEDの輝度を先ほどのカウンタと比較して
 大きければ点灯、小さければ消灯する(必要なLED数だけ行う)
}
例えばカウンタが上限255なら、輝度128なら Duty50%で点灯する
64ならDuty25%で点灯する。
問題は周期がハードに比べて遅くなる。

573:774ワット発電中さん
08/07/25 01:47:13 JeP47Zwo
>>569
PIC用のコンパイラで使えるかは知らないけど
一応、Cの仕様にはsig_atomic_tという型があって、

・最低8ビットで
・volatile付きで宣言されているとき、代入がatomicである

ことになっているよ。

574:569
08/07/25 04:20:46 a59gaSgu
>>573
あーすまん、確かにそのとおりだ。>>569は言葉足らずだった。
言わんとしていたことは「型によらずatomicであること」の保障はない、だ。

>>569は「変数へのアクセス」を「任意の変数へのアクセス」とでも
読み替えてくれ。


575:774ワット発電中さん
08/07/25 04:36:36 cia2XHWk
知ったか乙

576:774ワット発電中さん
08/07/25 07:36:47 uD0mpU5s
PICKit2 Starter Kitについてるデモボードではあらかじめくっついてるマイコンにしか書き込みできないのでしょうか?

577:774ワット発電中さん
08/07/25 08:41:36 a59gaSgu
PICkit 2 Starter Kitに付属のデモボードの名称は
PICkit 2 Low Pin Count Demo Board

そのマニュアルが
Low Pin Count Demo Board User's Guide
URLリンク(ww1.microchip.com)

その中の「1.3 Devices Supported by the LPC Demo Board」に
対応チップの一覧がある。記載されているのは

PIC12F508 PIC12F629 PIC12F635
PIC12F509 PIC12F675 PIC12F683
PIC12F510

PIC16F505 PIC16F630 PIC16F684
PIC16F506 PIC16F676 PIC16F688

PIC16F685 PIC16F689 PIC16F785
PIC16F687 PIC16F690

マニュアルの改訂のペースは遅いので、対応チップはもっと多い可能性もある。


578:774ワット発電中さん
08/07/25 11:03:22 yzuFq62G
PICKit2なんですが、100ピンのやつも配線がわかれば書き込めますか?あったら教えて

579:774ワット発電中さん
08/07/25 12:11:53 3r9w7ge7
配線が分かって、なおかつ正しく配線すれば書き込める。

580:774ワット発電中さん
08/07/25 12:34:21 ILMNW3aV
質問
16F877Aを使用しての質問なんですが
パルスの周期(パルス間の時間計測)をキャプチャ機能
で測定しようと思ってます
(設定は立上エッジで割込み)。

PICの動作としては割込が発生した時点でキャプチャ
レジスタを読めばエッジ間の時間計測結果が分かるという
ことで良いのでしょうか?



581:774ワット発電中さん
08/07/25 12:41:32 D8jwVZuH
>580
そうだよ。差をとるんだけどね。


582:774ワット発電中さん
08/07/25 14:03:04 a59gaSgu
>>580
「割り込み発生時点でキャプチャ」じゃなくて「キャプチャ時点で
(割り込み許可になっていれば)割り込み発生」ね。

割り込みが発生するか否かによらず、キャプチャは行われる。


583:774ワット発電中さん
08/07/25 14:38:35 D8jwVZuH
「割込が発生した時点でキャプチャ レジスタを読めば」

584:774ワット発電中さん
08/07/25 15:08:08 a59gaSgu
ぐはっ・・・なんという早とちり・・・

585:774ワット発電中さん
08/07/25 16:07:14 YVnMtuoI
どんまいw

586:774ワット発電中さん
08/07/25 17:25:07 yzuFq62G
PICKit2ProgrammerでdsPICのHEX読み込むと
Warning:Some configuration words not in hex file.
Ensure default values above right are acceptable.

書き込もうとすると
Programing failed at Program Memory address 0x000000
って出る、たすけて!

#include "p30f4012.h" //4012のヘッダファイルの読み込み

_FOSC(CSW_FSCM_OFF & EC_PLL8); //EC PLLx8=80MHz, Failsafe off
_FWDT(WDT_OFF); //WDT(ウォッチドッグタイマ)オフ
_FBORPOR(PBOR_ON & MCLR_EN);
_FGS(CODE_PROT_OFF); //コードプロテクトオフ

#define CLOCK 80

int main(void){


TRISC=0x8000;

while(1){


LATBbits.LATB0 = 1;
asm("NOP");

LATBbits.LATB0 = 0;
asm("NOP");

}

}

587:774ワット発電中さん
08/07/25 17:28:21 HC8aQdZT
エンコーダやD/A変換のように値が上下するものは
・変換中フラグON
・データ取り込み
・変換中フラグOFF
として、データ参照側は変換中フラグONなら読まない。

>>569
これがセマフォというやつでいいですか?

588:774ワット発電中さん
08/07/25 18:50:55 mz9d4CFu
値を読み込むシステムコールを用意して、ソフトウェア割り込みの中で読む

589:774ワット発電中さん
08/07/25 21:00:38 uD0mpU5s
>>577
ありがとうございます。
恥を忍んで聞きますが、別のチップに書き込むにはデモボードにあらかじめついてるやつを一旦取り外すんですよね?
なんか外れそうな気がしないのですが。

590:774ワット発電中さん
08/07/25 21:20:44 yzuFq62G
もしかして
URLリンク(www.geocities.jp)
ってdsPIC無理なの?8000円・・・・・・・

591:587
08/07/25 21:24:48 Lj4POHjO
>>588
ありがとうです。リアルタイムOSの技術なんですね。

>>589
Starter KitはICソケットなので簡単に外れるよ。
PICKit2と基板を離して、6ピンのコネクタに別の基板orPICをつなぐ方法もある。


592:774ワット発電中さん
08/07/25 21:38:53 D8jwVZuH
>>590
dsPIC用はピンアサインが違う。

593:774ワット発電中さん
08/07/25 21:46:21 yzuFq62G
まじかよ!やっと基盤焼けたのに・・・もう今日はダメだ・・・・・


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch