PIC専用のスレ Part35

このエントリーをはてなブックマークに追加
952774ワット発電中さん:2011/11/30(水) 00:27:09.32 ID:OY0sC3W+
funabashiさん並の良キャラ
953774ワット発電中さん:2011/11/30(水) 00:28:27.07 ID:ro2bVe1M
突っ込みどころあるがヒントになりそうだから言わないでおこうw
954774ワット発電中さん:2011/11/30(水) 00:33:00.04 ID:sq+EN3Ew
>>946
コードプロテクトされているような気がする。
955774ワット発電中さん:2011/11/30(水) 00:34:13.53 ID:ONFEU8nQ
941様がそんな初歩的なミスをするはずがないだろうw
956774ワット発電中さん:2011/11/30(水) 00:37:57.79 ID:0y3qkNXM
書けてんなら読めなくてもいいじゃんw

つーか、きっとあそこがあれなんだろうなとは思う
957774ワット発電中さん:2011/11/30(水) 00:43:08.86 ID:ONFEU8nQ
RCDライタの構造からするとまあ推測はできるわな

>>946
注文通り推測したぜw
958774ワット発電中さん:2011/11/30(水) 00:50:05.14 ID:OY0sC3W+
書けたプログラム通りに動作するなら読める必要なんてないよね
CDRに音楽データ焼いて再生してみてちゃんと聴けたらそれでいいわけで
CDRに記録されたデータをデータ列として確認するなんて無意味なのと同じだよ
959774ワット発電中さん:2011/11/30(水) 01:03:11.70 ID:/d9XHIu0
書けるけど読めないなら、CTS線の配線間違いくらいじゃない?
960774ワット発電中さん:2011/11/30(水) 01:12:38.08 ID:0y3qkNXM
おいおいw
そんな簡単なことは言うまでもないだろう
961774ワット発電中さん:2011/11/30(水) 01:19:39.69 ID:GySj7ldV
MPLAB X IDE(beta)使ってる人いる?
さっき使ってみたけど、まずまずじゃないかと個人的に思う
何よりもMacからも普通に書き込めたのがちょっと感動
962774ワット発電中さん:2011/11/30(水) 07:26:46.91 ID:rDjQK+TX
秋月ライタで確認しただけで正常動作したとは書いていない

きっと屈折している者の一人です

秋月ライタも不安定
963774ワット発電中さん:2011/11/30(水) 15:41:13.59 ID:ONFEU8nQ
屈折していたCTSの配線は直ったのだろうか
964774ワット発電中さん:2011/11/30(水) 17:38:35.27 ID:flxDXigY
10f222用にcvasm16でアセンブラしようとしてるんですが
"use of unknow symbol _INTRC_OSC_NOCLKOUT"と表示されてアセンブラできません

解決策ごさいませんか?
965774ワット発電中さん:2011/11/30(水) 18:00:13.57 ID:aXjHQSG+
>>964 質問に答えが書いてあるじゃないか
"_INTRC_OSC_NOCLKOUTという未定義のシンボルを使っている"と表示されてアセンブラできません

1.使っちゃいけないシンボルを使ってるから使うのをやめる
2.使えるはずのシンボルが定義されていないバグがあるから、自分で定義する
3.その他イロイロ

アセンブラだからトラブルを回避するのに困るようなことはないでしょ
966774ワット発電中さん:2011/11/30(水) 18:06:31.04 ID:flxDXigY
>>965
落ち着いて考えてみればそうですね
ありがとうございます そしてスレ汚し失礼しました
967933:2011/11/30(水) 18:42:14.38 ID:T/750XDm
>>935
>>936
アドバイスありがとう!
なるほど、確かにMemory Programming Specificationっていう別資料に書いてますね。
とりあえず #rom 0x01E000={0x01} とやって試してみましたがまだダメでした。
もうちょっと調べてから報告します。(もしもコンパイラのバグだったら泣く;)
968774ワット発電中さん:2011/11/30(水) 18:43:04.96 ID:lF7OdYyB
ライタが調子悪いので買おうと思って秋月のページを見ているのですが、
PicKitが無難かなと思って見ているのですが、ICのソケットはどうなっていますか?
秋月プログラマーにはソケットがありますが、PicKitはどうやってICをつなぎますか?
969774ワット発電中さん:2011/11/30(水) 18:59:46.95 ID:OIyXx3yc
ハンダ付け
970774ワット発電中さん:2011/11/30(水) 19:09:55.19 ID:aXjHQSG+
>>968
www.picfun.com/PICkit2/PICkit02.html
971774ワット発電中さん:2011/11/30(水) 19:13:59.95 ID:U1ECCrh/
>>967
EEPROMのアドレスはコードメモリのワードアドレス単位で指定するから、
.hexファイルでのアドレス1E000hは、コードメモリでは1ビットずれた0xF000に対応するはず。
972774ワット発電中さん:2011/11/30(水) 19:17:25.56 ID:rS9CmNw4
>>970
よくわかりました!
973933:2011/11/30(水) 19:21:05.12 ID:T/750XDm
>>971
うわぁ!
#rom 0xF000={0x01} としたら16F1939のEEPROMに書き込めました!
ありがとうございました。もっと勉強します。
974774ワット発電中さん:2011/11/30(水) 19:53:29.36 ID:/d9XHIu0
>>968
ICソケットなんて必要ないじゃん
基板にICSP用のピンヘッダを立てておくとか、電線で直接繋げばいいよhttp://kyoutan.jpn.org/uts/za/za110312_0.jpg

