1read 100read
2012年1月2期電気・電子23: PIC専用のスレ Part35 (479) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
25: ラジオ自作総合スレッド その7 (497)
26: 電子立国日本の敵Samsungをどう叩き潰すか?B (730)
27: LEDでこんなもの作ってみた (128)
28: アマチュア無線を始めよう 6 (142)

PIC専用のスレ Part35


1 :11/12/02 〜 最終レス :12/01/18
....  /Microchip ./|
 /( ゚∀゚)    /  | アセンブラのアの字もわからない
 |~ ̄ ̄ ̄ ̄ ̄|  /. 超初心者からHEXが読めてしまう
 |/Z./Z./Z./Z_|/ ||  鬼プロフェッショナルの為のスッドレ(#゚Д゚)だ!モ゙ルァ
  ||. ||. ||. ||
大人気のPICマイコンのスレ。
なんといっても情報が豊富だし、開発環境も多いし、パッケージも豊富。
使いやすくて、しかも安い。やっぱりPICだよね。
例の如く基本リンクだ
http://www.microchip.com/  マイクロチップ本社(Microchip Technology Inc. )
http://www.microchip.co.jp/ マイクロチップ テクノロジー ジャパン 株式会社
またーりやっておくんなまし。
教えて君はとりあえずGoogle(http://www.google.co.jp/) くらい使おう
前スレ
PIC専用のスレ Part35
http://kamome.2ch.net/test/read.cgi/denki/1313366752/

2 :
あ。しまった。 36にするの忘れた
あとテンプレはあってる自信がないので誰かに頼む

3 :
picに書き込めません。
icd2でicsp方式にて書き込みたいのですが、
ICDWarn0020
とエラーが出てしまいます。
また、前回書き込んだプログラムは実行できているので、
picの故障ではないと考えています。

4 :
ICD2使ってる人いるんだ。そりゃ居るだろうな。
やっぱ、pickit3よりも開発環境としては良いのだろうな。
金があったら買いたい。

5 :
ICDWarn0020:
 ICD2が物理的に接続されていないか、間違ったチップが接続されている場合に出ます。特に、 (expected=0xFF, read=0x0) と出ている場合は電源が入っていないか、物理的にプログラムケーブルが抜けている場合が多いです。

6 :
3ですが、
VDD-VSS間のデカップリングコンデンサを5組中1組だけつけないと
書き込みが出来ないということはありますか?

7 :
このスレはどんな質問にもレスが付くけれど。皆さんどんな職業なんですか?
冗談でライターばかり作っているとか言っているけれど、マイクロチップ社の人とかですか?

8 :
3ですが、
VDD-VSS間のデカップリングコンデンサを5組中1組だけつけないと
書き込みが出来ないということはありますか?

9 :
職業:怪傑ズバットのおじさん

10 :
>>6
>>8
VDD-VSS間のデカップリングコンデンサを5組中5組全部つけて試してみると
どうなりますか?

11 :
16F877で、もっともシンプルなLED全ポート点滅プログラム例(アセンブラ)をお願いします。
何がなんだか分からなくなってしまいました。

12 :
>>11
もっともシンプルなLED全ポート点滅プログラム例(アセンブラ)を動かしたら、
目視では点滅してるのが分からなくなるが(連続点灯にしか見えなくなるが)、
それで良いのか? 点滅周期は数十kHz〜数百kHzのオーダーになるぞ

13 :
>>11
それから基板の作りが悪いと全ポートオン/オフで発生するノイズの問題が
出てくることがあるから、最初はLEDは1ヶだけ接続して実験した方が良い

14 :
せめてスイッチは付けろ

15 :
SDカードに書き込んで、PCで見られるデータロガーを作ろうと思います。
PCでxxx.datとかで認識できるようにするには、
どうすれば良いでしょうか?
マイコン直結のSPI書き込みで行けるでしょうか?

16 :
>>15
本屋に行けばそういうの載ってる書籍たくさんあるよ。

17 :
Petit FatFsを使ってできたな
でも、あれ少しバグがある

18 :
質問。
PIC 18F2550(USB内臓)をPCとUSBでつないで
バスパワーでLEDを光らせたいのだけれど。
開発環境はMPLAB IDE + MPLAB C for PIC18
ソース:ttp://loda.jp/mcnc/?id=373.txt
回路図:ttp://loda.jp/mcnc/?id=371.png
いざUSBに接続しても通電確認用のLED(LED2)しか点灯しない。
せめてLED1かLED3のどちらかでも点灯するはずなんだけど……。
PICのVdd - Vss間には確かに5v来てるところまでは確認済み。
どこが悪い?

19 :
向こうでレスついてるよ
こっちで続けるなら、取り下げてきて

20 :
>> 19
向こうでついたレスの分は修正済みでUPし直した。
PICスレ池って言われたので。

21 :
PIC18F2550/4550はブートローダー、各種フレームワークねたも含めて
選ぶのが困るほどweb上に情報があるから、とりあえず適応なサンプル
プログラムを見てみたら? 例えば↓
ttp://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?memo%2FUBW

22 :
誰かさんのwebじゃなくてマイクロチップ自身が出してるからそっち参照したほうがいい
USBデバイスのサンプル豊富で助かる

23 :
マスターになるサンプルが見つからない
USBメモリに記録させたいのに

24 :
>>23
マスター⇔スレーブじゃなくてホスト⇔デバイス・ファンクションね。
マイクロチップのUSBライブラリ付属のサンプルに
「Host - Mass Storage - Thumb Drive Data Logger」
ってあるけどこれは要求に沿わないの?

25 :
USBメモリにファイル保存するだけなら
>>15>>16>>17のやり方が普通だと思うよ。
USBホストのハード用意して
マスストレージクラスドライバを積んで
なんてしたら、ハード規模が大きくなり
PICを使う利点が無いよな。
たぶんPIC24Fを使うのだとは思うけど。

26 :
PICkit2 Programmer使ってて「Auto Import Hex + Write Device」というボタン
を押しとくと、アセンブルしてHEXファイルが更新されると自動的に書き込んで
くれるんだな。これはデバッグに便利。
結構長く使ってるけどこんな機能知らなかった。

27 :
ものすごく初歩的な質問。。
例えばPORTAの1(RA1)の値を読み込むとき、Cで書く場合
どうすればいいんだっけ?
int i;
TRISA = 1;
i = RA1;
だとうまくいかない。。

28 :
HI-TECH C だとそれでうまくいくけどね bitがうまくいくように定義されているから
普通は
(PORTA)&(1<<RA1)==0ならRA1は0で
(PORTA)&(1<<RA1)!=0ならRA1は1とやるのでは

29 :
>>28
HI-TECH Cだとできるんだね(前やったときおれもできた気がした)
今C30コンパイラ使ってやってるんだけど、そもそもRA1がundecleared
となって使えない状況なの。。
で、いろいろいじって、一応、苦肉の策で
if((PORTA & 0x02) == 2){
 // RA1が"H"の時の処理;
else{
 // RA1が"L"の時の処理;
}
で動くようにはなった。(0x02はRA1がPORTAの2ビット目なので)
もっとスマートな書き方があるといいんだけど。。

30 :
>>29
C18だとPORTAbits.RA1みたいな名前だったから、C30もそんな感じなんじゃないの?
定義読むべし。

31 :
>>30
すばらしい!
下記でできたよ。
if(PORTAbits.RA1 == 1){
 // RA1が"H"の時の処理;
else{
 // RA1が"L"の時の処理;
}
で、ヘッダーファイルを読んでみると、
#define _RA1 PORTAbits.RA1
とさらに置き換えしてあったので、試しに
if(_RA1 == 1){
 // RA1が"H"の時の処理;
else{
 // RA1が"L"の時の処理;
}
でやってみてもちゃんと動いた。
これからは横着しないでヘッダーファイル読むよ。。
どうもありがと。助かりました

32 :
てかこれでいいねw
if(_RA1){
 // RA1が"H"の時の処理;
else{
 // RA1が"L"の時の処理;
}

33 :
>>32
ポートの値(1/0)だから可視性が落ちる
できればBOOL型のときだけ使いたい
・・・・個人的な思いだけどね

34 :
俺はboolとbitは意味的には同じ物として見ちゃってるなー
まぁbool型が実際にはintと同じサイズだったりはするけど

35 :
わかってて書いたけど、可読性という意味では、>>32はよろしくないねw
横着すると、後ではまるのがプログラミング。。
それから、PORTAbitsはSFRの構造体になっているので、そう言う意味では、
_RA1ではなく、ちゃんとPORTAbits.RA1とメンバー指定の書き方で書いた方が
より実際の実装状態を意識した書き方になるね
ヘッダー読めばこの辺りもちゃんと書いてあるよね。最初から読んでれば。。
すみませんでしたm(_ _)m

36 :
よくいるよね、if(SW){・・・・と書く人。その書き方、僕は嫌い。
if(SW==H){・・・とか、if(SW==1){・・・とかでないと。

37 :
ネットで発表しているプログラムでif(SW==H)とか書いてるとわーーーこの人素人さんだ
たいしたことないわねと思われるんだよ
無理してでもif(SW)と書くべきそうすればワンランク上の人と思われる

38 :
びットテーブルなら、(!SW)と(SW)でいいんだろうけど、読むときにうっとおしいのであえて == のある式にするなあ。
書式の統一をかねて。
while(1)
ぐらいならやるけど。
while(-1)
じゃなくなったのはいつからだろう?

39 :
>>38
真は1だし、最適化で違いはなくなるからね。

40 :
わざわざアセンブラ1行をCで1行にする意味について。

41 :
>>40
読みやすく移植性が高いとか。

42 :
移植性とか言うけど、PICからAVRに移植するならCでも手直しが要るだろうし、
同じPICならアセンブラのほうが手直しが楽だと思うが。

43 :
>>42
マイコンの性能をギリギリまで絞り出すならアセンブラ、そうでなければC。
それに、複雑なアルゴリズムはCを使いたいよね。

44 :
>>37
>無理してでもif(SW)と書くべきそうすればワンランク上の人と思われる
逆だと思う。
SW==Hと、ハッキリと明示することが、勘違いしない、バグの出ないソース、
であることを知っている人だ、と思われるんではない?
経験が長い人ほど、押さえなければならないポイントをしっかり把握しているよね。

45 :
なんとなく負論理の方がカコイイので、
そのままif文にすると読めなくなる

46 :
>>45
なんでかっこいいんよ…
さて
ポートの論理を加味して、徹底的に読みやすくすると、defineとかに行き着くんだろうか…
#define  SW_READ(x)   !(x)
#define  ON        1
  if (SW_READ(SW) == ON)
みたいな

47 :
>>37
はぁ、可読性とか負論理は考えないのかw

48 :
Cも平たく書けるのに、わざわざ難解な書き方して俺ってプロwwとかいう言語仕様をしてるのが気に入らん。

49 :
んな細かいとこに拘るより、もっと大切な事があるだろう。

50 :
スイッチ入力が正論理か負論理かは回路に依存するので
それを吸収できるコードの方が望ましいっちゃー望ましいけどな

51 :
>>46
そこまで書くなら何のスイッチがオンになったかのマクロの方がよいのでは?
#define  SW_START()   (!(_RA1))
#define  SW_STOP()    (!(_RA2))

52 :
>>51
俺の場合、更に isを頭につけてる。 if (isSW_START()) てな感じ。
環境依存はdefineの中に押し込み、プログラムの記述にハードウェア論理を持ち込まない様にしてる。
ここ最近はこの形が多いけど、暫くすると、また書き方を変えるかもしれない。

53 :
defineだけで逃げ続けないといけないのが辛いな
関数使っていいならいくらでも綺麗に書けるのに

54 :
>>53
マクロから関数に簡単に変えられるでしょ。
ポートを読むだけならマクロで十分でしょう。

55 :
>>51
ああ、そうか。ビットテーブルだっけか。
>>54
関数っぽい記述にしておけば、関数にもすぐ差し替えられるね。

56 :
私は特殊レジスタの初期化は必ず B'11101111'みたいに書く
でも世間では、H'fb' とか、わざわざ16進で表記するひとが多い
あれは何で?
データシートと付き合わせるなら2進の方が都合がいいと思うんだが

57 :
C言語に2進表記が無いから

58 :
最近は結構使えるんじゃないか

59 :
>>57
アセンブラでも16進の人が多いんだよな
本業の方のC言語で16進使ってるからつい流れでそうしちゃうってことかな

60 :
2進表記は位取りが誤読し易く読みにくいのでうちの職場ではNG。
16進表記ぱっと見てビットパターンが思い浮かぶようになっていれば見易い。

61 :
そこで十進数ですよ

62 :
10進、、、ビットパターンが思い浮かばん、、、。

63 :
カウントに使うなら、ありかな。

64 :
>>60
そういうことですか。
確かに16進からビットパターンが浮かぶようになっていれば一瞬で正確にビットパターンが読み込めるわけで
プロならそれは必須そうですね。
アマだけど覚えなくちゃ仕方ないかな

65 :
>>53
たかだかポートアクセスごときで関数化してたらオーバーヘッド多くて低速になってしまう。
粒度の細かい抽象化にはマクロ関数が最適。

66 :
〜広めてください。
▼スイス政府 国民保護庁 著「民間防衛」(civil defense)
武力を使わずに他国を侵略する段階を説明しています。
マスコミは乗っ取りがほぼ完了しており機能していません。。クチコミでも身近な人に広めましょう。
日本は今、侵略されつつあります。平和ボケから目覚め、行動を起こしましょう!
現在第五段階です。
TPP ・ 日中韓FTA ・ 人権擁護法 ・ 外国人参政権 などが実現してしまえば最終段階が始ってしまいます。
猶予がありません。声を挙げて下さい!
第一段階「 工作員を送り込み、政府上層部の掌握と洗脳 」
第二段階「 宣伝。メディアの掌握。大衆の扇動。無意識の誘導 」
第三段階「 教育の掌握。国家意識の破壊 」
第四段階「 抵抗意識の破壊。平和や人類愛をプロパガンダとして利用 」
第五段階「 教育やメディアを利用して、自分で考える力を奪う 」
最終段階「 国民が無抵抗で腑抜けになった時、大量移住で侵略完了 」

67 :
>>64
プロでもなかなか2進⇔16進できるやつは少ない。たいてい関数電卓でやっちゃう。
できるやつってのは大抵アマのうちに趣味のPCでキャラ作ってた奴とかだった。

68 :
16進と2進は4bitごとにわけて考えられるから、16通り憶えればいい
結構すぐできるようになると思うけど

69 :
16進を2進に変換するなんて九九を覚えるより簡単でしょ。

70 :
>>69
俺は片手で31まで数えられる
でも、二進十進の暗算は苦手

71 :
通は16進で九九が言える

72 :
16進数を言われて、2進数がパッとわかるのは、以下のものだけ。
0x00 = 0b00000000
0x01 = 0b00000001
0x02 = 0b00000010
0x03 = 0b00000011
0xaa = 0b10101010
0xcc = 0b11001100
0x88 = 0b10001000
0xff = 0b11111111
および、ニブル入れ替えの数値も

73 :
少なくとも2^n系はすぐわかると思う
0x00, 0x01, 0x02, 0x04, 0x08
0x10, 0x11, 0x12, 0x14, 0x18
0x20, 0x21, 0x22, 0x24, 0x28
0x40, 0x41, 0x42, 0x44, 0x48
0x80, 0x81, 0x82, 0x84, 0x88

74 :
ttp://www.vector.co.jp/soft/win95/personal/se345870.html
これ使ってる

75 :
0-7は普通に判るだろ
8以降も、8とFは判って当然
9は8+1だし、EはF-1だからいいとして、問題はAからDの4種類
Aはまだ10進の10だとという認識が強いから2+8に分解すれば1クッションで判る
B=1011 C=1100 D=1101
このへんが最後まで残る
せめて、10進での1と9とか2と8みたいに、
Bと4、Cと3、Dと2が補数に見えればいいのだけれど、
一旦10進に戻してると1クッションでは済まない

76 :
何度も使ってれば勝手に覚えちゃうもんだと思うんだけどな
電卓とかキーボードで入力するようなのはなおさら

77 :
ちょいと疑問なんだが。
PICでLEDを点滅させてるんだが、
内部発振回路(4MHz?)を使うと 10k x 25 ウェイトでちょうど1秒になる。
外部発振回路(水晶 20MHz)を使うと 10k x 200 x 2 ウェイトでちょうど1秒になる。
ソースはこんな感じ
#ifdef USE_XTAL
  Delay10KTCYx(200);
  Delay10KTCYx(200);
#else
  Delay10KTCYx(25);
#endif
それぞれ、なんでその計算になるのかがわからない。
ついでに
  Delay10KTCYx(200);
  Delay10KTCYx(200);

  Delay10KTCYx(400);
とすると、ちゃんとウェイトがかからなくなる。
これもわからない。
わかる人教えでください。

78 :
ぜんぜんちょうどじゃなかった。
  Delay10KTCYx(200);
  Delay10KTCYx(126);
くらいが一番近いかも。

79 :
引数はunsigned char型なので0〜255の範囲
0のときは256とカウント
256を超えるときには複数回に分ける必要がある
ウェイト時間が計算値と違ってるのは
割り込みを使ってるのか?
クロック設定が違ってるのか?
プログラムがまずいのか?
何かしらの原因があるのでしょう

80 :
HI-TECH Cだと
255以上も使えたような気がする
あまりよろしくなさそうだけど
__delay_ms()の引数を変数できなかった気がするのだけど、
数値によってコード(マシン語?)が変化するからかな?

81 :
あれは数値決め打ちのループ命令に置き換わってるからな

82 :
秋月の300円LCDモジュール在庫切れのままだ・・・・

83 :
あんなのは売り切っておしまいでしょう

84 :
>>82
手元に7つ余らせてる

85 :
aitendoに同等品が売ってたような

86 :
300円液晶は今年の春頃在庫切れになって少したって復活した
あわてて14個買ったさ

87 :
後閑さんとこのPIC CLUBミーティング写真、平均年齢たか! 今の電子工作の世界は普通?

88 :
普通かどうかわからんが発表内容の頭の柔らかさにビックリする

89 :
>>87
CQ ham radioを読んでる俺には見慣れた光景だ
オープンソース系のミーティングもいずれはあ

90 :
老人は死なず、年金もらって長生きするのみ

91 :
>>85
ありがたいっす、注文しちゃった

92 :
ちょっと教えて欲しい。共立エレショップ、スーパーメロディICキット
http://eleshop.jp/shop/g/g402045/
http://www.technobase.jp/eclib/WONDERKIT/MANUAL/smld812.pdf
これ使ってる石はオーディオアンプとPICの2個だけだが、16ビットDA出力で
音出してると言う。
PICでオーディオ16ビット出力できるのなんてあったんでしたっけ?

93 :
>92 HT38A5ってなーんだ?

94 :
こんばんは。お力を借りたくやってきました。
picで電圧の精密な測定を行いたいのです。サンプルは電流・電圧どちらもです。
構成は、  サンプル−(オペアンプ)−pic−D/Aコン−表示  の予定ですが、
                       ↑ココ  と   ↑ココ
にバッファやノイズ対策用のアンプ?などを挿入するべきでしょうか?
要求使用は5V,10ビットで誤差1%程度が望ましいのですが・・・。
また組み込むべきであれば、オススメの部品も教えていただけると非常に助かります。
よろしくお願いいたします。

95 :
>>94
まず、言葉の定義を、「サンプル」とは何?
電気回路で類似している言葉に「サンプル アンド ホールド」というものがあるが違うのかな?
また要求使用(仕様?)で測定時間(間隔)は?
D/Aコン(バータ?)を使っての表示とはどのようなもの?
PICを用いる意図は?

96 :
>>95
どう考えてもターゲットのことです

97 :
何で知らないのに首を突っ込みたがるんだこの回答者様は

98 :
>>95
仕様誤字すみませんでした。
サンプルは>>96がおっしゃるとおり、測定したい電流値、または電圧値です。
picを用いる意図は、サンプリングタイムが数m秒で、A/Dコンバータを有していること。など
D/Aコンバータ→表示だとおかしいですね。表示ではなく、昇降圧後に外部機器に接続します。
なぜ単純にDC-DCコンバータを使わないのかと言われそうなので、
小数点2桁目ぐらいまで制御したいためです。そのためのpicでもあります。

99 :
// チラシの裏
// PICのADCで電圧受け取ってそれを加工、さらに加工したものを外部の
// DACでアナログにして、アナログ式のパネルメーター?で表示するわけか
// いまどきアナログ表示使おうとかいい趣味じゃネエか
// 車のメータ類みたいにステッピングモータ使っても面白そうだな
// チラシの裏終わり

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
25: ラジオ自作総合スレッド その7 (497)
26: 電子立国日本の敵Samsungをどう叩き潰すか?B (730)
27: LEDでこんなもの作ってみた (128)
28: アマチュア無線を始めよう 6 (142)