1 :
774ワット発電中さん :
2013/02/18(月) 19:01:15.41 ID:DoB0Przt PIC専用のスレはすでにありますが、敷居が高くて 初心者には質問がしにくいです。 そこで初心者専用のスレをたてました。
3 :
のうし :2013/02/19(火) 08:17:25.77 ID:NYPZDD5p
http://c.2ch.net/test/-/denki/1360674351/1 >アセンブラのアの字もわからない‥
そりゃアセンブラだって敷居高い罠。ブログラムのプの字レベルか?
てんぷら:
Q.picって何ですか? 電子工作でやたら出てくるんですが。
Q.あのICに書き込むとか、プログラムするとかありますがどういうことですか。
Q.picってどこ行けば手に入りますか?
Q.股間さんって誰ですか?
・・・だりか、A.を書いて。
どうすんだよ、このスレ。 そもそもPICは(マイコン)初心者向けじゃないし
5 :
774ワット発電中さん :2013/02/19(火) 10:03:06.20 ID:mhQ7f36A
初心者は別なの使うから 終了
6 :
3 :2013/02/19(火) 10:07:03.76 ID:NYPZDD5p
>PIC12F675を実態図のように組んでみたのですが全くこれのLEDが点きません。 電池も電源もきているし、LEDの極性も確認しました。またPICがヌッ壊れた可能性も考えてもう一台作りました。 何がいけないんでしょうか? なんてPCなしで組み立てるのがいたりするから必要なのさ、ここは2ch。 と言いつつも、厨ん時にZ−80でパソコン作る記事見て、組み立てればBASIC動くのできるかと思っていた。27C256そのままで。
PCなしで2chに書き込むとか最近の人は進んでいるね
8 :
6 :2013/02/19(火) 16:57:38.86 ID:NYPZDD5p
ぼくはいつもそーですが何か
9 :
7 :2013/02/19(火) 17:02:43.71 ID:NYPZDD5p
あっ、0x2chのレジスタへか! あれは何の設定だったっけ?
10 :
9 :2013/02/19(火) 17:10:01.48 ID:NYPZDD5p
初心者は写真や絵で説明しないと無理だと思うけど。。。 2chのテキストオンリーでは無理なんじゃね?
12 :
774ワット発電中さん :2013/02/19(火) 18:04:34.84 ID:3uvk5bLQ
pic専用のスレは喧嘩ばっかだよw
あっちは喧嘩ばかりだから とりあえずこちらはあまりギスギスしないといいな
あちらの人に発見されるから無理
まあ順序立ててこれから始める人向けに書いてみるか。 1.開発には何が必要なの? PICKIT2か3。秋月電子あたりで購入しましょう プログラムの開発ツール。microchipからMPLABをダウンロードしましょう あとはググったりマニュアルを飲める程度の脳みそ。 分からないことはここで聞け。 入門用PICは16F88で良いかな? 16F84は作例や情報多いとはいえ、さすがにもう切っても良い時期だと思うんだ。
そうだな。16F84は無いわ。 せめて16F84Aだな。
マニュアルを飲める、じゃねえや読めるだw さて言語はアセンブラかCか・・・ここで古老達の論争が始まりますw 最初は中身の動きもちょっとだけでも理解させたいので独断でアセンブラにするね。 最初の回路(LEDチカチカ)の回路図とソース、解説文をまとめてどっかに置くので週末まで待ってくれ。 一度にあまり大量に情報を与えないために、回路は電池駆動の内部発振にしとこう。 必要なパーツはユニバーサル基板の切れっ端、PIC16F88、乾電池2本、赤色LED、1k抵抗1本。
>>15 >最初は中身の動きもちょっとだけでも理解させたい
上から目線が、なんとも言えませんね。
>まあ順序立ててこれから始める人向けに書いてみるか。
誰も頼んでいないけどね。
ネットにたくさん写真入りで出ているから、それ以上の物をお願いね。
>入門用PICは16F88で良いかな?
なんで今更、わかりにくい16Fなの?
24のほうがストレートでわかりやすいのに。
>>18 相手する価値無いと思うけど?キミも同レベルならしょうがないが。
>>18 まあ、いいんじゃないのやってくれると言うんだから、お手並み拝見といこうじゃないの。
24Fを薦めるなら、>>18みたいにプロモーションしてよ。
間違えた
>>18 まあ、いいんじゃないのやってくれると言うんだから、お手並み拝見といこうじゃないの。
24Fを薦めるなら、>>15みたいにプロモーションしてよ。
18Fでやってよ
初心者一人もいなかったりしてw
アセンブラで始めるのは良いと思う ある程度経験してからCに移ったとき理解しやすい
マイコンの勉強という意味ではアセンブラがいいね
27 :
774ワット発電中さん :2013/02/21(木) 00:19:58.31 ID:60wCFw4G
誰か初心者来ないかな、待ちわびてる人たちのスレ。
28 :
15 :2013/02/21(木) 00:52:54.51 ID:Cr/pCzk7
異論は認める。 ゼロから始める人には、電子工作の実験室は どこから読み始めて最初に何を作ったら良いのかわからんと思うんだ。 他の入門書とかも最初に色々一度に教えすぎて読むのが辛い。 まずベースになる最低限の構成で動く実物を作り、 あとは動かしながらその基板に機能を継ぎ足してゆく方針にすれば とっつきやすいんでは無いかと考えた。
16系にしても、これから始める人にF88は無いわ 出た当時は画期的だったし、超多機能だったけど、無理に機能詰め込んで ピン配置は変態的だし、過渡期だったのもあってI2C無いとか、ハンパな所あるし まあ、オレも結構使ったし、今でも手持ち結構持ってるけど、 これから始めるなら16F1827あたりがいいんじゃね?
おいおい 1827と88のピン配置は同じだろ。
APFCONで振り替えできるようになってんじゃん っていうかAPFCONで弄ればF88互換にできるようになってるだけ
初心者は16F688がいいいと思うよ。安くて14ピンでコンパクト。 -◎16F688 \110 ADC有,eUSART有,4Kw,内蔵31k-8MHz,CCP無が残念
わかりやすさで言ったら16F84Aの右に出るものはいない なにしろ周辺がなんにもついてない それでいて割り込みは使える←結構重要
割り込みのないマイコンに価値はない、 って、言い過ぎ? タイマー割り込みと、外部割り込みがあれば、大抵オッケー
35 :
774ワット発電中さん :2013/02/21(木) 08:08:27.57 ID:FbJNWRP6
ローラさん乙
36 :
774ワット発電中さん :2013/02/21(木) 14:32:27.38 ID:sstmCphu
16F88の方がマシだろ。
37 :
774ワット発電中さん :2013/02/21(木) 18:16:08.16 ID:FZBH/OpL
ラダーを標準にしよう
39 :
774ワット発電中さん :2013/02/21(木) 23:34:19.53 ID:GRuzjo/F
私もあちらから逃げてきました。 私はアセンブラ派なのですが、初心用にはバンクを意識しなくてよい10F322を推します。 割り込みもあり、機能豊富です。昔の509のようにサブルーチン配置の制約もありません。
「生涯エンジニアの◯◯◯」に良いこと書いてあるな 「朝の工作室 PICを勉強するにはどうしたらいいかへの返答」
初心者にアセンブラすすめるのヤメロ PCのプログラミング思考にも繋がるCでやらせれ 初心者はCだけでいいのです 逆にCを切っ掛けに、 その先にあるライブラリの使い方や オブジェクト指向の言語を覚えていけばいいのです 先が広がります アセンブラに手を出すと、コンパイラより俺の方が優れているという認識が先に来てしまい 視野が狭くなる傾向になります
Cでは、一行で書けるのに、アセンブラは何行になることか。
if((a%13)
>>5 ){
}
どちらのスレも同じような流れになっている 優劣論はやめたい、所詮一長一短 アセンブラは習熟できなくても、簡単なプログラムでも体験しておけば デバイスの仕組みや挙動を理解できる そうするとCのメリットもデメリット、賢い使い方も見えてくる
44 :
のうし :2013/02/22(金) 10:21:56.73 ID:+7NKqbPY
いつだかこんなのがあったらしい。 もし「持ち物」が0ならば “持ち物がありません”をボタンリスト:{“OK”}、デフォルトボタン:“OK”で表示する 以上 と書けば。 if myItem = 0 then display dialog "持ち物がありません" buttons {"OK"} default button "OK" end if みたいなのになる日本語スクリプトがあったとか。 これ、やろうと思えば自分でそんなコンパイラできそうだな。 オリジナルはマッキントッシュのスクリプトにあったらしい。
ラダーでいいのに
46 :
774ワット発電中さん :2013/02/22(金) 12:02:56.82 ID:Z/vHWhBx
らだーは、レーシングするよね
そもそもC使いとアセンブラ使いを別々に考えてるのがよくわからないな C使いならインラインアセンブラ使うだろう、PICなら特に もうアセンブラしか解らないオッサンが荒らしてるんだろうなあ
プログラミングの経験のある初心者には C を奨めるけどなあ、 Javascript さえ知らない初心者にはアセンブラを奨めるなあ。 ( C は意外と細かい文法が多くて習得に時間がかかる ミ'ω ` ミ ) 数学計算は、あきらめれ。
アセンブラを使う人 1.Cが理解出来ないから 2.Cの吐くコードが醜いから 3.ドM
50 :
774ワット発電中さん :2013/02/22(金) 17:24:19.30 ID:Z/vHWhBx
100本のプログラムのうち、Cで書けないものは、龍角散、間違えた、5本くらいだよね。
51 :
774ワット発電中さん :2013/02/23(土) 01:30:02.94 ID:cfq+a1rf
まあ大体のことは、アセンブラなんか使わなくてもCで書ける。そういうもんだ。
はいはいそういうことそういうこと あっちで勝てそうにないからってこっちで背伸びしないでほしいな
53 :
774ワット発電中さん :2013/02/23(土) 15:51:01.08 ID:TZrrDTIx
通販で住所を記入するとき「(全角)」とあると、萎えてしまう。 なんで英数字を「全角」で書かなければならないんだ。 そんなの、システム作った人の都合だろうに。 そのくせ、電話番号は半角数字で書かせるんだから、わけがわからん。
全角半角言ってる人って頭悪そう。 単なる文字コードを個々の環境によって幅広め/狭めに表示してるだけなのに。
だよね、システム設計が悪すぎる。 どちらでも有効なように作るのが、優れた設計者だと思う。 ローマ字入力の人は、融通がきかないから。
pic初心者専用のスレ
>>53 PICと関係ない。ただ知り範囲でコメントすると
昔郵政省はパソコン等で宛名印刷するときの仕様として
住所表記の番地等の英数字を全角で印刷するよう指定していた。
当時のおバカなOCRへの配慮だったのだろう。今は知らん。
そのため、住所表記部分はすべて全角でないと受け付けないフォームが
広がってしまった(サーバーで勝手に変換しろといつも思っていた)。
さぁ、こんな話題忘れよう。
そうだよね、忘れよう。 以前、◯◯◯という旅行会社で、ツアーを申し込もうとして、 住所を全角で書けとなっていて、全角数字の入力のしかたがわからず、 申し込むのをやめた事があるよ。 英数を全角で入力させる、あるいは表示しているページ、最低。
59 :
774ワット発電中さん :2013/02/23(土) 21:17:48.95 ID:TZrrDTIx
>>307 言えてるね。
英数を全角で書くと、何か嬉しいことがあるんだろうか?
PICの場合、有料Cと無料Cがあるから。 お金持ちなら迷わず有料C。 社会人時間なし金なし初心者は、サイズが大きくなって冗長度が増すけど、無料C。 学生なら時間はあるから、PICのアセンブラくらいなら覚えられるんじゃないか?
ちなみに、変数に漢字が使えるCコンパイラって、あるの? if( 月==4'd2 ) begin 季節 <= 8'h4e; end else begin 季節 <= 8'hff; end
>>61 PICでは使えないが、変数に漢字はJavaなら使える。
半角全角厨はいい加減時代に取り残されてることを自覚するべき。
63 :
774ワット発電中さん :2013/02/24(日) 04:33:49.89 ID:UvgHqe8q
>>62 おお、使える言語があるのですか。
すると、
金額 = 単価 * 数量;
みたいな感じで出来るのでしょうか?
64 :
44 :2013/02/24(日) 09:05:20.64 ID:xzO9jko/
>>44 みたいに、
if → もし (ならば)
and → と、
for → が 〜まで
:
:
てのにしたの作ってよ。それで小坊が凄いの作ったりして‥
なでしこって言語はどう?
66 :
64 :2013/02/24(日) 10:14:51.84 ID:xzO9jko/
たしか、いつだかの時代AIってのあって、普通に人が使う言葉を機械がわかる(って用途だっけ?)って工学あったような。 その場合例えば、 主モーターはどの保護SWが作動しても必ず緊急停止する。 なんてでいけるとか。 でも、その作動ってまずいことの時OFFになるのが多いけどモノによってはONってのある。 あと必ず停止っても、いずれ止まればってことで別タスク終わってからとか‥ 『すぐに』で__ATT なんて宣言になる?
ロゴライターとかもあったな 小学校のpc98かなんかに入ってた記憶が
68 :
774ワット発電中さん :2013/02/24(日) 10:21:26.39 ID:mAnhKjLJ
久々にPICやっているがxc8成るものが出たんだね。 c18とほぼ同じだからスラスラ行けるかとおもいきや EUSARTの読込の割込の仕方がわからない状態です。 _asm→#adm , _endadm→ #endasm に変わったのは良いですが #pragma code high_vector=0x8 #pragma interrupt high_isr #pragma code low_vector=0x18 #pragma interruptlow low_isr 辺りをどう変更したらいいのやら…。 関係ないと思いますがPIC18F4550使ってます。 c18を使えばなんの問題もないのでしょうが、新しい方でトライしたい気分です。 もしよろしかったらご教授頂けないでしょうか?
これからXC8です。便乗です。仕様の違いがわかる方なら平気なのでしょうが、 やっとCを勉強したところなので不安です。XC8のリファレンス資料ってあるのでしょうか。
70 :
774ワット発電中さん :2013/02/24(日) 11:01:20.64 ID:mAnhKjLJ
71 :
774ワット発電中さん :2013/02/24(日) 12:10:25.67 ID:mAnhKjLJ
68,70です。 きちんと割込かかりました。 その他周りのロジック合わせて作りましたが、上手く言っている感じです。
>>63 JavaならUnicode使ってそんな感じで書けるよ
やってみたら、結局、英数字でいいやって思うと思うけど
>>70 リンク先のソース、タイマーとかの設定前に『GIE=1;』としてるのが気持ち悪いな。
まあ、PIC内部ではリセット直後の割込み許可は全てOFFになってるんだろうが。
>>70 69です。ありがとうございます。文法をざっと理解して、これからMPLABXなので覚悟します。
英文で情報量が多いと私は日本語のようにざっと目を通せないので辛いですね。
PICアセンブラの経験しかないので最初はサンプルを試してと思ったのですが、
HI-TECH Cコンパイラのフリー版はPICC Lite からPRO、XC8と変わってきたようで(違っていたらご指摘ください)
しばらくエラーと悪戦苦闘になりそうです。
今更とは思うけど英文ユーザーガイドは インストールされたフォルダの XC8>v1.xx>doc>manual.pdf ざっと見た所ヘルプとたいした違いはなさそう
私も最近xc8でCを始めたんだけど、ネットで見つけたプログラムが main() { OSCCON=0; PORTC=PORTA=0; while(1){ TRISA=0x1F; TRISC=0x0F; RA5^=1; __delay_ms(JIKAN); と、アセンブラとは違ってピン設定がwhile(1)の中にあるってなんか 変な感じがする。これでいいんだろうか?
>>76 問題はないかもしれないが、無駄。
アセンブラとかC言語とかには関係ない。
78 :
774ワット発電中さん :2013/02/25(月) 14:34:22.09 ID:/Q3vG5ty
>>76 main()を、} で綴じて欲しい。見るたびに気になる。
main() 以前にループが閉じてない。 次の行に break があったりしてな ミ'ω ` ミ goto?
80 :
774ワット発電中さん :2013/02/25(月) 18:21:11.29 ID:Z4Vib50V
初心者さんが来てくれてよかったね
81 :
774ワット発電中さん :2013/02/26(火) 21:48:26.46 ID:D1lNbjO+
フレームワークって、活用してますか
今までアセンブラでやってきたんですが、今度xc8を学ぼうと思ってます。 c言語っていろいろあってなんか混乱してます。 xc8が学べる本、サイトを紹介してください。
84 :
774ワット発電中さん :2013/02/27(水) 13:32:21.08 ID:B/QMeRlA
もうアセンブリには戻れんであろうが、 ちょくちょく逆アセンブルして出たコードを眺めるだろうなあ ミ'ω ` ミ 実行回数の多いループ部分とか、 シフト回数が切り替わるプログラム: a = b >> n とか、どうコンパイルされるか気になるはず。n が 1, 4, 7 の 3 通りの値しか とらない場合、break の無い switch 文で順に下へ落ちて行くように書いて 得するかな、とか。
>>83 ありがとうございます。
なるほど、XC8で書かれたプログラムは検索しても見つからないんですが、
HI-TECH Cで検索するといっぱいありますね。
これは、XC8向けの入門書書いたら、ぜったい売れるとおもうな。
XC8 とHI-TECH Cはかなり違うようだから。
XC8(HI-TECH C も?)は、switch - case 文使うと稀に、 can't find 0x410 words (0x410 withtotal) for psect ”swtext1” in segment ”CONST” とかいう原因不明なエラーがリンカーで発生する。 単純なswitch - case で発生する事もあるし、 複雑なswitch - case でも発生しない事もある。 早く直して欲しい。
PIC(C言語)初心者で、3*3のLEDキューブを作っていまして、ランダムな数字を発生させる時に、 欲しい範囲の乱数を発生させることが出来ずに悩んでいます。 0から9の乱数なら a = (((double)rand()) / 32768.0) * 10.0; で良いと言う記述をググって見つけたのですが、 自分の場合、0から3と0から7の種類を作りたいのですが、 単純に上記の式の *10.0を4と8にしてもうまく行きませんでした。 C言語自体初めてなので、考え方に困っております。 mikroCを使っています。 お詳しい方のアドバイスなど、よろしくお願いします。
10.0でうまくいったの?
char a; a = rand(); a = a / 256 * 8;
>>88 剰余の計算で求めるのはどうかと
char a;
a = (char)(rand() % 4)
>>88 0から3
a = rand() & 3;
0から7
a = rand() & 7;
RAND_MAX気にしないなら↑でいけるだろ。
PICのrandって偶数奇数が交互に出たりしない?
皆さま、レスありがとうございます。 現在の回路では、RA0からRA3までとRB0からRB7までのポートを使っていますが、 ネットで見かけた、上に書いた式では、当初*10.0のところを変えても無理でしたので、 *10.0でもしましたがうまく動きませんでした。 アドバイスを頂きました式を使って試して見ます。
アセンブラの場合は「時間」をつくるのに計算でかなり正確な時間を作れました。 しかしxc8では__delay_ms(); 関数でつくってもそうとうな誤差がでます。 みなさんこうゆうのはどう対処してるんですか。
そりゃあアレよ、「アセンブラで作る」
Z80 で、途中どう分岐しても同クロック数でもとに戻るループを作ったなあ。 Z80 の場合、NOP だけで調整しきれないから、一つ先に跳ぶジャンプ命令などの 「意味無ぇー」 命令を組み合わせたなあ ミ'ω ` ミ
割り込みピンの設定はINTE(RA2だけ)とRAIE(それ以外のPORTA)の二種類 ありますけど、なぜRA2ピンだけ独立してるんですか? おしえてください。
横からでスマソ。
>>92 の
a = (char)(rand() % 4)
ってどういう意味?
charって、文字変数って事?
>>101 括弧で囲まれた型名を付けるとその型で代入される
rand()の戻り値の型が何か知らないけれど、
aの型がchar型なのでrand()の戻り値をchar型にしてaに代入するって言う意味
型を意識しないコーディングはバグが含まれるので意識するべし
「キャスト演算子」で検索するとよろしい
ちなみにchar型は文字変数と思わないほうが良い
-128〜+127の値が代入出来る8bitの型
ASCIIコード一文字が収まるからchar型としているだけ
unsigned char とすれば0〜255までの値が入る型でBYTE型と同じ
charにunsignedってあったっけ? ハナから0〜255と思って書いたが
105 :
774ワット発電中さん :2013/03/02(土) 08:18:27.73 ID:S5YcEzgt
ソフトウェアのランダムは疑似だし。 アナログ入力値を利用するとランダム性(?)があがる。
ド素人だから仕方が無いのかもだけど、AD入力を使うと、ランダムである事を保証する事は難しくなる 所詮、ド素人の脳内アナログ技術なんて知れてるからな。 少し勉強すれば数学的に解決出来るし、その方が評価もし易い。 いずれにせよ、「ソフトウェアのランダムは疑似だし。」とかほざく前に評価の技術を身に付けて ほんとに使い物にならない関数なのかが評価出来る程度には、勉強したほうが良い。 その上で、使い物にならないのであれば関数を自作すればよい。簡単な演算で十分なランダム性を確保出来るはず。 評価の技術を身に付けずに「アナログ入力値を利用するとランダム性(?)があがる。」とか知ったかしてると 実際は全然一様でない、擬似乱数にも遠く及ばない関数を、後生大事に使って疑わないようになる。
スルー力
108 :
774ワット発電中さん :2013/03/02(土) 14:50:48.65 ID:GDbCBQ+Z
船橋さんこんにちは
109 :
774ワット発電中さん :2013/03/02(土) 16:23:26.10 ID:rY5akTmk
>>104 >charにunsignedってあったっけ?
>ハナから0〜255と思って書いたが
特に何も指定してなければ、charは+/-128 というか、-128〜+127だよ。
なので、間違わないように、僕はいつも、
unsigned char aaa;
signed char bbb;
と符号まで含めて書くようにしている。
間違いがグッと減りました。
>109-110 処理系によるから符号の有無を明示的に宣言すべし、では?
12f1822です。 内部のシステムクロックを32MHzとする場合、8MHz×4とするようですが、timerのクロックはこの場合8MHzで動くということでしょうか?
Foscは32MHzになるよ
XC系だと char は signed char 扱いなんだな
16F716を使っているのですが、RA4のオープンドレイン端子にVDDとの間を100kΩでプルアップした上で圧電ブザーを接続しました。 プログラムの方は、単純にRA4を119usオンにして119usオフにするのを無限ループしています。 電源を入れても音が出ません。そこで、目で見て解るようにブザーの変わりにLEDにしてオンオフタイミングを少し長めにしてみると点滅を確認できました。 もう一度圧電ブザーに戻して上記周期で実行するとやはり音が出ません。555ICで作った発振器に?ぐと音がなるのでブザーが故障ではないようです。 オープンドレインの端子で圧電ブザーは駆動することは出来ないのでしょうか?
>>115 試しにだけど、プルアップ抵抗は無しにして、VddとRA4間に圧電ブザーをまんま繋いでやってみてください。
オープンドレインは基本的にはシンクでドライブするものだと思いますしおすし
>>116 基板に半田付けしているので、すぐに出来ませんが明日試してみます。
シンクでドライブと言うのは、グランドに繋がっている or 浮いてる(絶縁)と言う事ですよね?
用語からして知らないことが多いので調べながら工作しています。
圧電ブザーはプッシュプルで使うのが原則
>>117 ここでいうシンクはVdd側から電流を吸い込む接続の事で、ポート出力をLOにしたときにVddからポート方向に電流が流れ込みます。
逆の回路はソースで、ポート出力をHIにするとポートからVss(GND)方向に電流が流れ出します。
オープンドレインでは当然ソース電流は流せないので…
>>118 インダクタ入れるとさらに効果的
100kΩ→1kΩ
>>104 この様な混乱が無いように
ANSI,やISO,JISでCの言語仕様が
定義されていて、
charは、符号付き8bitと決まっている。
typedefや拡張仕様で符号なし8bitを"byte"型として
作られている事はよくある。
>>115 音が出るか出ないかだけなら、その試しにつけたLEDにパラで圧電ブザーつけると鳴るでしょ。
俺もてっきりcharはsigned charだと思っていた 間違いを指摘するのは良い事だろうけれど、 馬鹿呼ばわりするのは船橋さんと同類の人間なのだろう 本スレ行ってくれ
115です。 無事に音が鳴りました。 ただ、100kΩ入れていたところ手持ちの小さいのが10kΩしかなかったので、 変えてみたところ、音量的にも大きくなりました。 100kΩでは電流量の関係か、振動子に働く力が弱かったのかもしれません。 圧電ブザーの仕様では30Vpp以下との事で555ICでは鳴ったのでPICでも大丈夫と思っていましたが、 回路ごと適正に部品を使わないといけないと再認識しました。 ありがとうございました、
初めてのPICマイコン。秋月2550マイコンボードとpickit3を買ってきたけど、 LEDチカチカすらできない、質問するにも何を聞けばいいのかすらわからない……。 泣きそう。
お客様の中にエスパー様はいらっしゃいませんか〜?
>>127 PICkitから電源供給できるようチェック入れるんだ!
130 :
774ワット発電中さん :2013/03/04(月) 02:21:29.99 ID:IcsHCaBL
Package in zipって有ったから選んでみた。プロジェクトはこんな感じ。
ttp://www.dotup.org/uploda/www.dotup.org4005399.zip とりあえずビルドは通っていて、書き込み・ベリファイも
Programming/Verify complete
って出るから上手く行ってるんだろうけど、RA0に繋いだLEDはうんともすんとも言わず。
吸い込みにしても吐き出しにしても全く光らず。
何か勘違いしてるのかどこか悪いのか日頃の行いが悪いのか……。
>>129 なぜかそこは気づいており、ボード上の電源ランプだけは煌々と輝いてます。
>>130 おおぉ、点滅しました!
てっきり、なにか設定とかが間違ってるのかと思ったら、ソースコードをそのサイトコピペしただけで点滅しました。
ソースのどっかが悪いとはっきりしたので、落ち着いて見なおしてみます。
ありがとござました。
>>127 すごいね。いきなり18F2550からはじめるんだね。
>>134 目標がUSBマウスだったので選んでみました。
なんか難しいヤツ選んじゃったのなら、また泣きながらここ来ます。
18F25K80がpickit3で焼けない・・・ そもそもデバイス選択肢の中にないということは未対応ということか?
>>136 IDEでもpickit3programmerでも、選択できると思うけど?
自転車のディスクブレーキに付いてるディスクの穴をフォトインタラプタでカウントして 速度表示するサイクルコンピューターを作ったら面白そうだなと思ったんだけど 俺、ディスクブレーキ付いてる自転車持ってねぇ
>>139 むしろハブダイナモで動作し、ハブダイナモの周波数をカウントするサイクルコンピュータをずっと考えてる。
スポークを数えれば・・・
タイヤに小さい磁石を張り付けて磁場センサで読み取る製品があった気がする
>>139 自作だから自由で良いけど、メリットがあまりない気がする。
汚れて終わり
自作だから昨日は付け放題
こうゆう簡単なテストプログラムがあります。 main() { PORTC=PORTA=0; while(1){ TRISA=0x0F; TRISC=0x0F; RA5^=1; /* RA5ピンの出力をトグルする */ __delay_ms(JIKAN); /* JIKANミリ秒待つ */ } } ところがRA5^=1;をRA4^=1;にかえるとRA4が点滅せずつきっぱなしになります。 なんでなんだろ。
>>138 pickit3programmerでは18F25K22の次が18F26K20なんですよ。
18F26K80はあるというのに。IDEはfail to connectになってますけど
そちらから対策した方が早いかもしれませんね。どうも私の問題の
ようですので・・・
>>146 RA4がオープンコレクタだからとかなんだろうなぁ・・・
>>146 まずどの型番のPICなのか教えて欲しい。
TRISAに0x0fが指定してあるけど、その意味については理解してるだろうか。
>>148 オープンドレインで点灯しっぱなしになる接続ってどんなのだろう…
>>146 ANSEL 設定忘れが一番ありがち。
あとは、入力専用pinとか。(RA4が /MCLRと共用のは無かったかな?)
何でループの中でTRISAとTRISCを設定するんだろ
>>155 なんかの刺激で設定が外れてしまうこともあるんで、こうすると安定するらすい。未確認だけど。
そんなに不安定じゃ使い物にならないよ。おまじない的な物は排除しても ちゃんと動くようにしないと。
誰がそんなこといったんだろう
>>157 Baselineだったら、TRISx レジスタが専用命令で書き込み専用だから
不安になるかも、だけど。
それから使わないピンは TRISA=0x1F; と入力ピンに設定するようだけど、意味があんだろうか。
使わないピンを入力にする場合、オープンにしちゃいけないってばっちゃが言ってた。
うむ。貫通電流おそロシア。。
>>161 つまり使わないピンは出力ピンにしとけ、ってことだよね。
使わないピンを入力にしてりゃ不安定にもなるわなw
別に入力にする事自体は問題無いと思うけれども。
sleepの説明には入力をVDDかVSSに接続しろと書いてある
そりゃそうだ。貫通電流おそロシア。
168 :
774ワット発電中さん :2013/03/08(金) 08:37:45.79 ID:iuRq9EDb
またはアナログ入力にしとく。
12F1822のRA2入力ならシュミットトリガだから放置でいいのかな
シュミットだけでは免罪符にならない
でも同時にONしないから貫通電流気にしなくていいでしょ?
現在PICを使い始めてLチカに取り組んでいます。 現在、6個のLEDでフラッシャーと言うのでしょうか、右へ左へと順番に点灯させるのを 全ポートを上書きで書く方法と、左シフト、右シフトを使う方法で書く方法で実験してみました。 (mikroCで書いています) 残照が出るように海外ドラマのナイトライダーの様に流れるような点灯をしたいのですが、 こう言った点灯方法のプログラムの書き方が思いつきません。 ググッても参考になる所を見つけることが出来なかったため、こちらで質問をさせて頂こうと思いました。 お詳しい方のアドバイスなど頂けましたら幸いです。
ほわぁっと消えるように、PWMデューティーをじわぁっと変える関数なんか を一個つくってやればいいじゃない? んでもって、その関数には、光らせるポートを指定する引数なんか持たせておいて。。 うん、何いってっかわかんねぇなw
>>172 もうすこしまじめに考えると、6ポートを順々に点灯させるようなループを作って
それぞれのポートをONする時間をずらしていけば、いける気がする
PWM使わなくても、ダイナミック点灯駆動で、ON時間を変える感じ
隣に移る時に、若干の時間、ラップ挿せるようにすると、品が良くなる。
ゆっくりと移動しているのに残照させるにはPWMデューティー比を変えていくか 各LEDを放電回路として構成する必要があると思う
178 :
774ワット発電中さん :2013/03/12(火) 11:18:30.13 ID:772Z5uN8
電球チカにすればいい。デフォでそう光るよ。
180 :
774ワット発電中さん :2013/03/12(火) 13:51:28.67 ID:ttTeRqCf
割り込みが必要じゃない? ちょっと面倒そう。
delay関数しか使えない人にとっては面倒かもしれないが、一度使ってしまえ ば割り込みを使った方が楽。
任意の明るさで点けるだけならこれぐらいのもんだし割り込みなんて要らん for (;;) { for (int i = 0; i < 100; i++) { for (int j = 0; j < 6; j++) { ledSwich(j, ledBright[j] > i); } wait10us(); } }
皆さん、レスありがとうございます。 一工夫が必要な処理なのですね。 しかし、レスを頂いた内容から幾つも答えがあるようなので、もう少し自分でも考えて見ます。 チップは16F716を使っていますので3つの出力でPWMは使えるのですが、 6個の出力のLED全てにPWMが使えないのでソフトで組むしか無いのですね。 割り込みに関しては、次のステップで7セグで数字の表示の時にを勉強しようと思っていましたが、 予定を早めて勉強してみます。 アドバイス ありがとうございます。
Lチカって組み込みマイコンのハロー・ワークってことでいい?
>>178 こちらのHPを見ていて2つ疑問があるのですが、
ポートの指定が「PORTB.F1」の様にFで指定していますが、
参考にしている書籍などで「PORTB.B1」の様にBで指定してる物があるのですが、
mikroCのバージョンによる違いでしょうか?
もう一つは、HP内のプログラムの記述についてですが
「LED2 = (pwm_cnt <= led_cnt[1]) ? ON : OFF;」と言う書き方ですが、
LED2は pwm_cnt <= led_cnt[1] の条件に合っていればON 条件に合わなければOFFとの理解でよいでしょうか?
よろしくお願いします。
>>184 ちょっとだけ違う
Hello world(ハロー・ワールド)
>>185 ?演算子は、真(0以外)なら、:の前側の値、偽(0)なら、:の後ろの値になる。
>>184 Lチカもできない人には職を紹介できません、と読んでしまったw
Lチカは
なら、ロマンチカで
Lチカはconfig、クロック、I/Oポートなど基本的な設定の確認ができるので 慣れたチップでも最初に必ずやっている
XC8でコンパイラすると OPTION = 0b10000000; OPTION-REG = 0b10000000; でエラーがでます。これどう書いたらいいんですか。
>>191 OPTION_REG = ... ;
--
ちなみに アドレスマップに OPTION , TRISx レジスタが存在しない
BaselineのPICでも、同じように代入形式で書ける。
OPTION_REG = やってみましたが、やっぱりだめでした。
>>193 質問にPICの型番もソースの全容も書かれていないので、
>>192 さんの答え以外はどこが原因なのか推測ができません。
defineしてないんじゃないの?
>>193 だめでした、じゃなくて。
せめて表示されたエラーメッセージくらい教えて欲しいな。
これあかんやつや
やっぱりだめでしたって、初めからあきらめてる
>>193 最初に
#define <xc.h>
入れてますか?
>>199 回答ありがとうございます。
入れてます。
>>200 すまん
#include <xc.h>
だった。
>>191 だけど
OPTION = 0b10000000;
のエラー問題は以外に難しいんだね。アセンブラならなんのお問題もなく書けるんだけど。
>>202 ヘッダファイル読んでレジスタがどういった名前で定義されてるか確認しましょう
アセンブラと同じとは限りません
>199,200,201の流れは質問者が何も確認していないことを はっきりさせる、高等テクニックだな
>>205 > はっきりさせる、高等テクニックだな
どうゆう意味?
そういう意味
自分でもわかってないんだな。いちゃもんつけたかっただけか。
しかし、picやる人は心がやんでるね。何があったんだ?
天気もいいし出かけるとするか。さくらも咲き始めたみたいだし。
情緒不安定の人は連投しやすくなるそうです
回答に値する質問者かどうか確認は必要だな。 暖簾を一生懸命押したくはないもんねw。
>>212 > 回答に値する質問者かどうか確認は必要だな。
賛成!
同時に回答する能力があるかの確認もね。回答が文句だけってのもめげるわ。
文句だけしか書いてないなら読み飛ばせばいいだろw
そそ。かかわらないのが正解。
桜はまだですか? つぼみでしょうか
桜が咲くのは、7週間後くらいかなぁ
218 :
774ワット発電中さん :2013/03/19(火) 18:46:05.29 ID:hS79JcIl
僕は、それまで持たないかもしれません。
GR-SAKURAもう咲いていますが。 40PINのPICでもつなぎますか
あのレジストの色は・・・・
そう、一面満開の桜色………
PICスレで質問しましたが、初心者すれが有るだろってことで、誘導されたのでこちらでも質問させてください。 使う奴は16F883です。 外部発振でかかれたアセンブラの文ですが、折角なので内蔵オシレーターを使いたいと思い、プログラムを変えたいと悪戦苦闘してます。 下記構文のコンフィグを変えて、発振の設定を入れなければならないまでは理解しましたが・・・ LIST P=PIC16F883 INCLUDE P16F883.INC __CONFIG _CONFIG1,_HS_OSC & _WD T_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_ OFF & _DEBUG_OFF __CONFIG _CONFIG2,_BOR21V & _WR T_OFF ERRORLEVEL -302 これをどのように変え、オシレーターの設定の文を教えて頂けませんか?
>>222 _HS_OSCを_INTOSCにすれば内蔵オシレーターに切り替わります。
データシートとP16F883.INCを見て確認してください。
\r\nじゃなくて\nだけでも改行が上手くいくと思ってたorz 久しぶりにPICを扱ったから、ターミナルで行がずれていく意味が分からなかったww そりゃ改行されたその下から文字書いてたらずれて行くように見る罠…。
今の人はCR、LFも知らないのか。
TeraTermなら 設定(S) → 端末(T) → 改行コード で設定できる。 その他の端末ソフトでも似たような機能あったりするだろう。
>>225 昔(っても1年ぐらい前に)組んだプログラムで思い出して、今回は
>>224 みたいに上手く行ったんだけど、
たとえばWindowsやMac、Unixその他OSで完全に改行頭出しをさせたい場合はCR、LF(\r\n)で大丈夫なの?
たとえば無理ならそういう仕様ですから、で済ますのも当然ありなんだろうけど、なんかこう釈然としない。
デフォで各OSのターミナルソフトで上手く動いてくれる仕様にならないものか…
各ターミナルソフトの設定があんなに細かいのは仕様がバラバラだからって事でもあるんだろう
>>228 やっぱりそういうものなんですかねぇ…。
とりあえず色んなOSで試す機材も無いことですし、Windowsで動くように組んでから考えます。
ありがとうございます。
VMware Playerの方が良いよ
・安定性 ・パフォーマンス ・リリースポリシー Virtualboxはこの辺ダメダメ
>>231 最近のVMwareは、バナーが気持ち悪いので、不要な時は出来るだけ使わない様にしてる。
windowsを動かすにはVMwareの方が良いが、linuxなら問題ない。
>>233 両方使ってみてwindowsの起動がvertual boxのほうが体感的に倍ほど速かったので長らくvmware playerを使ってなかった。
そんなに良くなっているのか。
あっちのPICスレは、性格の悪いジジイばっかりだな。 教えたら成長がないからデーターシート読めだとか、 そんな素人設計は信頼性無しだな!とか、 のノイズしか発していないよ。 彼らは、何一つ教えたことないし具体的な話題になると、怒り出す。 何も知らないかボケてるんだと思う。
237 :
774ワット発電中さん :2013/03/27(水) 12:41:19.83 ID:S85pJI/B
>>236 でも、あなたの文体は、あっちのスレでよく見かけるね。
あっちでは論破されまくりだから逃げてきた
あっちもこっちも、いる人間は同じだろ
質問者はろくな回答がないと言い 回答者は質問の仕方が悪いと言い 結局お互いののしりあうだけの、やがて悲しいPICのスレ。
だからといってPICが無くなる訳じゃ無し。 全然問題ない。
AVRのスレみるとそれほど荒れてない。 これはAVRの関係者が答えてるんではないのかな。だとしたら普及のためにはいい作戦。 PICスレが荒れてるのはMICROCHIP社が援助しないからだよ。 だれか暇な人をまわせば簡単に回答ができるはず。そうすればPICも売れるし、会社も儲かる。
はいはいすごいすごい
>>240 >質問者はろくな回答がないと言い
>回答者は質問の仕方が悪いと言い
質問者は直接の正解が欲しくて、回答者は正解へたどり着く方法を答えてるから相容れないんだろうね。
>>243 言いたいことがあったらはっきり言ったほうがいいよ。その言い方じゃ意図が伝わらないから。
伝わってまーす
>>240 日本全体がそんな感じでね? 海外フォーラムで質問した方がええ。 日本人は異常だ。
250 :
774ワット発電中さん :2013/03/28(木) 17:20:59.40 ID:4O3v0zQm
>>249 わずかだが、AVRを使う人もいるよ。ちょっと変わり者だが。
大学のマイコン実習はAVRだった
>>250 いや、俺も使うんだけど、周辺機能とかサイズのバリエーションが圧倒的にPIC優位
なので、どうしてもPICを使うことが多くなる。
コアの優劣なんて団栗の背比べだしな。DSP乗ってて楽しいし。
253 :
774ワット発電中さん :2013/03/28(木) 19:12:02.94 ID:GBeGEhf8
>DSP乗ってて楽しいし。 それは言えてるね。PICのほうが、アプリケーションを考える幅が広い。
C言語で、TRISBの特定ビットをOFFにしたい場合、 どうやってやればいいですか? 今は、たとえば w = TRISB; w &= 0xfe; TRISB = w; とやろうと思っているのですが、 RB0 = 1; くらい、簡単な書き方はないですか?
255 :
774ワット発電中さん :2013/03/29(金) 07:15:05.76 ID:JhUsbGpi
>>254 XC8 だと、ヘッダーで unionや構造体が定義されてるので、
TRISBbits.RB0 = 1;
とか書ける。
>>254 特定のbitを setしたいなら、
TRISB |=0b00000001
clearしたいなら
TRISB &=0b11111110
とかが普通かな?
勉強になるわ。ウンウン
>>257 ヘッダーファイル見ていると、
TRISB0 = 1;
でも良いみたい。
あ、そうなんですか。 他人のコードはたくさん見ているのですが、初めて見る記述です。 簡単そうで助かります。ありがとうございました。
>>260 普通 入出力設定は、ブログラムの最初で一回するだけだから、
TRISB = 0bxxxxxxxx;
な感じが一般的と思う。
0b という時点で既に一般的じゃない C言語標準ではなく、コンパイラの拡張表現だから
>>261 話の流れを無視してる上に、読み間違えてる?
264 :
774ワット発電中さん :2013/04/05(金) 04:02:45.67 ID:Wr7Ki1x+
0bは、確かに便利。標準になればいいのに。
某カーネルソースでは #define BIT(n) (1 << (n)) set a |= BIT(n) clear a &= ~BIT(n)
>>264 8ビット限定なら、とりあえず
#define B00000000 0x0
#define B00000001 0x1
...
#define B11111111 0xff
とかヘッダファイルを作る。雰囲気出したければ
#define Ob01011010 0x5a
とかやる。(ゼロビーでなくオービーなw)こんなプログラムで。
#include <stdio.h>
int main(void) {
int i, j, k;
char s[9];
s[8] = '\0';
for (i = 0; i < 256; i++) {
for (k = i, j = 7; j >= 0; k >>= 1, j--) s[j] = (k % 2 == 1)? '1': '0';
printf("#define B%s 0x%x\n", s, i);
}
}
出力をb8.hとかに保存して
#include <stdio.h>
#include "b8.h"
int main(void) {
printf("%x = %x = %x\n", 0xf3, B11110011);
}
でテスト。
>>266 あ、ラスト間違ってた。
printf("%x = %x\n", 0xf3, B11110011);
スマソ。
2進←→16進 くらい頭の中でイメージできるようにすれ
>>264 少なくとも、組み込み用のC言語では標準にするべきだな。
-----
パソコン用だと、デバイスドライバー屋さんしか使わなそうだけど。
などと自作自演を続けるのであった。ごくろうさん。
1/0が8個並ぶと見難い 16進の方が書く時も見直す時も間違いにくい
間に_をかませる仕様なら完璧
>>272 0b.. の方が、bit単位に意味が有るのが分かるから良い気がする。
>>273 さすがですね。Verilogは、それが出来ますよね。
1111_0000_1010_1100 とか、4bit毎でなくてもOKで、
1_11001_0_11_01_00001101 とかもできちゃう。とても素晴らしい言語仕様です。
(begin end 以外はね)
PIC16F883をI2Cのスレーブにて使用しているのですが何らかのタイミングでSSPが エラー状態になったまま復帰しなくなる事が有ります。 PIC12F1822やPIC16F1938ではSSPCONを一度初期状態に(clrf SSPCON)して 再度設定しなおせば復帰するのですがPIC16F883ではエラー状態を維持したままに なってしまいます。 I2C関連のソースはmicrochip社のサンプルコードAN734とほぼ同じでState 3,State 4に バッファ(自アドレス)読み込みを追加しただけです。(これを追加しないとマスタに対して送信できない) 何か上手く初期化する方法はありますでしょうか? AN734ではエラー発生時はgoto $でWDTを当てにしているようですが初期化に10秒以上かかり マスタとの通信はスレーブ(PIC)に対し一定周期での書き込みが主で読み落としが有っても 問題ないので出来ればWDTによる再起動を避けたいと考えています。 色々I2C関連の情報を探したのですが、うまく解決方法が見つけられませんでした。 よろしくお願いいたします。
>>276 goto $する前にWDT周期を短くすればリセットはすぐかかるけど、リセット
がかかってから初期化に10秒もかかるならだめだね。
State4で自アドレス読み出せるの?
>>277 やはりWDTですかね…
10秒かかるのはDCブラシレスファンをPWM制御していて
最高回転数を読み取るために10秒程度100%で回す為に必要なのです
マスタからは回転数に対する割合(255で100%)が約100mSec間隔で届くので
少々読み落としても問題ないんです
趣味で使う物なのでちょっと高い16F1938に変えてしまうでも良いのですが
最近PICを触りはじめたので基本的な方法で解決できるのかなと
思い質問しました
Stage4では自アドレス読み込めませんがマスタへのトランスミットのコードを
共通化したのでバッファ読み込みを追加したと書きました(変な書き方ですみません)
WDTでリセットした場合は初期化の処理を変更する手はあるが
>>278 I2Cを使いこなせないだけだろ。
シリアルにすれば?
1ピンで済むし
281 :
774ワット発電中さん :2013/04/11(木) 09:10:43.67 ID:/Gmglt4H
282 :
774ワット発電中さん :2013/04/11(木) 13:04:17.03 ID:obinSyTU
>>281 点がなくても普通に読めるよ。
意味がわかんないだけで。
それ、は、よかっ、た。
284 :
774ワット発電中さん :2013/04/15(月) 23:03:12.40 ID:2e+Xo9r1
マイコンのマの字も知らないような私がライントレースカーを作ることになったのですが、 マイコンを注文する際の必要なピン数が分からないのですが どうすれば分かるのか教えていただけないでしょうか
>>284 とりあえず dsPIC33EP256GP502 あたりを買っとけば間違いない。
>>284 AVRのスレで親切に答えてくれた人がいるのに、本気でやる気があるのかな?
部品を注文する前に、仕様を決めて大まかでも回路図を書いてみれば、必要なマイコンのピン数がわかるだろ。
ライントレーサーだから、DCモーターを 2個回すとしよう。正逆転させるならモーター 1個に 2ビット必要だ。モーター 2個なら 4ビットだ。
モーターの回転数か移動距離を知る必要があるなら、モーター 1個につきフォトインタラプタかフォトリフレクタ 1個必要だ。モーター 2個なら 2ビットだ。
ラインを検知するためにフォトリフレクタを使うとしよう。 2個以上必要だ。 4個使うとして 4ビットだ。
ここまででマイコンの IOポートを 10ビット使う。
他に追加したい機能があればその分の IOポートを追加するといい。
>マイコンのマの字も知らない
のなら、マイコンのライタも持っていないのだろうから、AVR や PIC より、秋月で100円のR8C/M12 のほうがライタ不要だし、いいんじゃないの?
値段が少し高くていいなら ARMとかルネサスの 32bitマイコンなら、さらに書き込み簡単だ。
買う前にマイコンのマニュアル・データシートをよく読んで自分で使えるか判断してね。
288 :
774ワット発電中さん :2013/04/16(火) 14:03:35.14 ID:I/01YFBI
picit4が出るんだって?
picitなの?
290 :
774ワット発電中さん :2013/04/16(火) 14:30:50.11 ID:okIWmrwg
あげ足取りは嫌い
>>284 PICで探すならpickit2か3でデバッグガーが動くICDが内蔵されたPICを選んだらよいかと思う。
ソーストレース出来ないと外部部品のテストだけで手間がかかるよ。
初心者にお薦めは初期化ライブラリーが
自動で入ってくれるIDE開発環境があってPWM等のライブラリーが無償で、
プログラム容量や処理能力を気にせずに組めること。
ARMのSTM32F103とかが乗っている基板がお手軽で良いかなと思う。
CPUボードはデバッガー機能付きで1500円ぐらい。
デバッガーの無い基板ならST-link等のデバッガーが必要で3000円ぐらい。
ラインから外れた距離を求めるのに三角関数が欲しい時もあるかもしれないが32ビットCPUなので数倍速い。プログラムメモリーも100kbyteある。
但しSTM32は、3.3ボルト動作なので5vの周辺との信号には信号レベルコンバーターが必要になります。
8ポートのコンバーターでDIPに変換付きのが秋月で250円
MPASMの擬似命令って積極的に利用すべき?それとも逆のほうがいい? BANKSELとかCBLOCKとかRETLWの代わりにDTとか
使って問題になる場合が思いつかない。
手間やミスを減らすために積極的に使うべきといってみる
MPASM以外にプロジェクトを移行させたとしても、擬似命令をマクロで代替できれば大した問題ではない。
296 :
774ワット発電中さん :2013/04/23(火) 22:38:01.01 ID:QMMaFl2B
知人に16F877AのCCS-Cで書かれた プログラムの改造をお願いされたのですが 有料Cコンパイラが高い為、 MPLABX IDEとXC8をDLして移植しようとしています。 試しにLEDチカチカを試そうとしたのですが _delay関数がうまく動かず、 LEDがつきっぱなしになるか消えっぱなしになるかで 途方にくれています。 テスト回路としては、外部発振子で10MHzをつないでいます。 何か、助言をいただけないでしょうか。 つきっぱなしの時のソースを貼り付けておきます。 どうかよろしくお願いいたします。
297 :
774ワット発電中さん :2013/04/23(火) 22:40:03.11 ID:QMMaFl2B
#include <htc.h> // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define Amode 0xFF //port A initial mode, all input #define Bmode 0 //port B initial mode, all output #define Cmode 0x0F //port C initial mode, high 4bits output #define Dmode 0 //port D initial mode all output #define _XTAL_FREQ 10000000 void initializing() { CMCON = 0x07; OPTION_REG = 0x81; TMR0 = 0x01; T0IE = 1; T0IF = 0; GIE = 1; PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; PORTE = 0x00; TRISA = Amode; //all input TRISB = Bmode; //all output TRISC = Cmode; //in and out TRISD = Dmode; //all output } void main() { initializing(); while(1){ _delay(1000); RD0 = RD0^1; } }
>>296 _delay(1000); は NOP 1000個分のwaitにしかならない。
__delay_ms(1000); とかにする必要ある。
296です。 レスありがとうございます。 __delay_ms(1000)などやってみたのですが、コンパイルエラーになってしまいます。。。(syntaxerr) ちなみに、_delay(1200)などとすると消えたままです。
関数呼び出しでsyntax errorは変じゃない? そんな関数知らないよって言われるならまだわかるけど
>>299 delay関数を使用したサンプルソースくらい一緒にインストールされてないか?
ちなみに昔のpiccの時のサンプルは
include <htc.h> // Required to interface with delay routines
#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 4000000
#endif
/** demonstration of various built-in delay mechanisms */
void main(void){
while(1){
NOP();
_delay(1000); // delay for 1000 instruction cycles
CLRWDT();
__delay_us(400); // delay for 400 microseconds
CLRWDT();
__delay_ms(2); // delay for 2 milliseconds
CLRWDT();
}
}
PIC24Fでマイコンデビューします! よろしくね!
DSPICにしておけ
dsPICってちょっと速いPIC24Fですよね? 3.3Vで動かしたいのでPIC24Fにしました
12F1822はスリープさせても電気食うし12LF1822は4.5ボルトで使えないしどうすりゃいいんだ
306 :
296 :2013/04/24(水) 21:14:13.12 ID:kgAuXg1y
>>300 すいません、私の確認ミスでした。
エラーメッセージは
Unable to resolve identifier __delay_ms
でした。
改めてログを消してコンパイルしたら
コンパイル自体はエラーなしでPICに書き込めたように
見えたのですがLEDはつきませんでした・・・
>>301 サンプルありがとうございます。
ただ、XC8のフォルダを見てみましたが、
delayに関するサンプルは見つかりませんでした。
※302 俺は18F4550でマイコンデビューしたけど、 バンク切り替えに眩暈がして早々に16bit PICに切り替えた。 今は33EP128MC504を常用。 RAMが16KBあるモデルでこれが一番安かったから。 16bitはあまり話題に上らないから嬉しかった。お互い頑張ろう。
>>306 XC8 1.12の場合 pic.h 内の__delay()、__delay_ms()、__delay_us()の定義が
#ifdef __PICCPRO__ 〜 #endifでくくられている。
ミッドレンジ以下のPICだとこの条件が偽になって未定義になるみたい。
#ifdefでくくられている中身を自分の書いたソース内にコピペしたら
ビルドは通ったけど、ちゃんと動くか保証は出来ない。
309 :
296 :2013/04/25(木) 21:49:11.33 ID:pi25+ZEi
>>308 確認ありがとうございます。
やはり、未定義扱いなんですね
いろいろなページで調べたのですが
みな普通に使っているようだったので
自分の環境がおかしいのかと思っていましたが
PICの種類にもよるんですね。
あきらめてdelayの部分をアセンブラ命令で書いてみようかと思います。
>>309 >>301 で提示したサンプルソースはXC8で問題なくコンパイルできるけど?
やってみた?
mplab x ideの1.70をインストールしてmplab ipeを起動しようとしましたが見つかりません 別にインストールしないといけないのでしょうか?
>>311 すみませんデスクトップにありました
windows8のアプリ一覧に無かったので色々調べたんですがわからなくて・・・
すみませんでした
313 :
296 :2013/04/26(金) 19:54:55.47 ID:zut6gCJC
>>310 申し訳ありません。
コンパイルが通ることは確認したのですが
やはりLED点滅用に最後にRD0 = RD0^1を入れてみましたが
LEDはつきませんでした。
>>313 ポートの初期化も入れたよね?
コンパイルが成功して、動かしたソースをうpしてみて。
315 :
296 :2013/04/27(土) 07:08:11.85 ID:GPkGxZkv
>> 314 これでいいでしょうか? #include <htc.h> // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define Amode 0xFF //port A initial mode, all input #define Bmode 0 //port B initial mode, all output #define Cmode 0x0F //port C initial mode, high 4bits output #define Dmode 0 //port D initial mode all output #define _XTAL_FREQ 10000000 void initializing() { // ADC set them up analog inputs are RA0 RA1 RA2 CMCON = 0x07; OPTION_REG = 0x81; TMR0 = 0x01; //enable_interrupts(INT_TIMER0); T0IE = 1; T0IF = 0; //enable_interrupts(GLOBAL); GIE = 1; PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; PORTE = 0x00; TRISA = Amode; //all input TRISB = Bmode; //all output TRISC = Cmode; //in and out TRISD = Dmode; //all output } /** demonstration of various built-in delay mechanisms */ void main(void){ while(1){ NOP(); _delay(1000); // delay for 1000 instruction cycles CLRWDT(); __delay_us(400); // delay for 400 microseconds CLRWDT(); __delay_ms(2); // delay for 2 milliseconds CLRWDT(); RD0 = RD0^1; } }
TMR0の割り込みを許可してるようだけど、割り込み処理は? LEDの点灯に割り込みは関係ないようだしとりあえずGIE = 0;で確認したら? あとRD0の状態はオシロで確かめた? 2.4msちょっとの間隔で点滅することになるので 目で見てわかんないと思うけど。
317 :
490 :2013/04/27(土) 11:06:13.12 ID:ce41WSCh
main で init を呼んでないように見える
>>317 確かによく見たら、mainで
initializing();
を呼んでないね。
まあ、あと_deay_ms()の値を大きくして、点滅がわかりやすいようにするくらいかな。
_deay_ms()は設定できる値の上限が決まってるから、エラーになったら値を小さくしていって。
319 :
296 :2013/04/27(土) 21:30:54.11 ID:GPkGxZkv
>>317 >>318 ありがとうございます。
どうも煮詰まりすぎて、初歩的なところを見落としていたようです。
initializing();
呼び出して試してみました。
delay_msを長くということでしたので
最初 500ms → コンパイルは通るが動かず。
2回目 100ms×5 → コンパイルは通るが動かず。
GIE = 0 にして
3回目 500ms → LED点滅!
ということで無事、テスト用PGが動きました!
GIEをONにすると動作が変わるんですね
TMR0の割り込みも使いたいので悩みどころですが
delay_msが使用できることがわかりましたので
本当に助かりました。
ありがとうございました!
しかし、初期化ロジックを呼び忘れるとは
本当に恥ずかしいミスを・・・
320 :
317 :2013/04/27(土) 22:36:59.36 ID:mueWM41W
やっぱそっか、 もう10年ぐらいAVR派でPICは触ってなかったから、最近のPIC環境はarduinoのsetup()みたく勝手に呼ばれるのかも?とか思っちゃたよ^^;
321 :
774ワット発電中さん :2013/04/28(日) 00:03:14.59 ID:jUTbNE+5
>>319 × どうも煮詰まりすぎて、
○ どうも行き詰まりすぎて、
煮詰まるというのは、熟した、深く考えた、みたいな意味で使う。
×どうも行き詰まり過ぎて ○どうも行き詰まって
いくら抵抗しても変化は止められない
爺は自分のテリトリー内の事になると説教したがるんだよ 特に相手が自分より弱い立場の初心者になると尚更その醜態を目にする
そうとしか捉えられないクズが敗者になるんだよね、残念だけどそれが世の中。 でもそうとしか捉えられなくてもクズじゃなくてダイヤの原石って奴もある確率で在るのも世の中。 出でよニューリーダー。
って一言だけわざわざ書く人のほうが
330 :
774ワット発電中さん :2013/05/06(月) 16:51:01.74 ID:xYeSAWd8
それに茶々入れるお前もな
みんな寂しい
332 :
296 :2013/05/06(月) 17:42:44.94 ID:LRV5nptc
書き込み規制に引っかかってしまい レスが遅れてしまい申し訳ありません 言葉の用法のご指摘ありがとうございました 以後気をつけます。 delayが正常に動いていなかった そもそもの原因は、 私がTMR0割り込みのことを理解せずに コーディングしていたことのようです。 GIE=0で動いたので 割り込みがおかしいと、あたりをつけて 調べてみたところ interrupt処理が書かれていなかったため TMR0割り込みで飛ぶ先がなくなり、動かなくなったようです。 LED点滅したソースにinterruptで割り込みをクリアする処理を つけてGIE=1にしたところ、すんなり動きました。 これで、コーディングを進められそうです。 本当にありがとうございました。
指摘してる人はいたけどね
334 :
774ワット発電中さん :2013/05/12(日) 16:26:32.22 ID:uq4K+SqJ
>334 MOS FET (電圧駆動) とバイポーラトランジスタ (電流駆動) の違いを理解して 回路を修正できるなら置き換えても大丈夫かと。
336 :
774ワット発電中さん :2013/05/13(月) 00:29:47.36 ID:eKIR+DFg
>>335 理解してないので手に入らない MOS FET のかわりのものを探します。
ありがとう。
>336 回路図を見た限りでは呆れるほど余裕をもたせた作りになってますね。 例えば秋月電子通商で、 N チャンネルパワー MOS FET と書いてある もののうち安い方から選ぶくらいで十分でしょう。…この使い方なら TO-92 タイプの 2N7000 でも問題無いと思いますけど。
目的のLEDがせいぜい4V、200mA 一方 MOS FET のほうは連続の直流でドレイン電流が20A、許容ソースドレイン電圧が 60Vとか ドライブする方のデバイスの能力が途方もなく大きいですな。 でも秋月のサイトを見る限り、ちょうどいいのが見当たらないですし いすれ機会があれば2N7000を入手して作ってみることにします
200mAって結構いくねぇ
約 50 オームの抵抗を介して FET につながっているから 100mA 以下ではないかと。 LED の電圧降下まで考慮すると実際に流れるのは 60mA 以下ってとこでしょう。
2sc1815の出番ですね
25mA直駆動でよくね?
>342
PIC12F683 のマニュアルをみました。
http://ww1.microchip.com/downloads/en/DeviceDoc/41211D_.pdf 絶対定格(全体で何 mA まで、というやつ) は見つけ
きれませんでしたが、
P.121
VOL が 0.6V at 8.5mA, VDD = 4.5V
P.148, P.149
いろいろな温度での VOL と IOL の関係のグラフでは
IOL = 10mA までプロットされている
ので、頑張って 10mA 位とした方がいいようです。IOH は
もっと小さいですね。あと、直接駆動だと信号を逆転させな
ければならないのが面倒です。
344 :
mattake :2013/05/18(土) 12:03:09.57 ID:f0I394UC
PIC12F683でLEDフラッシャーを作ろうと考えています。 ネットで12F509aの制作事例が載っていたので参考にしようと思いますがプログラムの 互換性があるのか教えてください。なければPIC12F675はどうでしょう。
互換性がコピペで動くって意味ならたぶん無理。 逆にプログラムをよく理解し参考にするならどちらも有用。
今時683なんて使わずに1822でも使えば良いのに
よし、24Fだ
DSPICにしとけよ
>>344 アセンブラは、ニーモニック近いし、Cも大部分はそのまま
使えるが、手直し必要。
初期化で躓く
PICKIT2で18F14K50に書き込もうとしたら、ブランクチェックで "configuration not blank" となってエラーになります。 買って来たばかりのPICで、まだ一度も書き込んだことはありません。 全く同じ基板を使って同じ物を2つ作ったのですが、片方は正常に書き込みが出来 ました。ハードの不良を疑う場合、何が原因として考えられますでしょうか。 ちなみに関係するか分かりませんが、PICKIT2の画面で「READ」ボタンを押す と、右上のConfigurationの下に赤文字で"All Protect" と表示されます
351です 専スレで聞きなおしましたのでこっちは無視願います
MPLABの画面が壊れる人いませんか?windows7で使ってるのですが、ツールバーのアイコンが消えてしまったり困ってます。 バージョンアップしてもダメです、どうすればいいのでしょうか。
次にやることはOSの再インストールだよ
Windows7で使ってるけどうちのは大丈夫だお
↑ 2008-08-06ね
>>353 うちもWin7(32bit)で同じ症状。
MPLAB X 使うことにた (w
359 :
355 :2013/05/30(木) 22:28:02.80 ID:xtQ7IgE4
ごめん、うちの問題ないってのもXの話ね。バージョンアップしてもっていってたから既にXなのだと思ってた。
360 :
774ワット発電中さん :2013/06/01(土) 19:27:06.17 ID:SNsQOxIx
pic12f1840を使い始めた物ですが、 コンパイラはHI-TECH、内部クロックで動作させようとしていますが、 コンフィグレーションの設定あたりが悪いみたいで、 全く動作してくれません。 今回設定したコンフィグレーションは、 __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF ); __CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_HI & LVP_ON ); OSCCOnレジスタは、 OSCCON = 0b01100010; と設定しております。分かる方がいたら教えてください。
ハイテクC使ってないからよう知らんけど、CONFIG関数は二回呼んで大丈夫なの?一回目のが上書きされちゃってんじゃね?
>>360 コンフィグレーションの設定が悪いと思った理由は?
363 :
774ワット発電中さん :2013/06/01(土) 20:04:09.34 ID:SNsQOxIx
>>362 コンフィグレーションの設定に問題があると思ったのは、
最低限動かすだけなら、他に設定する物がないからです。
>361
今回初めてHI-TECHを使いますが、インターネットの情報ではこれが正しいみたいです。
>>360 「全く動作してくれません」
との事だけど、何をしようとして動かなかったのか、例えばポートに出力出来ないとか、そこをもう少し具体的にしてくれれば原因を推察出来るのでよろしくどぞ。
可能ならばソースコード見せてくれるとなお。
とっくに石そのものがぶっ壊れてるのかもしれん。 通電中のPICに指を押し付けてヤケドするか試してみたら?
>>351 似たようなことを経験したことがある。
俺の場合は、picとライタの接触不良だった。
接触不良のときは接触不良だって表示してほしいよな 違うメッセージが出たら原因は他にあるんだと思ってしまう
接触不良の時に接触不良だって表示するにはどうすればいいんだろう たぶん無理だと思う
369 :
774ワット発電中さん :2013/06/01(土) 22:10:26.12 ID:SNsQOxIx
下記のプログラムのように、RA0ピンを2秒ごとに点滅させるプログラムです。 #include <pic.h> #include <htc.h> #include <pic12f1840.h> __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF ); __CONFIG(WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_HI & LVP_ON ); #define _XTAL_FREQ 8000000 int main(void) { OSCCON = 0b01100010; TRISA = 0x00; ANSELA = 0b00000000; WPUA = 0x00; LATA = 0x00; while(1) { LATAbits.LATA0=1; __delay_ms(2); LATAbits.LATA0=0; __delay_ms(2); } return 0; }
>>369 __delay_ms(2);なら2msだから見えてないだけでは?
371 :
774ワット発電中さん :2013/06/01(土) 22:30:52.74 ID:SNsQOxIx
>>370 おっしゃるとおり実際は正常に動作しておりました。
2msを2秒と勘違いして考えておりました、すみません。
>>371 トラブルシュートで大事なのは
「コンフィグレーションの設定あたりが悪いみたいで、」とか、安易に決め付けないことだ。
そう思い込んだ時点で、答えに辿りつけなくなり、あさっての方向ばかり調べることになる。
二つ教えていただきたいのですが、 1.LEDなど接続する場合PICから電流を出す方向と引き込む方向とどちらが良いのでしょうか? 2.12F683ですが、データシートでは2Vから動作可能と記載があったので3Vのコイン電池で動作させようと 思ったところ動作不安定になりました。内蔵8MHzの上限よりクロックを下げた方が良いのでしょうか? よろしくお願いします。
>>373 1はどちらでも良い。
2は動作時の電圧、電流を計測。
3Vのコイン電池ってのがどの電池かわかんないが、 CR2032とかだと0.1mAとか0.2mAとかとにかくその程度の電流しか流せないよ。 リチウムだから1Aぐらい流せるもんだと思ってた。
大きめのケミコンを電源ラインに入れればある程度対応できると思う コイン電池は内部抵抗大きいから、オシロで電圧波形みるとわかるけど、 動作時かなり変動する
皆さんアドバイスありがとうございます。
>>374 LEDはどちらでもいいのですね。
12F683を使用でICSP使ったときにPICKitでHEXファイル読み込み時に点滅と書き込み時にも点滅するので間違ってるのかと思いました。
LEDは現在は電池側の+から抵抗を介してPICへの向きです。
電流計測は出来ていませんが、If20mAのLEDと圧電サウンダですので
>>375 さんのアドバイスからして電流的に無理でした。
>>375 すみません書き忘れていました。CR2032です。
電流少ないのですね。
フリスクケースの電子サイコロ等のPIC工作をWEBで見て上記のLED1個と圧電サウンダくらい動かせると思っていました。
>>376 とても参考になる記事を教えていただきありがとうございます。
>>377 基板に余裕があるので試して見ます。
それと、圧電サウンダ(PICの足と電池のマイナスに接続)ですが、
まだPICの各タイマーの記述を勉強中ですので
単純に接続端子(出力)のオンオフとディレイ命令で、H出力とL出力の方形波?を作っているのですが
これでも鳴らすことは可能でしょうか?
質問を重ねましてすみませんがもう少しだけアドバイスをお願いします。
>>378 サウンダはそれで鳴る
というか
鳴るかどうか確認してないの?
電池もそうだけど。
検証しながらやらなきゃ、突破口は無いと思うよ。
>>379 今、実験してみました。
PIKkit2のVDDをONで電圧を変えてみました。
ICSP経由で電源供給出来ることと電圧を変えれる事もさっきググって知りました。
結果、5V供給では鳴りました。3.8Vで怪しくなり3.5Vでは供給しながら下げれば鳴りますが
最初から3.5Vでは無理でしたので、この圧電サウンダはCR2032では無理だと解りました。
Cで書いてるプログラムの問題かと思ったのですが、手法は問題無しなのですね。
去年のトラ技のPIC特集を先月見て始めたPICですが、知らないこと多すぎで
555IC等でちょっとした工作してるのと違い、ソフトの問題とハードの問題などあり奥が深いですね
>>380 調べたのは一応進歩だと思うけど、音の出るクリスマスカードとか、小さな電池で鳴ってるじゃない。
試してダメだと結論付けて諦めるのは勝手だが、出来てるモノはなぜ出来てるのか調べる努力も必要と思うけどね。
>>381 自分で考えた結果ですが、電流量の不足又は電圧不足(電力の不足)の結論に達しました。
秋月の30円の物ですが、電圧を変えて実験すると上記の様に、5Vから下げていくと3.5Vで鳴るのに
3.5VでONすると鳴りません。3.8V程度では”プッと”振動子が一方向だけ動いて止まる感じです。
商品説明とデータシートでは電圧のみの記載で電流や電力は書いていませんが
今回は圧電サウンダは部品選定を間違ったと結論に達しました。クリスマスカードのような薄型の低電力駆動
可能な圧電素子に変えるのが良いのかと思いました。
週末しか工作が出来ないので来週までに部品を入手しようと思います。
>>382 コンデンサの手持ちが無いためまだ試していません。
こちらも、部品を入手して試して見ます。
結論に達したんならべつにいいけど、 オレは10F322+CR2032+30円圧電サウンダでアラーム作ってフリスクケースに入れてるから。 コンデンサは不使用な。サウンダの片方がグランドじゃないのはキミと違うけど。
BTL駆動でつね。
>>384 グランドに接続していないというのはPICの出力を2つ使って
圧電サウンダを接続して、2つの出力を交互にH,Lを繰り返せば
VDD5Vとすれば、圧電サウンダから見て10Vで駆動しているように見えるということでしょうか?
>>386 そ
だが音量は少し大きくなるだけ。GNDにしておいても鳴らないわけじゃない
PIC32MXで超音波センサを使おうとピン変化割り込みに挑戦しているのですが、上手くいかないのでお力を貸してください。 PORTB の 7番ピンでパルスの送信及び受信を行っています。 #include <plib.h> #include <stdio.h> #include <math.h> #define SYSCLK 40000000L #define SYSCLKdiv10MHz (SYSCLK/10000000) #pragma config PMDL1WAY = OFF // Peripheral Module Disable Configuration (Allow multiple reconfigurations) #pragma config IOL1WAY = OFF // Peripheral Pin Select Configuration (Allow multiple reconfigurations) #pragma config FUSBIDIO = OFF // USB USID Selection (Controlled by Port Function) #pragma config FVBUSONIO = OFF // USB VBUS ON Selection (Controlled by Port Function) #pragma config FPLLIDIV = DIV_2 // PLL Input Divider (2x Divider) #pragma config FPLLMUL = MUL_20 // PLL Multiplier (20x Multiplier) #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider (2x Divider) #pragma config UPLLEN = OFF // USB PLL Enable (Disabled and Bypassed) #pragma config FPLLODIV = DIV_2 // System PLL Output Clock Divider (PLL Divide by 2) #pragma config FNOSC = FRCPLL // Oscillator Selection Bits (Fast RC Osc with PLL) #pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disabled) #pragma config IESO = OFF // Internal/External Switch Over (Disabled) #pragma config POSCMOD = OFF // Primary Oscillator Configuration (Primary osc disabled) #pragma config OSCIOFNC = OFF // CLKO Output Signal Active on the OSCO Pin (Disabled) #pragma config FPBDIV = DIV_1 // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1) #pragma config FCKSM = CSDCMD // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled) #pragma config WDTPS = PS1 // Watchdog Timer Postscaler (1:1) #pragma config WINDIS = OFF // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode) #pragma config FWDTEN = OFF // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls)) #pragma config FWDTWINSZ = WISZ_25 // Watchdog Timer Window Size (Window Size is 25%) #pragma config JTAGEN = OFF // JTAG Enable (JTAG Disabled) #pragma config ICESEL = ICS_PGx3 // ICE/ICD Comm Channel Select (Communicate on PGEC3/PGED3) #pragma config PWP = OFF // Program Flash Write Protect (Disable) #pragma config BWP = ON // Boot Flash Write Protect bit (Protection Enabled) #pragma config CP = OFF // Code Protect (Protection Disabled) void delay_us(unsigned int usec); void delay_ms(unsigned int msec); void pin_init(void); void module_init(void); void TIMER_Configulation(void); void ChangeNotice_Configlation(void); int read_ultrasonic(void); void recieve_config_ultrasonic(void); void send_ultrasonic(void); int ULTRASONIC_ENABLE; int SEND_ULTRASONIC_READY;
int main(void) { SYSTEMConfigPerformance(SYSCLK); //システム最適設定 mJTAGPortEnable(DEBUG_JTAGPORT_OFF); //PORTA is used I/O, JTAG port must be disabled. pin_init(); pps_init(); module_init(); ULTRASONIC_ENABLE = 0; SEND_ULTRASONIC_READY = 1; INTEnableSystemMultiVectoredInt(); while (1); return 0; } void delay_us(unsigned int usec) { unsigned int i, delay; delay = usec * SYSCLKdiv10MHz; for(i=0; i<delay; i++); } void delay_ms(unsigned int msec) { unsigned int i; for (i = 0; i <msec; i++) delay_us(1000); } void pin_init(void) { mPORTBSetPinsDigitalOut(BIT_7); LATB = 0; } void module_init(void) { /* Timer */ TIMER_Configulation(); /* Change Notice */ ChangeNotice_Configlation(); } void TIMER_Configulation(void) { OpenTimer45(T4_ON | T4_SOURCE_INT | T4_PS_1_1 | T4_32BIT_MODE_ON, 800000); /* Ultra Sonic MAX20msec*/ } void ChangeNotice_Configlation(void) { mCNBClearIntFlag(); CNCONBbits.ON = 1; CNENBbits.CNIEB7 = 1; PORTB; IPC8bits.CNIS = 4; IPC8bits.CNIP = 0; IEC1bits.CNBIE = 1; ULTRASONIC_ENABLE = 1; }
void send_ultrasonic(void) { SEND_ULTRASONIC_READY = 0; CNCONBbits.ON = 0; CNENBbits.CNIEB7 = 0; mPORTBSetPinsDigitalOut(BIT_7); mPORTBClearBits(BIT_7); mPORTBSetBits(BIT_7); delay_us(5); mPORTBClearBits(BIT_7); } int read_ultrasonic(void) { int length; if (mPORTBReadBits(BIT_7)) { TMR4 = 0; return -1; } else { length = TMR4; SEND_ULTRASONIC_READY = 1; return length / 40 * 0.0034326; /* cm order */ } } void recieve_config_ultrasonic(void) { IFS1bits.CNBIF = 0; TRISBbits.TRISB7 = 1; CNCONBbits.ON = 1; CNENBbits.CNIEB7 = 1; CNPUBbits.CNPUB7 = 1; PORTB; IFS1bits.CNBIF = 0; IEC1bits.CNBIE = 1; } void __ISR(34, ipl4) CNBinterrupt(void) { int tmp; if (ULTRASONIC_ENABLE) tmp = read_ultrasonic(); IFS1bits.CNBIF = 0; } 非常に長くなってしまいましたが、怪しい部分などあったら教えて下さるとうれしいです。
プルアップ有効?にしてすぐPORTBを読んでる?のかな? "H"→"L"を検出したいんだよね? 直前まで"L"を出力してたら、レベル上がりきってないんじゃない?
PORTBを読んでいるのは前回のPORTBの状態保存?の為ですね。 ピン変化割り込みの関数自体にprintfを仕掛けてみたのですが、そもそもピン変化割り込みに入っていないということになっています。 検出したいのはL→H,一定時間経った後のH→Lです。 なのでレベルが上がり切っていない状態で状態保存がされてしまっても最低でもLに変化の時に入ると思ったのですが、それもうまく行きませんでした。 340fではピン変化割り込みに成功したのですが…PICはなかなか難しいですね
393 :
774ワット発電中さん :2013/06/03(月) 12:45:41.34 ID:OdbemD7d
すみません。PICではなくI2Cについての質問なのですが、 スレーブの送信において、全データ送信完了をスレーブ側が送ることは仕様上できますか? それともスレーブはマスタ側がストップコンディションを送るまで空データを送り続けないといけませんか?
>>393 その質問はナンセンス
その「空データ」をマスター側が意味の無いデータであると認識しているのであれば、そこで受信を停止すれば良い
意味の無いデータであると認識できないのであれば、空データという名のゴミを送る仕様が間違い
>>394 ということは、スレーブ側にとってのストップコンディションみたいなものは仕様上無く、
例えば送信1バイト目にこれから送るバイト数を送るとか、
例えば末端文字を決めておくとか、することになるのですね。
>>382 コンデンサ試してみましたが容量増やしていっても圧電サウンダは無理でした。
実験用に7805で作った006Pから5V生成電源では、PICで圧電サウンダを鳴らせました。
圧電サウンダその物は、パルスジェネレータで使うと2Vrmsでも鳴りましたので電圧の問題か
電流の問題か問題の切り分けに悩むところです。
PICを動かすために結構電力を消費して、CR2032が電圧低下&電流も取り出せない?などとも考えています。
こういう事も有るのでしょうか?
BORかなとも思ったけど、確かめたら12F683のVBORは2Vだから違うか・・・
2Vくらいまで下がった電池でも音は出る 電源以外のピンに電源つないでも動くから配線をよーく確認汁
>>396 ところで、圧電サウンダは何kHzで鳴ることになるの?
当然、周波数特性を見て音圧の高い周波数を選んでいるよね?
400 :
388 :2013/06/05(水) 21:41:00.51 ID:jxmS0xTO
自己解決致しました。 割り込みレベルの設定を間違えていたことが原因でした。 スレ汚し大変失礼致しました。
オープンドレインの出力ピンに圧電サウンダをつないで シンク電流で鳴らそうとしてるとか・・
>>396 圧電サウンダは電流は余り流れないはずだから電池の容量の問題ではない気がするよ。
出力ピンのHレベル時の電圧もしくは出力波形確認して見ては。
>>401 5V電源なら鳴ったと書いてるから違うんじゃないかな?
もうめんどいから電池2個直列にしてダイオードで適当に下げちゃおうよw
皆さんレスありがとうございます。
>>397 >>398 電池は、新品に変えてみましたが変化なしです。
>>399 データシートでは3V方形波で4kHz付近が特性が良いので
125uS毎にH出力、L出力を切り替えています。
>>401 データシート見ましたら12F683はオープンドレイン端子は無かったです。
>>402 波形ですか。オシロは持ってないので明日にでも知り合いに借りてみます。
>>403 正直、自分も考えました。
ただ、CR20322個で6Vだと使用範囲2-5.5Vを超えてしまうのですが
0.5V程度なら大丈夫なものでしょうか?
405 :
質問 :2013/06/08(土) 20:22:19.02 ID:ZK5SLCWx
バッファフルビットが立つでしょ
407 :
質問 :2013/06/09(日) 20:02:49.78 ID:ivNNp5yG
いや、1ビットの受信ではなくて、ストップコンディションが送られたかどうかです。 I2Cってパイプみたいなもので、 データの始めと終わりという概念がないのかな? それが欲しければ自分でコードで定義しろみたいな??
必要がないからないんじゃないの?ストップコンディションだってなくても あまり不都合なさそうだし。
プルアップ用の抵抗ってどの程度の値が無難なの?
デバイスの入力インピーダンスの1/10以下。 電力消費の制限よりは上で。 漏れ的には電池駆動だったら100kΩ、AC駆動だったら10kΩって決めている。
>>411 ごめん。書き忘れた。
単純にスイッチ接続する時のプルアップ用。
I2Cの質問相次いでますが、引き続き質問させてください。 スレーブ受信側でユーザバッファ配列がいっぱいだった時、 ACKを返さないことによってそれをマスター送信側に伝えたいのですが、 PICでそれができますか? どうも受信した時点ではすでにACKを返してしまうため、 それができない気がします。 やるとすれば、ユーザバッファがいっぱいになってもやむを得ずACKを返し、 そのバイトはSSPBUFから降ろさないことで、 次のバイトが来たときにSSPOVを起こしてNACKを返すしかないのでしょうか?
414 :
質問 :2013/06/10(月) 07:40:44.52 ID:LfCnu6gc
送信時は常に送りたいバイト列に加え1バイト多く送ればいいだけかな、何だかなぁ。
でも、ストップコンディションが取れないことと矛盾するなあ、 どこまでが本来送りたかったデータかわからないもんなあ。
>>415 このモードでストップシーケンスで割り込むんじゃないかな。使ったことは
ないけど。
SSPM<3:0>
1110 = I2C スレーブモード、7 ビットアドレス、スタートビットとストップ
ビットの割り込みを有効にする
>スレーブ受信側でユーザバッファ配列がいっぱいだった時、
>ACKを返さないことによってそれをマスター送信側に伝えたいのですが、
>PICでそれができますか?
アドレス受信に対してSSPBUFを読まなければACKが帰らないような気が
するけど。
>アドレス受信に対してSSPBUFを読まなければACKが帰らないような気が するけど。 それはアドレスを受信した時点でバッファに余裕があるか判断する ということですよね。と言うことは、送受信するバイト数は お互いに予め決めておくということですよね? そうじゃなく1バイト送信ごとに判断したかったんです。 でも、なんかそっちのほうがいいような気がしてきました・・・
>>418 マスターからの送信要求終了は NACK が帰ってくる事で判断できる。
ストップコンディションはハードとしては必要だが、ソフトとしては特に要らない。
マスター送信にしてもマスター受信にしても、送受信データが可変長の場合、 アドレスに続く1バイト目は、続いて送るバイト数をとするという 取り決めにしておくのが正しい。
複雑な制御をするなら、コマンドみたいな物を送るだろうから、そのコマンド毎にバイト数を決めておけば なんの問題も無いし、余計なデータを送ることも無い。
パケット構造とし、CRCをチェックし、エラーの場合はNAKを返送し、タイムアウトの場合、受信ステートをリセットして、、、その他もろもろ云々 w
>>420 >アドレスに続く1バイト目は、続いて送るバイト数をとするという
それI2Cだとうまくいかないんだよ
送るものはすべて固定長のブロック単位にして、
可変長列が必要ならそのブロック内部でやりくりした方が良い
I2Cというよりペリフェラルの実装の都合でうまくいかないという意味ね 上の疑問のようにあれれー?となる
マスター送信でも受信でも、アドレスに続く1バイト目は実データのバイト数、 2バイト目は意味のないダミーバイト、3バイト目以降が実データ。 色々考えたけど、個人的にはこれがよいという結論。 マスター送信の場合、 スレーブは1バイト目でバッファが足りないとわかったら、 2バイト目でSSPBUFをREADしない、すると3バイト目でNACKが返せる。 (1バイト目受信後に自らSSPOVを立ててみたがダメ、2バイト目ではNACKは返せない) マスター受信の場合、 1バイト目でスレーブが送信したいバイト数が0だとわかったら 2バイト目でNACKを返し、通信を終える。 送信したいバイト数が1以上なら、3バイト目からを実データを送る。
I2Cは速度が上げられないので、バイト数なんて、プロトコルをちゃんと設計してれば 分かりきってるような余計なデータを送る時間が無駄
すみません。 MPLAB Xでタブキー入力がスペースに変化してしまいます。 これを止める設定はどこですか?
>>427 Tools->Options->Editor->Formatting->Language:C
Expand Tabs to Spaces
どうやらそれに合わせて、 Number of Spaces per Indentと Tab Sizeを4にしないとダメのようですね。 TabSizeが8担っていたのでできなかったようです。 ありがとうございました。
12F683ですが、GP2にスイッチをつけてグランドに落としています。 GP2は内部プルアップしています。 INT割り込みを設定してLEDを点灯消灯するだけのプログラムを作ったのですが スイッチを押した時でなく離した時に反応しているようです。 スイッチは一般的なタクトスイッチで押せば導通があるタイプです。 INT割り込みとはこの様なものなのでしょうか?
立上りと立下りのどちらで割り込ませるかは自分で指定する OPTIONレジスタのINTEDGが1なら立上り、0なら立下りで割り込みになる
>>431 OPTIONレジスタはプルアップの項目に気をとられて、INTEDGは設定していませんでした。
仕様によると初期値は1で立ち上がりエッジで検出と言う事ですので、自分の場合は
スイッチONでグランドに落ちるので、スイッチを離した時に立ち上がって割り込み開始と言うことだったのですね。
ありがとうございました。
質問なのですが、forループを書く時に 下の様に、実行回数の所に変数を使うことは出来るでしょうか? 環境はmikroCを使っています。 a = rand() & 30; for(i = 1;i < a;i++){ chien(); //遅延用関数 }
フツーのCならできるでそ
a = rand() & 30; ↑何をしたいのか良くわからないが、多分望んだ結果は得られないんだろうなという予感がする
0から29の乱数が欲しいんなら ふつー、rand()%30 だろ
>ふつー、rand()%30 だろ 乱数生成で、だめな典型だな
>>434 ありがとうございます。
ビルドでエラー出ていたので疑問でしたが
別の所で間違った様なので見直してみます。
>>435 >>436 スレの上の方で
>>93 に%でなく&で指定していたのを
見かけましたので、同じように書いてみました。
LEDの点滅回数をランダムにするプログラムを
rand() & 5と書いて作ると5回以内の点滅が動作できたので
同じように書いたのですが、一般的には%なのでしょうか?
&と%で意味は違ってくるのでしょうか?
>>437 今後の為に、良い書き方を教えて頂けないでしょうか?
求める数字が0から10までの場合どのように書くのが一般的でしょうか?
よろしくお願いします。
ビットアンドとモジュロ演算じゃなかったっけ? n=bitpattern、&5、%5 をそれぞれ表記すると 0=0000、0,0 1=0001、1,1 2=0010、0,2 3=0011、1、3 4=0100、4、4 5=0101、5、0 6=0110、4、1 7=0111、5、2 8=1000、0、3 9=1001、1、4 頻度の偏りが・・・
>>438 >>93 の場合は&で演算する数が2^n-1になってるから結果として%の演算と
同じになってるんじゃないの?
&5じゃまったくだめ。
>>439 そんなに偏りがあるのですね。
&で書いて数度見てOKと思ったのは
軽率だったのですね。
>>440 10までの乱数を変数aに入れるなら、
a = rand() % 10;
と言う事ですね。
>>438 元凶は93か。
rand()が線形合同法やM-系列で実装されてると、
下位ビットのランダム性が低いから剰余計算しちゃいかんのだ。
0〜10 の一様乱数生成は、rand() の最大値を RAND_MAX としたとき、
rand() % 10 じゃなくて rand() / (RAND_MAX / 10)とか。
>>442 FPU積んでいて実数演算が早いプロセッサなら、私もそれをやっている。
そうでない場合は以下のようにしているんだけど、こんなのでいいのかな?
while ((r = rand() & 0x0F) >= 10) {
;
}
while文の繰り替え回数の期待値は 16/10 = 1.6 回で、0から9までの値が一様ランダム。
下位ビットのランダム性が怪しい場合は
while ((r = rand() >> 4) >= 10) {
;
}
>>443 rand()の中身は、
static long x=1;
int rand() { x=x*214013+ 2531011 ; return(int)(x
>>16 )&32767; }
なので、longの掛け算を余計にするよりも16bitの余りを計算したほうが速度は速いよ
MPLAB IDEについてもこちらで良かったでしょうか? 全くの初心者状態から初めてMPLABのインストールとPICkit3接続まで来たんですが PK3Err0038: Failed to initialize PICkit 3. Failed to properly connect to PICkit 3 と出て認識してくれません。 Programmer > Settings > Statusタブをクリックすると以下のエラーメッセージも PK3Err0056: Unable to get voltages from PICkit 3. 自分なりに調べてUSBケーブル何種類か試してみたんですが変化なし。 これはファームウェア上書きとかで壊れちゃったんでしょうか?でもファームウェアの アップデート画面などは出てきませんでしたし。もう完全にお手上げです。 環境はWin7 64bit、MPLABのVer.は8.91です(古いのでだめだったので最新にしてみた)
ターゲット基板に電源が供給されてないってメッセージですか・・・ そういや、Windows7のときはMPLABIDEじゃなくてMPLABXじゃないとダメみたいですお。
Windows7でIDEは問題なく使えてる。
バージョンは8.88
>>446 そういえばStatusタブのPICkit3 VDDが0.00です。Refreshしても変わらず
本体のLEDは緑と青だけ点いてる状態ですね
PICkit使ってないからよく知らんけど、 ICD3のときはターゲットへのパワー供給は プロパティーのダイアログで指定しないと給電されないお。
PowerタブのPower target circuit from PICkit3の項目にチェック入れて、5Vに設定しても Statusは0.00Vのままですねえ… 頭冷やしてまた明日色々試してみます。皆さん有難うございました
テスターで見ると給電はされてんの?
PICkit3+MPLABXで開発していたら、あるときから突然 コンパイル開始までやデバッグの開始までに やたら時間がかかるようになりました。10秒ぐらいでしょうか。 心当たりのがある方、原因を教えていただけないでしょうか。
MPLAB使っとけ
>>453 についてですが
ある日突然だと思います。
C30の試用版を使ってますが、MCC18の他のプロジェクトでも同じでした。
javaをアップデートしてもダメでした。
なぜでしょう?
MPLAB使っとけ
457 :
774ワット発電中さん :2013/07/09(火) 12:22:51.08 ID:ctCYIE8t
不具合で乗り換えて、快適に使えてたので、それはないです。 試用期間を過ぎるとそうなってしまうのでしょうか??
今回のも不具合だろ。乗り換えるチャンスだ。
pcを再起動したら直りました。 断固として乗り換えません。
>>453 Ubuntu PCしかないのでMPLABX一択だが、どのPCでも遅くなったことなんかないが?
時々、psコマンドやらでデーモンモニターするが、あやしいプロセスにお目にかかったことは無い。
Node.jsなんかでWebアプリ作っているときは、良くあるが・・・ 変なモジュールは使わんほうがええ。 npm install xxxx
久しぶりにMPLAB使うと純正ライブラリの#ifdefの塊が一色で表示されて萎える
>>462 何か問題なん?
試作用のチップ貰ってるだけじゃね?
30日毎に二個貰っても商売なんて出来ないし試作にしか使いみち無いじゃん
問題だと思うなら そのブログのコメント欄で堂々と指摘すればいいじゃない
>>462 産むって、まるで、現状が違うみたいじゃ無いかw
>>465 なんでキレてんの?
microchipの発送担当さんなの?
試供品なんてデパ地下でも昔からあるけどな 世間知らずか
日本の企業は大口以外はゴミ扱いだけど、あちらの企業は起業を応援する ような姿勢があるんじゃないのかな。
自分に都合の良いように解釈するチョンw
営利企業がその経費の範囲で自社製品を広める為に試供品を提供するのを 否定するとは、広報活動全否定か しかも全く無関係の公的扶助を引き合いに出すとか、ここまでの阿呆だと憐れにすら思えてくる
購入してる物まで試供品を要求するのは広報活動に寄与しない上、試供品を要求して良いほど買ってない。 他人の弱み、スキをついて物乞いし、社会のお荷物になる点でナマポと同類
試供品ってさ、昔の造り酒屋の利き酒みてぇなもんだろ。 買うとなれば大口にならざるをえないが、ちょいと利き酒させてくれというと気前良う呑ましてくれる、 いまでもビール工場の見学でもしたらちょいと呑ませてくれるだろ?おなじこった。
逆に考えるんだ… 常識の問題なら常識を問えばいいな。 常識的には、年間何個ぐらい使う人ならサンプル要求してもおkなん?
>>462 通販webで大量購入する会社あるの?
大口客は直接問い合わせでサンブルを出してもらえるよ。
学生か新米技術者の趣味用じゃないのかな。その人たちが設計の決定権を持つようになった時にご贔屓してもらえる種まきマーケティングかもね。
爺さんの趣味にサンブル発送は死に金なのは確か。
実は、直接日本のマイクロチップに登録してもらう(条件あり)と、一回で5種5個、30日以内に10回頼める。 個人ユーザに数個配って、裾野が広がるならメーカとしてもいい撒き餌になるだろう。 現に、会社登録前に個人ユーザで覚えた技術で、ユーザに採用してもらって事業化した例もある。 しかし、毎回UPSで、休日とか夜間配達してくれないのはめんどくさいんだよな〜
>> ID:aeWypV4W こっちにも来てんのか、このキチガイは。
>>478 試作されたデバイスが他の会社のチップで量産されるなら君の言う通りかもしれないが、どのみちmicrochipのチップで作られるんだから問題なくね?
それともどこのチップで量産されてるかまで知ってて告発してんの?
>>479 当該ページのブツが量産されるとでもw
あまちゃんのは試作=完成だろ。
そうとも限らない。
一体この人は何に憤っているのだろう。サンプルで取り寄せた部品は 全く社会に還元されなければならないという信念の持ち主なのだろうか アマチュアが当面使う予定無いけど興味あるから取り寄せてみよう そのうちなんかで使ってみようって思っただけで糾弾されそう
小売店の中の人なんじゃね? 要は、営業妨害だ!と。
サンプルさえもクソ高い値段で代理店から買えと言うル…おっと、某社の中の人なのかも。
>>485 ルネサスは、ESを試作基板の数だけ無料で持って来るぞ。
出荷中のチップは試作でも部品は買うのが当然しゃないの?
マスク品のESなら当たり前だろ。無料じゃ無くて、費用に含まれてる。
マイクロチップが企業ポリシーと営業戦略に基づいて提供してる無料サンプル を請求しちゃいけないとか完全に営業妨害だろ。 せこい日本の半導体メーカーの社員ですか?
>>488 無料でサンプルが貰えると知ったら
普通の人は、"いいね"と反応するが、
屈折した人は、嫉妬由来の難癖をつける
462はブログ主の自演。
歪んでるなぁ・・・可哀想に
そりゃ、ブログやろうなんて人が歪んでないはずが無い。
まだ粘着してんのか 文句は直接言ってこいよ
>>488 一般的には、
少数なら、利益より伝票処理の工数が上回るから、無償にする場合も多いな。
評価用サンプルと販売用の商品とでは税法上の費目が異なる(税率が変わる)ということも考えられるな
ブログや動画のおかげで販売数が増加する可能性も
結局この一件で得をしたのはアクセス数が伸びたブログ主のみ。
やはりは
>>462 は自作自演かもしれん。
いやむしろmicrochipの自演だろう
PICで食っていくことってできる?
無理。周辺のアナログ、デジタル回路の設計が完璧ならOK それが出来るならCPUがなんであれ問題ない筈だし。
ソフト組めて、システム設計できれば、 PICだろうがAVRだろうが関係無い。
http://ww1.microchip.com/downloads/en/DeviceDoc/70157F.pdf dsPICのProgrammers Reference Manual P302のMSC命令の例についての質問です。
MSC W6*W7, A, [W8]-=4, W6, [W10]-=4, W7
w6 0x9051
w7 0x7230
ACCA 0x0005678000
なので、0x0005678000 - (0x9051 * 0x7230) と解釈しました。
これをWindows7の関数電卓で計算するとFFC5085ED0になります。
しかし、Manualは0x0037385ED0です。
この違いを教えてください。
>>503 dsPICは全く知らないけど、0x9051を符号付きと考えれば-0x6fafとなって
つじつまが合うな。
>>504 レスthx
ようやく突破口が見えてきた。
この例題を見ると、積差ではなく、負の数に変換してからw6に入れて、積和を取ってるということだね。
ところで、0x9051が負の数ってどうして気付いたの?
0b表示で考えて、先頭が1だから?
マイコン使いだして日が浅いので、瞬時に正負を見分けられない。
そのコツみたいなのがあれば教えてください。
>>505 符号無しでつじつまが合わなければ符号付きを試してみるのは自然の流れ
だね。サインビットが1だし。
>負の数に変換してからw6に入れて、積和を取ってるということだね。
そういうことではなくて、この命令が符号付き演算の命令なんだと思うけど。
>>506 こういうことか。
w6 0x9051 -> -28591
w7 0x7230 -> 29232
ACCA 0x0005678000 -> 90669056
90669056 - (-28591 * 29232 ) = 926441168 -> 0x0037385ED0
509 :
774ワット発電中さん :2013/07/31(水) 21:37:03.47 ID:HluHCfwE
C言語でバンク形式に配列に保存する場合は どういう風にプログラムを書けばいいのでしょうか?
・連続したアドレスに配置された配列をバンクのように(?)扱いたい ・バンクにまたがって配置されているRAM領域を連続してアクセスしたい どちらでしょうか? 後者の気がしますがよくよく聞いたら前者だったことがあるので
511 :
774ワット発電中さん :2013/07/31(水) 22:26:12.43 ID:HluHCfwE
私が考えているのは前者の方なのですが、 前者と後者ではどういった違いがあるのでしょうか?
>>510 Mid range 以下のPICだと、バンクをまたがったメモリを
連続アクセスするには、自分で関数作らないと無理と思う。
513 :
774ワット発電中さん :2013/08/03(土) 22:48:59.58 ID:TkyVNgjk
MPLABを使ってUARTの送受信のテストを行いたいのですがどういった方法がありますか?
パソコンとつうしんしてみれば?
515 :
774ワット発電中さん :2013/08/04(日) 10:16:39.97 ID:1KVJeq2H
パソコンと通信する場合は usb(pic)-usb(pc)で通信テストすることは可能ですか?
516 :
774ワット発電中さん :2013/08/04(日) 10:50:25.19 ID:Q5ZLcEwG
可能です
USBで通信したらUARTの試験にはならないんでね?
518 :
774ワット発電中さん :2013/08/04(日) 13:05:55.72 ID:1KVJeq2H
そうなのですか? パソコンと接続できる端子がUSBしかないのでこの方法でテストしようと思っているのですが。
正統なIBM PC/AT互換機にはDSUB9ピンでシリアル通信端子が ついてたんだお。最近のノートパソコンにはUSB端子しかないのも あるけど、そういう場合はUSB−Serial変換アダプタを使うヨロシ。 そんでUARTの試験できるお、ハードウェア的には。 ソフトウェア的には、シリアルポートがついていないような世代のPCだと ハイパーターミナルが入っていないから、テラタームみたいのを 自分で探してこなきゃ通信できないけど・・・
520 :
774ワット発電中さん :2013/08/04(日) 21:29:37.22 ID:1KVJeq2H
無事通信のテストをすることができました。 ありがとうございます。
>>519 いいこと言ってるんだけど、最後を「お」って言うの、やめたら?
522 :
774ワット発電中さん :2013/08/07(水) 16:05:36.35 ID:amRUGHht
ねえ、今自分が作ってるものホームページで作ってそのホームページを お互いにリンクでつなげてPICやりはじめるひとたちがもっと気軽に やり始められるような空気感をつくったらいいんじゃね? すそ野が広がればデータ共有とかできて利便性が一気に広がるんじゃね?
523 :
774ワット発電中さん :2013/08/07(水) 16:07:09.85 ID:amRUGHht
とりあえずhtml勉強しながらホームページ作ってみた(´・ω・`)
524 :
774ワット発電中さん :2013/08/07(水) 16:09:21.49 ID:amRUGHht
525 :
774ワット発電中さん :2013/08/07(水) 20:25:24.26 ID:a2clWSLO
MPLABでターゲットデバイスが選択肢にない場合開発に支障はありますか? MPLAB Xにはあるのですが使いにくいので。
今のXは完成度が低すぎる。まともに使えるようになってから乗り換えれば十分。 ツールのデバッグより、実機のデバッグに時間を注ぐべき。
IDEはなんとなくわかるんですが IPEってなんすか、これ。 アイコンから察するに、ROM焼き専用ツールか何かですか?
530 :
774ワット発電中さん :2013/08/08(木) 21:24:03.97 ID:r+Ph3+aq
サイズの大きな三次元配列の領域を確保するいい方法はありませんか?
Xの完成度が低いって度々言われるけどどこが低いんだろうな
>>532 SPI接続でSDカード繋ぐのが一番安上がりかな?
>530 何を重視すんの? 速度? コスト? >531 完成度は知らんけど MPLABの頃は耳かきを使うような不自由さを感じていたが MPLABXになってからはマジックハンドで鉛筆を持っているような気分 (Windows7なので泣く泣くXつかってるけど)
>>535 耳掻きには先の尖ったステンレスピンセットがお勧め。
耳穴の中を想像しながら大物をゲット出来た時の音は感動する。
実使用にはM3の長ネジがいい。
余談だが、MPLABはwin7で問題なく使えてる。
>529 IPEは、PICkit3プログラマーを置き換えるものだと思う。PICkit3プログラマーが対応している筈のデバイス なのに、どうしても書き込めないときにIPEを使ったらすんなり書き込めた。 MPLABXのシミュレータは、確かに完成度が低いとおもう。
538 :
774ワット発電中さん :2013/08/09(金) 18:24:50.35 ID:tsuxspEN
>>535 三次元配列を使いたいのですがサイズが大きくメモリの殆どを使用するので
うまく領域を確保して管理を行いたいのです。
これだからCしか出来ないやつはって言われちゃうんだよ
541 :
774ワット発電中さん :2013/08/09(金) 19:36:50.32 ID:nYyiaCNO
GUI操作で簡単に感覚的にお絵かき感覚でプログラムできないからレベルが低いって言ってるの? じゃあ、お絵かき感覚でプログラムを書くような専用のソフトをつくればいいんじゃね? 最初はつかえねーーとかいってアセンブラで書く人もいずれお絵かきの方へシフトしていくんじゃね?
542 :
774ワット発電中さん :2013/08/09(金) 20:28:48.34 ID:nYyiaCNO
∩_∩ / \ /\ | (゚)=(゚) | | ●_● | / ヽ r⌒| 〃 ------ ヾ | / i/ |_二__ノ ./ / / ) 精神を加速させろ ./ / / // / ./ / ̄ .ヽ、__./ / ⌒ヽ r / | / ノ / / / ./ // / /. ./ ./ / i / ./ / i ./ .ノ.^/ i ./ |_/ i / / / (_/
>>538 PICの種類とコンパイラは何を使っているの?
それによって回答が違ってくるよ
544 :
774ワット発電中さん :2013/08/09(金) 23:18:55.70 ID:tsuxspEN
>>543 PIC24EP512GU810とC30を使用しています。
なら、アセンブラを使うべきだな
初歩的な質問ですみません。 自分は今まで5Vしか使ってこなかったのでわからないのですが、単4電池で動くデバイスはどのような仕組みなのでしょうか?単4電池は1.5Vだと思うので、2つ直列にしても3V、3Vで動くPICなんてあるのでしょうか?
PIC18F14K50とか、1.8Vでも動くよ。
>>547 正に使おうとしてたPICがそれです
ビックリしました。
早急なレスありがとうございます。
余談ですが調べてみるとDC-DCコンバータなるものがあるみたいですね。これって欠点はあるんですかね?
>548 利点: ・動作下限までは入力電圧が変動しても出力が一定である 欠点: ・効率は 100% でない。電池駆動の場合は無駄飯食いはできるだけ避けたい ・スイッチング電源なので大なり小なりノイズが発生する
欠点: ・新品電池から連続使用するときは、最後まで電池を絞りきれるけど、 断続使用のときは、電池にある程度のパワーがないとDCDCコンバータが起動しない。
それは設計が悪い
なんで国内のPIC販売店はみなUSBOTG付きの品番扱わないのかな? 秋月に直接リクエストしたけど、それでも扱ってくれない。 よほど採算が合わないのだろうか。
553 :
774ワット発電中さん :2013/08/13(火) 19:50:23.69 ID:Hbo6z2PT
C30で32768 バイト以上の変数を作成するにはどうすればいいのでしょうか?
OTG自体が流行ってないから物が流れてないんじゃねぇの?
このスマホ時代、OTGの需要がないわけなかろう。
スマホのOTGでPICなんて使わないもの
>>553 勘弁して下さい。ARMとか使ってください…
558 :
774ワット発電中さん :2013/08/15(木) 21:35:23.95 ID:JFMKDMy5
C言語で一次元配列に二次元配列のポインタを入れて三次元配列として扱うことってできますか? 出来る場合はどういう風に書くのかも教えて下さい。
>>558 次元数はともかく、普通の変数にポインタは入れられない。
キャストしたら、ただのアドレス値になってしまうので、
元の変数の型がなんだか分からなくなる。
560 :
774ワット発電中さん :2013/08/16(金) 00:17:41.72 ID:oX4DLj7L
>>559 そうなのですか。
配列をそのまま確保すると容量が大きくなりすぎるので、
配列を分割して宣言したいのですがなにか良い方法はないでしょうか?
>>560 不定形?な配列作りたいなら、ポインタの配列作ればよい。
char *a[3];
char b[1];
char c[5];
char d[3];
a[0]=b;
a[1]=c;
a[2]=d;
みたいな感じで。
>>558 データ数の上限がわかってるならその大きさの
1次元配列を確保して、3次元->1次元の変換関数を
作ってやればいいんだよん
2次元の例だけど
char a[55];
#define address(x, y) ((((x)+1)*(x))/2+(y))
とやっておくと
a[address(0,0)]
a[address(1,0)],a[address(1,1)]
a[address(2,0)],a[address(2,1)],a[address(2,2)]
...
a[address(9,0)],...,a[address(9,9)]
という三角行列を記憶領域の無駄なく確保できる
アドレス計算のオーバヘッドはあるからトレードオフね
>>562 分割したいつってんのにまとめてどうする
#define XX 10 #define YY 10 #define ZZ 3 //個別の2次元配列 int d1[XX][YY]; int d2[XX][YY]; int d3[XX][YY]; struct DIM { int d[XX][YY]; } *dim[ZZ]; dim[0]=(struct DIM*)d1; dim[1]=(struct DIM*)d2; dim[2]=(struct DIM*)d3; int x,y,z; for(z=0;z<ZZ;z++) for(x=0;x<XX;x++) for(y=0;y<YY;y++) dim[z]->d[x][y]=1234;
565 :
774ワット発電中さん :2013/08/16(金) 20:08:11.87 ID:egsYFT0P
>>561-564 みなさんのコードを例に作成していきたいと思います。
ありがとうございます。
>>558 もう解決したんか? そのままCで書けるぞ。
typedef int matrix3[3][3];
matrix3 *mm[3]; /* int (*mm[3])[3][3]; でも可 */
int a[3][3], b[3][3], c[3][3]; /* matrix3 a, b, c でも可 */
mm[0] = &a;
mm[1] = &b;
mm[2] = &c;
(*mm[0])[0][0] = 0; /* (0,0,0)要素に0を代入 */
勿論。gcc -ansi -Wall で確認済。
6桁くらいの7セグLEDをダイナミック点灯で表示中にスイッチを10個くらいスキャンして 入力待ちをしたいのですがそういう場合ダイナミック点灯のルーチンはどういうタイミングで実行すれば良いでしょうか?
>>570 キーマトリクスとLEDのコモンを共通にしていてダイナミック点灯が、割り込みなのでキースキャンしにくいって事への質問でしょうか?
>>570 こんなかんじでどう?
SCAN LED キー(1) キー(2)
1 壱桁 SW1 SW7
2 十桁 SW2 SW8
3 百桁 SW3 SW9
4 千桁 SW4 SW10
5 万桁 SW5 n.c.
6 左端 SW6 n.c.
ご存知の方がいたら教えていただきたいのですが、当方中身に関しては全く判りません。 が、月に300〜1000個程度の書き込みをする必要に迫られています。 調べたところ秋月電子等で購入できるキットだと1個づつの書き込みのようでこれでは作業が大変そう。 EEPROMみたいに1度に10個とか書き込める装置って存在しないのでしょうか?
>>573 tecktoolsあたりが出してるのがあるけど
digikeyで「QW-4ZIF18」を検索
スペルが変だった。 TechToolsのQuickWriterシリーズね。
Microchip Direct で書き込み済みのを買えばいい
579 :
573 :2013/08/20(火) 09:16:26.09 ID:yHlUp6MR
みなさんありがとうございます。 advin.comにあるようなものをイメージしていました。 これはプログラマーにモジュールを繋いで書く感じなのでしょうか。 実際に装置を見られるところはなさそうですね。
ボタンを押すたびカウントup、長押しするとカウント早送り、という動作をさせたいのですが、 Cでどう記述するのでしょう?
Cの問題よりも、他との兼ね合いもあるし、まずアルゴリズムを考えるべき。 これだからCしか出来ない奴は…
>>580 押された時の検出は、
(前回の値 XOR 今回読んだ値) AND 今回や読んだ値
長押し判定
押されていない時にはアップタイマーをクリア。
タイマーが規定の時間になったら早送り
>>580 Cが分からないならアセンブラで組めば良い
if (button()) uptimer=0; else uptimer++; if (uptimer==1) count++; else if (uptimer==100){ uptimer=90; count++; } 適当
>>580 おいらが組むなら、
チャタよけの回路がハードウェア的にあるなら
ボタンの割り込み処理を作っておいて、それとあわせて
タイマーをまわしっぱなしにしておいてタイマー割り込みと、
併用して対処かな。
チャタリングにソフト的に対処するなら
タイマー割り込み毎にスイッチ状態読み取って
そんで長押しか判定するような流れかなぁ。
割り込みハンドラの定義方法は開発環境ごとに違うから
Cだからこうだ!とはいえないと思うお。
delay()関数を捨てれば無限の世界が広がる
>>584 を20回/秒くらい実行すればチャタ対策もレスポンスもOKなんじゃないかな
588 :
774ワット発電中さん :2013/08/22(木) 21:02:19.92 ID:pReh5mHa
割り込みを使用せずにGPIOのピンを監視する場合 メインのループで毎回ピンの値を変数に入れるという処理で問題ないでしょうか? また変数の値に対応してピンの値を変化させたい場合、毎回変数の内容をピンに出力してもいいのでしょうか?
589 :
774ワット発電中さん :2013/08/22(木) 21:22:38.79 ID:5Qn5ytlj
>>588 ピンの変化がどの位かによる。
メインの周期で監視すればいい位の幅なのか、一瞬の変化なのか。
590 :
774ワット発電中さん :2013/08/22(木) 21:47:32.14 ID:pReh5mHa
ピンはデジタルI/Oとして使用します。 一番変化するもので約40ms周期です。
591 :
774ワット発電中さん :2013/08/23(金) 00:20:29.54 ID:KlxZqnli
コンパイラによって違うかもしんないけど I/Oピン書き換えの罠ってのをみるといいかもしんない・・・・ IIC通信をプログラムで組んだ時においらも自力でこの罠に気付いたw
592 :
774ワット発電中さん :2013/08/23(金) 05:50:47.34 ID:+fL3HE6S
>>590 変化を検出出来れば良いのなら、メインループを10ms位でまわす。
変化の周期を正確に計測必要なら、割り込み。
>>591 16F1xxx 以降のなら LATx レジスタ追加されてるから、問題なし。
593 :
774ワット発電中さん :2013/08/26(月) 22:12:02.63 ID:Fm0pk4WD
ヘッダーファイルに #define AN0 ANSELBbits.ANSB0 の用に使用したいピンを定義して使用することは可能でしょうか? またこの様に定義した物に値を代入することは可能なのでしょうか?
>>593 ヒント:
define で宣言したものは、コンパイルする前に、文字列の置き換えがされる。
単発か長押しか・・かぁ。周期はチャタリング除去できる程度に長くとるとして dat = (dat << 1) | ((switch == SWON)?1:0); if (dat == 0xffff) { 長押し } else { switch(dat & 0x3) { case 0x1: 短押し;break; case 0x2: スイッチOFF; break; default: break; } かなりいい加減
>dat = (dat << 1) | ((switch == SWON)?1:0); これは2行の方が分かり易く無いでしょうか? dat <<= 1; if( switch == SWON ) { dat |= 0x0001; }
>>596 >これは2行の方が分かり易く無いでしょうか?
いや、別に・・・
俺流 datはunsigned char 5msec程度でポーリング チャタ取り 50msec間ONで短押し 1secONで長押し if(switch & SWON) dat++; else dat=0; switch(dat) { case 0: スイッチOFF; break; case 10: 短押し;break; case 200: 長押し;break; default: break; }
普通長押しではリピート動作するんじゃじゃない。どうしてステートマシン にしないのかな。
switch(dat) { case 0: スイッチOFF; break; case 10: 短押し;break; case 200: 長押し;dat--;break; default: break; } こう?
602 :
774ワット発電中さん :2013/09/04(水) 10:28:29.80 ID:F8u16Apn
天才
603 :
774ワット発電中さん :2013/09/04(水) 13:15:32.89 ID:tHUsn/Gs
照れるわ
>>600 長押しでキーリピートしたいなら
case 200: 長押し;dat-=20;break;
1秒長押しから100msec毎にキーリピート
>>600 すてきな回答にはありがとうを言えばGJだという意見も、ないこともないね。
606 :
774ワット発電中さん :2013/09/09(月) 20:50:10.46 ID:MKY6nou+
変数は宣言した順番にメモリに配置されるのでしょうか? また拡張データ空間 (EDS)とはどういったものなのでしょうか?
>>606 コンパイラの最適化で順番を入れ替えられるかもしれない。
structで囲めば順番は守られる
608 :
774ワット発電中さん :2013/09/11(水) 09:10:36.51 ID:XRuTsBFB
広告のようにぜんぜんナノワットにならんな 何を無効にすればナノワットになるんか
ほんとうに低消費電力が必要なのには、MSP430を使ってる
クロックを止める IOで電流が流れないようにする あとは?
ソケットから抜く
614 :
774ワット発電中さん :2013/09/12(木) 00:16:38.45 ID:kx0vYhfy
すみません教えてちょうだいください PIC24FJ64GA002の弱プルアップ設定なんですが、 CNPU1、CNPU2のレジスタが、RP0〜15みたいにPB0〜15のように綺麗に並んでればいいのですが RB9を設定する場合はCNPU2の6みたいに変態的な並びなので面倒くさいので 全て下みたいに設定しちゃっても問題ないですか? CNPU1 = 0b1111111111111111; CNPU2 = 0b1111111111111111;
615 :
774ワット発電中さん :2013/09/13(金) 23:37:28.56 ID:hJApx/83
いいと思う。自分でやってみて
616 :
774ワット発電中さん :2013/09/14(土) 10:34:18.39 ID:0kcuqE9a
いろいろオフにしたがぜんぜんナノワットでスリープできんよこれ かなりの誇大広告か
ナノワット対応のチップ買ってる?
だから、ソケットから抜けと…
PICにUSBとLANの両方を持ってるのってある? 本家のMAPSでどれがLANの事だか分からない…。
621 :
774ワット発電中さん :2013/09/14(土) 17:30:44.48 ID:0kcuqE9a
テスターで電流を測定したけど 3vで20μA程度が限界いまのことろ限界
パスコンとか他のところで漏れてないの?
>>620 MAPSならconnectivityの欄展開するとEthrntって出てくるのでそこで指定
>>623 ありがとうございます、…ってMX除いたら10Baseが1シリーズ2品種しかねぇ…。
両方付きなんてMXにしかない…。
色々組めるようになってから再度考えよう…。
>>621 電源電圧 5V対応のは、中にレギュレータ入ってるからナノワットは難しい。
(最近のはレギュレータ切り離せる?)
あとは、スリープ状態の時にpinから流れ出す電流がなるべく0に
なるように、出力状態を設定する必要ある。
626 :
774ワット発電中さん :2013/09/17(火) 09:53:43.43 ID:7SiVhpl8
pic18のフラッシュ64kメモリ4kの奴いいね これだけあればいろいろできる プログラム圧縮とかやめて最初からこっちにすればよかった
627 :
774ワット発電中さん :2013/09/17(火) 22:07:29.26 ID:IQ0aL/vj
MPLABXでtcp/ipスタックを使用したいのですがパスの設定ができません。 どのように設定すればいいのでしょうか? またtcp/ipスタックの使用について参考になりそうなサイトや本があれば教えて下さい。
市販のbluetooth LEドングルを使って通信するデバイスを作りたいんですが、PICはどの型番がおすすめですか? 電池が長持ちするワイヤレスキーボードみたいなものを作りたいです
631 :
774ワット発電中さん :2013/09/19(木) 13:28:50.77 ID:0hlhJEcX
iOSでシリアル通信するにはBLEじゃないと駄目だもんな アップルは本当にふざけた仕様だよまったく
632 :
774ワット発電中さん :2013/09/19(木) 15:59:12.92 ID:yaRQcR3U
シリアルはケロッグが一番うまい
日本製は汚染されてるから、海外製をお勧めする。 俺はドーセットのミューズリーばっかだな。 移動時には、ネイチャーバレーのオーツ&ハニーを数個、持ち歩いてる。48個入りで千円超えるくらい。
そういえば、シナや半島(西日本も)今騒いでるレベルなんかとは比べ物に ならないくらい汚染されてきたことを知らない幸せな人って 本当にいるんだよね。 もちろん、米国本土も・・・・
地下核実験ばんばんやって平気です〜って言ってても名
常にラドン温泉に浸かってるようなもんだろ? なら体にいいはず(確信)
PICは上限は5.5ボルトになってますけど、電池がもったいないので6ボルトでやってます。 今のところ6ボルトでも不具合はなさそうです。 6ボルトの電池では不具合が生じたとかの経験あるかたおしえてください。
いくら情報を集めてもダメなものはダメ
>>835 空中でバンバンやっていたのを知らない世代っているんだよな。
ドーセットはイギリス産なのに旨いな
>>637 動作保証範囲は 5.5Vだが、絶対最大定格はもっと高いから
壊れる事はないと思う。
が、電圧上げるほど消費電力増えるから、電池がもったいない。
>>637 電池が新しいと、1セルあたり1.8V以上あるから壊れる。
ド素人はいろんな条件を考慮出来ないのに、知ったかする。
「これまで6Vで不具合が出た人はいない ⇒ これから先、不具合は出ない」 は偽だと思うけど・・・
pic16f84とかも5.5Vなんでしたっけ
何故データシートを読まないんだ?
もまいらなら覚えていそうだからじゃね?
回答には1週間を要します
嘘教えてやろう
電源を逆につけてチップがアッチッチになったが、何も問題ない。
電源がチャチ過ぎる
自分で使うぶんには、規格外の電圧をかけてもいいじゃない。 壊れたら交換すればいいんだし。
自己責任でお願いします
火までは出なかったけど、部屋が煙とひどい臭いになったことはある つける部品間違えたからだけど…
>>644 絶対最大定格は7Vだから、6Vかけても壊れる事はないと思う。
*動作は保証外だが
655 :
774ワット発電中さん :2013/09/23(月) 01:33:54.67 ID:akL8KsLO
PIC18f24K20でクロックのコンフィグレーション設定がMPLABXで __CONFIG _CONFIG1H , _INTIO2_OSC_1H ってかいてもNGになるんだけど・・ コンフィグレーションワードをなんて書けばいいかだれかおせーて!
>655 使ってるコンパイラ書かないと分からないよ xc8ならをインストールしたディレクトリに以下のファイルがあるから見れ xc8/v1.20/docs/pic18_chipinfo.html
657 :
774ワット発電中さん :2013/09/23(月) 02:18:54.42 ID:akL8KsLO
MPLABX\mpasmx\p18f24k20.incのCONFIG1H Optionsをよく見て 少なくとも_INTIO2_OSC_1Hではない
>655 Window → PIC Memory views → Configuration Bits 各種設定変更 → Generate Source Code to Output ボタンを押す 設定部分のソースコードが生成されるので、コピペ
質問です。 timerを使ってsleepからの復帰できないんでしょうか? およそ一分間隔でtimerから復帰する、という省電力回路つくりたいんですが。
間違えました 質問です。 timerを使ってsleepからの復帰できないんでしょうか? およそ一分間隔でsleepから復帰する、という省電力回路つくりたいんですが。
条件による
>>661 ウォッチドッグタイマ使え
つーかマニュアル読め
XならCONFIG生成させれば
>>663 ありがとうございます。
マニュアルどの辺に書いてあります?
666 :
774ワット発電中さん :2013/09/23(月) 21:43:48.44 ID:akL8KsLO
>>659 できました!
サンキューべりマッチョ!
ペコリ(m´・ω・`)m
>>663 > つーかマニュアル読め
しってるならおしえてあげればいいのに。
ほんとは知らなかったりして。
ググレかす、データ読め、こうゆうの多いよねここ。 それで解決するなら質問しないってのよ。 気つけないとね。
PICの型番もなしじゃエスパーさんもお手上げ
そうそう、質問のしかたが悪いっていうイチャモンのつけかたもあるよね。
必要なキーワード書いてやっても教え方が悪いって文句言うしな
>>672 そんなにむかつくなら、回答しなきゃいいのに。
世の中自分がいなくても結構うまくまわるもんだよ。
だれかが回答するよ。
大変に失礼ながら 「ウォッチドッグタイマ使え つーかマニュアル読め」 という書き方は社会人としてちょっとどうなのかなと思うよ。 せっかくいいアドバイスをしてるのに乱暴すぎて残念だな。
>>660 BaseLine (12bit命令長)のでは、割り込みをサポートしてないので、
sleepからの復帰はWDTでリセットをかけるしかない。
(フラグをみて、Sleepからの復帰かどうかを判断
ただ、Enchanted Baseline というのもあって、これは
pin変化割り込みとタイマー割り込みをサポートしているので、
タイマー割り込みで復帰させる事が可能 (16F570とか)
ただ 1sという長い周期は無理かも。
*リセットスタートするか、その場から再開かを選択可能
Midrange以上の奴は割り込みサポートしてるので、Timerでの復帰が可能。
16bitタイマーとかもあるので、1sとか長い周期も可能。
>>674 ここ2chだお
まともな世界じゃないんだお
それ期待するなら他の掲示板でやれヴォケだお
677 :
774ワット発電中さん :2013/09/24(火) 02:36:57.51 ID:977kOrEJ
〜だお と言うのやめたら? バカに見えるよ。
バカだからそう書いてるんだよ
「バカに見える」とか言っちゃうと、ほんとは馬鹿じゃないみたいだ。
680 :
774ワット発電中さん :2013/09/24(火) 10:04:07.59 ID:977kOrEJ
〜だお っていうのは、いったい誰が流行らせたんだろうか。 いい加減にして欲しい。
>>680 君はバカなんだからちゃんと語尾におをつけなきゃ詐欺で訴えられますお?
× いい加減にして欲しい。
○ いい加減にして欲しいお。
いい加減にして欲しいなっしー!
いい加減にして欲しいにょ! ミ ' ω`ミ
べるのだお
685 :
774ワット発電中さん :2013/09/24(火) 16:28:07.38 ID:y3ASwnEd
ジャイロセンサとpicを使って モーターの正転、逆転をしたいのですが どうしたらいいでしょうか?
正しくつないで 正しくプログラミング
>>685 モーターをドライブする回路とマイコンと 重量計 を用意しておく。
正転と逆転の出力を切り替える関数、停止する関数を用意しておく。
つぎに、ジャイロセンサの重さと
PICの重さを計測しておく。
メイン関数ではループしながら重量計の値を読み、
おかれたのがジャイロセンサ(の重さ)なら正転関数を呼び、
おかれたのがPICなら逆転関数を呼ぶ。
規定外の重さ、ないしは無重量ならばモーターを停止する。
ジャイロセンサってなんじゃろ
重量計使う必要が いまいちわからんのだが。 ジャイロセンサの傾き検出して 基準電圧から どっちに変動したかによって フラグ立てて 正転逆転させるばいいんじゃね?
倒立振子?PID制御から勉強しよう
>>688 近くにジャイロがあるとビービー鳴るんじゃね?
(サンダーバード一号にはカメラセンサーというのがついてて
写真を撮られそうになると警報が鳴ってた)
685です。 ufoキャッチャーつくろうと思ってて 普通のやつじゃ面白みないので そのコントローラをジャイロセンサにしようと 思ったんです。 xy方向を2軸ジャイロセンサでやって zとアームはボタンでやろうとおもってまる
どこのセンサ使うつもりか知らんけど 角度をシリアル通信で垂れ流すとか 要求受け付けたときだけ角度返すとか いろいろモードがあっから使いたいのに合うのを探すヨロシ
PICはピーアイシーですか?ピックですか?
ピク
使わないピンは入力に設定するっていうプログラムよく見るけどなんか意味あるの 出力に設定しといたほうがいいような気がするけど
そのわけは?
内臓プルアップとかない石での、 中途半端な電位を警戒してるんじゃね?
内臓はプルアップできないのだ
内臓プルアップダイエットとか流行りそうだな
昔、左わき腹というか腰の辺りが痛くて医者に行ったら腎下垂って言われた これって腎臓がプルダウンされた状態ですかね
プルアップが無くなって下に落ちた状態
ハイインピーダンス
質問させて下さい。 PICマイコンがあるのですが、型番の数値が読めなくて困ってます。 こういう場合どうすればこのPICの正体がわかるのでしょうか?
どうしてPICと分かるのですか!?
>>706 pickitに繋げれば型番が表示される
最近PIC12F683で遊び始めたらチップも開発環境もえらく変わっててワロタ。アセンブラとかCCSコンパイラとかもう誰も使ってないのな ところでPICで初めの頃ちょっと遊んだAのつかない無印PIC16F84とワンタイム品のPIC16C56とEEPROM(24LC64,93C56N)が 新古品になって余ってるがなんとか余生を送らせてあげたい。剣山には重さが足りない。アイデア求む
誰も使ってなくないです、 たまに使うけど今もアセンブラです・・・
初めてのテストのときは、ハンドアセンブルして、 ユニバーサルプログラマでメモリエディットして 書き込みしたっけな。
>>709 神棚にはピッタリじゃないか
金属部分を酸化させないようにプラケース入れておけば良い
うちにもあるぞ
アセンブラと言えば 12-Bit/14-Bit Instructionで BCとかBNCなんかの拡張命令は使ってる?
使ってる。BTFSC、BTFSSは感覚的に好きじゃないので。
pic18になると命令数が一気に増えるねw そのかわりバンク処理が楽になったからおあいこ(@_@)
xc8やってみたけど、やっぱ素人にはアセンブラが一番だな。確実だから。 バンクの切り替えはたしかにウザイ。
サイクル計算で時間をきちんとわかるから、俺はアセンブラ!
>>718 μs単位の時間管理が必要ならアセンブラしかないな。
あと、Baselineシリーズは、Cで書くと効率悪すぎだし。
>>717 えー、アセンブラめんどくさいし移植性皆無だからつかわないよー(´・ω・`)
Cで書くと、容量不足で小さい石に移植できないから、移植性は悪い。 アセンブラで書けば、少々の手直しで移植出来る事が多い
Cなんて高水準アセンブラだろ
16F1825用のプログラムで、XC8 1.20 を使って配列を32バイトの整数倍のアドレスから 配置したいんだけど、どうすればいいでしょうか. __align(), __attribute__((aligned()) ともにエラーになります マニュアルには __align 使えってあると同時に、never been imlemented とも書いてあって訳わかりません
今日からSDCCではじめました 割込のサンプルコードください
727 :
774ワット発電中さん :2013/09/30(月) 20:24:31.15 ID:4EupQQfE
ちなみに16F877っすw
728 :
723 :2013/09/30(月) 21:56:16.71 ID:7SaGrAXx
>>725 ありがとう やっぱり駄目なんですね・・・
リンカースクリプトいじるか、陽に配置アドレス指定するしかないのか
729 :
723 :2013/10/01(火) 00:09:27.41 ID:iimpkaRB
プログラムフラッシュのデータ1バイトを書き換えるには、 いったんROWをバッファにリード、ROW消去、バッファ中の対象バイト書き換え、フラッシュROWにバッファ内容書き込みなんだけど、 作ろうとしているシステムはいつ電源が落ちるか分からない。 なので一連の手順をアトミックに実行しないといけないことに気付いた →ログ先行書き込みでやるか・・・ チラ裏でごめんな
ところで「ROW」って何? PICにDRAM入ってんのか
>>726 マニュアルにサンプルコード入ってるよ。
雑すぎたので補足。 割り込みは、基本的に ・ペリフェラルの機能設定 ・ペリフェラルの*IFフラグのクリア ・ペリフェラルの*IEフラグをイネーブルにする ・タイマなどの場合は起動 の順番で動かす。 割り込みハンドラは、 ・(必要ならば)*IEフラグをディゼーブルにしてその後の割り込みを禁止する ・*IFフラグをクリア(これをやらないと、割り込みから復帰した時に繰り返し割り込みが発生する場合がある) って感じかな? 割り込みが必要なくなったらペリフェラルを停止して*IEフラグもクリア。ね。
そんな古いの使うなよっていわるかと思ったのにありがてぇありがてぇ 見てきます
rfPIC12F675や12F529T39A等の電波の送信、受信機能のあるPICは 日本では取り扱っている店など無いのでしょうか? また、使用例などググっても日本語のページなど出ていませんが それほど手に入りづらいのでしょうか?
>>737 そうなんですか。
知りませんでした。
しかし、7500円以下は送料2000円って個人ではちょっと手を出しにくいですね。
このあたりが、個人の電子工作でこの手のPICが流行らないところなのでしょうか?
先日の書き込みの後、更に調べてみましたが、個人ではやはり手を出しにくいのか
使用例など他のPICに比べるとほとんど無いようでした。
自分のスキルとの兼ね合いもありますが、やはり(入手性、情報的に)敷居が高い石なのでしょうか?
>>738 PIC12F529T39Aならホンの60個で7500円じゃん。
他の買物もあれば個数は下げられるし。
740 :
774ワット発電中さん :2013/10/02(水) 20:12:35.64 ID:YBXCrdyh
>>736 電波は公共の財産
日本の技適承認も受けてないのを密輸するのは犯罪
輸入しただけで犯罪と思ってるなら、もっと勉強したほうがいい。
742 :
774ワット発電中さん :2013/10/02(水) 20:49:50.35 ID:jF4u2uKr
uartとEthernetで通信するにはどうすればいいのでしょうか?
つ「パソコン」
>>739 初心者専用スレに書いたつもりだったのですが、プロの方ですか?
精々2,3種類を4,5個程度しか買わない自分には7500円分もの買い物はハードル高すぎです。
ふつうーに趣味の電子工作だが。 たいてい25個で単価下がるのでストックしとく分も考えてそれくらい買っとくし、 ついででよく使う汎用ロジックや1GLを10個とか25個とか数種入れて、 ちょいと足りないならプルアップ等でよく使う10kの抵抗か パスコン用103〜104のセラコン入れて調整すれば大体それくらい行くぞ。
>>745 いや、それだと送料がばかにならんから。
だから、他で入手出来ないなら送料込みがそのチップの価格なんだよ。
>>738 マイクロチップ社のサイトの通販ページじゃダメなのかな?
一個から買えて送料もそこそこ安いけど。
「日本では取り扱っている店など無いのでしょうか?」 って部分が置き去りになってませんかね?
じゃあ「無い」ってことで
あろうがなかろうが俺らは知ったこっちゃないもんね
windows7に変えたらものすごく調子悪い。 どうやらコンパイラのパスが通ってないらしい。 XPのときは何の問題もなかったのに。 MPLAB IDE 8.92とWIN7は相性わるいんだろうか。
トランジスタの記号の足のアサインが覚えられませんw NPNとPNPとFETとかもう無理です。 人間失格でしょうか。
755 :
774ワット発電中さん :2013/10/04(金) 16:51:03.13 ID:P9ppvezj
病院逝け
エクボって覚えんだよwww
ECBの順じゃないのも多いので、俺いちいちデータシートで確認してるw 覚えるの無理w
>>754 足はきちんとデータシートで確認するクセをつけておいたほうがいい。
でないと、ハマるよ。
>>754 そんなもん覚える方が無理だし型番違うときにミスる基になるだけだから覚えなくていいです。
今はWebでデータシート見れるからそれ見るなりプリントなりメモなりすればいいです。
先輩で分かる人いるぞwww わかんない場合、テスターで調べてる
そりゃトランジスタといえば2S(A/B/C/D)の日本製でピンアサインもエクボで通じた大昔の話だろ いまや2Nxxなんて海外デバイスもふつーに使われるのに思い込みは危険だわ
自分が扱う定番部品とかあるだろうから そういうよく使う部品のpin配置は覚えておいた方が良いですが、 使用履歴のある全てのデバイスを覚えておくのは難しいでしょう
>>759 こう言った、PDFでおいて下さっている所って良いですよね。
探しても初心者から中級向けの電気関係ではあまり見かけないけど。。。
もし他にもご存知だったら、また教えてください。
しかし、2SC1815のデータシートの図がbottom viewだと気付けずにハマる罠があったり。
bottom viewって何?
人形のパンツを覗き込む視点が、bottom viewだ。
768 :
774ワット発電中さん :2013/10/05(土) 08:59:01.84 ID:slFrxaLM
発光ダイオードも長い方がアノードとは限らないんだよな
SMDではないスルーホール実装だからパターン側から見たpin配置を示しても問題はないと思うがね。 メンテナンス時にpin配置が判らずに四苦八苦するよりも、マーキングで判読できてありがたいモノだと思う。 それにしてもいろいろな意見があるものだ
>>769 リレーとかの盤関係の機材は、基板取り付けタイプでないものもあるしで、
端子側から見た図で統一してるんだろうね。
>>767 かつてはトランジスタガールが居たそうな
三本足の?
トランジスタガールは、トランジスタを手作業でボンディングしていた女工さん トランジスタグラマーは、チビデブの隠語
777 :
777 :2013/10/06(日) 07:09:35.23 ID:0eRoAZ2F
777
173cm B89 W64 H88 な漏れから見ると、芸能人/グラドルの3サイズは嘘だらけだな。
キューポラのある街
アイドルが生息するのは ブラウン管の向こうの非ユークリッド空間だから 自分と同じ尺度で測っちゃだめなんだよ、きっと・・・
781 :
774ワット発電中さん :2013/10/07(月) 02:11:17.93 ID:ZyeA3W4D
pickit3間違えて16v入れたら煙り噴いて死亡した、これはひどい
うん、確かに酷い仕打ちだ。
長年連れ添った相棒になんて仕打ちだ。 これはひどい!!
スイッチを一回押したらAPGMへ二回押したらBPGMへ、三回押したらCPGM実行となる プログラム書いてるんだけど、なんかグダグダになってうまくいかない。 考えてみると、こうゆうプログラムは腕時計とかいろんなとこで使われてるんで、定番の プログラムってできてるんじゃないのかな。 知ってる人おしえて。 アセンブラでもC言語でもどちらでもOK.
>>784 まずは、仕様を明確にすべし
何ミリ秒のOFF期間にするとか、チャタリング防止時間はどれ位かとか。
仕様が決まれば、プログラムは、そのままコーディングすればよろし。
定番だからこそ自力でプログラムする価値がある。 それはお前の血となり骨となるだろう。
>>785 > まずは、仕様を明確にすべし
やっぱりそうくるか。
そらそうよ
アルゴリズムでかんがえて分岐させればいいだけじゃね? if文 とか条件付きでgoto命令実行で簡単にできるんじゃね? とりあえずアセンブラ命令表を見てみればいいんじゃね? 時計ならタイマー機能レジスタつかったほうがいいよ! アセンブラ命令で繰り返し命令で単位時間つくるとちょーめんどいから!
>>765 おい最近の俺がいるじゃないかww
1815じゃなくて電圧変更で最近変えたレギュレーター用ICがボトムビューで
配線間違えて燃えたw
>>788 「やっぱり」をつけてと書いたんだけど、その微妙な意味が通じなかったか。
まずは、その自分の考えは十分他人に伝わってる「はず」という思い込みを直すべき
>>790 TopViewかBottomViewかなんて言う 次元の低い話は止めましょう。
そういう図を見たら「おっと、Viewの方向に気をつけなきゃ」と
思うようになればいいんです。特にTO92注意。
あ、あと、1815じゃなくて 1815 ね。
1815←なぁに、むしろ耐性が付く
ラダー抵抗というのを初めて知った…( ´△`) デジタル出力でアナログっぽく出来るなんて…
1815←秋月っぽくてええやん
1月18日 - 米英戦争:ニューオーリンズの戦いで米軍が勝利。 2月26日 - ナポレオン・ボナパルトがエルバ島を脱出、パリに進軍。 3月20日-6月28日 - ナポレオンの百日天下。 4月10日-4月15日 - インドネシアのタンボラ山が大噴火。記録に残っている噴火としては史上最大。(死者9万2千人) 6月8日 - ドイツ連邦がウィーン議定書に基づくドイツ連邦規約に基づき、オーストリアを盟主として発足。 6月9日 - ウィーン議定書(ウィーン体制の成立) 6月18日 - ワーテルローの戦いでフランス・ナポレオン軍がイギリス・オランダ連合軍およびプロイセン軍に敗北。 杉田玄白が蘭学事始を完成。 オーギュスタン・ジャン・フレネルがフレネル回折を発見。 伊能忠敬の第9次測量実施。
エッナニカモンダイデモアルノ?
2120
windous7にしたらpickit3がめちゃめちゃ調子いい。 xpのときは電源ちょっとはずすとIDが認識できなくなったんだけど今はぜんぜん平気。 ちなみにIDEはv8.86。そのうちMPLAB Xにしようかな。
12F683でGP1でAD変換した値の大きさに応じた時間、任意のピンをHighにする、と言う回路を製作中 です。 PICKIT3で書き込み、そのままPICKIT3を繋いだままだとAD変換がきちんと反映された想定通りの動作 をするのですが、PICKIT3を外して別の電源に繋ぐとボリュームを動かしても出力ピンからのパルスの幅 が変わらず原因が分からず困っています。 ぐぐってみたところ、マイクロチップのフォーラムm569545.aspxに同様の書き込みをみつけ、 PICの型こそ違えど、全く同じトラブルの報告&解決の書き込みを発見したのですが、12f683には デバッグモードと言うものは見当たらず、途方に暮れています。 プログラム内のコンフィグ設定、または書き込みの際のIDEの設定などに問題が有るのでは?と疑っては いるのですが基本的な理解が浅い事も有り手詰まりになってしまいました。 なにかアドバイスがある方がいらっしゃいましたら、アドバイスを頂けませんでしょうか? 環境は XC8(v1.20) MPLAB X IDE (v1.90) PICKIT3です。
別の電源にして動いてることは確認できてる? 電源変えたら動作がおかしくなることはよくあること。 LEDでも一定間隔で点滅させて動いていることを確認するべき。
GP1の電圧をテスターで測ったらちゃんと変化してるか? GP1はICSPCLKとの共用pin PICKIT3をつないだままだと PICKIT側でプルダウンされているはず。 回路or配線がおかしくて、このプルダウン抵抗依存の 回路になってしまっているんじゃないか
806 :
802 :2013/10/14(月) 00:07:53.35 ID:tn7I7qMN
>>803 , 804, 805
皆さん、アドバイスありがとうございます。
一つずつ確認してたところ、805さんのご指摘通り、誤配線によりプルダウン抵抗依存の回路になって
しまってたようです。
配線を修正したところ、いずれの5V電源に繋いでも想定通りのPWMが各GPから出力されるようになりました。
ありがとうございました!
PICで湿度計を作ろうと思っているのですが、 調べたところ、湿度センサーでI2Cなどデジタル出力の物で 手ごろな価格(1000円以内程度)って見つからなかったのですが、 その様な湿度センサーをご存知の方居られましたら教えていただけないでしょうか? よろしくお願いいたします。
>>807 温度センサーを2個使って、片方を湿ったガーゼに...
>>807 湿度センサ HS−15P
で検索してみればいいんじゃね?
そんでA/D変換機能のあるPICつかえばいいだけやん。
811 :
774ワット発電中さん :2013/10/18(金) 05:23:10.93 ID:gsfn4Tz+
812 :
774ワット発電中さん :2013/10/18(金) 05:31:51.12 ID:gsfn4Tz+
ダイオードで十分な気がする。 回路の勉強にもなるし、安い。
湿度計ほしがってんのに温度計紹介してどうすんだお? 二つ用意して片方湿らせといて換算テーブルから湿度計算すんのかよ面倒だろ!!!
給水も自動化する必要があるな
しかも乾湿球計は給水に水道水を使うと 湿球のガーゼがカルシウムでカピカピになるんだよょょ・・・
ペルチェで鏡を冷やして反射光で露点を測定
>>815 若干の手間だし、カルシウムの問題は、RO水使えばいいが、そもそも、カルシウムが析出した所で、精度には関係ない。
市販のセンサは、精度がいまいちな上に、長期間使うとどんどん精度が悪化する。
自宅の鯖で連続観測してるのは湿球方式で計測してるよ。どうせ気温も測るから、乾球側は元々必要な物だし。
8ピンPICに作りこんであるから、結構便利につかえる。
表示が欲しければピンの多いPICに焼けば良いだけなので、特殊なセンサの在庫不要で超便利。
連続で長期間計る必要が無いなら、
>>818 の方法もお勧め。
そうでもないお。 ガーゼにカルシウムが析出しはじめると水分を揚げにくくなって 乾球化して精度悪くなるおっ おっ ⊂(^ω^)⊃ (建前としては、かるしうむは食酢とかでとかすんだけど、 食酢じゃ薄くて、なかなかとけないおっ 個人的所見では ダイソーとかで粉のクエン酸売ってるので そっちのほうが濃くできて お勧めだお)
>>821 実際にやった事無いだろ。ガーゼ位、交換しろよ。
食酢だのクエン酸なんて使ってそれが洗浄不良になったらそれこそ精度ガタ落ち。
カルシウムの方が圧倒的にマシだわw
823 :
774ワット発電中さん :2013/10/18(金) 22:42:11.36 ID:ACvtht5L
uartの受信送信ができない場合まずどこから調べていけばいいのでしょうか?
>>823 まず、ハード(配線)が正しいかどうかを確認する。
とりあえず、ボーレートとかを設定したあと、割り込み使わずに
一定間隔で送信レジスタたたいて見るとか。
受信ができることを別途確認したPC(UARTインターフェース&端末ソフト)を用意 PICで送信、PCで受信 PCの端末ソフトでボーレート設定を変えながら表示の化け具合をみてみる
・一見関係ないけど、とりあえずLEDでも点滅させて「プログラムが動いているかどうか」をまず確認。 ・送信できてるか、オシロで通信線見る ・受信させようとする信号は正しいのか、やっぱりオシロで通信線をみる
827 :
774ワット発電中さん :2013/10/18(金) 23:24:24.25 ID:ACvtht5L
>>824-826 ありがとうございます。
とりあえずPC側の出力がちゃんと出来ているのを
確認したのでPICの配線まわりから調べていこと思います。
さっき作った万能基板でなんで動かないかわからなかったけどルーペで拡大したら 金属ゴミみたいなのが原因だったらしい。ピンセットでキレイにしたら何事も無く動いた PICから煙出るしもうダメになったと思ったのにそのまま動いてる。意外に丈夫なのねw
807です。 皆様、アドバイスありがとうございます。 一度、HS-15Pを買って試したのですが、OPアンプが必要な事など 使い勝手が良くなかったのでデジタルな物を探していました。 ストロベリーリナックスのRHT03と秋月のAM2302ってシリアル通信なのですね。 シリアルって使った事が無いのでI2C等を探していましたが勉強の為にも 挑戦してみようと思います。 乾球、湿球の方式はセンサーでも出来ると思っていませんでした。 こちらの方式も考えてみようと思います。 しかし、温度センサを湿球にする場合は工夫が要りそうですね。 エポキシボンドなどで配線部分ごと固めてしまえば良いのでしょうか? そのあたりも考えるのが楽しそうですね。 ありがとうございました。
>>829 湿球は、細いガラス管の片方を焼き閉じて使ってるけど
ガラス管の入手が難しければストローでもOK
831 :
774ワット発電中さん :2013/10/19(土) 14:05:37.12 ID:DRUj496y
PWMでコイル使ってDCコンバーター作ってたらいろんなものが壊れまくったけど 12Vから20V5A以上の性能はでた
>>830 その場合、乾球側も同様にガラス管に入れて条件を同じにするのでしょうか?
漠然としていて申し訳ないのですが、PICAXEってどうなんでしょう?
まあいいんじゃない?
PICマイコンの本を読んでたら レジスタの各ビットの役割を説明してるところに<1:0>や<4:0>という表記が 例えばPIC16F1936のADCON1レジスタのところは [ ADFM | ADCS<2:0> | - | ADNREF | ADPREF<1:0> ] この<>でくくってる表記の意味を教えていただきたいです
>>835 [1:0] 2bit の数値
[2:0] 3bit の数値
LATAに0x00を書いておいて、 TRISA = 0x00でRA0に”L”出力 TRISA = 0x01でRA0をHi−Z という使い方(オーブンドレイン?)はできますか?
できるよ。
入出力の切り替えという意味だけなら、 (TRIS変更してる間もラッチレジスタに値を温存しとくことは)できるだろうけど、でも おーぷんドレインどうさせるときはODCxレジスタがある機種じゃないとまずいんでね? っていうかOPEN DRAINは出力動作の話でねえの?
まあ電気的特性は守れよ
質問なんですが、PICを使ってUSBキーボードまたはPS2キーボードを2台以上のPCで 同じ入力するデバイスって作成するのは難しいでしょうか?
可能
845 :
842 :2013/10/24(木) 08:33:26.80 ID:wjODg0aw
0からスタートなので予算とか考えると、 完成品などで売ってるもので組み合わせてどうにかしたほうがよさそうですね。 するとしたらi2cとかで連携させる感じでPIC1台では難しい感じですか?
846 :
774ワット発電中さん :2013/10/24(木) 10:01:38.58 ID:sHe6FIL1
道は険しそうだ
>>842 PICを使うのが目的ならともかく、キーボードを共有するのが目的ならINPUT DIRECTORみたいなソフトを使うのが安くて簡単だと思うよ。
>>847 2台以上同時に同じ入力を出来ないといけないので、切り替え器では目的を果たせないんです。
そいうソフトあったんだけど、プロテクトソフトで弾かれて使えなかった。
ドライバ一つ作るほうが賢明だと思うけどな。OSが何かしらないけどWindowsなら NT4とかよほど古くない限りWDFユーザーモードドライバモデルで作ればブルースクリーンも出ないし サンプルも豊富でお気楽簡単に作れるのに
PIC32て安いけどどんくらいエロいの? 16ビットとか死んでしまうの?
ビデオカメラが作れるぐらいしか知らん
当方CCS PICCのバージョン4を所有しているのですが 最近の16F1シリーズのコンパイルは無理でしょうか ちなみに14bitのコンパイラなので18Fシリーズには使えないものです また無理でしたらフリーのコンパイラあればおすすめを教えて下さい
所有してるのに対応PICもわからんのか
XC8なら使えるだろう
データ中の“1"の数を数えたいんですが、 例えば8ビットなら 0x00→0 0x01→1 0x02→1 0x03→2 0x80→1 0xFF→8 256ワードのテーブルを引く以外で BTFSC+INCFを8回くりかえすより効率よい良い方法はないですよね?
ビットの数を数える でググればいいじゃない?
4ビットずつ16ワードののテーブルを引く
(0x00+1)/2=0x001/2=0x00 (0x01+1)/2=0x010/2=0x01 (0x10+1)/2=0x011/2=0x01 (0x11+1)/2=0x100/2=0x10 となることを利用する。 使用レジスタDATA(元データ),SUM(計算結果),20サイクル movf DATA,w andlw b'00110011' addlw b'00010001' andlw b'01100110' movwf SUM swapf SUM,w addwf SUM,w andlw b'00001110';下位4ビットのみ有効 movwf SUM rrf DATA,F rrf DATA,w andlw b'00110011' addlw b'00010001' andlw b'01100110' movwf DATA swapf DATA,w addwf DATA,w andlw b'00001110';下位4ビットのみ有効 addwf SUM,f ;Carryは必ずクリアされる rrf SUM,f ;SUM = SUM/2
>>853 ありがとうございます
CCSの公式サイトでは対応してると表記していますが
古いものなのでヘッダファイルがありませんでしたアップデートが必要なのでしょう
XC8を試してみます
>>858 BTFSC+INCFを8回くりかえしたほうが効率いいような気が
>>855 "Hacker's Delight", 2nd Ed を読むと、いろいろ書いてあって楽しいよ
BTFSC+INCFを8回くりかえすのと変わらないな movf data,w ;1ビット加算 andlw 0x55 movwf temp rrf data,w andlw 0x55 addwf temp,f movf temp,w ;2ビット加算 andlw 0x33 movwf data rrf temp,f rrf temp,w andlw 0x33 addwf data,f swapf data,w ;4ビット加算 addwf data,w andlw 0x0f movwf data ;結果
>>855 どうもありがとう、勉強になりました。(858)
>>862 どうもありがとう、勉強になりました。(858)
ついでですが、 ソフトシリアル8ビットノーパリ1stopbit送受信で短いコードありませんか
ついでw
全二重でお願いします。
こし餡と生醤油がございますが?
羽二重餅?
倍返しだ
858改良版、これでいけるようです。16サイクル movf DATA,w andlw b'00110011' addlw b'00010001' andlw b'01100110' movwf SUM rrf DATA,F rrf DATA,w andlw b'00110011' addlw b'00010001' andlw b'01100110' addwf SUM,f swapf SUM,w addwf SUM,f rrf SUM,f movlw b'00001111' andwf SUM,f
255個のテーブルシャンプの方が速いと思う。ゼロはチェックし-1 org HIGH $ * 100h + 100h addwf PCL, retlw 0x00 retlw 0x01 retlw 0x01 retlw 0x03 retlw 0x01 retlw 0x02 : :
Enhanced mid-range限定 128個のテーブル clrf SUM lsrf DATA, w call subroutine addwfc SUM, f subroutine brw retlw H'00' ; 0x00 retlw H'01' ; 0x01 ... retlw H'07' ; 0x7f
n bit の対象に対して O(n) の解ばかりじゃんかよ O(log n) の解を出すやつはおらんのか プロセッサによってはpopilation count命令持っているのもあるよね
あ、表引きは定数時間ですた ごめんなさい
Enhanced mid-rangeなら 256個のテーブルで7サイクル
movlp (look_up_tble
>>8 )
movf DATA, w
call look_up_tble
movwf SUM
look_up_tble:
retlw H'00' ; 0x00
retlw H'01' ; 0x01
...
retlw H'08' ; 0xff
<訂正>
Enhanced mid-rangeなら 256個のテーブルで7サイクル
movlp (look_up_tble
>>8 )
movf DATA, w
callw ;look_up_tble
movwf SUM
look_up_tble:
retlw H'00' ; 0x00
retlw H'01' ; 0x01
...
retlw H'08' ; 0xff
Enhanced mid-rangeでないなら 255個のテーブルで11サイクル movf DATA, w skpnz goto $+3 decf DATA, w call look_up_tble movwf SUM look_up_tble: addwf PCL,f retlw H'01' ; 0x01 ... retlw H'08' ; 0xff
>>868 全二重自体見ないなあ…
作りかけの受信だけ置いとくんで適当に使ってください
serialrx:
btfsc rxstate,0
goto reading
idle:
decfsz rxphase,F
goto continue
incf rxphase,F
btfss GPIO,3
goto continue
movlw 4
movwf rxphase
bsf rxstate,0
movf rxptr,W
movwf FSR
clrf INDF
bsf INDF,7
goto continue
reading:
decfsz rxphase,F
goto continue
movf rxptr,W
movwf FSR
rrf INDF,F
bcf INDF,7
btfss GPIO,3
bsf INDF,7
btfsc STATUS,C
goto rxdone
movlw 3
movwf rxphase
goto continue
18F25K80なのですが、ソフト上でリセットをかけることはできますでしょうか? うまくリセットをかける手段があればご教授を・・・
RESET Reset 構文: RESET オペランド: なし 動作: MCLRリセットの影響を受ける全てのレジスタとフラグをリセットする。 影響を受けるステータス: 全て エンコード: 0000 0000 1111 1111 説明: この命令は、MCLR リセットをソフトウェアで実行する。
マイコンの勉強難しすぎるわ。 お前ら天才か! まったく無知の俺はとりあえず計算機工学から始めたほうがええんか? 何から理解すれば分かるようになるんだ。。
古典的な教本で勉強すると、 PICはハーバードアーキテクチャだから 混乱するんじゃね?使いながら覚えたほうが早いと思うお
>>886 その方が良い。プログラムなんてどのマイコンでも大差無いから、基礎が判ってるとどれでも簡単に使いこなせる。
基礎をしらないと、出来合いのプログラムを焼くくらいがせいぜいでその先も進まなくなるし、理解出来ないで終わる。
>>886 "マイコンの勉強"と構えるとむずかしいと思われ、
肝心なのは"マイコンを使って何がしたいか"でしょ
同じようなことを考えている人は結構いるもので、
ネットの時代なのだから、情報も盛りだくさん。
とりあえず、作りたいものの構想が浮かんだら
構想に近いものをネットで探しまくれ。
最初は(ハード・ソフトの)モノマネでもいいじゃないか。
たくさん試しているうちに知識と実力は養われるものだと思ふ。
レスありがとう。 お前ら天才なくせに優しいなんて・・・ とりあえず見よう見まねでLチカから頑張ってみてるとこ。 また何かあったら教えてください。
>>890 Lチカが動けば開発環境、手順、電源、設定とか正しいと思うのでひと安心だね。
それで満足してしまい込む人も多いのでガンバッテね
C言語で作ろうとしてるがしょっちゅう;をつけ忘れるぜ
>>892 このまえ自然言語でメモを書いていたとき、
「お茶休憩」と書こうとして「tea break;」って書いてしまったよw
>>893 LISPer定番のネタ思い出した。
(COFFEE-P)
895 :
893 :2013/11/07(木) 23:08:58.71 ID:2Mu9WgNn
896 :
774ワット発電中さん :2013/11/08(金) 04:33:43.12 ID:Ng/gcyIH
>>890 紙テープに一定間隔で穴開けてスイッチをオンオフできるようにしたものに
チョット毛が生えたようなもんだから難しく考えるな
この差が ちょっと って随分巨視的な視点だなw
>>896 2行おき、なつかしいな。
nifty-serveとかで、時々叩かれてた奴。
C言語でPIC開発を始めたいと思ってます。これ買っとけというような良本ありますか?
K&R
>>900 いま本家の出した無料のコンパイラxc8がでてきて、まだいい本がでてない。
さがせばあるかなー。もう少し待つか。
英語読めるようにした方がいいよ(´・ω・`) 英語使えると色々タダの文書読めるようになるから(´・ω・`) 後、大半のソースコードは英語文化だからね(´・ω・`) とりあえず、マイクロチップ社のホムペにあるMCUのデータシートとERRATAから始めようか(´・ω・`) その次にネットにばらまかれてるソースコード読めば七割位はいけると思うよ(´・ω・`)
PIC用の書き込みアダプター探してるけど、いいのない?
>>904 そうそう、言い忘れていたけどXC8は凄くマニュアルがわかりにくいから(´・ω・`)
インスコされた先のディレクトリにヘッダがあるけど、その記述を見て何のレジスタが何という名前の変数で扱われているかとか
後はライブラリでどのタイプの関数が定義されてるか見極めないといけないよ(´・ω・`)
同じ名前の関数で引数の数も意味もMCUの品種ごとに違うとか普通だからね(´・ω・`)
>>904 欲しているのは日本語の解説本なのに回答なしのいつもの精神論ですか!
>>906 老害特有のはぐらかしですかw
解説本しってるなら紹介する。知らないなら黙っていること
英語が読めないとも書いてないがな
>>907 日本語でマトモに初心者向けの本はない気がするんだけど(´・ω・`)
一番わかりやすいのがトラ技のたまにある特集記事なんじゃないかな(´・ω・`)
という所でお察し下さいとしかいえないな(´・ω・`)
>>907 XC8の元になってる、Hi-TECH Cのが良いと思う。
コンパイラ依存じゃない記述で書かれた本ってあるっけ?
>>913 そりゃもちろん
>>901 の挙げたK&Rでね?
組み込み用途でそんなもん読んでも効率悪すぎて俺は薦めないが。
>>914 機種依存しないならANSI-Cだろ。
K&Rの時代から関係の深い石田晴久じっちゃんのANSI-C入門書とかはいかが?
K&RでもANSI準拠の第2版しか読んでないわ
C言語の本はK&Rしか読んだことがない。 しかしこの本は計算機のことを知っている人にしかすすめられない。
やっぱ「はじめてのC」だろ?
K&RとCの入門書買ってみました! 参考意見ありがとうございました。
C言語の学習本とPICの学習本は別の方がいいね
>900 まだ何も初めていないなら、C言語でPIC16シリーズを選ばないほうがいいよ。 PIC18F以降、できればPIC24(dsPIC含)以降か 他メーカーのマイコンがいい。 PIC16Fは初代PIC1650(1976年製)から変わらずの古いアーキテクチャだから C言語と相性が悪い。
922 :
774ワット発電中さん :2013/11/10(日) 17:53:58.03 ID:WeMNtYmb
PIC16はC言語と相性以前にプログラム容量が少なすぎて超単機能ムキ
C言語で単機能向きに書いたっていいじゃない。 Cと相性が悪いのはそのとおり! だが初代からはハードウェアスタックが4倍にも拡張されている。 ここだけは譲れない!!
確かに初代とミッドレンジ比べると ハードウェア的なの除けばスタックの量が一番の改善かもなあ ベースライン(≒初代)使ってると関数に分ける余裕なくてほとんど一本道
Lチカを卒業したら何を勉強したらいいんだ?
鳴り物なんてどうよ?
>>926 PWMというやつですかね?次の課題にしてみます。
勉強が目的だと何をターゲットにしていくかがやはり苦しいですね。。
いろんなサンプル本に目を通して自分なりに実装を勉強していくしかないですね。
ありがとうございます。また何か意見あればよろしくお願いします。
18Fでも使ってソフトウェアサンプリングで 8和音ぐらいの電子オルゴールでも作ると面白いかも タイマー割込みとPWMの勉強になる
実用的なものを作ると達成感もあっていいよ 手始めに時計とかどうよ
とりあえず、PIC1年生で、C言語も1年生の俺のバイブル。 C言語の基本文法は スラスラわかるC言語 岡嶋 裕史 (著) これが、一番わかりやすかった。 PICは、コンフィグ楽するためだけの軽い気持ちでMikroCの環境を選んだので 技術評論社の2冊 Cで開発するPICモジュール・プログラム・サンプル集 稲崎 弘次 (著) と ブレッドボードではじめるマイコンプログラミング 青木直史 著 これらが、MikroCでの解説なので非常に便利。 MPLAB使い人は解説本もっと沢山あるんじゃないの? 俺みたいに初心者でMikroCだと結局MPLAB用の解説書を自分で解読して2度手間だけど、 開発環境的にはMikroCはとっつき易いので満足してる。 個人的にはCQ出版も良いけど、技術評論社が同じような本が沢山出てて、著者によって プログラムの書き方など違ってかなり参考になる。
>>925 bluetoothを使ったポータブルワイヤレスオシロ作ろうぜ
>>909 > 日本語なんていつ言ってた?
こいつバカだろ。
>>929 そだね。
割り込み使ったり、7セグをダイナミック点灯したり設定スイッチチャタ取り、長押しとか色々やることがいっぱいあるので達成感あるよね。
配線数も多いし配線チェック、簡単なソフト仕様書、フロー等の設計書、デバッグとかのステップを経る楽しみ(苦しみ?)も体感出来るよね
>>929 100均で買える物じゃ着合い入らんぞ
その点鳴り物なら大人の事情でろくな出来合い品が無いから楽しめる
問題は新設計のPICはスリープ時でも電流馬鹿食いする品種だらけってところ
>>932 そうかなぁ。国産ICでも情報量が英文マニュアルの方が
おおいことがあるから、あながち間違ったこと言ってない希ガス
よし、鳴る時計を作れ
ひらめいた! 空耳アワーなる時計どうよ? 1時と言ってるようにまぁ聞こえないこともない的な。
初代とミッドレンジのほかの改良点思い出した RETURN命令が追加されたことだ。 それまではWレジスタ いちいち破壊しないとサブルーチンから復帰できなかった。
939 :
774ワット発電中さん :2013/11/11(月) 12:37:30.02 ID:TyZHKd5Q
教えてください。 POR...Power on Reset BOR...Brownout Reset LVD...Low Voltage Detect 1. この3つのうち、LVDは、減電圧検出器、いわゆるコンパレータ。 減電圧情報だから、自分自身でRESETするわけではないと思っています。 2. PORは、電源on時に、規定電圧になるまで、Resetし続ける回路。 3. BORは、動作中に、電源電圧の瞬断を検出して、RESETする回路。 と思っています。 が、PORとBORの違いがわかりません。どちらも電圧低下でRESETするので、 どちらか一方だけあれば良いように思います。 周囲の人に聞いても、誰も明確な説明ができないので、ここで聞きました。 PORとBORの違いは、何でしょうか? 宜しくお願いします。
PORとBORの違い でggた http://www.k3.dion.ne.jp/~digikoma/shoho/shoho15b.html
Power on Reset 電源ONを検出 Brownout Reset 電源の電圧の低下を検出
>>939 Power on reset の場合は全ての周辺機能がリセットされる。
Brownout resetは維持される周辺機能もある。
Brownout機能をわざわざ使うかどうか指定させるってことは副作用もあるってことか
>943 低電圧での動作が出来ない。電源電圧2Vで動作保証あってもVBORはもっと上だったりする BOR回路で電流が消費される
秋月で売っているPIC USB評価ボードを買おうと思います。(安いから) しかし、載っているPICがPIC24FJ256の100ピンのものです。 実際に使うのは16I/Oとかなので、PIC24FJ32の28ピンで間に合います。 もし28ピンのPICを使う時も、評価ボードのUSBのサンプル例は、 ヘッダとかを一部修正すれば使えるものでしょうか? それとも、大きく書き直しになるのでしょうか。
947 :
774ワット発電中さん :2013/11/12(火) 10:26:08.00 ID:NihV+uHT
ありがとうございます 秋月で買います また教えてください。
>>939 BORは、電源電圧を監視して、一定以下になったらリセットベクタに飛ぶ、一種の割り込みみたいな物。
PORはゼロから一定以上になったらペリフェラルを初期化してリセットベクタに飛ぶ。
不安定な間に処理をさせないための仕掛けですね。
949 :
774ワット発電中さん :2013/11/14(木) 10:36:26.20 ID:wx57Y/iX
共用でいいような気もするけど。
PICで駆動中にクロックを変化させたとき、_XTAL_FREQを再定義するのは不可能でしょうか? __delay関数を自作して周波数ごとに対応させた方が無難でしょうか?
コンパイルするときに定義した周波数でdelayの処理の量調整してて動作中に計算してる訳じゃないんじゃ?
定数が実行中に変化するわけなかろう
PIC10F222ってFOSC4ピンからクロック出してコイルにつないだ外付けトランジスタ駆動して ADコンバータで出力電圧監視すればDC-DCコンバータ作れるんじゃね?と思った 外付けトランジスタ使うんならDCコンバータIC使ったほうが手っ取り早いかと思って考えるのをやめた
動的に電圧を変更したくて3回路のチャージポンプをPICから制御したことならあるよ PWM使った作例ならトラ技にも載ってたはず
PICkitはPWM使って書き込みに必要な電圧を作ってるよ
>>951-952 やっぱそうですよね
クロックを切り替えるプログラムではデフォルトの__delayは使わないってことで合ってますか?
アセンブリでは作ったことあるんですが、Cでdelay作ったこと無かったんで不安
クロック比が分かってるならいくらでも使える
C言語で勉強始めたんですが コンフィグレーションビットの設定はMPLABの機能かはなんとか分かったんですが、レジスタの設定などはデータシートを見て設定していくのでしょうか。 どうプログラミングを進めていけばいいのか分かりません。。 何か参考になるものないでしょうか。
データシート見てやってます。 データシートに設定の流れや、プログラミング例も載っているよ。
962 :
774ワット発電中さん :2013/11/15(金) 10:16:38.06 ID:W3VMYSjH
降圧DCコンバータはいい専用IC沢山あるけど 昇圧はあんまりない PICでPMTで昇圧も良いプログラムも簡単だし
>>953 PSoCでやったことならあるな。
スレッショルド電圧を決めてPWM出力のON/OFFをするのが全部PSoCブロック
だけで出来てしまうので、初期設定したらCPUは何もすることが無い。
暇でしょうがないんで、出力電圧をA/DしてLCDに電圧表示させてた。
>>963 参考までにPSoC1です?
またPSoC1でも出来ます?
>>963 ツボにはまると何十個ものアナログ部品で組んだ回路が1チップでできるけど
ドツボにはまるとさぁ大変
どじょうがでてきて こんにちは ぼっちゃんいっしょに あそびましょう
>>961 もちろん、PSoC1。そのくらいは結構簡単。
PSoCは性能が中途半端だから、出番が余り無い。
いや、逆にその中途半端さ故に何かとお役立ちなんだよね。
970 :
774ワット発電中さん :2013/11/17(日) 19:23:34.61 ID:Mcygs+CB
出来の悪い子ほどってやつか
皆さんはどこで買う派ですか? 私は秋月ですが、ちょっともう少し高性能なやつを探してみたいなと...。
で、何を作るかなんだが?
当然、ライタだぬ
>>971 RSとか個人で買っても文句言われないし品揃え豊富ですね。
少し高い気がしなくもないけどw
>973 欲しいものが貯まれば digikey。秋月はやっぱりなんでも揃っている わけではないので。 >974 RS は比較的割高なものが多いけど台湾製の VCTXO に限っては とても安いですね。そのうち買おうと思っています。
32bitマイコンのレジスタを2進数で入力しようとしたら b'00000000000000000000000000000000' こんな長くてウケたw
>>977 まず疑うのはトランジスタのピン配置の勘違いかなあ。top viewとbottom viewは良く間違える。
石の型番は?あと回路図も。
>>977 コントラストの処置はやってるのかな??
初期化したあとに電源立ち上げてしまってるとか 立ち上げから初期化までのウェイトが短すぎるとか
表示の出来てなさ(?)からみて初期化失敗の様だけど、 変更点が5V→3.3Vのみだとすればタイミングだけじゃない?
>>977 LOがもしGNDレベルの意味なら、動かないかも。
(ベース電流流しすぎ)
>>978 2SA1015で正面視でECBですよね?
>>979 コントラストは抵抗で分圧して上流をTrにつなげてます
>>980 電源入れてから2秒待ってlcd_initしてもだめだったので・・・
>>981 変更点はないつもりなんですが・・・Vccは4.96Vが4.90Vになってましたが
さほど変わるとは思えないのですが。
>>982 それですか。抵抗変えてみます。PICからベースまで1k、5Vからベースまで
1kにしていました。流しすぎるとなぜ動かないのですか?
ところでsc1602でもう一つ質問なのですが、電源をPICで制御するときに 信号線も全部LOにしとかないといけないんでしょうか?電源切っても Vccに3.7Vぐらいかかっていて電流が切れないのですが・・・
>984 もうちょっと回路がわかるように説明してもらわないと… 回路図を書いて画像化してアップローダーに放り込むとか できないでしょうか。
CE間に0.1uF積層セラコン入れたら動くようになった。 電源ONのタイミングが微妙に遅かったってことなのかな
>>984 ベース電流流しすぎると、hfeが下がるしVCEが大きくなりやすい。
電源容量小さい場合は、ベース電流で消費されてしまい、コレクタ側への
電流減ってしまう。1k入っていれば大丈夫と思いますが。
>>987 2SA1015という事は、たぶんTrのic小さすぎるのかと。
LCD駆動する為に、sc1602内部でチャージポンプで昇圧してるので
平均電流は小さくても、パルス的には電流ながれる。
0.1uFのおかげでパルス電流がパイパスされたのかと。
>>988 なるほど、後でオシロで見てみます。Icが足りないとは思いませんでした。
>>984 ですが、信号線は全部LOにしないといけないみたい。
LOにしてLCD関連は全部切れたようだ。しかしまだ14mAも電流食ってる。
スリープさせるしかないみたいだな。1ケタ前半なら我慢しようかと思ったが。
>>989 信号線に電圧がかかってると、LCD制御ICの保護ダイオードを通して電源
が供給されてしまい、LCDモジュールのパワーオンリセットが働いてなか
った可能性があるな。
>>987 そういう理屈に合わないことをやって、たまたま動いても解決になってない
からやめた方がよい。オフ時にコンデンサにチャージされていた電荷がトラ
ンジスタがオンになったときに一度に流れてトランジスタを劣化させる。
>987 普通は C-E 間より C (= LCD の VDD)-GND 間にパスコンを入れるんじゃ ないでしょうか。
>>974-975 ありがとうございます。
今回は手っ取り早くRSを使ってみました。
beaglebone blackについついそそられポチってしまったのが決定要因ですがPICも2つ買ってしまいました。
明日くらいに物が届くな
他の店もそのうち使わせてもらうかもしれません。
SC1602の信号線はプルアップされてる 何本もHiレベルだと電源切れません
995 :
774ワット発電中さん :2013/11/21(木) 00:10:27.51 ID:OTetGMlM
もしかしてPIC24以降じゃないとAD変換高速じゃないのか
>>986 1.電源はパワーMOS FET使う方がスマート
2.電源落とすときは、制御ポートのトライステートレジスタ(例えばTRISAとか)の
該当ビットを‘1‘にして、プルアップ抵抗経由で液晶の電源が入らないようにする。
電源いれたら‘0‘に戻す
>>996 電源制御後、少し間を置くまで、Hi-Z(入力)の方がよかないか?とド素人考え。
>>996 プルアップ抵抗経由より保護ダイオード経由の方が大きいと思うけど
1000 :
774ワット発電中さん :2013/11/21(木) 14:53:15.77 ID:F54rdZIJ
教えてください。 PICでA/D変換してアンドロイド携帯にUSBで送りたいです。 USBはやったことがないのですが、USB機器にマスターとスレーブがあるのでしょうか? 携帯との場合、PICがマスターでいろいろと手当をしてあげないといけないでしょうか? PIC ICはマスターとスレーブどちらにもなれるのでしょうか? それともマスター用PICを買うのでしょうか? すみません、よろしくおねがいします。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。