そうすれば、プログラムを書き換えるたびにマイコンを抜き差しする必要がない
975774ワット発電中さん:2011/11/30(水) 21:31:38.74 ID:PHXYty/l
>974
静電容量が絡んでなけりゃな。
976774ワット発電中さん:2011/12/01(木) 00:56:20.30 ID:U07f1raa
PIC16F1xxx使いたくて
HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.83
を877 887とかで試したら今まで俺が使っていたコンパイラ(Grich社製コンパイラ)より高性能じゃないか!
最適化省かれてるのに
ふざけるな!
977774ワット発電中さん:2011/12/01(木) 09:04:18.51 ID:nrrUN6IA
>>976
HI-TECH Lite版は最適化省かれるどころか、差し障りのない命令が加わってるよ。重く大きくなる感じ。
そのLite版がGrich社製より高性能って、Grich社製が気になる
978774ワット発電中さん:2011/12/01(木) 09:48:44.09 ID:GL5t9B2p
何気なく書いた割り算とかが、シフトやANDに置き換わってると、
おお、と思う
979774ワット発電中さん:2011/12/01(木) 10:21:13.39 ID:QUYewk+T
HI-TECH C の Lite 版はひどいぞ
分岐に無駄なGOTOを追加してサイクル数とプログラムメモリを無駄に消費しやがる
最適化がないだけならいいけど、無駄なコード入れられるのはちょっと…

CCS@16FやC18評価版だと逆アセンブルリスト見ながら人力で最適化して
ある程度タイミングクリティカルなプログラムもCで書けるけど、
Hi-Techじゃ無理だw
980774ワット発電中さん:2011/12/01(木) 11:13:32.20 ID:OVgN1zob
>>979
無料の意味分かるのか?
無償提供に文句を言ったって無駄。
購入すれば問題の無い事。
最適化されなくてもうまく使えばアセンブラより生産性高い。
981774ワット発電中さん:2011/12/01(木) 11:28:50.28 ID:GL5t9B2p
無駄なGOTOをわざわざ入れてる訳じゃなくて、場合によってはその前に別の処理が入るんだよ
ループ処理を翻訳した直後ではそうなってる
で、不要な部分を削っていくのが最適化
982774ワット発電中さん:2011/12/01(木) 17:29:27.50 ID:6XtJeqZr
すいませんが、大きな桁数同士の割り算をPICでやりたいのですが、良い方法はありませんでしょうか。
たとえば 60000000/1176472 とかです。

何をやりたいかというと、エアモーターの回転数を細かく測りたいので、
基準の時間をつくり、一回転中に何回パルスが入るかをカウントして回転数を求めたいのです。
(よくある0.6秒間のカウント数を表示する方法では低回転の誤差が大きいので)
983774ワット発電中さん:2011/12/01(木) 17:53:08.70 ID:VYgAztqH
別アプローチとして割り算を使わない方法を考えるというのもある

0.6秒間のカウント数の表示ではrpmが100単位になってしまうということでしょ?
単純な加算やシフト演算で済むような計算式で加算平均を取って誤差をならしていけばいいと思う
984774ワット発電中さん:2011/12/01(木) 18:01:00.84 ID:VYgAztqH
具体的には2進数で計算しやすいように60/128秒単位で回転数を数えるようにする

a = 60/128秒間の回転数
b = (b + a*128)/2
rpmの表示 = b

のような処理はどうでしょ?
985774ワット発電中さん:2011/12/01(木) 19:38:27.63 ID:HMNVXJtP
>>982
その程度ならそのまま割り算したってたいしたことないよ。
986774ワット発電中さん:2011/12/01(木) 19:55:11.42 ID:QfqHpF+F
64ビットの型を知らないだけだったり
987774ワット発電中さん:2011/12/01(木) 20:04:45.62 ID:Kh0NNYdz
32ビット/32ビットを計算すればいいじゃん
ttp://orange.zero.jp/electronics/pic/pic.html

最大12000rpm、1パルス/回転なら200パルス/秒で5msec/パルス
32ビット/32ビットはHFINTOSCの8MHzで2msecかからないというところか、
1回転毎に計算しても間に合いそう

それより重要なのは時間分解能の設定だな
最大12000rpmで1rpm分解能を狙うなら、カウントクロック8MHz、
被除数は0x1C9C3800x2の0x39387000を俺なら選ぶ
加えて、精度がそこそこの外部クロックを使用するか、
またはHFINTOSCなら被除数をチューニングして校正するね
988774ワット発電中さん:2011/12/01(木) 20:16:10.57 ID:QfqHpF+F
アドバイスじゃなく押し付けよくない
989774ワット発電中さん:2011/12/01(木) 20:19:47.01 ID:Kh0NNYdz
64ビット変数はいらない気がするが
かえって計算時間の増加を招く逆アドバイスになったりして
990774ワット発電中さん:2011/12/01(木) 20:21:17.74 ID:/r9xjgLN
200rpm以上は従来の方法、それ以下のときは延々と引き算繰り返す、でどう?
回転数低い(=更新も少ない)んだし、高々200回の引き算なら十分なんとかなるんじゃね?
991774ワット発電中さん:2011/12/01(木) 20:30:50.87 ID:Kh0NNYdz
パルス入力から数値更新までに高いレスポンスが求められる仕様ならお勧めしにくいな
992774ワット発電中さん:2011/12/01(木) 21:55:42.50 ID:6XtJeqZr
うわぁ・・・ (;゚д゚)…

いっぱいレスが付いて驚きますた。
Cみたいにlongだのfloatだのがあれば良いのですが、
コンパイラも知識も無く、やっとこさ先日からMPASMで始めてまして、
>>987さんのサイト見て感心している次第です。
>>990さんの方法も考えてみましたが、果たして自分で出来るのか・・・と。
>>983さんの方法、理解しようと奮闘中です・・・。

993774ワット発電中さん:2011/12/01(木) 22:28:00.05 ID:Kh0NNYdz
>>984のは重み付け平均だな
定時間t0毎のサンプリングなら時定数2xt0の一次遅れフィルタとみなせるが、
パルス毎の計算だとどう見ればよいものか・・・
994774ワット発電中さん:2011/12/02(金) 00:32:23.85 ID:kFWqYmMf
精度が数桁でいいのなら、分母・分子が共に16bit(unsigned short)に
収まるまで両方右シフトしてから割り算でどうかね。
995774ワット発電中さん:2011/12/02(金) 06:56:22.81 ID:TufUlYlS
桁が多いまま、というのは精度が高いという意味だけど、
そんな精度が得られてるとも思えないから、
意味のない精度を大事に保存して計算するのは無駄だな
996774ワット発電中さん:2011/12/02(金) 08:27:00.62 ID:HSFLn0nM
回転数は時間で計測するから、意外に精度は高く得られる
仕様的に意味がないほどの高精度は不要だが
997774ワット発電中さん:2011/12/02(金) 08:38:08.96 ID:TufUlYlS
ああ、シフトしてしまうと肝心の低回転での精度が得られないのか
精度とか有効数字という浮動小数点的なものを整数でやろうとするから
最大桁に合わせる必要が出るんだな

一定時間毎のカウントじゃなくて、一定カウントに要する時間を測定すれば、
精度一定になると思う
998774ワット発電中さん:2011/12/02(金) 10:39:21.28 ID:1tYVlJyY
>>992

>>984の式は精度は出ないよ
0.6秒単位で測るより少しだけ精度が上がるのと(100rpmを下回るといきなりゼロになったりはしない)
その方式のプログラムをちょっと変えるだけで済むというのがメリット

数値は実際の回転変化より少し遅れた値になるけれど
そのぶん滑らかに変化する
数値表示だったらそういう処理を入れた方が見やすい場合もある

例では、直近までの平均値1/2+今のカウント値1/2で加算しているけれど
3/4+1/4とか7/8+1/8とかいう計算もできて、より滑らかな変化になる
999774ワット発電中さん:2011/12/02(金) 10:41:48.34 ID:1tYVlJyY
でも今からゼロからプログラムを組むんであったらどの方法でもいいかな
作成前に詳細な仕様を決められる経験があるわけでもないので
細かいところはプログラムが動いてから考えればいいと思う
1000774ワット発電中さん:2011/12/02(金) 10:44:08.00 ID:xTodwuXo
1000!!!

>>982
引き算してけばいいだろJK
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。