PIC専用のスレ Part30

このエントリーをはてなブックマークに追加
1774ワット発電中さん
 /Microchip ./|
 /( ゚∀゚)    /  | アセンブラのアの字もわからない
 |~ ̄ ̄ ̄ ̄ ̄|  /. 超初心者からHEXが読めてしまう
 |/Z./Z./Z./Z_|/ ||  鬼プロフェッショナルの為のスッドレ(#゚Д゚)だ!モ゙ルァ
  ||. ||. ||. ||

大人気のPICマイコンのスレ。
なんといっても情報が豊富だし、開発環境も多いし、パッケージも豊富。
使いやすくて、しかも安い。やっぱりPICだよね。

例の如く基本リンクだ
http://www.microchip.com/  マイクロチップ本社(Microchip Technology Inc. )
http://www.microchip.co.jp/ マイクロチップ テクノロジー ジャパン 株式会社
またーりやっておくんなまし。
教えて君はとりあえずGoogle(http://www.google.co.jp/) くらい使おう

前スレ
PIC専用のスレPart29
http://kamome.2ch.net/test/read.cgi/denki/1279265489
2774ワット発電中さん:2010/09/10(金) 15:13:41 ID:N9MQ4FIV
(゚Д゚)ゞどもインターネットパトロール隊です。
違法コピーは けしからん!
http://www.sonsivri.com/forum/index.php?board=3.0
3774ワット発電中さん:2010/09/10(金) 17:54:38 ID:LRnT5Xmn
dsPIC30F4011を使っています。
CANモジュールを使用して複数のマイコン同士で通信しています。
現在、通信内容をPCでモニタリングしようと試みていますが、
UARTを使ってシリアル通信しようとしても、マイコンから信号は出ているのですが、ハイパーターミナル上に何も表示されません。
どなたか原因のわかる方はいますでしょうか?

また、CANUSB(http://www.canusb.com/)なるCAN通信をシリアル通信に変換して、
ターミナルソフトでモニタリングできる装置も導入しましたが、CANUSB側のポートを開いた途端にエラーが出ます。

販売元に問い合わせたところ、
マイコン側とCANUSBで設定した通信速度が違うのではないかと言われましたが、
タイマ割り込みを入れてオシロスコープで調べてみたところ、
ちゃんと意図した間隔でタイマ割り込みが発生していることを確認しましたので、速度設定のミスではないと思います。
配線などもチェックしましたので、物理的なミスでも無さそうです。

CANUSBはフィリップス製のSJA1000とかいうマイコンで制御されているようです。
もう他に思いつくのはマイコンの相性くらいしかないのですが、
規格の異なるマイコン同士での通信自体に無理があるのでしょうか?

非常にコアな質問だとは思いますが、アドバイスお願いします。
4774ワット発電中さん:2010/09/10(金) 18:46:01 ID:ytyhumcs
●過去スレ●
ttp://science6.2ch.net/test/read.cgi/denki/1272360198/ PIC専用のスレPart28
ttp://science6.2ch.net/test/read.cgi/denki/1265591953/ PIC専用のスレPart27
ttp://science6.2ch.net/test/read.cgi/denki/1259844805/ PIC専用のスレPart25 … 実質Part26
ttp://science6.2ch.net/test/read.cgi/denki/1252595909/ 【18F14K50やばい】PIC専用のスレPart25【超やばい】
ttp://science6.2ch.net/test/read.cgi/denki/1246661200/ 【ホビーから】PIC専用のスレPart24【業務まで】
ttp://science6.2ch.net/test/read.cgi/denki/1241103349/ 【ICD3も】PIC専用のスレPart21【出たよ】(実質Part23)
ttp://science6.2ch.net/test/read.cgi/denki/1234597519/ 【16F193x】PIC専用のスレPart22【次世代PIC】
ttp://science6.2ch.net/test/read.cgi/denki/1228312753/ 【Pickit3】PIC専用のスレPart21【速度3倍?】
ttp://science6.2ch.net/test/read.cgi/denki/1219616622/ 【DAC内蔵も】PIC専用のスレPart20【出たよ】
ttp://science6.2ch.net/test/read.cgi/denki/1212500774/ 【大人の】PIC専用のスレPart20【おもちゃ!】
ttp://science6.2ch.net/test/read.cgi/denki/1205937905/ 【16Fに】PIC専用のスレPart19【まだ新品種が!w】
ttp://science6.2ch.net/test/read.cgi/denki/1202041038/ 【得意分野は】PIC専用のスレPart18【書き込み器w】
ttp://science6.2ch.net/test/read.cgi/denki/1196633878/ 【米粒から】PIC専用のスレPart17【32ビットまで】
ttp://science6.2ch.net/test/read.cgi/denki/1192626561/ 【送料高い】PIC専用のスレPart16【バーゲンなのに】
ttp://science6.2ch.net/test/read.cgi/denki/1187863826/ 【SDCC】PIC専用のスレPart15【PICkit2】
ttp://science6.2ch.net/test/read.cgi/denki/1182435612/ 【PIC18F対応?】PIC専用のスレPart14【Writer509】
ttp://science6.2ch.net/test/read.cgi/denki/1175098079/ 【皆で作ろう】PIC専用のスレPart13【Writer509】
ttp://science6.2ch.net/test/read.cgi/denki/1165919841/ 【皆で作ろう】PIC専用のスレPart12【Writer509】
ttp://science4.2ch.net/test/read.cgi/denki/1161982672/ 【18Fは】PIC専用のスレPart11【(・∀・)イイ?】
ttp://science4.2ch.net/test/read.cgi/denki/1155772077/ 【12F629】PIC専用のスレPart10【輝け!】
ttp://science4.2ch.net/test/read.cgi/denki/1146949082/ 【12F683】PIC専用のスレPart9【囁け!】
ttp://science4.2ch.net/test/read.cgi/denki/1139471101/ 【16F648】PIC専用のスレPart8【動け!】
ttp://science4.2ch.net/test/read.cgi/denki/1134909554/ 【10F206】PIC専用のスレPart7【轟け!】
ttp://science4.2ch.net/test/read.cgi/denki/1127462924/ 【12F675】PIC専用のスレPart6【しゃぶれ】
ttp://science4.2ch.net/test/read.cgi/denki/1122092255/ 【お手軽】PIC専用のスレPart5【マイコン】
ttp://science3.2ch.net/test/read.cgi/denki/1115145584/ 【お手軽】PIC専用のスレPart4【マイコン】
ttp://science3.2ch.net/test/read.cgi/denki/1108027098/ 【お手軽】PIC専用のスレPart3【マイコン】
ttp://science3.2ch.net/test/read.cgi/denki/1094312282/ 【お手軽】PIC専用のスレPart2【マイコン】
ttp://science3.2ch.net/test/read.cgi/denki/1077618889/ 【超初心者】PIC専門のスレ【鬼プロ】
ttp://science2.2ch.net/test/read.cgi/denki/1072092201/ PIC AVR H8統合スレ (元祖)
5774ワット発電中さん:2010/09/10(金) 18:46:59 ID:ytyhumcs
●PIC入手先リンク●
MicrochipDirect
  ttp://www.microchipdirect.com/
秋月電子通商
  ttp://akizukidenshi.com/catalog/default.aspx
デジキー
  ttp://dkc1.digikey.com/jp/digihome.html
RS
  ttp://jp.rs-online.com/web/
チップワンストップ
  ttp://www.chip1stop.com/
マルツパーツ館
  ttps://www.marutsu.co.jp/user/index.php
6774ワット発電中さん:2010/09/10(金) 18:47:40 ID:ytyhumcs
秋月のPIC16シリーズDIP品限定ピン数別評価(先頭のvは値下げ,-は維持)'2010年4月24日更新版
v40ピンは-◎16F887 \200
v28ピンは◎16F886 \190
ADC有,eCCP/CCP有,mSSP有,USART有,8Kw,内蔵31K-8MHzとフルサポート
新しめのチップで内蔵モジュールも多,大きささえ許せば20,18ピンよりこちらを

20ピンはF690のバリエーションモデル多.価格差が小さいからF690か,OPアンプのF785.スキルあるなら18F14K50も検討しては?
-◎16F690 \210 ADC有,eCCP有,eUSART有,SSP有,4Kw,内蔵31K-8MHzとバッチリ
-○16F689 \180 F690からeCCP機能削られた
-×16F687 \180 さらにF689を2Kwと半分に
-△16F677 \170 さらにF687からeUSARTも削られた
-○16F685 \190 F690からSSP&eUSART機能が削られた
-◎16F785 \180 ADC有,CCP有,2Kw,内蔵31K-8MHz,OPアンプ搭載ってのはいいね

18ピンは種類は多いけど選択の幅は狭い。F88かいっそ20pinにするとか
v×16F84A \250 機能無,1Kw,いまさら不要 10個以上なら1個¥220
-△16F648A \180 CCP有,USART有,4Kw,内蔵4MHz,同じ値下組のF819と比較するとキツイ
-△16F628A \160 F648Aの2Kw版,売りが値段だけだと厳しいかな
-×16F627A \160 F648Aの1Kw版,売りの低コストで628Aと並ばれると・・・
v◎16F88 \200 ADC有,CCP有,SSP有,USART有,4Kw,内蔵31K-8MHzとGood
-○16F87 \200 F88にADC無い,下のF819と比較するとADCで負けフラッシュ4Kwで勝ちダケド
-○16F819 \180 ADC有,CCP有,SSP有,2Kw,内蔵31K-8MHz,値下げで価値が急上昇!
-×16F818 \200 F819の1Kw版,上位のF819の値下げで不要に
-◎16F716 \110 ADC有,eCCP有,2Kw,内蔵CLK無,EEPROM無だけど値段安い,ADC8bit注意

14ピンはF688だね
-◎16F688 \160 ADC有,eUSART有,4Kw,内蔵31K-8MHz
-△16F676 \140 ADC有,1Kw,内蔵4MHz

8ピンはF683だと思っていたがF615も\100にしてはなかなか良い
-◎12F683 \150 ADC有,CCP有,2Kw,内蔵31K-8MHz,8ピンとしては多機能
-○12F675 \120/130 ADC有,1Kw,内蔵4MHz ,環境によってはE/P版
-○12F629 \80 675のADC無(機能無しってこと),この値段ならチョット使うに便利
-△12F635 \120/130 機能無し,1Kw,内蔵31K-8MHz,環境によってはE/P版
-◎12F615 \100 ADC有,eCCP有,1kw,内蔵4Mor8MHz,EEPROM無し
-×12F609 \100 F615からADC,eCCP機能省かれてる

(参考)機能無,EEPROM無,12bitコア プログラム組む上で制限多し
-△16F57 \100 28ピン,2Kw,内蔵CLK無,安くて多くのI/O欲しいなら
-△16F54 \60 18ピン,0.5Kw,内蔵CLK無,安いI/O欲しいなら
-△10F200 \70 DIP8ピン,1/4Kw,内蔵4MHz,米粒PICのデバッグ用

マークの意味
◎お勧め、用途決まっていないならこれ買っとけ
○内蔵モジュール減ってるけど、その分値段も安くなってるから、まあまあ
△内蔵モジュール大幅に減ってる、\10でも安くしたいなら、どうぞ
×ソースを変更できない等の理由がないなら、選択する必要なし
自分で、プラグラムもハードも作れる人のためのリスト。
そもそも、教科書にのってるのとか他の方の作品とかを作るだけなら
指名買いするしかないのだから お勧め度は意味がない。
7774ワット発電中さん:2010/09/10(金) 21:27:52 ID:uTytUQjU
12F510で遊んでるとこ
なかなか癖があって楽しい
ネットにノウハウとか全然ないし
データシートだけ見てLED5個点灯できたら偉い
8774ワット発電中さん:2010/09/10(金) 21:35:46 ID:Bz2Ep3+M
>>3
>UARTを使ってシリアル通信しようとしても、マイコンから信号は出ているのですが、ハイパーターミナル上に何も表示されません。
>どなたか原因のわかる方はいますでしょうか?

そんなことで躓いてて大丈夫?
ハードウェアで間違えてるか、バイナリ送信してるとか・・・
先ずは printf("Hello, world!\r\n"); とでも出力して確認汁

あとの話はそれから
9774ワット発電中さん:2010/09/10(金) 21:43:16 ID:olselzJY
単純に直接続してないか ?

ドライバーIC max232などで反転させてみる


10774ワット発電中さん:2010/09/11(土) 07:12:01 ID:pqJDcEsE
>UARTを使ってシリアル通信しようとしても、マイコンから信
>号は出ているのですが、ハイパーターミナル上に何も表示されません。
どういう信号がどんな風に出ているのか,それが理屈上正しいのかどうか。
きちんと報告せよ。

>CANUSB側のポートを開いた途端にエラーが出ます。
どういうエラーがどういうタイミングで出るのか報告せよ。

>タイマ割り込みを入れてオシロスコープで調べてみたところ、
>ちゃんと意図した間隔でタイマ割り込みが発生していること
>を確認しましたので、速度設定のミスではないと思います。
タイマ割り込みが入っていれば速度設定のミスではないと,どうして
判断できるのか。理由を述べよ。

>配線などもチェックしましたので、物理的なミスでも無さそうです。
「自分では合っているつもり回路」のとおりできているというに過ぎない。
回路の間違いも「物理的なミス」である。どういう回路になっているのか公表せよ。

>もう他に思いつくのはマイコンの相性くらいしかないのですが
相性なんていうものはない。動かないのにはきちんと「動かない理由」がある。

>規格の異なるマイコン同士での通信自体に無理があるのでしょうか?
どういう「規格」なのか知らんが,同一メーカのマイコン同士でないと
駄目というなら,世の中のほとんどの機器は相互に接続できないことになる。
11774ワット発電中さん:2010/09/11(土) 09:23:52 ID:/bzayTcw
ログ全損かよ。オワタ。
12774ワット発電中さん:2010/09/11(土) 09:36:36 ID:+NAngX+H
そのうちサルベージされるのでは
13774ワット発電中さん:2010/09/11(土) 09:38:11 ID:pqJDcEsE
ログなんてゴミの塊だろ?
わけの分からないガラクタだらけになってた部屋を大掃除したようなもんだ。
14774ワット発電中さん:2010/09/11(土) 11:17:07 ID:+NAngX+H
お前も掃除されちゃえばいいのに
15774ワット発電中さん:2010/09/11(土) 16:35:02 ID:pqJDcEsE
お先にどうぞ
16774ワット発電中さん:2010/09/11(土) 16:45:27 ID:GJw8ocfs
おまえらまだPICなんて使ってるのかい?ヘケケッ
17774ワット発電中さん:2010/09/11(土) 19:33:20 ID:pqJDcEsE
Programmable Interrupt Controller
18774ワット発電中さん:2010/09/11(土) 19:35:06 ID:q5DVdjuK
8259乙
19774ワット発電中さん:2010/09/11(土) 19:45:13 ID:UqLo4/Ul
>16
部屋に沢山転がってるんでな。
買ったからには作らないとね。

むしろハード側が面倒で基盤屋に出したくなる…。
パーツ差し込んで半田付けだけでさくっと完成させたくなるわ、冗談抜きに。

所で、12F675にA/D4つ付いているけど、温度湿度、照度…と来て後ひとつが浮かばん。
室内に設置されてジーッとデータを取るだけのデータロガー程度の場合を考えてるんだがお前らなら何が良いと思う?
20774ワット発電中さん:2010/09/11(土) 19:54:10 ID:SnawTSgO
>19
騒音
が思い付かんてことは、19ん家は静かなんだろうなあ…

まあ飛行機やヘリとか近くの国道の音とか、いろいろあるんじゃないかな。
21774ワット発電中さん:2010/09/11(土) 19:56:06 ID:C8Y33P5d
気圧 風向 風速
22774ワット発電中さん:2010/09/11(土) 19:57:49 ID:aPn10pbF
臭度
23774ワット発電中さん:2010/09/11(土) 20:42:18 ID:mRiUpcgW
地震、雷、火事
24774ワット発電中さん:2010/09/11(土) 20:51:39 ID:UqLo4/Ul
>20
室内で騒音測ってもなぁ…。
逆に人が居ない昼間に大きな音が計測されてたら怖いんだがw
夜でも近所の方が静か。
俺の方が騒音元かもしれんくらい。
暴走族とか居るけど線路の向こう側ばっかり走ってるし。

>21
気圧ならイイかなぁ…。
その他は室内で計る意味は…。

>22
有りますけどね、秋月に…。
さすがにいきなり室内に臭い匂いが…というのは考えられん…。

>23
オヤジが…。

とりあえず秋月だと気圧センサーが高いから断念して、後でまた考えるわ。
先にほかの部分だけでも回路組んで試してみるか
25774ワット発電中さん:2010/09/11(土) 21:44:22 ID:D2QMo9cr
しかしA/D4つって表現ておかいしよな
正確にはA/D1つに4入力マルチプレクサ1つだよな
カテジナさん並におかしいよ
26774ワット発電中さん:2010/09/11(土) 22:02:25 ID:+NAngX+H
電磁波とか可聴域外れた低音とか超音波とか
27774ワット発電中さん:2010/09/12(日) 02:32:11 ID:574abK8d
無意味な機能を作って自己満足に浸るのがマイコン制作の醍醐味。

馬鹿みたいに多入力測定したいけど、マイコンで多足のパッケージって無いね。多足のプログラマブルvlsiで贅沢に無駄遣いして作るしか無いか?
28774ワット発電中さん:2010/09/12(日) 03:32:53 ID:kmS/odEO
PICからシリアルで送ってきた文字列を受け取って、
PC側でいろいろ反応させたいんだけど、
どういう言語を使うのが一番楽だろう
29774ワット発電中さん:2010/09/12(日) 03:48:50 ID:7rNxwcu6
C
30のうし:2010/09/12(日) 11:11:33 ID:NJIDIFMq
言語でなくても、ただ繋ぐだけで反応するWTERMとかでやってから飛躍したほうがよろしかと。
31774ワット発電中さん:2010/09/12(日) 12:14:13 ID:kmS/odEO
wtermにそんな面白い機能あったっけ
32774ワット発電中さん:2010/09/12(日) 12:29:10 ID:WV2jcGwn
ターミナルソフトのマクロで文字列を受け取って返事させてみたらってことだろ。
33774ワット発電中さん:2010/09/12(日) 12:42:31 ID:kmS/odEO
あ、なるほど
送り返してくる方か

そっちまで作る気は無かったなあ
例えばデータロガー的に延々と送ってくるデータに対して、
メーターを表示するとか、コマンドに対して動作するとか、そんなん
34774ワット発電中さん:2010/09/12(日) 13:20:38 ID:WV2jcGwn
>>33
処理系なら自分が何の言語を使えるかだけの話だろ。
何も得意なものがないなら、無料ソフトで試してみるのがいいんじゃないか。

シリアルポートをつかう通信クラス SerialPortについて
http://www.technoveins.co.jp/dev/vb2005/serialport.htm
35774ワット発電中さん:2010/09/12(日) 14:20:17 ID:kmS/odEO
言語よりも、GUI環境との摺り合わせの部分で、
覚えないといけないことが大量に発生しがちなんだよな
microsoft御謹製は特にそう

そういう部分を含めて、「一番楽」なのを知りたい
スクリプト言語で、tkとかGNOMEとかの非MSな(楽そうな)選択がいい
36774ワット発電中さん:2010/09/12(日) 15:39:42 ID:WV2jcGwn
利用環境と出口論をどう考えるかにもよると思う。

macOSでしか使わないとか、ロケット工学だからオープンソースでないとだめとかそういう理由
があれば別だが、普通はvbでいいと思う。事例が多い方が絶対楽だし、他人に使わせるとき
環境構築も話が早い。

俺は自分用のシリアル制御はいつもperlだ。GUIなど甘っちょろいことはせず、結果はhtmlで
webサーバーに吐き出すか、定期的にメールで携帯宛の送信させるようにしている。スピード
メーターみたいなリアルタイム処理はできないが、シリアルデータの時点状況把握程度なら
これで十分。
37774ワット発電中さん:2010/09/12(日) 17:02:05 ID:kmS/odEO
んー
実用だとそういう作り方になるだろうな

基板のボリュームを回すと直結してwindowsの何かが動く、みたいな
無駄なことをしたいだけだったりするけど、
そのノウハウはあんまり蓄積しても役に立たない気がしてきた
38774ワット発電中さん:2010/09/12(日) 17:24:24 ID:oQtTc6wI
遅れなんか考えなくて良いなら、普通に定期的にデータを受け取ればできる。
普通のWindows上なら無論データ欠けってのも生じるけど。
(リアルタイムOSじゃないからね、負荷が増えると情報が欠損する…可能性がある。今回はなさそうだけど下手すると機器側が暴走する)

Windows側で何かさせたい(バルーン出すとか)ならWindowsAPI叩くとか、明確にPICとは違うことをしなきゃ駄目。当たり前だけど。
……奥の手はぜんぶC(ライク)で書いてリナックスの乗ったボードとWindows側のアプリで通信するだな。
コレなら全部Cでいける。最早相手がPICではない可能性大だがw

ノウハウって言うならこんなことが出来るとちゃん示せれば結構食っていけると思う。
ハードとWindowsのソフトが組める技術者として…だが。
その分、いつもいつもWindowsの新型と戦う羽目に合うと思うw
39774ワット発電中さん:2010/09/12(日) 18:28:33 ID:+YHAU/F1
>PICからシリアルで送ってきた文字列を受け取って、
>PC側でいろいろ反応させたい

ターミナル開いておいて,PICからシリアルでエスケープシーケンスを送って・・
40774ワット発電中さん:2010/09/12(日) 21:23:54 ID:WV2jcGwn
>>39
それって、エスケープシーケンスのためにpicの側がかなり多くの処理をする
ことになるし、通信速度が十分でないといらいらすることになると思うが。

目的と手段からいうと、picはセンサー管理とシリアル送信に特化するほうが
汎用性が高いし、メモリも食わなくていい。

PCは処理能力が余っているのだからUIは全部そちらでさせるのが合理的。
41774ワット発電中さん:2010/09/12(日) 21:47:21 ID:DYLgMph2
vbでmscommが一番簡単だと思う
42774ワット発電中さん:2010/09/13(月) 06:00:48 ID:/V7qWKa3
質問はこのスレで良いのかね?

PICのアセンブラソースを見ていたのですがサンデーC言語プログラマーの俺には
理解できない部分があるので教えてください。

ORG    0       ; リセットベクタ(0番地)を指定
GOTO   START   ; STARTに行く

ORG命令は、以降に続く命令をプログラムメモリの何番地から格納するかを指定するらしいのですが
ライター書き込まれているプログラムを電源ON時に移動させるということですか?
43774ワット発電中さん:2010/09/13(月) 07:36:56 ID:GKBg6mLq
すまん、何言ってるのか判らん
PIC ORG命令でぐぐっても判らなければC言語使い続けて下さい
4442:2010/09/13(月) 08:02:50 ID:/V7qWKa3
作成したプログラムが書き込まれているメモリは「プログラムメモリ」と呼ばれる場所ですよね?
ここでいうリセットベクターは、プログラムメモリの0番地のことであってるでしょうか?

電源をONにするとPICは、プログラムメモリの0番地に書き込まれているプログラムから
実行を開始すると思うのですが、何故ワザワザ自分自身の0番地指定をする必要があるのでしょうか?

これでどうでしょうか?
45774ワット発電中さん:2010/09/13(月) 08:15:06 ID:oeD/Ec8d
動作させて 電源切って 再度オンにしたらどうなるんだ

46774ワット発電中さん:2010/09/13(月) 08:54:43 ID:B4vsGalq
>>44
ORGってのは、アセンブラに対する疑似命令で、
ORG Xってすれば、それ以降に書かれた命令は、
プログラムをPICに書き込んだときにX番地に配置されるよって事。

そんでもってPICはリセットしたときに、
0番地に書かれているプログラムが実行されるように作られている。
47774ワット発電中さん:2010/09/13(月) 09:47:42 ID:/V7qWKa3
>>46
なール程、わかりやすい解説ありがとう!
48のうし:2010/09/13(月) 10:31:52 ID:fM1QreiV
org 2ch なんてのでもいけるぞ
49774ワット発電中さん:2010/09/13(月) 12:40:45 ID:gDFSde4z
mplabideのシミュレータでプログラムメモリをダンプすればすぐ分かることを
いちいち書き込むな。INTEL HEXみても簡単に分かるだろ。
50774ワット発電中さん:2010/09/13(月) 13:03:29 ID:+mHWVj2b
51774ワット発電中さん:2010/09/13(月) 20:20:44 ID:vr/soTi8
すいませんが質問させてください。

MPLAB C30は
フリー版があるそうなのですが
現在は、student editionというのはなくなっているのですか?

一応ホームページをみると
Special free versions for academic use are available here.
というリンクがあるのですが
ここにあるのでよいのでしょうか?

ご教示願います。
52774ワット発電中さん:2010/09/13(月) 20:21:36 ID:3hI1UGtC
12F510でLED20個点けた
どうも、余計なのまで点く
53774ワット発電中さん:2010/09/13(月) 21:54:52 ID:z01XsDiG
dsPIC版の>>6だれかつくってー
54774ワット発電中さん:2010/09/13(月) 21:57:11 ID:eV05XHCz
>>51
>現在は、student editionというのはなくなっているのですか?
へい。だいぶ前から Evaluation Version(評価版)という表現になってます。

そいで、C30のEvaluation版はPIC24用とdsPIC用が別DLファイルになっとるので注意な
それと、(現在C30最新はv3.24) Ver.更新時期には日本語pageから辿るとDLリスト落ちしてる場合が多いので
完全英語表示pageから辿るように

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en534868
・MPLAB C Compiler for dsPIC DSCs
・MPLAB C Compiler for PIC24 MCUs
リンク先はそれぞれ別pageになってる
Evaluation版のDLファイルはStandard-Eval Versionってやつだ

あとSign-in必要だからDL前に登録必要な
55774ワット発電中さん:2010/09/13(月) 22:27:33 ID:vr/soTi8
>>54
丁寧なレスありがとうございます。

二つダウンロードしないといけないのですね。

しかし、英語のところに登録するのですから
ちょっとドキドキしますね。

間違ってお金を請求されたらどうしようとか思ってしまいます。
56774ワット発電中さん:2010/09/14(火) 16:49:30 ID:gy9iZ/gM
te
57774ワット発電中さん:2010/09/14(火) 17:02:41 ID:H/15GfW+
st
58774ワット発電中さん:2010/09/15(水) 00:43:46 ID:Fwuu8f4H
>>52
もう1ピン使え。
59774ワット発電中さん:2010/09/15(水) 09:10:41 ID:9nmzPPFZ
>>52 配線がんばったな
60774ワット発電中さん:2010/09/15(水) 22:06:24 ID:Wfo42EF6
しかもマトリクスにしたから、尋常でなく配線大変
61774ワット発電中さん:2010/09/15(水) 23:03:19 ID:loHenkrx
510でマトリクスで20個は無理だと思うが。
62774ワット発電中さん:2010/09/15(水) 23:26:51 ID:Wfo42EF6
並べ方は関係ないだろ
63774ワット発電中さん:2010/09/15(水) 23:37:44 ID:qqI4PU8A
単に並べ方の話なら、一直線とかの方が大変そうだが。
64774ワット発電中さん:2010/09/15(水) 23:49:31 ID:xSeuF+7D
3ビット×3ビットで64個までいけるんじゃね?
普通にやるなら3×3で9個までだが
65774ワット発電中さん:2010/09/16(木) 08:35:33 ID:j6kZJRLC
シフトレジスタを使えば、いくつでも。
オーディオのバーグラフとか。
66電脳師:2010/09/16(木) 08:59:47 ID:haC9vM12
64個を走査、チラつきそう‥
抵抗なしじゃないと暗くて見えないかも。

高輝度のでデューティー1/64やってどれくらいになるか実験してからのほうがいいかも。
でもLEDのダイナミックドライブの際のパルス電流は定格の10倍までとかあったような‥
67774ワット発電中さん:2010/09/16(木) 15:22:40 ID:ZIchCGrK
直接駆動はいくら何でも無茶だろう。
68774ワット発電中さん:2010/09/16(木) 20:07:12 ID:Q1X9dXVw
>>64
どうやるんだ?
あと、510は出力5本だったと思うし。

>>66
電流10倍とかは製品によるでしょ。定格でも、高輝度でなら視認はできそう。
1LEDあたり200μsぐらいで処理できれば、チラつきも気にならないレベルかも。
69774ワット発電中さん:2010/09/16(木) 20:21:05 ID:KCCELkyE
4x5のマトリクスで数字とアルファベットを順番に表示させてみた
また半分くらいメモリ残ってる
70774ワット発電中さん:2010/09/16(木) 20:47:12 ID:4ZJRGWlx
>>66
赤色高輝度LEDで8x7のマトリックスをやったことあるけど、
スキャンを速めにすればちらつきも無く、視認性は結構よかったぞ。
保護抵抗は当然入れてた。
71774ワット発電中さん:2010/09/16(木) 22:00:42 ID:5wpDEYUP
マトリックスって基板が反り返ってくるよね
72774ワット発電中さん:2010/09/16(木) 23:12:04 ID:KCCELkyE
フォントデータ作ってた時、
static char font[][5] = { {0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00} };
みたいに二次元配列にするとあっという間に領域不足するのに、
一次元で書いて添え字は自前で計算するといくらでも確保できるのは何だろう
内部では一次元なんじゃないのかな
73774ワット発電中さん:2010/09/16(木) 23:23:45 ID:N7CgG2gM
内部二次元でアライメントのためのパディングが入ってんじゃね?
74774ワット発電中さん:2010/09/16(木) 23:40:31 ID:x1kpz3dp
>あっという間

kwsk
75774ワット発電中さん:2010/09/16(木) 23:53:02 ID:EtcAiBWW
http://blog.goo.ne.jp/jj1wkn/e/e74b142fdc91bef919f6dc9f287e0455

こういうのは衆知のこととして話していいんだよね?
76774ワット発電中さん:2010/09/17(金) 00:04:17 ID:7l3NzwVJ
実はもっと増やせる
77774ワット発電中さん:2010/09/17(金) 00:10:54 ID:uCaF29dI
>>76 kwsk
78774ワット発電中さん:2010/09/17(金) 00:48:45 ID:g0QKX7Sq
79774ワット発電中さん:2010/09/17(金) 00:57:02 ID:SvPWH51B
>>75
5年位前のPIC専用スレ(part6)でこの手の話が出た時、
『Charlieplexing』って言葉は、スレ内やその時参考にしてたMicrochip社の資料(TB029)にも
出て来なかったんだが、もしかして最近出来た造語なのかなぁ?
80774ワット発電中さん:2010/09/17(金) 01:40:51 ID:RwLXhZkX
>>75
何年か前に他のサイトで似たようなテーマのものを見たことがある
つまり概出
81774ワット発電中さん:2010/09/17(金) 02:23:26 ID:N0gXmPD6
PIC入門書に載っているPortBを使い8個のLEDを点灯させるプログラムを
ちょっと修正したんだけど上手くいかない。
PortA側のRA1に接続したLEDも点灯させるにはどうしたらいい?

MAIN
 BSF  STATUS,RP0
 CLRF TRISB
 BCF  PORTA,1       ←追加した箇所
 BCF  STATUS,RP0

 MOVLW B'00000010'    ←追加した箇所
 MOVWF PORTA      ←追加した箇所

間違ってますか?全てのLEDが点灯しなくなるんですがw


82高島:2010/09/17(金) 02:35:53 ID:03+UGr4y BE:5230186799-2BP(0)
MPLABでデバッグ中にMPLABが落ちます。
これって原因ってすうパターンあると思うけど、
例えばどんなのがある???

初歩的なミスをしてそうな気がするけど。
83高島:2010/09/17(金) 02:43:59 ID:03+UGr4y BE:5230186799-2BP(0)
怪しいとしたらこれかなって思っています。
ちなみに、flg3はデバッグのための通過フラグです。

void lcd_cmd(char cmd){
flg3 = 1;
char p;
p = PORTB;
flg3 = 2;
PORTB = ((cmd>>4) & 0x0F) | (p & 0xF0);
flg3 = 3;
rs = 0;
stb = 1;
wait_100us();
stb = 0;
flg3 = 4;
PORTB = ((cmd) & 0x0F) | (p & 0xF0);
flg3 = 5;
rs = 0;
stb = 1;
wait_100us();
stb = 0;
//wait_ms(2);
flg3 = 6;
}
84774ワット発電中さん:2010/09/17(金) 04:15:46 ID:CwSp3I5e
>>81
> 全てのLEDが点灯しなくなるんですがw
というのは、コードを追加したことによってPORTBにつないだ
LEDも点灯しなくなったということ?

だとすれば、回路の問題の予感がする。
RA1がGNDと短絡してたりはしない?
8581:2010/09/17(金) 07:41:28 ID:N0gXmPD6
プログラムに問題はないということですか・・・
ブレッドボードをいじってみますノシ
86774ワット発電中さん:2010/09/17(金) 08:28:52 ID:CwSp3I5e
>>85
> プログラムに問題はないということですか・・・
無いとは言わない。

> BCF  PORTA,1       ←追加した箇所
の部分を普通は
 BCF  TRIS,1       ←追加した箇所
とかくだろう。

ただ、このミスが今の問題の原因ではない。
あと、省略されている部分のプログラムに関しては知らないよ。
87774ワット発電中さん:2010/09/17(金) 08:29:46 ID:CwSp3I5e
ごめん
×  BCF  TRIS,1       ←追加した箇所
○  BCF  TRISA,1       ←追加した箇所
88774ワット発電中さん:2010/09/17(金) 20:43:53 ID:7tAeKPBn
 BSF  STATUS,RP0
 CLRF TRISB
 CLRF TRISA        ←スイッチとか付いてないならこれでok
 BCF  STATUS,RP0

もしRA2にスイッチ(入力)があれば
 MOVLW B'00000100'
MOVWF TRISA 
って感じになります。

 MOVLW B'00000010'    ←追加した箇所
 MOVWF PORTA      ←追加した箇所
でもokですが
 BSF PORTA,1
でもokです

間違えて全部のLEDが消えるのはおかしいね  
89774ワット発電中さん:2010/09/17(金) 22:13:23 ID:hYd1aEOK
>>81
>>86

個人の好みかも知れないが、

 BSF  STATUS,RP0
 CLRF TRISB

と書くより、

 BANKSEL  TRISB
 CLRF TRISB

のほうがよいと思う。
90774ワット発電中さん:2010/09/17(金) 22:49:36 ID:YjXfw36g
なんだそのbankselとかいうのは。
91774ワット発電中さん:2010/09/17(金) 23:15:47 ID:7tAeKPBn
バンクの切替をしないで
直接そこをいじくることができる命令語だよん
 BSF  STATUS,RP0
とか
 BSF  STATUS,RP1
などの定義付けが不要になるので
「これはどこのバンクにあったけ?」と調べる手間がなくなるよん
92774ワット発電中さん:2010/09/18(土) 00:05:45 ID:RmJAxorf
いや、切り替えはするだろ。
人がレジスタがどこにあるか調べなくてもアセンブラが自動でバンク切り替えコードに翻訳してくれる。
93高島:2010/09/18(土) 01:59:04 ID:bAHMclxy BE:3486791669-2BP(0)
83です。

ポートBの設定ってもんだいないですか??

MAPLABとTECK PICC LITEを使っていますが、
MAPLABがシミュレーション中にフリーズします。
94774ワット発電中さん:2010/09/18(土) 03:08:58 ID:H9WLNJ+o
別のプログラム書いて試せばすむだろ
駄目なら再インストールしてこい宿題スレじゃねぇ
95774ワット発電中さん:2010/09/18(土) 08:28:27 ID:1K4SCp4f
>>72 const使わないの?
96高島:2010/09/18(土) 11:59:37 ID:bAHMclxy BE:3486791096-2BP(0)
とりあえず、
MPLABを再インストールしました。

元々8.30だったのを
今回8.53へアップグレードもして試して見ます。
97高島:2010/09/18(土) 13:47:38 ID:bAHMclxy BE:387421632-2BP(0)
初歩的質問ですいません。

MPLABで作成したプロジェクトをコピーして
ちょっと違うプロジェクトを立ち上げたいときってどうすればいいですか??

たとえば、
A(プロジェクトのフォルダ)
⇒A.c
 A.mcp
 A.mcw
となっていた場合、
これを
フォルダ内の関係を
相対的にコピーして
B(プロジェクトのフォルダ)
⇒B.c
 B.mcp
 B.mcw
としたいのです。
ここで、相対的にコピーというのは
たとえば、A.mcpは当然A.cを参照するように設定されていますので、
通常、そのままコピーすれば、B.mcpもA.cを参照すると思います。
これを、B.mpcもB.cを参照するようにもれなくコピーするにはどうすればいいでしょうか?
98774ワット発電中さん:2010/09/18(土) 14:23:14 ID:3/JD3888
>>97
聞く前に試してみたか?
相対パスだから中身まるごと持ってきゃ問題ないんだがな、俺んとこでは
99高島:2010/09/18(土) 15:28:16 ID:bAHMclxy BE:1162264436-2BP(0)
97です。
>98

何度かやってみて上手くいかないので。。。

MPLABのプロジェクトでですか?
100774ワット発電中さん:2010/09/18(土) 15:35:36 ID:RmJAxorf
ちょいまち。
ファイル名もそれぞれ変えたいって事?
>98が言ってるのはフォルダまるまるコピーして中身のファイル名は変えない。
[フォルダA]
 −A.c
 −A.mcp
 −A.mcw
をコピペ、フォルダ名リネームして
[フォルダB]
 −A.c
 −A.mcp
 −A.mcw
なら出来る。

中身のファイル名変えたら当然参照先の設定やり直さなきゃ無理。
101高島:2010/09/18(土) 15:42:44 ID:bAHMclxy BE:1807965874-2BP(0)
97です。

出来たっぽいです。

@フォルダごとコピペ
するとフォルダの名前は「こぴ〜A」ってなるので
Aフォルダ名をBに変更
ただ、フォルダBの中身はそのままA.c、A.mcp、Amcwとなるので、
Bcソースをコピペで、B.cを作成
CMPLAB上でフォルダBのなかのA.mcpを開く。
Dそこで、B.cを関連付ける。
EA.cを関連付けからはずす。
FA.mcpを名前をつけて保存でB.mcpとする。
GA.**のファイルを全て消去する。

でできそうです。
102高島:2010/09/18(土) 17:11:40 ID:bAHMclxy BE:1355975137-2BP(0)
100>
100の言うとおりだと思います。

101で「できた」って言うたけど、
再度ファイルを開きなおすとファイルが壊れてるっていわれちゃった。。

とりあえず、100のやり方でやってるけど、
できれば、cのなまえもかえたいかな〜〜。
103高島:2010/09/18(土) 17:13:08 ID:bAHMclxy BE:2066246584-2BP(0)
ちなみに、MPLABのシミュレーションの実行時間(サイクル)って
何に依存しますか???

それでタイムオーバーになってるのかも。。。
104高島:2010/09/18(土) 17:41:07 ID:bAHMclxy BE:2324527294-2BP(0)
今、実機ではLEDを交互に点滅させることは正常動作です。

ただ、シミュレーションで異常となったLCDの表示は未だ出来ていません。

出来ること
・タイマ0割り込みを使って、待ち時間を作ること
・待ち時間を利用して、LEDを点灯、点滅すること

できないこと
・LCDの表示
105774ワット発電中さん:2010/09/18(土) 20:26:28 ID:Fcdql80/
>>81
使っているPICは何ですか?
PICによってはPORTAのデフォルトはアナログになっている場合があるので、
デジタルに設定しないとうまく動作しませんyo。
106高島:2010/09/18(土) 21:47:33 ID:bAHMclxy BE:1807965874-2BP(0)
今、真剣になやんでるんですが、

MPLABがシミュレーション中に落ちるってどんなことが原因ですかね〜〜。
LCDを表示させようとしたらその命令をしている途中におちるんです。

シミュレーションもできなくて^〜〜。
107774ワット発電中さん:2010/09/18(土) 22:22:30 ID:ciRxNmC1
MPLABが閉じてしまうのかな?
PLAB歴3年ですがまだその経験がないです。
ちゃんと新規にウイザードから作り直した方が良いと思いますよ。
108774ワット発電中さん:2010/09/18(土) 22:48:20 ID:RmJAxorf
回路もソースも出さずにわかるわけねえだろー

お前は「車がエンストする」って聞いただけで原因特定できるのかー?
109高島:2010/09/18(土) 23:19:04 ID:bAHMclxy BE:516561942-2BP(0)
107>
そのとおりです。

何度もウィザードからつくりなおしてるんですが。。。。

なんどやってもおなじように。。。

>108
http://uproda.2ch-library.com/lib292928.c.shtml
110774ワット発電中さん:2010/09/18(土) 23:31:35 ID:ciRxNmC1
ノートパッド(メモ帳)に書かれたASMファイルをもらえると検証しやすいんだけど
無理かな?
111高島:2010/09/19(日) 00:14:24 ID:i2yuEFeF BE:645702825-2BP(0)
110>
それってどこにありますか??
コンパイル時にCソースがアセンブラに変換されるってこと???
112774ワット発電中さん:2010/09/19(日) 00:49:22 ID:FzGEFrYq
orz
113774ワット発電中さん:2010/09/19(日) 02:37:55 ID:/SQPgiDx
馬鹿にはpicは無理。
114高島:2010/09/19(日) 02:56:41 ID:i2yuEFeF BE:774843326-2BP(0)
ちなみに
int num;
char cs;

num = 33;

cs = *****; //この部分が知りたい

csに"33"が入るようにする関数ってありますか??

環境はMPLAB8.56にPICC LITEです。
つまり、整数型を文字配列に格納する方法を知りたいと思います。
115774ワット発電中さん:2010/09/19(日) 02:59:42 ID:y6Bams8+

>>64
64個の技を教えてくれよ
116774ワット発電中さん:2010/09/19(日) 03:02:06 ID:X4fjiWsw

>>64
じゃ〜俺は48手でいいわ。
117774ワット発電中さん:2010/09/19(日) 03:18:38 ID:ljsW6pww
char cs;

cs = "33";
は無理
118774ワット発電中さん:2010/09/19(日) 03:23:51 ID:yh2L5x4+
>>114
検索のやり方もしらないの?
ほとんど調べてないでしょ
この先ずっとここに書くの?
それとも釣り?
119774ワット発電中さん:2010/09/19(日) 03:38:46 ID:U7DfzzoS
>>114
つ sprintf
120774ワット発電中さん:2010/09/19(日) 09:04:20 ID:sAbgdhfM
>>109.114 マルチ乙。各サイトで情報小出し(お互いのサイトには知らせていない)にしてるから解決に時間がかかる。
121774ワット発電中さん:2010/09/19(日) 10:15:22 ID:6IYI8sb8
5bitしか無いんだから理論限界は32だな
6bitあると思ってるっぽいので、64の状態は表せる
デマルチプレクサとかが要るけど
122774ワット発電中さん:2010/09/19(日) 12:25:41 ID:jdjPo7wX
>>121
上の方で出てるけど、入力(Hi-Z)も使ってポート5本で40個までいけるそうだ
ここまでするなら、ピンが多いのに変えるなり、シフトレジスタでも使ったほうが良さそうに思うが
123774ワット発電中さん:2010/09/19(日) 12:38:26 ID:EPwvYm39
これは素直にシフトレジスタ使ってる
http://www.nicovideo.jp/watch/sm11328052
124774ワット発電中さん:2010/09/19(日) 13:01:04 ID:lddWu0Rc
>>114
charは文字列じゃなくて単なる8bitの変数と覚えておいた方がいいよ
可変文字列か固定文字列かしらないけど
char[8]= とするとか
const char[8]= とするとか
*char= とするとか
実際にメモリに文字列が格納される様子をイメージしてね
125774ワット発電中さん:2010/09/19(日) 13:10:07 ID:f+H+VK7d
mplabのプロジェクトのパスに全角文字を含んでいるとダメ
126774ワット発電中さん:2010/09/19(日) 14:30:46 ID:z8k2WBQi
>>121
追加回路がOKなら>>123で無限だろ。

>>122
30個だと思うけど、どのレスで40個OKになりそう?
127774ワット発電中さん:2010/09/19(日) 15:49:53 ID:O1jMaDLk
128774ワット発電中さん:2010/09/19(日) 16:08:51 ID:6IYI8sb8
おお、>>123 が一番正解だわ
これなら原理的には1ピンでも表示できるな
129774ワット発電中さん:2010/09/19(日) 17:45:26 ID:kRx4uKeb
追加回路なんて無くても、自分でLEDをスキャンすれば…
130774ワット発電中さん:2010/09/19(日) 17:53:34 ID:YiMCCUyp
ループの予感
131774ワット発電中さん:2010/09/19(日) 18:46:39 ID:ljsW6pww
>>123
これをカラーで見てみたい
132774ワット発電中さん:2010/09/19(日) 18:46:50 ID:rzh/vnjA
パチンコが原因の殺人事件、自殺、犯罪

パチンコ業界 警察利権としての三十兆円産業
・警察が独占するパチスロ利権・叩かれる総連系パチンコホール・「換金合法化」で利権粉砕
日本の聖域 (編者/「選択」編集部,発行所/新潮社,2010年4月25日発行)
http://jbbs.livedoor.jp/bbs/read.cgi/game/1733/1275080546/704-708
133高島:2010/09/19(日) 22:28:45 ID:i2yuEFeF BE:1033124328-2BP(0)
124>
int num;
char cs[8];

num = 33;

cs[0]に"3"、cs[1]に"3"が入るようにする関数を知りたい
とすれば、なんとか伝わりますか?

説明が下手ですいません。


134774ワット発電中さん:2010/09/19(日) 22:33:33 ID:U7DfzzoS
135774ワット発電中さん:2010/09/19(日) 23:11:30 ID:6IYI8sb8
つか自作しる
そのくらい作れないようでは何もできない
136774ワット発電中さん:2010/09/19(日) 23:16:34 ID:jcMB/yB1
答え出てるんだからおわりっしょ。
137774ワット発電中さん:2010/09/19(日) 23:28:47 ID:sAbgdhfM
ポインタは入らないだろうに。と、突っ込んでみる。
138774ワット発電中さん:2010/09/20(月) 00:41:41 ID:nZdBp86g
cs[2] は "\0" でなくてもいいんだろうか

っつか '3' や '\0' と記述しないとおかしいな
139774ワット発電中さん:2010/09/20(月) 00:56:16 ID:8I6o841T
C言語としての行儀良さだと 0 は入れた方がいいけど、
組み込みは長さ決めうちでも問題ないことが多い
140774ワット発電中さん:2010/09/20(月) 01:01:55 ID:lmbX6yBG
>133
119の言うようにsprintfという関数の使い方を調べろ

ただし、返り値はポインタなので、代入先 cs を
char cs[8]; (配列)ではなくて、
char * cs; (ポインタ)
にしなくてはいけないが。

あと、sprintfはコードサイズが大きいので注意

桁数の決まった整数から文字列にするだけの単純な関数なら自作する方がいい。

一桁の整数 i から文字コードに変換するだけなら、たとえば
cs[j]="0123456789"[i];
みたいな、関数を用いない(テーブルの参照)方法もあるな。
文字列の一番最後には終端コード '\n' が必要。
ちなみに、133は文字列と文字の違い、" と ' の使い分けも学ぶ必要がありそうだ。
141774ワット発電中さん:2010/09/20(月) 01:02:13 ID:nZdBp86g
>>114
ネタにマジレス
void kansuu(char *cs, int num)
{
  cs[0] = num / 10 + 0x30;
  cs[1] = num % 10 + 0x30;
}

int num;
char cs[2];
num = 33;
kansuu(cs, num);
142774ワット発電中さん:2010/09/20(月) 01:10:37 ID:tOCt9hfD
>>140
char cs[8]; でもok

>>141
num = 32760; だったらどうなる?
143774ワット発電中さん:2010/09/20(月) 01:18:11 ID:8I6o841T
そんなところにintを使うんじゃない
勿体ない
144774ワット発電中さん:2010/09/20(月) 01:47:47 ID:MUsWDBqH
え、char[]でsprintfに渡せるでしょ。戻り値じゃなくて引数だし。
145774ワット発電中さん:2010/09/20(月) 03:12:27 ID:nZdBp86g
>>142
仕様の後出しは嫌われるぞ
146774ワット発電中さん:2010/09/20(月) 08:17:39 ID:OpgRmfVE
>>142
>>141の関数の下だけをちょっと変えてループで回せ
147774ワット発電中さん:2010/09/20(月) 08:17:54 ID:tOCt9hfD
仕様は「整数型を文字配列に格納」だった。
numはint型で num = 33; は例だろ。

後から誰かが2桁に限定しちまった。ぉぃ
148774ワット発電中さん:2010/09/20(月) 10:00:23 ID:8I6o841T
ということは、ゼロサプレスも仕様に含まれてるぞ
149774ワット発電中さん:2010/09/20(月) 10:31:54 ID:gFzlIkZk
こうやってバグ付きの製品が夜に出て行くのがよくわかるスレ。
150774ワット発電中さん:2010/09/20(月) 10:52:23 ID:MUsWDBqH
出来た。完璧。

int sprintf(char* buf, char* format, int n)
{
buf[0] = 0;
if (n == 33) { buf[0] = '3'; buf[1] = '3'; buf[2] = 0; return 2;}
return 0;
}
151774ワット発電中さん:2010/09/20(月) 10:59:48 ID:Mke5kcW3
こんな感じでどうでしょうか?

unsigned char temp;
unsigned char sup = 0;

if( num < 255 ){
  temp = num / 100;
  if( sup > 0 ){
    if( temp > 0 ){ cs[2] = '0' + temp; sup = 1; }
         else { cs[2] = ' ';     sup = 0; }
    }
  } else {
    cs[1] = '0' + temp; sup = 1; }
  }
  num %= 100;

  temp = num / 10;
  if( sup > 0 ){
    if( temp > 0 ){ cs[1] = '0' + temp; sup = 1; }
         else { cs[1] = ' ';     sup = 0; }
    }
  } else {
    cs[1] = '0' + temp; sup = 1; }
  }
  num %= 10;

  temp = num / 10;
  cs[0] = '0' + temp;
}
152774ワット発電中さん:2010/09/20(月) 11:56:11 ID:OXlTOQcS
>>150
2を返す仕様は…あ、sprintfってことか。戻り値あるんだね。
sprintfの戻り値使ったこと無い。それ以前にsprintf使わないしw
厳密にはint nの後ろに何か続くと思った。n個のパラメータ云々

てか、皆親切だな。聞いてきた本人、休日だからおそらく寝てるぞ。
早起きして本を30分も読めば解決するのになぁ。と。
153774ワット発電中さん:2010/09/20(月) 12:22:42 ID:mTmkRjNX
if( num < 255 ){
この書き方は(俺から)嫌われるから注意な。

if (num < 255) {
うむ。
154774ワット発電中さん:2010/09/20(月) 12:59:02 ID:8I6o841T
あなた、子供の宿題をやっちゃ駄目でしょ
155774ワット発電中さん:2010/09/20(月) 14:31:43 ID:Mke5kcW3

この書き方が できるかもしれない?

cs[2] = (temp>0)? { '0'+temp; sup=1; } : { ' '; sup=0; };

156774ワット発電中さん:2010/09/20(月) 14:46:00 ID:7LSmyUGF
>>150
素晴らしい!
こんなにも他人のプログラムに感動できたのは実に久しぶりだ、有難う。
157774ワット発電中さん:2010/09/20(月) 16:39:42 ID:hCPV6t+r
プログラム難しすぎて書けない
レジスタとか割り込みとか何なんだよ
継ぎ接ぎできるプログラム集とか無いかな
158774ワット発電中さん:2010/09/20(月) 17:02:38 ID:AKNrdmKb
itoa() とか i2a()とかライブラリを探してみれば?
自分で書いても簡単。

char *itoa(char *p, int n) {
 if(n<0) {*p++='-'; return itoa(p,-n);}
 if(n>=10) p=itoa(p,n/10);
 *p++ ='0'+(n%10);
 *p=0;
 return p;
}
159774ワット発電中さん:2010/09/20(月) 18:01:56 ID:bEgP3bdc
オレはアセンブラでやってるから
そんなことでは悩まないのだ
160774ワット発電中さん:2010/09/20(月) 19:32:23 ID:8I6o841T
たまにシフト後のキャリーフラグが欲しくて、C言語がもどかしい
161774ワット発電中さん:2010/09/20(月) 20:04:35 ID:OXlTOQcS
>>158
そんなにスタック使うなよw
162774ワット発電中さん:2010/09/20(月) 21:39:15 ID:wuxXtO9P
char* itoa(char *p, int n) {
char *wp=p, s[6], f=0;
int i=0;

if (n<0) {f=1; n=0-n;}
do {
s[i++] = n%10;
n/=10;
while(n!=0 %% i<sizeof(s));
if(f) *wp++ = '-';
do {
*wp++ = '0'+s[--i];
while(i);
*wp = 0;
return p;
}

あ、バグってるなwww
163774ワット発電中さん:2010/09/20(月) 23:51:06 ID:IqVuaL45
すいません。質問させてください。
MPLABをインストールしてそのあた
PICC liteもインストールできるみたいなのですが
うまくできません。

あとでMicrochipフォルダにあるPICC liteのexeファイルをクリックしても
エントリポイントが見つかりませんというエラーがでます。

なにか解決方法はあるでしょうか??

「プロシージャ エントリ ポイント SetDllDirectoryA が
ダイナミック リンク ライブラリ KERNEL32.dll から見つかりませんでした。 」

というエラーがでます。
164774ワット発電中さん:2010/09/21(火) 00:11:06 ID:9FwmssT7
フォルダーが日本語なんじゃ
165774ワット発電中さん:2010/09/21(火) 00:11:51 ID:sjONUsVT
>>163
そのメッセージでググると一番上に回答があるわけだが
166774ワット発電中さん:2010/09/21(火) 00:16:09 ID:lHNLLujn
>>165
どうもありがとうございます。

全部のメッセージを検索してみたらよかったのですね。
167774ワット発電中さん:2010/09/21(火) 00:20:15 ID:n4resreo
>>163
Windows2000ですか?
KDWでSetDllDirectoryAのダミー関数があるので使うと動くかも
168774ワット発電中さん:2010/09/23(木) 01:23:21 ID:JoP0YhqC
>>157
つ連枝
169774ワット発電中さん:2010/09/23(木) 10:58:58 ID:z1NYOT25
PIC初心者ですが質問させてください

16F877AでEEPROMにデータを書こうとしたのですが
書き込めないのでICDでステップ実行してみたところ

 BSF EECON1,WR

を通ってもEECON1のWRビットが変化しません。
シミュレーター上ではWRビットは変化もして
EEPROMにも書き込めているようなのですが
原因がわかりません。
よろしくお願いします。
170774ワット発電中さん:2010/09/23(木) 12:26:53 ID:58eZlTk4
>>169
banksel EECON1をいれてみたら?
171774ワット発電中さん:2010/09/23(木) 12:50:53 ID:AL3NB/kr
>>169
WR: ライトコントロールビット
1 = ライトサイクルを開始する。(このビットはライトが完了するとハードウエアでクリアされる。

EEPROM書込み終了(数ms)で自動クリアされるからICDステップ実行で見ても判らないと思ふ
172774ワット発電中さん:2010/09/23(木) 13:00:46 ID:z1NYOT25
>>170
EECON1を操作する前(EEPGDをクリアする前)にバンクは3にしてます

>>171
ステップ実行はその前からやっていて、
WRセットの行を通した直後でも変化しないです

色々やってみてはいるのですが
解決出来ません
173774ワット発電中さん:2010/09/23(木) 13:04:59 ID:hrpnG9/H
>>169
configでEEPROMのプロテクトがかかってるとか
174774ワット発電中さん:2010/09/23(木) 13:17:40 ID:AL3NB/kr
>>172
ICDのステップ実行ってICD通信時間かかるよね。
ICDではWRセット直後の状態を取得できないから変化を確認できないと思ふ
175774ワット発電中さん:2010/09/23(木) 14:02:11 ID:z1NYOT25
>>173
CONFIGの設定は_WRT_OFF、_CPD_OFF、_CP_OFFです

>>174
そうなんですか?

電源投入時にEEPROMにデータを書き込み、
通常処理中にそのアドレスのデータを読み込んで
値が一致していたらLEDを点灯させるプログラムを入れて
ロムに書き込んでみたのですが
点灯しませんでした

やっぱりEEPROMに書き込めてないですよね?
176774ワット発電中さん:2010/09/23(木) 14:07:48 ID:AL3NB/kr
>>175
>やっぱりEEPROMに書き込めてないですよね?

知らん。ICDで読み出してみ
177774ワット発電中さん:2010/09/23(木) 14:33:33 ID:z1NYOT25
>>176
読み出してみても全部FFになってます

もう少し色々やってみます
178774ワット発電中さん:2010/09/23(木) 14:52:52 ID:AL3NB/kr
>>177
書き込めてないみたいね。

あとは・・・EEPGDクリア忘れとか?
179774ワット発電中さん:2010/09/23(木) 16:10:37 ID:3W3AxK0h
>>177
>読み出してみても全部FFになってます
ICDでブレークした時では無く、普通に実行させた後に読み出した?
シミュレーター上で書けてるなら書込みシーケンスは合ってるような気がする。

>電源投入時にEEPROMにデータを書き込み、  −−−ここと
>通常処理中にそのアドレスのデータを読み込んで −−−ここの
時間間隔は、どれくらい?
180774ワット発電中さん:2010/09/23(木) 17:46:08 ID:OfIjWTjY
ROM書き込み前のおまじないはちゃんとデータシート通りにやってる?
機種ごとにレジスタ名が微妙に違ったりして引っかかることが俺はたまにある。
181774ワット発電中さん:2010/09/23(木) 23:23:03 ID:Db7TlZya
ちょっと前のHiTechCで、EEPROMに書けないバグがあった。
開発言語は何?
182774ワット発電中さん:2010/09/24(金) 00:24:42 ID:RKj+AFCS
>>179
これで動かないなら死ね

banksel EEDATA
movwf EEDATA
banksel EECON1
bsf EECON1, WREN
bcf INTCON, GIE
movlw 0x55
movwf EECON2
movlw 0xAA
movwf EECON2
bsf EECON1, WR
bsf INTCON, GIE
bcf EECON1, WREN
btfsc EECON1, WR
goto $-1
183774ワット発電中さん:2010/09/24(金) 01:08:19 ID:FpkDkUPA
>>182
EEPGDをクリアしてないよ。ダメじゃん
184774ワット発電中さん:2010/09/24(金) 07:21:52 ID:RKj+AFCS
>>183
wを引数にするため書き込みとアドレス設定とサブルーチンを分けていた。
これで文句ない?

banksel EEADR
movwf EEADR
banksel EECON1
bcf EECON1, EEPGD
185774ワット発電中さん:2010/09/24(金) 08:44:51 ID:Sd8kTdeC
>>178
EEPGDはWRENビットをセットする前にクリアしてます

>>181
開発言語はアセンブラです

>>179
書き込み終了後にWRビットがクリアされるまでループして
それから通常処理に入ります

皆さん色々考えていただき有難うございます
186774ワット発電中さん:2010/09/24(金) 08:52:19 ID:Sd8kTdeC
>>182
BANK2A
BANK2B
MOVF R_EEADR,W
MOVWF EEADR
MOVF R_A_EEDATA,W
MOVWF EEDATA
BANK3A
BANK3B
     BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BANK0A
BANK0B
RETURN

書き込み処理はこんな感じで
呼出元に戻ったところでBANK3のWRビットをチェックして
クリアされたらループを抜けるようにしています
187774ワット発電中さん:2010/09/24(金) 18:52:58 ID:NUTNrvYx
バンク動いてからR_EEADRとR_A_EEDATA読んでるように見えるけど
ちゃんとそのバンクにデータおいてあるんだろうな・・・
188774ワット発電中さん:2010/09/24(金) 19:31:22 ID:ObBUURCF
>>186

ところで、

BANK2A
BANK2B

って何?
189181:2010/09/24(金) 22:04:38 ID:3NT/h4yv
PIC16F88だけど、書き込みアドレスの設定前に、EECON1のWRが0になるのを待つ必要があったよ。
インラインなんでちょいと見づらいですが、こんな感じ。

#ASM
NOP
BSF 3,5 // bank 3 (+180H)
BSF 3,6
BTFSC 0x18C,1 // EECON1,WR
GOTO $-1

BSF 3,6 // bank 2 (+100H)
BCF 3,5
MOVF _ADDR,W // set EEPROM address
MOVWF 0x10D // EEADR

190774ワット発電中さん:2010/09/24(金) 22:26:50 ID:8PsT/E8J
プロテクトみたいなもんだからな
191774ワット発電中さん:2010/09/24(金) 22:52:03 ID:RKj+AFCS
>>186
情報を小出しにしやがって
ここはお前の公開デバッグ場じゃなねーんだよ。
お前のクソーコードがバグってるんだ。
192774ワット発電中さん:2010/09/24(金) 23:17:41 ID:aHq37e11
涼しくなってきたしそろそろpic工作再開しようかな。
193774ワット発電中さん:2010/09/24(金) 23:27:22 ID:8PsT/E8J
半田ごての熱は命に関わるからな
194774ワット発電中さん:2010/09/25(土) 19:37:15 ID:Xvm6qb9K
というより、汗が目に入って作業できないんだよな。
195774ワット発電中さん:2010/09/25(土) 21:00:42 ID:MsTPVd03
いや、暑くないし
196774ワット発電中さん:2010/09/25(土) 21:30:39 ID:KDzIKXWh
ソフトが思い通り動かないとき
自分のミスを疑わない神経がゆりっすなぁ。
197774ワット発電中さん:2010/09/25(土) 21:50:02 ID:Xvm6qb9K
ゆとりじゃないよ。
誰でも1度は通る道だ。
中二病だ。
198774ワット発電中さん:2010/09/25(土) 21:52:10 ID:BDBROESW
以前にもPICかMPLABのバグを疑ったアホがいたなw
199774ワット発電中さん:2010/09/25(土) 22:54:50 ID:/VuEOxag
でもPICCのバグだったことが何度もあるし
200181:2010/09/25(土) 22:57:59 ID:KOtMSE+2
うーん、なんかちょん切れてる人がいるけど、>186 のは、BANK** を除いて
仕様書のサンプルどおり。

実際のところ、仕様書がわかりにくい。
アドレス設定前のWRのクリア待ちは、サンプルには書いてないし、
サンプルどおりやると書けない。
WRビットの説明を見ると、なんとなくそんな気がするのでやってみたら当り。
というところ。
201ちょんぎれた人:2010/09/26(日) 00:03:07 ID:DHXjs3gs
>>200
仕様書の例外なく丸写しで試してみたらどうだ?
それすらせずにここで聞くことが許せん。
202774ワット発電中さん:2010/09/26(日) 00:11:59 ID:vVqP1C+5
小出しにせんとさっさと全ソース出せや。うっとおしい。
203ちょんぎれた人:2010/09/26(日) 00:21:47 ID:DHXjs3gs
サブルーチンにしてるみたいだがスタックは溢れてないのか?
割り込み発生してがバンクを破壊してないか?

こんなに親切に考えてやるちょんぎれた人もいないだろwwww
バカ>>181 Cコンパイラに頼るな。
204774ワット発電中さん:2010/09/26(日) 00:42:38 ID:eUV6GW7W
>アドレス設定前のWRのクリア待ちは、サンプルには書いてないし、

あれ?16F877Aや16F88等のdatasheetではWRITE処理前にWRクリア待ちでサンプル書かれてるよ?

でも品種によってはEEPROM絡みのErrataがあって、WRITE直後はsleep推奨だったりして
定まらないのは紛らわしいよね。
205774ワット発電中さん:2010/09/26(日) 00:48:47 ID:eUV6GW7W
>>201
まてまて、>>181 >>200は質問者じゃないだろうよ。
206774ワット発電中さん:2010/09/26(日) 03:43:25 ID:xZNR72Xf
PICでプログラム領域の自己書き換えができるデバイスがでてきましたが、PICにモニタ書き込んで、
PCからシリアル経由でhex流しこんで、ターゲットPIC自身でプログラミングするようなこと
やってる漢はいませんか?

PIC-PC間の接続は、ソフトウェアのシリアル通信(?)使い、USARTは他と接続することに使える。
printfデバッグもできる。

要するにいちいち書き込み時にライタを抜き差ししたり高電圧かけたり、
ISCPを考慮した回路を組まずに開発進められると助かるんだけど..。
207774ワット発電中さん:2010/09/26(日) 03:45:03 ID:xZNR72Xf
つうか自分でやるか。
文章に書いてみたら意外とできそうだ。
208774ワット発電中さん:2010/09/26(日) 03:50:58 ID:xZNR72Xf
一度コンフィギュワードを設定するのとモニタ焼き込むとこだけPIC外してライタで焼いて、
それ移行はPIC自身でファーム焼きするようなん。

要するに一般的な家電のファームアップとまったく同じやり方です。
致命的な問題点とかありましたらおしえてください。
209774ワット発電中さん:2010/09/26(日) 03:56:10 ID:OmpMwOJX
3回も同じこと言わんでもわかるよ
210774ワット発電中さん:2010/09/26(日) 04:03:36 ID:vVqP1C+5
PIC18系でUSB Bootloader使う方が楽。
211774ワット発電中さん:2010/09/26(日) 04:53:55 ID:eUV6GW7W
>>206-208
Bootloaderでしょ。
秋月ライターとかICD2/3やPICkit2/3自身のファームアップ等
いろいろ使われてるよ。

自分で作るのも結構だが・・・先人のでも参考に
ttp://www.etc.ugal.ro/cchiculita/software/picbootloader.htm

Microchipサイトでbootloaderキーワードに検索すれば
AN1310等PIC/PC双方のソースコード付で揃ってるし
212774ワット発電中さん:2010/09/26(日) 07:38:53 ID:i6TBU0QZ
ありがとうございます!!
100wordで実現とかすごいすね。
素晴らしすぎる。

速攻試してみます。
213181:2010/09/26(日) 12:04:56 ID:ksnwRDt7
ごめん、仕様書見直したら、WRビットの扱いは、
877
 説明・サンプルともに、アドレスを最初に書く、データ書いた後にWR=0を待つ

88
 説明 アドレスを最初に書く、データ書いた後にWR=0を待つ
 手順 データ書いた後にWR=0を待つ。または、アドレス書く前にWR=0を確認
 サンプル アドレス書く前にWR=0を待つ

だった。

> バカ>>181 Cコンパイラに頼るな。
だって楽なんだもん。
214a:2010/09/26(日) 22:32:12 ID:YCbTQsRB
18f14k50にC18でコードを書いていますが,usart受信割り込みが発生しません。timer0割り込みとかなら発生するのですが...
誰か原因わかりませんか?
215774ワット発電中さん:2010/09/26(日) 22:42:11 ID:vVqP1C+5
まずはソースを「全部」見せてください。
ここに書くか、どっかにアップしてください。
自分で関係ありそうと判断した部分だけ掲載、というのは絶対にやめて下さい。
>169みたいにグダグダと続き、あなたが罵られます。
216a:2010/09/26(日) 22:45:41 ID:YCbTQsRB
>>215わかりました。今のパソコンにはソースがないので、明日お見せします。
217a:2010/09/26(日) 22:47:22 ID:YCbTQsRB
すいません。ありました。よろしくお願いします。
void main(){

TRISB=0x20;
TRISC=0;

OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,10);

RCONbits.IPEN=0;
IPR1bits.RCIP=1;
PIE1bits.RCIE=1;
INTCONbits.PEIE=1;
INTCONbits.GIE=1;

while(1){
}
}

#pragma interrupt isr
#pragma code isrcode = 0x08
void jump_isr(void){ //割り込み関数へジャンプ
_asm
goto isr
_endasm
}

#pragma code
void isr(void){
if (PIR1bits.RCIF == 1){
PIR1bits.RCIF =0;
printf("受信");
}
}
218774ワット発電中さん:2010/09/26(日) 23:30:58 ID:I6rLzYZ9
usart割り込みは受信readyの時に発生するのでは
219774ワット発電中さん:2010/09/26(日) 23:31:54 ID:I6rLzYZ9
それは送信だ
220774ワット発電中さん:2010/09/26(日) 23:51:28 ID:OhTlyT/n
>>217
質問です。
割込み発生してないことをどうやって確認したの?
221a:2010/09/27(月) 00:05:57 ID:QkEc0Huv
>>220割り込みが発生したらパソコンに"受信"と送信するようにコードを書きました。
また,LEDが点滅するようにもしましたが、無反応でした...
222774ワット発電中さん:2010/09/27(月) 00:15:13 ID:bCrdk5UD
まずはフラグは立ったが割り込みに行かないのか、割り込みフラグが発生してないのか、データ受信してないのかで切り分けよう。

受信割り込みフラグって立てる操作も出来たっけ?
まず割り込みフラグをプログラムが自分で立てて、それで割り込み処理に移動するか確認してみては。

あとは他の機器でなら、送信元からのデータはちゃんと受信できる?
223774ワット発電中さん:2010/09/27(月) 03:23:03 ID:1jFjNDLI
まさかとは思うけど、UARTにRS232信号を送っていないとか?
224774ワット発電中さん:2010/09/27(月) 06:59:38 ID:5pqSceIj
225774ワット発電中さん:2010/09/27(月) 08:00:01 ID:M4yWiUdl
32bitとかARMでいいやん
226774ワット発電中さん:2010/09/27(月) 08:53:50 ID:LGkpmMkv
>>221
パソコンが送信していることの証明にはならないな。
RS232CのTX/RXを接続して、まずは折り返してみ?
あと、PIC側。これも折り返し。送信を先にして自分で受信してみる。
パソコン側が相手相手のビジーを認識して送信していない可能性もあるので、フロー制御なしを試す。
で、どう?
227a:2010/09/27(月) 09:55:52 ID:1ep66hpH
>>222フラグを立ててみたのですが割り込みは発生していないようです...
CCCSのコンパイラを使用して16F690で同じようなプログラムを作成して、パソコンからPICにデータ送信→PICの受信割り込み→PICからパソコンへデータ送信
という処理は問題なく行えました。

>>223信号は送っていると思います。
>>226一度試行してみます。
228a:2010/09/27(月) 10:36:29 ID:irZgqRHW
コードをいろいろ変更していたら、割り込みが発生しました!
でも、今度は連続して割り込みが発生するようになってしまいました...
フラグはクリアしているのですが...
229774ワット発電中さん:2010/09/27(月) 10:52:06 ID:LGkpmMkv
>>228
連続して割り込み…上位が送信し続けているからじゃないの?
受信したのを送信する様にしているカラクリ。その送信が配線不良で
自身に受信しているというオチ。とエスパー

>いろいろ変更していたら…
文章を読む側はさっぱりわからない。ということに気づいて欲しいな
230774ワット発電中さん:2010/09/27(月) 10:58:09 ID:GYYyLh0+
盆ミスのおかん
231a:2010/09/27(月) 11:09:31 ID:jZpebzDl
>>229すいません。18f14k50のrxピンはアナログピンも兼用していまして、初期設定ではアナログの設定になっているので、ADSELHをクリアしておく必要があったようです。
>>230ボンミスかもしれませんが、知識がなくすぐにわかりません....
232774ワット発電中さん:2010/09/27(月) 11:49:14 ID:GYYyLh0+
日記はチラウラで
233774ワット発電中さん:2010/09/27(月) 12:18:20 ID:bBtpNbEI
>>217 >>231
ソース全部(?)あげたのにADSELHの問題に気付くスキルが無くて悪かったな。

>>227
ccscは勝手にADSELとかクリアしてDigital設定にしてくれたり、
#rs232 で errorsオプション付ければ受信エラーのクリア処理まで
自動でやってくれたりする。
C18はそんなことしてくれないから注意な。
234774ワット発電中さん:2010/09/27(月) 13:33:49 ID:9IgRZ5GH
x86アセンブラみたいな比較(cmp)命令って無いのですか?
見たところ、0なら次命令をスキップはあるようなので
PICはC言語でいうところの
 if(i == 10) goto XXX
のような事は出来なくて
 if(i == 0) goto XXX
なら可能であっていますか? (16F84Aのアセンブラ命令を見ています)
235774ワット発電中さん:2010/09/27(月) 13:37:31 ID:GYYyLh0+
if((i - 10) == 0) goto XXX
236774ワット発電中さん:2010/09/27(月) 18:47:44 ID:bCrdk5UD
比較命令は、最近やった処理結果が0だったかってフラグ(STATUS,Z)があるから
まずi-10をやって、その次の行で
BTFSS status,Z (さっきの演算結果、Zフラグが立ってたらスキップ)
とやる。
237774ワット発電中さん:2010/09/27(月) 19:02:12 ID:LTHEvaqy
>234
アセンブラレベルでは、
「cmpとは、計算結果をレジスタに格納しないsub」
引き算命令の計算結果をレジスタに格納しないだけでフラグ変化は同一。

235や236が言っているのは、そういうことだよ。
238774ワット発電中さん:2010/09/27(月) 19:04:53 ID:Qmko+Xvw
CCS-Cで試してみた。

.................................................... if(i==0){ goto L1; }
0010: MOVF 25,F
0011: BTFSC 03.2
0012: GOTO 017
.................................................... if(i==10){ goto L2; }
0013: MOVF 25,W
0014: SUBLW 0A
0015: BTFSC 03.2
0016: GOTO 017
.................................................... L1:
.................................................... L2:
0017: SLEEP
239774ワット発電中さん:2010/09/27(月) 22:54:17 ID:j/Eazw8x
オフィシャルののFocus Product Selector Guideをみて、ちょっとびっくり。

84Aが無いのは当たり前として、627A、628A、648Aがあるのに、88がない。

18PINはF1シリーズに完全移行か?

つーか、18PINはもう終わり?

個人的には、シリアル付きの8PIN、12F1822が欲しい・・・
240774ワット発電中さん:2010/09/28(火) 00:04:30 ID:/Tja6hBm
長期的に製造し続けるつもりがないんでしょ。
アマチュアは秋月や共立で手に入らないものは候補にしようがない。
241774ワット発電中さん:2010/09/28(火) 00:23:13 ID:HjOqyybN
>>234
btfss btfscで好きな命令を条件付きに変換できる。
条件付きサブルーチンコールにもできる。
慣れると如何にラベルを使わないコードを書けるかに凝りだす。
ここまで来るとアホらしくてC言語モドキなんて使えなくなる。
PIC16は明らかにC向きでないから。
C使うならスタックがメモリに確保できるアーキテクチャのCPUじゃないとダメ。
242774ワット発電中さん:2010/09/28(火) 08:23:13 ID:Vt+j4lkA
>アマチュアは秋月や共立で手に入らないものは候補にしようがない。
交通費と時間考えたらDigiKeyで手に入れば充分。
243774ワット発電中さん:2010/09/28(火) 16:58:44 ID:kjENUm1q
PIC16F88でLEDの発光パターンを色々変えてみてるのですが、ループから抜け出す
方法がわからずに困っております。
以下にソースを示します。開発環境はMPLAB IDEとHiTech-C Liteです。
初心者丸出しの質問で申し訳ありませんがよろしくお願いします。

#include <htc.h>
#define _XTAL_FREQ 8000000
unsigned char state;

void init (void)
{
OSCCON = 0x70;
TRISA = 0x01; //set RA0 to input (for SW)
TRISB = 0x00;
PORTA = 0x01;
PORTB = 0x00;
state=0;
}

void init_int (void)
{
T0CS=0; //TMR0 clock source is INTERNAL
T0SE=0; //TMR0 source Edge is Low-to-High
PSA=0; //Prescaler is assigned for TMR0
PS2=1;
PS1=1;
PS0=1; //Prescaler rate is 0b111=256
TMR0=0x00; //Reset the timer register
TMR0IF=0; //Clear the TMR0 flag
TMR0IE=1; //Enable the TMR0 interrupt
GIE=1; //Enable the Grobal interrupt
}

void pattern_a (void)
{
while(1){
PORTB=0x01;
__delay_ms(500);
PORTB=0x02;
__delay_ms(500);
PORTB=0x04;
__delay_ms(500);
}
}

続きます。
244774ワット発電中さん:2010/09/28(火) 17:01:07 ID:kjENUm1q
続きです。症状はスイッチを押してもpattern_a()からpattern_b()へ移ってくれません。

void pattern_b (void)
{
while(1){
PORTB=0x03;
__delay_ms(500);
PORTB=0x06;
__delay_ms(500);
PORTB=0x05;
__delay_ms(500);
}

}

void interrupt isr (void)
{
 if(TMR0IF){
  TMR0IF=0;
  if (!RA0){
   switch(state){
    case 0:
     state=1;
     break;
    case 1:
     state=2;
     break;
    case 2:
     state=0;
     break;
    }
   __delay_ms(30);
   while (!RA0);
   __delay_ms(30);
   }
 }
 TMR0=0x00;
}

void main (void)
{
 init();
 init_int();

while(1){
 switch(state){
  case 0:
   PORTB=0x07; //white
   break;
  case 1:
   pattern_a();
   break;
  case 2:
   pattern_b();
   break;
  }
 }
}
245774ワット発電中さん:2010/09/28(火) 17:34:04 ID:LYd6noSb
pattern_a と pattern_b の while(1) ループは不要じゃね?
246774ワット発電中さん:2010/09/28(火) 17:53:26 ID:dlcNJg1c
>243

回路側は正常?具体的にはA1ピンの電圧テスターで測ってちゃんとスイッチ押すと上下する?
あと、>231を見て気づくことは?
247774ワット発電中さん:2010/09/28(火) 18:14:55 ID:dlcNJg1c
あ、A1じゃなくてA0か。
248774ワット発電中さん:2010/09/28(火) 18:45:07 ID:P7gJ5Q7f
pattern_a()がwihile(1)でリターンしないからpattern_bにも切り替わらない
249774ワット発電中さん:2010/09/28(火) 19:45:42 ID:wnPPWstn
せっかくタイマー割り込み使うなら__delay_ms()なんか使わないで
作り直せよ。
250774ワット発電中さん:2010/09/28(火) 21:32:22 ID:5lvYh07F
18ピンの方が手頃でいいんだけど、
ピン数が増えても値段変わらないから、
大は小を兼ねてしまう
251774ワット発電中さん:2010/09/28(火) 22:09:37 ID:F/U/BXrY
16Fシリーズにいたってはむしろ割安という
252774ワット発電中さん:2010/09/28(火) 22:40:14 ID:5lvYh07F
16F88が200円で16F886が190円か

もう、制作記事に使われてるから、とかしか選ばれる理由がないな
253774ワット発電中さん:2010/09/28(火) 23:00:04 ID:/Tja6hBm
>>242
digikeyやらchip one stopはそっけなくて物足りない。

通販であっても、秋月や共立はワゴンセールのようなワクワク感があって
つい衝動買いしてしまう。

picとは直接関係ないけどね。
254774ワット発電中さん:2010/09/29(水) 03:54:39 ID:pkooxym2
>>243
苦労してるのはよくわかる。一般に状態遷移の記述は、こんなふう。

main(){       // カッコはここに書いた方が短くて、ソースが見やすい
  unsigned char state = 0;
  unsigned char SW;

  while(1){
    if( (SW==off) && (RA0==L) ){ // RA0の立ち上がりなら
      SW=on;          // 1周だけSW=on
    } else {           // RA0は、立ち下がりか、現状維持なら
      SW=off;          // SWは変化なし
    }

    if( state==0 ){     // state0なら
      pattern_a();     // pattern a を実行
      if( SW==on ){    // SWが変化したなら、
        state = 1;    // 次はstate1へ
      }
    } else if( state==1 ){ // state1なら
      pattern_b();     // pattern bを実行
      if( SW==on ){    // SWが変化したなら、
        state = 2;    // 次はstate2へ
      }

    } else if( state==3 ){ // state3なら
      // state3の仕事を書く
      if( 条件成立 ){
        state = 4;    // 次はstate4へ
      }

    } else if( state==4 ){ // state4なら

    }
などと、次々につないで書いていく。
いつもグルグル回って、止まらないプログラムを書くといいよ。

ソースは、見やすさが一番。似たような行は、上下同じに見えるように書くと、
記述も楽だし、間違いも見つけやすい。「カッコも1行で書く」なんて書き方やってると、
言いたいこと、見せたいことのピントがボケてしまい、ダメダメ。
これの方が3.14倍見やすくないかい?
 switch(state){
  case 0: PORTB=0x07;  break; //white
  case 1: pattern_a(); break; 
  case 2: pattern_b(); break;
 }

 PORTB=0x01; __delay_ms(500);
 PORTB=0x02; __delay_ms(500);
 PORTB=0x04; __delay_ms(500);

 switch(state){
  case 0: state=1; break;
  case 1: state=2; break;
  case 2: state=0; break;
 }
255774ワット発電中さん:2010/09/29(水) 03:57:36 ID:A3nnAulr
天才現る
256774ワット発電中さん:2010/09/29(水) 03:59:39 ID:pkooxym2
あと、if()などの条件は、(!RA0)でもいいけど、(RA0==0)というふうに、
左右とも書いたほうが、「え〜っと、0は真だったっけ?偽だっけ?」などと
つまらんことで間違えずに済むよ。
257774ワット発電中さん:2010/09/29(水) 07:45:32 ID:ahjJeAs7
switchには一応お約束でdefault:を入れておこうな.
258774ワット発電中さん:2010/09/29(水) 07:59:37 ID:A3nnAulr
無いとどうなるの?
259774ワット発電中さん:2010/09/29(水) 08:49:12 ID:4zqH+gC+
default:が無いと気持ち悪いねw
でも、無い場合の副作用はよくわからん。

例外の場合の指定がなければ、何もしないで switch{...} を素通り、が仕様のはず。
だから、defaultラベルが無くても問題は無いんだけど、
他人がソースを見るときとかに、あ、default:抜けてる、大丈夫か、と思うとよくないので、
例外処理をちゃんとかくか、
default:
/* なにもしない */
とか書いておいて、例外状態もちゃんと設計しましたよ、という跡をのこす。

くらい?
260774ワット発電中さん:2010/09/29(水) 08:51:59 ID:4zqH+gC+
default:
   /*何もしない*/
   break;
でしたね。または、switch {...}の最後に持ってくる。
261774ワット発電中さん:2010/09/29(水) 09:39:10 ID:MM80xZwT
>>243です。たくさんのレスありがとうございます。

>>245
ご指摘に従って while(1) ループを無くしたら正常に状態遷移するようになりました。
pattern_a pattern_b も当方の意図通り、スイッチを押さない限り無限ループしてます。
(でも、何で while(1) が無いのにループするんだろう?)

>>246
A0ピンでスイッチの状態を読み取れることは事前に簡易プログラムを書いて確認しました。

>>249
タイマー割り込みをスイッチの状態監視に使ってるので、__delay_ms()の代わりに使う
なんてどうやったらいいのかわからないのです。(ひょっとしてTM1を使うとか?)

>>254
丁寧なご指導ありがとうございます。
ご指摘の通りソースを書き直して試してみます。

>>257
ご指摘ありがとうございます。
元のソースには default: を入れてたんですが、2ちゃんの文字数制限に引っかかりそう
でしたので、うpしたソースでは省略いたしました。
262774ワット発電中さん:2010/09/29(水) 09:58:35 ID:K9BJ7m5o
>>245 の指摘が的確で
>>254 は無駄な話だな。
263774ワット発電中さん:2010/09/29(水) 11:00:23 ID:3SNUis0F
>>261
タイマー割り込みは1つで、SWの状態遷移と同じ考えでLEDの状態遷移
をやればいい。
時間は割り込みをカウントすれば割り込み周期の整数倍で作れる。
264774ワット発電中さん:2010/09/29(水) 11:39:00 ID:YgV5k56X
>>262
見やすいソースにはバグも無いと言うし、
ソースの書き方1つで、デバッグの難易度が全然違う。

見やすいソースを書くことは、とても重要だと思うよ。
265774ワット発電中さん:2010/09/29(水) 12:10:38 ID:A3nnAulr
>>259-260
万一誤動作でstateが0,1,2以外の値になっても安全なように

 switch(state){
  case 1: pattern_a(); break; 
  case 2: pattern_b(); break;
  default: PORTB=0x07;  break; //white
 }

 PORTB=0x01; __delay_ms(500);
 PORTB=0x02; __delay_ms(500);
 PORTB=0x04; __delay_ms(500);

 switch(state){
  case 1: state=2; break;
  case 2: state=0; break;
  default: state=1; break;
 }
266774ワット発電中さん:2010/09/29(水) 12:59:38 ID:lrJfjgWo
同じswitchが2個ある時点で気持ち悪いとか思わないのか?
 switch(state){
  case 1: next_state=2; pattern_a(); break; 
  case 2: next_state=0; pattern_b(); break;
  default: next_state=1; PORTB=0x07; break; //white
 }

 PORTB=0x01; __delay_ms(500);
 PORTB=0x02; __delay_ms(500);
 PORTB=0x04; __delay_ms(500);
 state = next_state;
267774ワット発電中さん:2010/09/29(水) 13:00:10 ID:YgV5k56X
>>265
いいですねぇ、美しいソース。

さらにこれはどうでしょうか

 switch( state ){
  case 1 : pattern_a(); break; 
  case 2 : pattern_b(); break;
  default : PORTB=0x07;  break; //white
 }
ずれちゃうかな。
・条件の()の前後は1スペースあける。
・caseの値とコロン「:」の間は1スペースあける
・breakの横位置をタテにキレイに揃える

268774ワット発電中さん:2010/09/29(水) 13:12:45 ID:lrJfjgWo
>>267
お前の書き方はキモイと一蹴されるのが落ち
例えば俺の趣味ならswitchとcaseはツライチにする
スペースの空け方やインデントとかはどうでもいいんだよ
269774ワット発電中さん:2010/09/29(水) 13:25:08 ID:K9BJ7m5o
>>267
くだらん。勝手にやってろ。他人に押し付けるな。
270774ワット発電中さん:2010/09/29(水) 17:55:35 ID:YgV5k56X
>>268
そう、switchはcaseとの位置関係で悩むね。
しかも上記の例題のように、switch caseだけで済まずに、結局その中にif()を書いてしまう。
だったらはじめっから全部if()で行こうと、switch使わずにif()ばっかりね。

>くだらん。勝手にやってろ。
もしかして、動けばOK、ソースの見栄え(みばえ)こだわらない、結果オーライの人?
部屋の掃除してる? クルマの中そうじしてる?
271774ワット発電中さん:2010/09/29(水) 18:34:57 ID:yMklVody
>>270
整形ルールにこだわるにしても度が過ぎていてキモイだけ
どれでもいいだろ
if(hoge)
if( hoge)
if(hoge )
if( hoge )
272774ワット発電中さん:2010/09/29(水) 18:38:46 ID:tHkbUoKi
スレ的にはコードを書くのが目的じゃないから自分で見てわかれば良いのでは?


仕事うんぬんなら、こんな所で議論しないで組織の方針に黙って従え
273774ワット発電中さん:2010/09/29(水) 19:29:29 ID:JbTMCFka
PICはアセンブラ
274774ワット発電中さん:2010/09/29(水) 19:37:38 ID:DaUSLm88
もうね、ソースなんてさ、気に入らなけりゃ整形ツールで自分の好みに変換すりゃいいじゃん
不毛じゃ

275774ワット発電中さん:2010/09/29(水) 20:06:34 ID:A3nnAulr
毛は無いのが好みです
276774ワット発電中さん:2010/09/29(水) 20:10:18 ID:/sbheP5c
ぱいぱんごのみか
277774ワット発電中さん:2010/09/29(水) 21:22:17 ID:X1VE2Kjq
main() {
}

よりは

main()
{
}

の方が多数派だよな
俺は上のパターンだけど
278774ワット発電中さん:2010/09/29(水) 21:22:27 ID:wvwMffeu
アセンブラならページ跨ぎを考慮してもこれだけ

const_tbl macro varU1
local jump_table
movlw HIGH jump_table
movwf PCLATH
banksel varU1
movf varU1, W
addlw LOW (jump_table+0)
btfsc STATUS, C
incf PCLATH, F
movwf PCL
jump_table:
endm
279774ワット発電中さん:2010/09/29(水) 21:46:59 ID:wvwMffeu
Cで美しく書いたコードはどんな機械語になるか考えるとあほらしい

例えば
a++;
a=a%10;

美しくない以下の方が遥かにマシ
a++;
if (10<=a) {
  a=0;
}
280774ワット発電中さん:2010/09/29(水) 21:59:58 ID:YgV5k56X
いやいや、機械語のことなんか考えないですってば。

ソースを見た時の美しさは、入力ミスの低減とデバッグのしやすさ、
1年後に再度見たときの可読性が良いと行っているだけ。
この話には、アセンブリ以降の都合は関係ないですね。

>>277
僕も上のほう。行数が減るし、見やすいからね。
281774ワット発電中さん:2010/09/29(水) 22:02:56 ID:wvwMffeu
>>280
組み込みだろ?
misra cでも守れよ。

まぁpic16でcは死ねばいい。
282774ワット発電中さん:2010/09/29(水) 22:14:12 ID:+BjEB5gc
その前に上下で同一の演算結果にならないじゃないか
283774ワット発電中さん:2010/09/29(水) 22:24:26 ID:wvwMffeu
>>282
そうだね。
284774ワット発電中さん:2010/09/29(水) 22:24:54 ID:Us4yCS31
「コードはこう書くべきだ!」みたいな話は、古典だが「コードコンプリート」という本に
あれこれ書いてあったなぁ。プログラマーなら読んでおいて損は無い一冊。
ちょっと値段が高いけど値段相当の価値はあるはず。

# コードコンプリート―完全なプログラミングを目指して
# http://www.amazon.co.jp/dp/4756102107/

# Code Complete第2版〈上〉―完全なプログラミングを目指して
# http://www.amazon.co.jp/dp/489100455X/
# Code Complete第2版〈下〉―完全なプログラミングを目指して
# http://www.amazon.co.jp/dp/4891004568/
285774ワット発電中さん:2010/09/29(水) 22:36:17 ID:DaUSLm88
コード評論家みたいな奴って居るけど、
やたら他人のソースを批評するばっかりで
自分じゃまともに動くコード書けないのな
動けば神よw
286774ワット発電中さん:2010/09/29(水) 22:54:56 ID:2cGDS/8m
こんなこと聞くのは恥ずかしいんですが・・・
16F886のTMR0ってフリーランするですか??
なんだか255→0になったらゼロのままで動かない様な気がして・・・いろいろやってみてるのですが
287774ワット発電中さん:2010/09/29(水) 23:02:12 ID:txz4exiS
んなこたーない。
何故そう思ったか状況を詳しく。
288774ワット発電中さん:2010/09/29(水) 23:37:53 ID:X1VE2Kjq
TMR0って、「動け」という命令がないから違和感ある
289774ワット発電中さん:2010/09/30(木) 00:04:25 ID:NaKEz2UU
TMR0はフリーランしなかったんじゃなかったっけ?

255->0で割り込み発生するから、その時に再度数値設定しなけりゃだめで、
そのときの再設定処理のクロックを考慮しないと正確なフリーランは無理
だと思った。

俺はもっぱらTMR1をフリーランモードでつかってる。

割り込みは使わず、メインプログラム中でTMR1の数値を読んで、一定時間待
って、とかいう処理をよく使う。

290774ワット発電中さん:2010/09/30(木) 00:15:31 ID:Xjxyaktv
>289
そりゃ150とか自分の欲しい数値で回したい時の方法だろ?
ほっときゃプリスケーラx256カウント周期で回り続ける。
むしろ止める手段がない。
291774ワット発電中さん:2010/09/30(木) 00:25:35 ID:NaKEz2UU
そうなの!?
じゃあTimer0使えるじゃん!!

_no
292774ワット発電中さん:2010/09/30(木) 01:38:00 ID:RH4GFmSC
コードスタイルはいまどきのエディタなら自動整形してくれる機能があるんで好きにすると良い。
293774ワット発電中さん:2010/09/30(木) 07:25:09 ID:jWd8ZWLi
>>292
たとえば、どんなエディタがそれに該当でしょうか?
294774ワット発電中さん:2010/09/30(木) 08:05:28 ID:QjSNh+cy
>a++;
>if (10<=a) {
>  a=0;
>}
わざわざインクリメントしておきながら直後にゼロに戻すのは気に入らん!
とか,

10<=(式)の形で左から評価した時に10をまず代入した後に右の式を
評価するためにいったんスタックに10を押し込むようなコードを生成され
かねない。
(式)>=10の形なら式の評価が終わった段階でメインとなるレジスタ
(アキュームレータなどなど)に値が入っているから,これを定数を
比較する方が楽だろう・・

なーんて考えるのかと思った。
295774ワット発電中さん:2010/09/30(木) 19:14:59 ID:CyK8J+Se
>>294
恥の上塗りだから書くなよ。
pic16のアーキテクチャを理解してないのが丸分かり。
釣り?馬鹿?
296774ワット発電中さん:2010/09/30(木) 19:41:51 ID:WGmARdQ0
きっと294はしょぼいPICの性能を見て
コンパイラも1パスみたいなしょぼい実装と思っちゃったんだねえ・・
297774ワット発電中さん:2010/09/30(木) 21:18:25 ID:cXB7viDO
a % 8;
みたいな式を7とのandにコンパイルされてて、ちょっと感心した
298774ワット発電中さん:2010/09/30(木) 21:24:08 ID:kU2Gx8vw
0x17 % 8を7にしてくれるとは素敵なコンパイラだな
299774ワット発電中さん:2010/09/30(木) 21:55:58 ID:NRtsO7HP
PICりした?
300774ワット発電中さん:2010/09/30(木) 22:07:33 ID:2VPCpe1y
>>299
お前みたいなやつ嫌いじゃない
嫌いじゃないけど氏ね
301774ワット発電中さん:2010/09/30(木) 23:59:10 ID:cXB7viDO
>>298
別に0x17には限らないけど
302774ワット発電中さん:2010/10/01(金) 01:16:05 ID:qVp5/7bM
>294
>わざわざインクリメントしておきながら直後にゼロに戻すのは気に入らん!

なら、
if( a<9 )
a++;
else
a = 0;

みたいにするわけか?
条件成立しやすい方は分岐せずに済むよう前半に、
率の低い方を分岐させるよう後ろに。とかやってみたり。
303774ワット発電中さん:2010/10/01(金) 03:25:45 ID:tInKGLs9
>>302
それが正解
分岐回避にこだわるようなCPUじゃないだろ
304774ワット発電中さん:2010/10/01(金) 07:09:02 ID:FOVJsZnE
>>302
>>303
論点が分かっていない。
そんなのmod演算に比べれば誤差レベル。
305774ワット発電中さん:2010/10/01(金) 16:01:15 ID:xzrCAbLA
>304って,mod演算の代替にはなってないということが分からないほど頭悪い?
306774ワット発電中さん:2010/10/01(金) 19:25:33 ID:2Y6AGmIt



たまに覗けば殺伐としてるなぁ・・・PICりしたぞ


307774ワット発電中さん:2010/10/01(金) 19:56:47 ID:k8egK7MJ
コーディング規約は会社でやってろって感じだよな。
308774ワット発電中さん:2010/10/01(金) 22:07:01 ID:FOVJsZnE
>>305
そんなの判ってるって。
お前はRAM初期化しないでゴミ値のまま動かすんだろ。
309774ワット発電中さん:2010/10/02(土) 03:15:26 ID:vmCajdmy
その昔、CCS-Cで書いていたとき、Out of ROM というエラーが出た。
すかさず#ROM ....と、先頭番地指定して、メモリーを振り分けて
事なきを得た。
PICって、なんでメモリーが2kByte毎にバンクに切れているの?
ずっと全部一直線のアドレスでいいのに。
310774ワット発電中さん:2010/10/02(土) 03:32:00 ID:abw9lavT
そりゃ、わざわざ切りたくはなかったろうよ
311774ワット発電中さん:2010/10/02(土) 03:52:58 ID:AAFCWwCq
>>309
つ PIC18F
312774ワット発電中さん:2010/10/02(土) 08:49:58 ID:lS71WUi7
pickit3買いました。
12F629で、INTRC_IO & NOMCLR は、その組み合わせサポートしていないとエラーが出ました。
今まで使ってた秋月ライターV4では書き込めてました。
確かに INTRC_IO、NOMCLR だと電源入れたとたん走り出し止められない気がします。
秋月ライターはどうやって書き込んでるんでしょう。
313774ワット発電中さん:2010/10/02(土) 09:02:30 ID:HxL8IykO
>>312
MCLR無効にしてても、MCLR端子にVppがきたらプログラミング・モードになるんじゃなかったっけ?
314774ワット発電中さん:2010/10/02(土) 11:51:22 ID:AAFCWwCq
>>312
たぶん警告だけで書き込めるはず
315774ワット発電中さん:2010/10/02(土) 14:18:50 ID:lS71WUi7
>>313 >>314
ホントだ。
そのまま続けたら、あまりにも短時間にあっけなく書き込んでました。
ありがとうございました。
316774ワット発電中さん:2010/10/02(土) 15:09:57 ID:jjsXbEBg
新型のXLPなPIC16シリーズって、秋月で扱ってませんがこれは完全スルーの流れですか?
adcやsbb完全サポートとかヨダレでてくるんですが。
317774ワット発電中さん:2010/10/02(土) 15:28:44 ID:42X2nkbb
>>316
秋月って新型の製品をすぐに店頭に並べるような芸風じゃなかったと思うが。
最近はなんともいえないけど。
318774ワット発電中さん:2010/10/02(土) 15:59:27 ID:EV+0rhXh
>>316
よだれ出るほどなら、ダイレクトショップで買っちゃえば?
319774ワット発電中さん:2010/10/03(日) 05:39:47 ID:YzjtOFs9
>>316
秋月に期待する方向が違うだろ。
320774ワット発電中さん:2010/10/03(日) 09:26:46 ID:7ZdyrR7Z
秋月はジャンク屋とまでは言わないが、掘り出し物市場だからな。
321774ワット発電中さん:2010/10/03(日) 09:35:48 ID:LlQ3/ycl
まあ、「仕入れ先は聞くな」的なトコがあるからね。
322774ワット発電中さん:2010/10/03(日) 10:01:06 ID:YzjtOFs9
秋月を正規ルートの小売店だと思っている幸せ世代が広がってたりするのかな?
323774ワット発電中さん:2010/10/03(日) 10:49:40 ID:ccrmogaJ
300円液晶の正規ルートどこ
324774ワット発電中さん:2010/10/03(日) 11:01:08 ID:y6x3a0wK
部品類は正規ルートだよ。千葉に帰れ
325774ワット発電中さん:2010/10/03(日) 15:54:49 ID:544f1gUX
元々秋葉自体が正規ルートとは違う気がw
個人にでも小売りしてくれるのはありがたいけどねえ。

ちゃんと販社に訊けばスペックシートも全部提供してくれるだろ。
その代わり1ロット単位の購入だろうけど。
326774ワット発電中さん:2010/10/03(日) 16:17:09 ID:9oRZNRbJ
webでデータシートが手に入るから
秋月もガリ版データシートはつけなくていいよ。
さらに値下げ希望。
327774ワット発電中さん:2010/10/04(月) 01:25:12 ID:yRmP2+Um
かつて秋葉原は闇市として栄えた
328774ワット発電中さん:2010/10/04(月) 11:07:27 ID:ayLidXHD
>>324
正規ルートなら取引の代理店貼ってくれw
329774ワット発電中さん:2010/10/04(月) 17:04:26 ID:h73wNem1
>>327
「ロクタル管のはなし」な世界だな
330774ワット発電中さん:2010/10/05(火) 02:13:43 ID:2njKfUKs
PIC24FでフラッシュROMのイレースが上手くいかない。
何処が悪いのか教えてください。

マイクロチップのCコンパイラ3.02
開始アドレスは0x1000で呼び出しています。

#define PM_PAGE_ERASE 0x4042 //NVM page erase opcode
void testErase(long addr)
{
int temp;
int a_low, a_high;

a_high = addr >>16;
a_low = addr & 0xffff;
temp = TBLPAG;
NVMCON = PM_PAGE_ERASE;
TBLPAG = a_high;
__builtin_tblwtl(a_low,a_low);
__builtin_write_NVM();

while(NVMCONbits.WR == 1)
;
TBLPAG = temp;
}
331774ワット発電中さん:2010/10/05(火) 08:22:51 ID:2ZHYJHnr
アンカに泣いた
332774ワット発電中さん:2010/10/05(火) 08:48:01 ID:nvFIezT/
>>330
「上手くいかない」の詳細な現象を書かないとね
333774ワット発電中さん:2010/10/05(火) 08:50:02 ID:nvFIezT/
>>330
「上手くいかない」の詳細な現象を書かないとね

「上手くいかない」のはあなたが判断した結果であって現象ではないよ
問題解決で必要なのは現象を整理して書き出すってこと
334>>330:2010/10/05(火) 08:55:13 ID:2njKfUKs
>>333

 ”PIC24FでフラッシュROMのイレースが上手くいかない。”と書けば分かってもらえると
思ったのですが。
 先のサブルーチンを呼び出した前後で消去を指定した0x1000
335>>330:2010/10/05(火) 09:00:06 ID:2njKfUKs
>>333

 ”PIC24FでフラッシュROMのイレースが上手くいかない。”と書けば分かってもらえると
思ったのですが。
 先のサブルーチンを呼び出した前後で消去を指定した0x1000以降のフラッシュROM
の内容が変化しません。0x1000以降には、確認用に数十バイトだけ、でたらめなデータ
を入れてあります。
 文書の途中で操作を誤って、二度書き込みしてしまった。すいません。
336774ワット発電中さん:2010/10/05(火) 09:01:57 ID:ciq9g9+5
自演か何かかね?
337774ワット発電中さん:2010/10/05(火) 09:42:16 ID:7zTpZq7X
__builtin_tblpage や __builtin_tbloffset も必要なんじゃね?
338>>330:2010/10/05(火) 11:33:44 ID:2njKfUKs
>>337
>__builtin_tblpage や __builtin_tbloffset も必要なんじゃね?

 レス感謝です。上記のマクロ?についてネットで調べてみましたが、変数のアドレスを
上位と下位に分割するもののようで、今回の分は、それを別の方法で実施しています。

 コンフィグの設定もICD3を使っている関係で、GCP, GWRPともにOFFに設定しています。

 他に何があるんだろう。
339774ワット発電中さん:2010/10/05(火) 17:20:41 ID:E+Cv6lxH
NVMCON とか TBLPAG って、大文字で書いてるけど定数じゃなく変数なのか?
大文字で書くのは定数だと思ってたが。

それと、NVMCON と NVMCONbits って別の変数だよな。
NVMCONbitsってどこで定義され、初期化されてるの?
340774ワット発電中さん:2010/10/05(火) 19:01:27 ID:dI2Wl+aD
ヘッダーファイルをのぞいてみれば?
341774ワット発電中さん:2010/10/05(火) 21:24:59 ID:rJ9c2jDH
a >>= 1 と書くべきところを a >> 1と書いてて、
かなり悩んだ
342774ワット発電中さん:2010/10/05(火) 22:34:19 ID:ibjbzz/d
>>341
「このコードは副作用がありません」って出てなかった?
343774ワット発電中さん:2010/10/05(火) 23:12:39 ID:rJ9c2jDH
何も出なかったような
344774ワット発電中さん:2010/10/06(水) 12:26:47 ID:aRzDc/Zw
PIC24FのA/D変換について教えてください。

ttp://ww1.microchip.com/downloads/jp/DeviceDoc/39705A_JP.pdf
の11ページを元にAD1CON3のADCSを設定したいと思うのですが、あてはめる値の意味がわからなくて
困っています。

Tcy = Fosc/2とあるのですが、Foscとはなんでしょうか?
また「A/D変換には12TAD必要」と書いてあるのですが、これはADCSを決定するのにどう反映すれば
よいのでしょうか?
345774ワット発電中さん:2010/10/06(水) 13:37:45 ID:+W1p9kyG
PIC16F628Aを利用した時計の回路を書いてみました。
ttp://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20101006133502.png

・電気二重層コンデンサで、瞬断対策
・アノードコモンな7SEGをダイナミック点灯
・スイッチの入力はダイナミック点灯の合間にポートを入力状態にして取り込む

スイッチのあたりの回路にイマイチ自信がないのですが、致命的な問題など
あるようでしたら教えてください。
346774ワット発電中さん:2010/10/06(水) 13:41:08 ID:+W1p9kyG
昔メインクロックに32Khzを入れてダイナミック点灯の時計をつくろうとし、
ダイナミック点灯と秒の加算まではなんとか行けたものの、時刻設定で力尽き。

32Khzだと割り込み使うとメイン処理が遅れるという...。
347774ワット発電中さん:2010/10/06(水) 15:19:35 ID:Wh8XbZWk
RTCを使ってPICはリセットさせたほうがいいような、PICだけでやりたいだろうけど
348774ワット発電中さん:2010/10/06(水) 16:18:15 ID:lN8bAOBe
>>345
瞬断対策なら普通のコンデンサで充分な希ガス
349774ワット発電中さん:2010/10/06(水) 17:21:19 ID:+ACEEo8/
>>345
>致命的な問題などあるようでしたら教えてください。
致命的なところはわからないけど、添削してみました。

http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20101006165948.jpg

番号を付けました。1〜10です。
1. もし特段の事情が無ければ、センター(+)のほうがいいと思います。
2. 逆接ダイオードを入れておくと、精神的にとても安心できます。
  また、電源の入り口には、0.1uFだけにせず、電解コンデンサを
  入れた方がいいです。この感じだと、100uF程度でしょうか。
3. コンデンサは3端子の出力の点に移動します。
4. スーパーキャパの表記がよくないです。
  C6は部品記号ですので、そこで改行して、
  次の行に1Fの5Vと、先に容量、後に電圧を書くのがいいと思います。
5. このダイオードは必要でしょうか?
6. 何がどうつながっているのか、サッパリわかりません。
  図のように明示的にしましょう。しかも信号名も書いてありません。
  抵抗の下に書いてある、とか言わないで、ちゃんとバス信号線の所に書きましょう。
7. LEDにはどの線がつながるのか、書いてないと配線できません。
  特に、R4, R3, R2, R1は、どちらのバスにつながっているのか、サッパリわかりません。
  ちゃんと両方のバスにつながっていることを明示的に表現すべきだと思います。
8. R13は、タテの抵抗のことでしょうか? 横の抵抗の事でしょうか?
  R9を上に持ってきて、R13はタテ抵抗の横に置きましょう。
9. 瞬定した時、スーパーキャパでLEDを点灯させるのは無理があります。
  LED表示は消えるけど、時間はキチッと刻んでいるから、停電復旧後は
  正しい時間を表示します、のほうが良いと思います。
  したがって、LED電源はV1でなくV2から取るべきだと思います。
10. 注釈でアノードコモンなんて文字で説明せずに、LEDのCOMピンの横にAと書いたほうが
   直接的で間違いが減ります。
11. R1 1k とかの部品の説明は、
   部品の左、部品の上を原則にするといいと思います。
12. 32.768kHzの水晶の負荷容量が、15pFになっていますが、
  少なくないでしょうか? 68-100pFくらい?

辛口ですけど、気を悪くしないでくださいね。すみません。
回路図センスはいいと思いますので、もう少しです。
がんばってください。
350774ワット発電中さん:2010/10/06(水) 18:02:11 ID:BRpQBXWM
>>345
>スイッチのあたりの回路にイマイチ自信がないのですが、

その回路だとスイッチ押されてる間は7segの該当セグメントが消えてしまうから
R2-R5の各セグメント制限抵抗(1kΩ)とは別に、スイッチ入力毎やはり1kΩ程度を
直列追加すれば良いかと思ふ。
追加抵抗の接続点は現状の7segセグメント側でも動作するけど、PICピン側でok
351774ワット発電中さん:2010/10/06(水) 18:28:29 ID:cvN9ZiVs
なんで、VDDにRいれてんの?
352774ワット発電中さん:2010/10/06(水) 19:17:45 ID:+ACEEo8/
>>351
>なんで、VDDにRいれてんの?
間違いです。すみません
Vddには抵抗要りません。
353774ワット発電中さん:2010/10/06(水) 19:27:56 ID:+W1p9kyG
丁寧な添削ありがとうございます。
ありがとうございます。
修正してからまた出直してきます。

RTCは使わない予定です。
水晶の脇のコンデンサは、データシートで15pFと規定されていますので、それで。
やっぱ自分でみてわかるからいいやじゃ駄目か...。
354774ワット発電中さん:2010/10/06(水) 19:29:26 ID:+W1p9kyG
あと電気二重層コンデンサは、秋月で買ったまま5年放置なので、いい加減
どうにか有効につかってみたいのでつけてみました。
355774ワット発電中さん:2010/10/06(水) 19:35:15 ID:+W1p9kyG
また、瞬停対策というよりは、足をひっかけたり、PCまわりの掃除で一時的にコンセントから
引きぬくなど、そういう感じの時に3分程度は動いて時刻を刻んで欲しいです。

ですので、ボタン電池をまた別につけるか、電気二重層にするかまよったのですが、
やっぱり使ってみたいので電気二重層ってことで。
356774ワット発電中さん:2010/10/06(水) 19:35:17 ID:bUY/V3zD
>>349
なんと親切な!
357774ワット発電中さん:2010/10/06(水) 19:43:10 ID:CU8imX5K
スイッチのプルダウン抵抗でセグメントがうっすらと点灯しないかな。
358774ワット発電中さん:2010/10/06(水) 20:13:54 ID:+ACEEo8/
>>353
>水晶の脇のコンデンサは、データシートで15pFと規定されていますので、
データシートでそう書かれていますか?
僕の持っているデータシート(何と2002年)だと68-100pFと書かれています。
PIC16F88で33pF, 12F675で68-100pFです。
32.768の水晶はLowPowerなので、直列の抵抗も必要かもしれません。
この抵抗がないと、水晶がスグに壊れます。検討されてください。
僕のデータシートが古いので、最新では変更になっているかもしれませんが。

>やっぱ自分でみてわかるからいいやじゃ駄目か...。
「やっぱ」ということは、そう感じていらしたんですね。
「1年後の自分は他人」ですので、今わかる回路図を書いておかないと、
後から見たら絶対わからなくなります。

回路図が見やすく書かれた物は、その動きもキレイです。
他人が見ても質問が出ないような回路図を書くことは、
自身の勉強にもなりますので、ぜひ心がけたいものです。
359774ワット発電中さん:2010/10/06(水) 20:18:50 ID:+3DUJkVO
電気二重層コンデンサはPICだけバックアップすればいいんじゃないの?
360774ワット発電中さん:2010/10/06(水) 20:19:16 ID:nr/6PeWk
RS232Cにつなぐ18ピン用のソケットがついたライタを使っているのですが、
ピン配置だけあわせればPIC16F877Aなどにも書き込めますか?
361774ワット発電中さん:2010/10/06(水) 20:28:31 ID:+W1p9kyG
>>358
うーん、そのクロックはメインクロックの方で、尚且つ高速な水晶を接続する
場合ではないでしょうか?

628Aのデータシート"4004F.pdf"の、Timer1の項目、"7.4"で、T1OSI/T1OSOに
32.768hzを接続する場合15pFと記述がありますので、そちらから取りました。
たしか628Aからは、ここは32Khzの時計用水晶専用に変更になってたハズで、
直近に他のIOパターンと交差しないように接続すればokのはずです。

回路図の件、了解しました。
プログラムと一緒ですよね。
あとで見て分からないと、作る時より時間がかかるし、もう少し丁寧に書きます。
362774ワット発電中さん:2010/10/06(水) 20:35:04 ID:rkBbnVg4
ガンマ補正をしようとして、
255 * pow(i / 256, 1 / Gamma)
みたいな計算をさせようとしたら、それだけでメモリ不足した
363350:2010/10/06(水) 20:40:41 ID:BRpQBXWM
何か無視されちまった orz
364774ワット発電中さん:2010/10/06(水) 20:41:03 ID:+ACEEo8/
>>361
なるほど、水晶発振用のアンプが2つあるんですね。失礼しました。

あと、添削回路図、消してもいいですか? 恥ずかしいので。(^^;
365774ワット発電中さん:2010/10/06(水) 21:04:39 ID:9Gp90TYB
>>364
横レスだけど・・・
こういうログは、質問者以外にとっても有用なので、消さないでおいて欲しいな
と思います。

まあ、いずれ流れちゃうことは確かだけど。
366774ワット発電中さん:2010/10/06(水) 21:10:47 ID:uVmuO0o7
スイッチ押してる間、バスが(VCC-0.6)Vになって、
バスを共有しているセグメントのLEDがつかないような気がする。
367774ワット発電中さん:2010/10/06(水) 21:13:07 ID:+W1p9kyG
>>363
すいません。
ひとつずつ解決してからいきますのでちょっと待ってください。

>>364
同じく他の方にとっても有用だと思いますのでそのままのほうがいいです。

あとRA5に入れてあるV2の信号ですが、ここは抵抗で分圧せずに入れたらマズ
くないですか?
CMOSはポート電圧が電源電圧より高くなった場合、動作が不安定になったり
リセットかかったり最悪壊れると思ったので、分圧にしてみましたが。
368366:2010/10/06(水) 22:03:49 ID:uVmuO0o7
>>350 さんがすでに書いてました。吊ってきます。
369350:2010/10/06(水) 22:17:38 ID:BRpQBXWM
>>367
スイッチまわりに関する質問だから、その点に絞って回答したのに
本題が後回しとは・・・・・・

実際、致命的というほど問題は無いね。

あと、>>349は LED電源をV2にして、RA5の接続をV1に・・・といってる。
ここは製作者の考え方次第
370774ワット発電中さん:2010/10/06(水) 23:04:43 ID:+ACEEo8/
>>367
>あとRA5に入れてあるV2の信号ですが、
すみません、/MCLRで使っていると勘違いして、pill-upだけにしました。
たぶん、/MCLRは内部処理にして、入力ピンで使っていますね。
失礼しました。でしたら、原回路通りに割った方が良いですね。
でも、抵抗検知だと減電検出の切れ味が悪くないでしょうか?
ピン名にVthと記載があるので、特殊な機能があるのかな。
減電検出に、RESET ICも結構オススメです。
371774ワット発電中さん:2010/10/07(木) 00:09:50 ID:lV/fEGf2
>>369
すみません。
ご指摘のように回路を訂正してみました。
普段とはスイッチの位置が逆で、混乱しました。

ttp://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20101007000414.png

>>370
RA5ピンは単に入力ポートとしてみています。
とりあえず前段にトランジスタ入れて、スパッと変わるようにしてみました。

7セグのところに信号が来ていませんが、アノードコモンの7セグはまだどれを
買うか決めてないので未定ってことで。
青でも使ってみるかな。
372774ワット発電中さん:2010/10/07(木) 01:14:40 ID:PE2wiafU
修正、早いですね。いい感じで、ストレス無く見られる回路図だと思います。

・SP駆動電源は、V1でなくV2ではないでしょうか?
・LEDの電流制限抵抗の値、1kはまだ適当なんですよね?
  通常の抵抗値の1/dutyの小さい値になると思われます。
・減電検出のトランジスタのベース抵抗が1kと47kだと
  0.6V程度まで下がらないとoffしない気がしますが、どうでしょう。
  もっと早い段階で知って、いろいろと段取り時間が必要でしょう。
・スイッチからの信号に直列に入っている抵抗R26-R29は、
  もう少し大きい値が良さそうな気がします。
  この抵抗が小さいと、LED=onとSW=onが重なった時、
  PICの吸い込み電流が増えVon(sat)が上昇し、LEDの輝度が
  暗くなり、セグメント間の輝度がばらつきそうな気がしますが、
  どうでしょうか?
・スイッチの抵抗 R17-R20は、もう少し小さい値がいいと思います。
  1mA程度流さないと、スイッチが接触不良になりそうな気がします。

小言ばっかりで、すみません。
373774ワット発電中さん:2010/10/07(木) 01:29:19 ID:CdFp/sDm
通りすがりですが…

>>372
>・SP駆動電源は、V1でなくV2ではないでしょうか?
電源断時にビープが鳴らすためでは?

LEDはV1にして、V2をジャックとD5の接続部から取った方が電源断を早く検出できるのでは?


それとどうでもいいのですが、時計にコロンが無いのは致命な問題だと思うのは私だけでしょうか…
374774ワット発電中さん:2010/10/07(木) 01:54:39 ID:PE2wiafU
>>373
>>・SP駆動電源は、V1でなくV2ではないでしょうか?
>電源断時にビープが鳴らすためでは?
そうですね。説明書きに「電源断中に・・・鳴らす」とありますね。
ありがとうございます。

>V2をジャックとD5の接続部から取った方が電源断を早く検出できるのでは?
なるほど、それはいいですね。
電源は何Vなのかしらん。
375774ワット発電中さん:2010/10/07(木) 01:57:15 ID:/MNxBaEJ
>>353
>>358
>>371
水晶振動子廻りのCの値は、ICの特性よりも、水晶の特性に拠るんじゃないですか?
IC用の標準的な水晶というのがあれば別ですが、Cが違う値を取るのは使用する水晶の特性に合わせてのことかも。
376774ワット発電中さん:2010/10/07(木) 07:36:11 ID:ztUR7KAq
>>375
左様。負荷容量については水晶メーカさんのサイトにいけば詳しい説明がある。
特定IC向けの専用水晶というのもあることはある。
377774ワット発電中さん:2010/10/07(木) 09:41:03 ID:rQ+YiE9+
しかし、マイコンのデータシートには
周波数別の推奨負荷容量値が載っていて、
さらに、ほとんどの人は その数値のコンデンサを使っているという事実。
378774ワット発電中さん:2010/10/07(木) 10:50:11 ID:PE2wiafU
>>377
同意
379774ワット発電中さん:2010/10/07(木) 10:58:18 ID:1ULwFSJS
まぁ個人で使うし安定性は無視してもいいよねw
380774ワット発電中さん:2010/10/07(木) 11:01:37 ID:/jra4pGn
>>374
あまり大きな音が要らないならSPは圧電スピーカーでもいいかもね
381774ワット発電中さん:2010/10/07(木) 12:03:31 ID:/MNxBaEJ
>>377 >>378
そう言う場合、IC用の水晶が必要。水晶振動子一般が使える訳じゃないのに、なかなか明記がありません。
382774ワット発電中さん:2010/10/07(木) 13:51:47 ID:PE2wiafU
>>381
>そう言う場合、IC用の水晶が必要。
意味がわかりません。

>なかなか明記がありません。
大きな問題が無いから、謳っていないのではないの?
僕も今まで、何百個という水晶をPICやマイコンに使ってきた。
が、一度も不具合は無し。-10〜60度の温度かけたこともあったけど問題無しだった。
結果オーライは良くないことだが、理屈通りになっていることの証しではないのだろうか。
それだけマイクロチップや日立が頑張ってくれているということだと思う。
383774ワット発電中さん:2010/10/07(木) 13:52:00 ID:lV/fEGf2
>>372
早速、チェックありがとうございます。

>>LEDの電流制限抵抗の値
パーツボックスをあさったら、秋月で売ってるA-552SRが二つでてきたので、
それを使います。21mcdとか明るすぎるので、1Kもしく2.2Kあたりでいいと思います。

>>スイッチからの信号に直列に入っている抵抗R26-R29
検討してみます。超高輝度LEDですしわずかな差でちらつくこと間違いないような(汗。

>>スイッチの抵抗 R17-R20は、もう少し小さい値がいいと思います。
最初の回路で、プルダウン抵抗としてつけたものがそのままでした。10Kにします。

>>SP駆動電源は、V1でなくV2ではないでしょうか?
SPの部分は、一般的な時計のアラーム機能と、電源断時のwarningアラームと両方
鳴らせるように考えました。V1のマイコン電源側です。


>>373
>>コロンがないのは致命的
確かにそうなのですが、7セグのメーカーさんが、7セグとまったく同じ仕様でつくった
コロンのLEDがないもんで、他の砲弾型のLEDつけると微妙に失敗した感じになるんですよ。

>>V2をジャックとD5の接続部から取った方が
なるほどー!!と思ったのですが、DCジャックの抜き差しって、電源断検出にでるチャタリ
ングが3秒くらいつづきませんか?
ちょっと検討してみます。

>>375
>>376
なるほどです。

でも既に時計用水晶と15pFのSMDコンデンサは購入済みなのでそれ使う予定です。
水晶はヤフオク購入なんでデータはわからないすけど、どっかの会社の人が余ったの
分けてくれたので多分日本製ではないかと。
384774ワット発電中さん:2010/10/07(木) 14:41:10 ID:30FbOX6L
>>383
7SEGにドット付いてないん?
一個逆にすればコロンにならん?
385774ワット発電中さん:2010/10/07(木) 15:04:06 ID:/MNxBaEJ
>>382
15pFと150pFではかなり違うでしょう。
水晶振動子メーカの作り込んだ周波数精度を出したい場合には、メーカー指示の容量を選択、
水晶振動子の直列共振点と並列共振点の間の周波数で発振してくれれば精度的に問題ない用途ではうるさいことを言わないで済む、
という違いだと思います。グレードを落とすとセラミック振動子を使うのもありますしね。
386774ワット発電中さん:2010/10/07(木) 15:05:34 ID:F8/FPfjU
とっても時計な7SEG
387774ワット発電中さん:2010/10/07(木) 15:09:43 ID:F8/FPfjU
うお。途中で送ってしまった。
とりあえず、コロンついてる
ttp://strawberry-linux.com/catalog/?c=7seg
388774ワット発電中さん:2010/10/07(木) 16:57:04 ID:ztUR7KAq
>>382
>>そう言う場合、IC用の水晶が必要。
>意味がわかりません
水晶は基本的には発振回路に応じて作りこんで精度を出す。
えっと・・たとえば
http://www.sii.co.jp/components/quartz/cMainJP.jsp
こんな感じのサービスがあったりする。
単純に発振させるというだけなら、多少いいかげんな
ことをやっても発振はするんだけど精度には期待できない。
389774ワット発電中さん:2010/10/07(木) 17:31:14 ID:PE2wiafU
>>388
ああ、セイコーのCMSSのことね。

ていうか、意味がわからなかったのは「そう言う場合、IC用の水晶が必要」という表現だよ。
IC用? じゃIC用じゃない水晶があるの? みたいな。
390774ワット発電中さん:2010/10/07(木) 21:32:40 ID:78ofgUvu
静電容量センサ作った
抵抗とアルミホイルしか使わないのに、きっちり動く
391344:2010/10/07(木) 21:43:31 ID:fOJAUkZU
>>344なのですが、どなたかわかる方いませんでしょうか?
392774ワット発電中さん:2010/10/07(木) 22:00:18 ID:v0SmJwlU
>>391
FOSCならクロック関係の項目に載っているはず
AD変換の項目だけのデータシートを見るのではなく
使用するPICのシリーズのデータシート(表紙が PIC****** Family Datasheetになっているやつ)見るべき
393774ワット発電中さん:2010/10/08(金) 00:14:31 ID:02Gn+3bs
>>391
http://picfun.com/pic16.html

A/D変換クロック(Tad)の設定方法は下表とします。
って所があるでしょ。
使うクロックの周波数に応じて書けば良いのよん。
20MHzクロックなら「10」だね。。。
394774ワット発電中さん:2010/10/08(金) 07:49:58 ID:tP4LDEnC
>>387
ありがとうございます!!!
つうかこのサイトは失念してました。
あとAVRライタ(というかQIコネクタ)も欲しかったのでまとめて買ってしまおう。


あと肝心の回路は、RA5は~MCLRとして使い、リセットスイッチつけ暴走したとき再起動
できるようにし、電源段検出は一般のボタンみたいに適当に接続して完成な感じです。
395774ワット発電中さん:2010/10/08(金) 08:00:05 ID:WI0/9M0u
>>394
リセットしたら設定時刻が消えちゃわない?

AVRってリセット原因とか判別できるの?
396774ワット発電中さん:2010/10/08(金) 08:24:47 ID:tP4LDEnC
>>395
いや今回はPICです。
AVRは、また別の用途で使います。

>>395
ウォッチドッグタイマなど使う予定はないので、なにかの弾みで暴走しっ放しになったり
すると困るので手動リセットもいるかなと。
今回は電源引っこ抜いてもすぐにはリセットかからない仕様ですし。

伸ばしたシャーペンやピンで押すような面倒くさいスイッチとして用意しとこうと。
397774ワット発電中さん:2010/10/08(金) 20:16:27 ID:v0WyZpXP
加速度センサが手元にあるけど、何に使ったら楽しいだろう
398774ワット発電中さん:2010/10/08(金) 21:32:41 ID:sgFNOjY2
ドライビングデータロガー
399774ワット発電中さん:2010/10/08(金) 22:21:42 ID:4tY5iFqg
>397
すでに時代遅れと化した用途でいいなら、自作倒立伸子とかどう?

>398
ハイスピードドライビングデータロガー
遅い奴にはロギング出来ない、でお願いします。
400774ワット発電中さん:2010/10/08(金) 22:57:59 ID:v0WyZpXP
ステッピングモーターでできるだろうか
401774ワット発電中さん:2010/10/09(土) 01:17:21 ID:fWNglffM
ここの倒立振子は、ステッピングモータに定格以上の電圧を掛けて動かしているらしい。
ttp://jr1wfhbbs.s5.pf-x.net/micom/
402774ワット発電中さん:2010/10/09(土) 08:59:47 ID:CVm3eGt1
>>397
加速度を検出したらイニシャルDの効果音文字を出すブツ
時々、「ビリビリ」が入ると尚良し
403774ワット発電中さん:2010/10/09(土) 09:27:20 ID:XONWqCzA
PICの時計の回路、完成しました。
ttp://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20101009092502.png

おかしいな...抵抗の数が凄い。
いままで作ったもので、一番部品点数が多いような(汗。


404774ワット発電中さん:2010/10/09(土) 10:06:53 ID:GMyzLWyn
>>403
スイッチのプルダウン抵抗でセグメントがうっすらと点灯しっぱなしに
なるのが、抵抗値を下げたために悪い方向に行ってる。
405774ワット発電中さん:2010/10/09(土) 10:57:39 ID:BOgCJ9gF
>>403
・Reset部分のダイオードは、たぶん1SS133だと思う。
・7セグのセグメント7本の部分、線が7本しかないのに、信号名が8本ある。
・その7セグの7本のバス配線のマイコン側にRA0という線があるが、行き先がない。
・マイコンのポート名を信号名にしているが、RB0,1,2,4,5が2回出てくる。
  ネットが異なるので同じ名称は良くない。
  「この線をRB1に接続して・・・」という時に、
  「RB1って2カ所あるよ! マイコンポートも含めると3カ所もあるけど?」という
  質問が出てしまう。
・信号名にポート名を使うのは良くない。事故のもと。名前を変えた方がいい。
     7セグに行くRB1→RB1_7seg
     SWに行くRB1→RB1_SW
  など、「_」を使って邊名にするといいと思う。
・V2の取り出しは、逆接防止ダイオードの後からとる。
・LEDの部品記号は「D1」でなく、「LED1」などにした方が良い。
  Dxxはダイオードを示すのが一般的。
・SW部分のバス配線の接続は、とても良い。見ていて気持ちがいい。
  一方、7セグ部分のセグメント部分7本のバスには信号名がその下に書かれている。
  しかもその文字が横書きなので「セグメントEは、左から5本目なので、
  えーっと、1,2,3,4,5、RB5かぁ」と、とても読みにくい。
  どうせ7セグのピン番号を現物の順番と合わせない書き方にするなら、
  DP、TEMP、COLONの3つのピンを左下の角部(トランジスタQ6の方の角部)に寄せて、
  その右の広い部分にセグメントのピンを出し、バスからの線のスペースをもう1グリッド広げ、
  RB0〜RA0(の8つ?)の文字を、縦書きで置いた方が良い。
  そうすれば、スイッチ部分のバス接続と同じように、
  信号線の横に信号名が置かれて、7本?8本?という間違いはなくなる。
・部品記号の文字を左寄せにする。
  なぜか今は右寄せになっていて、一般的な回路図と異なり見にくい。

  右寄せ
       Q6
    2SC1815

  左寄せ
    Q6
    2SC1815
406774ワット発電中さん:2010/10/09(土) 11:01:43 ID:BMbz5Kvk
もう作法だな
407774ワット発電中さん:2010/10/09(土) 11:21:44 ID:W2dQ23oH
ちょっと前のソースの整形と同じだな
408774ワット発電中さん:2010/10/09(土) 20:13:05 ID:VuZ3njy/
マイクロチップのページで16F886のデータシート取りに行ったら
PDEのところにJapaneseがあったので
とうとうこのPICにも日本語のデータシートができたのかとよろこんだのもつかの間
やっぱりいつもの暗号文だった…

まあある程度わかるからいいけど、細かい記述探しにくいんだよね
409774ワット発電中さん:2010/10/09(土) 23:25:27 ID:HJ4MuYZm
pde?
pdfとしてもjapaneseとかないけど。
410774ワット発電中さん:2010/10/09(土) 23:49:41 ID:VuZ3njy/
411774ワット発電中さん:2010/10/10(日) 00:31:43 ID:iRl+otVb
たしかに、「日本語」という選択肢が出てくるが、
それを選んでも、落ちてくるDatasheetはただの英文だな。

だが、その英文を暗号文とか呼んでしまうヤツって、どうなの?
412774ワット発電中さん:2010/10/10(日) 00:52:11 ID:6DF7Zygq
886はもうしゃぶり尽くしたので、知りたいことが何もない
413774ワット発電中さん:2010/10/10(日) 01:15:06 ID:GAMxhn2a
本気で暗号文が出てくると思ったw
414774ワット発電中さん:2010/10/10(日) 05:30:47 ID:ClFz6Fqp
>細かい記述探しにくいんだよね

そうかなぁ・・・英文の方がキーワード検索しやすいと思うけど
415774ワット発電中さん:2010/10/10(日) 07:48:41 ID:1I2zZWTq
>>412
俺はI2Cスレーブとか使ったこと無いや。
タイマの外部クロックモードも無いな。
416774ワット発電中さん:2010/10/10(日) 10:49:12 ID:6DF7Zygq
I2Cスレーブで1602液晶を表示させるユニットを作っておくと楽になる
417774ワット発電中さん:2010/10/10(日) 12:22:13 ID:1I2zZWTq
>>416
タイマ割り込みで動く液晶ドライバを作ってあるので・・・
ウェイトでメインを止めるなんて無様なことはしません。
ポートは多く使うけど。
RS,STB,DATA4,バックライト,電源
バックライトと電源は省電力制御が要る場合。
418774ワット発電中さん:2010/10/10(日) 12:24:31 ID:1I2zZWTq
ちなみにRAMバンク3を仮想VRAMに使っている。
メイン処理からはここにアスキーコードを書くだけで勝手に表示される。
419774ワット発電中さん:2010/10/10(日) 12:28:29 ID:6DF7Zygq
常に送信してないか?
420774ワット発電中さん:2010/10/10(日) 12:32:11 ID:1I2zZWTq
>>419
送信したまま。分散処理なので大した問題ではない。
CPUパワーの10%程度は使う。
421774ワット発電中さん:2010/10/10(日) 12:37:36 ID:1I2zZWTq
表示フレームレートは
16x2で14.2FPS
20x4で5.8FPS
ビジーチェックを行えばもっと増やせるが俺には要らない。
422774ワット発電中さん:2010/10/10(日) 12:47:38 ID:xKXVCsIl
逆にもう少し減らす方向にいきたいな
423774ワット発電中さん:2010/10/10(日) 12:49:52 ID:1I2zZWTq
MPLABのシミュレーション上からも表示文字列が
ウォッチで見られるので、実機がなくてもソフト開発可能。
424774ワット発電中さん:2010/10/10(日) 12:49:52 ID:6DF7Zygq
シリアルSRAMを共有してDMA的な感じで表示させれば、負荷はほとんどゼロだ
425774ワット発電中さん:2010/10/10(日) 12:52:12 ID:1I2zZWTq
>>422
いくらでも自由にいじれる。
実際はユーザーインターフェースの都合に合わせる。
設定値の更新とかリアルタイムに表示される方が気持ちいい。
個人の主観だが。
426774ワット発電中さん:2010/10/10(日) 12:54:02 ID:1I2zZWTq
>>424
俺の使い方では問題ないので。
メイン周期が安定に回ればよい。
俺の場合5ms周期が標準。
427774ワット発電中さん:2010/10/10(日) 13:10:44 ID:1I2zZWTq
システム負荷によりメイン周期が乱れるソフトは組み込みとして失格。
CPUの空き時間はこき使えって考え。
趣味なら楽しく出来ればなんでもok
428774ワット発電中さん:2010/10/10(日) 13:21:18 ID:6DF7Zygq
いや、タイマ割り込みしたらメインに影響するだろ
429774ワット発電中さん:2010/10/10(日) 13:22:25 ID:1I2zZWTq
>>428
メイン周期が一定ならいい
あほ?
430774ワット発電中さん:2010/10/10(日) 13:23:56 ID:1I2zZWTq
言うまでもないが
メイン周期もタイマ割り込みで作っている
431774ワット発電中さん:2010/10/10(日) 13:38:12 ID:6DF7Zygq
はいはい
すごいすごい
432774ワット発電中さん:2010/10/10(日) 13:41:31 ID:tcLUAvkG
能書きはいいから現物が動いているところを見せろ
433774ワット発電中さん:2010/10/10(日) 13:50:58 ID:GBBhVeUR
>416
使用するPICのピン数にもよるけど、DATA4本ってやっぱ使いづらくない?
ソフト側の負担考えるとポートの上位4bitか下位4bitになるけど、内蔵モジュールと重なると使えない
例えば16F88でシリアル通信(RX=RB2,TX=RB5)とアナログVref+=RA3使うと選択肢ない。
LCD表示がメインならいいけど、Debugとかちょっとした表示したいだけならどのI/Oピンでも
選択でき(マスタ側の話ね)2本ですむI2Cはいいかと。
1vs1ならシリアル送信1本のみもいいと思うけど
434433:2010/10/10(日) 13:51:59 ID:GBBhVeUR
すみません上のレス >417へでした
435774ワット発電中さん:2010/10/10(日) 14:13:22 ID:1I2zZWTq
>>433
4bitポートの割り当ては自由です。
出力バッファramを1バイト使います。
lcd_db4w_core:
movwf lcd_db4_buf
btfsc lcd_db4_buf,4
bsf PO_LCDDB4
btfss lcd_db4_buf,4
bcf PO_LCDDB4
btfsc lcd_db4_buf,5
bsf PO_LCDDB5
btfss lcd_db4_buf,5
bcf PO_LCDDB5
btfsc lcd_db4_buf,6
bsf PO_LCDDB6
btfss lcd_db4_buf,6
bcf PO_LCDDB6
btfsc lcd_db4_buf,7
bsf PO_LCDDB7
btfss lcd_db4_buf,7
bcf PO_LCDDB7
return
436774ワット発電中さん:2010/10/10(日) 15:43:11 ID:a69l2BkY
ちなみに、みなさんLCDのインターフェイスは何bitモードでやってますか?
僕は、昔4bitモードばっかりだったんですが、
8bitモードを使い出したら、4bitモードより断然速くて、
もう4bitには戻れないです。

4bitモードのきにロータリーエンコーダーの回転を検知して、
LCD上の周波数表示をup/downさせるようなプログラムを書いたのですが、
ちょっと速く回すと、LCD表示が付いてこない。
ところが8bitでやると結構行ける。
437774ワット発電中さん:2010/10/10(日) 15:51:47 ID:bPv8s5nV
>>436
エンコーダ処理は割り込みでやってるから無問題
LCD表示なんて空き時間に4ビットで表示
438774ワット発電中さん:2010/10/10(日) 17:55:02 ID:GBBhVeUR
>433
それって下記みたいな感じで定義して使うの?
#define PO_LCDDB4 PORTA,3
#define PO_LCDDB5 PORTB,3


PORTxに直接BCF,BSFはあまりよろしくないような
ttp://www.geocities.jp/michi_kou/faq.htm#Q31
439774ワット発電中さん:2010/10/10(日) 17:58:57 ID:1I2zZWTq
>>438
そうだよ
リードモディファイライトの件は繋がってる負荷によるけど
俺が作るレベルでは問題になったこと無い。
646a, 877a, 876a, 886で実装した。
440774ワット発電中さん:2010/10/10(日) 17:59:26 ID:1I2zZWTq
648aな
441774ワット発電中さん:2010/10/10(日) 18:08:04 ID:1I2zZWTq
>>438
どうしても気になるならポート全部は一旦にバッファリングすればいい。
言いたくないけどそんなことでハマるレベルじゃねーんだよ。
出来ない理由、ダメな理由を必死で探してを揚げ足とってるつもりかもだろうが。
442774ワット発電中さん:2010/10/10(日) 18:41:28 ID:gKtjtT5J
僕も>>435のやり方でやってる
一度書いたら電源切るまで描き直さないような用途じゃ
ビットのエラーが出たら致命的かもしれないけど
頻繁に書き換えてるからエラーが出てたとしてもわからねーし

そもそもそのエラーって出る?いつもウエイトも入れないでポート弄ってるけど
一度も見かけたこと(問題になったこと)無いよな
443774ワット発電中さん:2010/10/10(日) 18:53:41 ID:GQevySnM
どうか指導ください
http://www.zea.jp/audio/lcm/lcm_01.htmの
http://www.zea.jp/audio/lcm/lcm_06.htmで
"PICライターで読み込むと、プログラム領域とEEPROM領域にデータが入ります"
とあり、EEPROM領域の変え方がわかりません
ライターはpickit−2を利用します
444774ワット発電中さん:2010/10/10(日) 18:57:26 ID:1I2zZWTq
意味不明だが
アセンブラソースなら
  org  0x2100
  de   0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00
445774ワット発電中さん:2010/10/10(日) 19:14:17 ID:6DF7Zygq
実際に問題になるケースがあったからLATレジスタが増設されたんだけど、
普通は気にしないよな
446443:2010/10/10(日) 19:37:54 ID:GQevySnM
>>444
すみません
さっぱり理解できません
447774ワット発電中さん:2010/10/10(日) 19:43:22 ID:1I2zZWTq
>>446
ソースにあなたが必要とする値を書いてファイルセーブして
mpasmでアセンブルして出来たhexをpickit2で書け。
448774ワット発電中さん:2010/10/10(日) 19:56:42 ID:Z7jaoJ6n
>>445
俺は16Fでポートにビット制御命令なんか使ったことないぞ。
必ずバッファに保存したデータとand/orしたものを出力してる。
449350:2010/10/10(日) 19:58:49 ID:JCv7k50i
PICkit2V2.exe利用なら PICkit2コネクトして DeviceはPIC16F886を選択後、
LC_meter.hexをImport、下部のEEPROM欄で内容編集して write
(by ASCII表示にしておくと文字キャラクタ部分が判り易い)

MPLAB IDEでも Configure - Select Deviceで PIC16F886を選択後、
File - Importで LC_meter.hexをImport、View - EEPROM ウィンドウで
内容編集して・・・(中略)・・・ Programツールボタンで 書き込み。
450774ワット発電中さん:2010/10/10(日) 20:06:29 ID:6DF7Zygq
Strobe = 1;
Strobe = 0;
みたいに書ける快適さを捨てるというのか
451774ワット発電中さん:2010/10/10(日) 20:16:45 ID:hDbxEbQM
>>443
こーゆーことか?
ICPROGって原始的なソフト知ってるか?
これで読めるぜ。
ターゲットはPIC16F876Aでやったぜ。
あとはアスキーコード表でも見ながら変更してね。

0000: 03 E8 3C 14 14 28 28 FF .・..((�
0008: FF FF FF FF FF FF FF FF ��������
0010: 4C 43 20 6D 65 74 65 72 LC meter
0018: 00 FF FF FF FF FF FF FF .�������
0020: 62 79 20 79 2E 69 73 68 by y.ish
0028: 69 7A 75 6B 61 00 FF FF izuka.��
0030: 49 6E 64 75 63 74 6F 72 Inductor
0038: 00 FF FF FF FF FF FF FF .�������
0040: 4E 6F 74 20 6D 65 61 73 Not meas
0048: 75 72 65 64 00 FF FF FF ured.���
0050: 43 61 70 61 63 69 74 6F Capacito
0058: 72 00 FF FF FF FF FF FF r.������
0060: 4F 75 74 20 6F 66 20 72 Out of r
0068: 61 6E 67 65 00 FF FF FF ange.���
0070: 43 61 6C 69 62 72 61 74 Calibrat
0078: 69 6F 6E 2E 2E 2E 00 FF ion....�
0080: 20 20 20 20 20 20 20 20
0088: 20 20 20 77 61 69 74 00 wait.
0090: 20 20 20 20 20 20 20 20
0098: 20 20 20 44 6F 6E 65 00 Done.
00A0: 20 20 20 20 20 20 20 20
00A8: 20 20 45 72 72 6F 72 00 Error.
00B0: FF FF FF FF FF FF FF FF ��������
00B8: FF FF FF FF FF FF FF FF ��������
00C0: FF FF FF FF FF FF FF FF ��������
00C8: FF FF FF FF FF FF FF FF ��������
00D0: FF FF FF FF FF FF FF FF ��������
00D8: FF FF FF FF FF FF FF FF ��������
00E0: FF FF FF FF FF FF FF FF ��������
00E8: FF FF FF FF FF FF FF FF ��������
00F0: FF FF FF FF FF FF FF FF ��������
00F8: FF FF FF FF FF FF FF FF ��������
452774ワット発電中さん:2010/10/10(日) 20:32:20 ID:1I2zZWTq
>>448
最初からC言語を使ってるなら納得。
アセンブラか始めたなら不自然。
どーでもいいけど。
453443:2010/10/10(日) 20:38:54 ID:GQevySnM
>>451
これは大きな収穫です
ありがとうござます
454774ワット発電中さん:2010/10/10(日) 21:19:24 ID:GBBhVeUR
>441
もとはと言えば2ピンですむI2CのインテリジェントなLCD接続を否定して
最低6ピンは必要な方式で自慢するから、どんなもんだと思えば >435
4bitがフレキシブルになってるのはよくできていると思うけど PORTに直に
BCF,BSFは無いだろう(揚げ足取りと言われればそうだけどな、使いまわす
ルーチンなら安定を取るべきだろ、問題になったことないならいいけどさ)

自分的には以前 はまった経験からPORTへのBCF,BSFと出力ビットの
読み出しも使わないと決めている。

考え方の違いだろうけどLCD側に専用マイコンを用意してI2CなりTXで
送信する方が好み
455774ワット発電中さん:2010/10/10(日) 21:28:09 ID:6/3zUHxc
>>454
といってもI2Cはタイミング関係面倒なのでケースバイケースだな
スレーブが9ビット目でACKを返すという仕様は結構いやだったりするw
456774ワット発電中さん:2010/10/10(日) 21:34:07 ID:gKtjtT5J
2ピンで済んでないじゃん、もう1個PIC使ってるし

>435みたいな処理って
LCDの書き込みルーチン見てたらすぐに思いつくだろ
BCFBSFもBTFSCとかが入ってるからウエイト付きだし
絶対に問題なんか起きないよ

結局突っ込みたいところがよくわかんない人だね
まあ僕のことじゃないので、熱くなっても仕方ないんだけど
457774ワット発電中さん:2010/10/10(日) 21:39:28 ID:1I2zZWTq
>>456
俺の書くことがなくなったじゃないかwwwww
458774ワット発電中さん:2010/10/10(日) 21:43:57 ID:Z7jaoJ6n
>>456
ウェイトの問題じゃない。
ポートの負荷が重かったりノイズが乗れば誤動作する。
459774ワット発電中さん:2010/10/10(日) 21:45:39 ID:6/3zUHxc
そういうケースを限定するなら最初から書かないと負けだと思う
460443:2010/10/10(日) 21:54:12 ID:GQevySnM
>>457
友達いないだろ
お前
461774ワット発電中さん:2010/10/10(日) 22:06:35 ID:1I2zZWTq
>>460
ただのバカのくせにコテハンで何?
462774ワット発電中さん:2010/10/10(日) 22:34:16 ID:/uHnjENn
>>461
まぁまぁ
めくそはなくそを笑うって言うし仲良くしようじゃないの^^;
463774ワット発電中さん:2010/10/10(日) 22:54:21 ID:LWpBooL+
>458
んで、LCDユニットの入力ピンの負荷が重いとでも?
後出しのアラ探しに必死ですなあwww
464774ワット発電中さん:2010/10/10(日) 23:04:41 ID:zCQedVhP
スダレで20〜30m引いてるんだろ、そっとしといてやれ
465774ワット発電中さん:2010/10/10(日) 23:15:01 ID:6DF7Zygq
自慢したいだけの子供みたいなキャラだけど、
こんなんでも40過ぎたおっさんなんだぜ?
466774ワット発電中さん:2010/10/10(日) 23:45:42 ID:Z7jaoJ6n
>>463
リードモデファイライトが分かってないな。
LCDユニットに使っているポートじゃなくて、それ以外のポートが誤動作
するんだよ。

例えば
bsf PORTB,0
なら
movf PORTB,w
iorlw 0x01
movwf PORTB
みたいなことを自動的にやっている。
PORTBから読み込んだときにビット1〜7がデータラッチと矛盾するデータを
読み取ればデータラッチが書き換わってしまう。
467774ワット発電中さん:2010/10/11(月) 00:07:14 ID:iseCOP8p
必死ですなあwww
468774ワット発電中さん:2010/10/11(月) 00:08:52 ID:4BugO9xN
clrf PORTB  ; 00000000

bsf PORTB,0  ; 00000001
movf PORTB,w ; 00000001
iorlw 0x01  ; 00000001
movwf PORTB  ; 00000001

常に00000001だと思うよ
これが書き換わるくらいノイズやら負荷がかかってるなら
その回路がまぬけ

469774ワット発電中さん:2010/10/11(月) 00:11:23 ID:iseCOP8p
で、次はどんなイチャモンつけるの?
電源が不安定なときに誤動作する可能性がーとか?
スパークプラグの隣でシールドせずに使ったら誤動作した?
470774ワット発電中さん:2010/10/11(月) 00:17:24 ID:QyKITMwX
それなら18Fはデータラッチとは別にLATレジスタを設けた理由を説明
できるか?
471774ワット発電中さん:2010/10/11(月) 00:21:43 ID:ql6KGIb/
誤動作する回路を作るのは簡単だけど、
普通にデジタルでやりとりしてる回路ではまず誤動作しない
LAT追加したのはAVRを意識したから
472350:2010/10/11(月) 00:22:25 ID:pkTchlwS
>>470
データラッチとは別に・・・の表現はオカシイ
データラッチを読み出せるようになっただけ
473774ワット発電中さん:2010/10/11(月) 00:22:54 ID:4BugO9xN
もう本当に必死なんだなあ
LAT作ったのは高負荷で高速のビット操作じゃ誤動作するからだろ

じゃあ低負荷か低速でビット操作すれば問題ないじゃん
ビット操作しただけで誤動作するような設計が間違ってるの
474774ワット発電中さん:2010/10/11(月) 00:26:29 ID:Tb2WMqpP
BSF PORTB,0
と書くと一旦すべてのPORTBの状態をチェックされて
その上にRB0が「H」と書き加えられるシステムらしい。けどね
例えばその中のRB1が「H」になっていたとしても負荷が小さくて
垂れ流し状態になってしまって電圧が1V未満になってしまっていると
そこは出力ポートではなく入力ポートだとPICが勘違いをして
PB0を「H」とするときにRB1を「L」と書き換えてしまう現象が
起きてしまうのだそうです。
またその時点で一瞬すぎて1V未満しか電圧が上がってなかった出力ポートとかも
そうなるようですがそんなプログラムは普通作りませんよね

つまり 出力ポートの電圧が1V未満にしてしまっている回路作りが駄目な
だけです。 
普通そんなことしませんよね。     
                     by 20mAを守る会
475774ワット発電中さん:2010/10/11(月) 00:26:56 ID:iseCOP8p
>470
あのね、君の言ってる程度の事は当然知ってるの。
その上で言ってるの。

誰もどんな場合でも安定して使えるシステムでなければならない、なんて要求してないのに
なんで他ポートに容量付いてた場合に誤動作の可能性がーなんて言い出したの?
べつにそういう時は個別対応するまでだし、通常使うなら>435で十分でしょ?

なんでそんな必死になって特殊な場合の対応を要求するの?
476774ワット発電中さん:2010/10/11(月) 00:37:34 ID:Tb2WMqpP
474です。
文章の6行目の訂正です。
誤:そこは出力ポートではなく入力ポートだとPICが勘違いをして
正:そこは「H」レベルではなく「L」レベルだとPICが勘違いをして
477774ワット発電中さん:2010/10/11(月) 00:41:32 ID:A3jNO7jP
勘違いじゃなくて、LレベルになってたからLレベルとして読み込んだだけだろw
出力の論理を読んでるじゃなくて、実際のレベルを読んでるだけだ
478774ワット発電中さん:2010/10/11(月) 00:43:29 ID:pkTchlwS
一応、整理の為に

PIC12/16系のビット出力操作命令が誤動作する理由
http://www.picfun.com/pic22.html ←後ろの方

PIC18系のLATレジスタ追加について
http://www.picfun.com/pic18/mod18x01.html

因みにPIC18でも
bsf PORTB,0
bcf PORTB,1 などとしたら従来通り誤動作する可能性あり

bsf LATB,0
bcf LATB,1 としなきゃ

Cでも出力はLATxの方を使わないと同様
479774ワット発電中さん:2010/10/11(月) 00:46:57 ID:Tb2WMqpP
>>477
はじめからアンタが説明すればよかったものを・・・
後出しジャンケンのような揚げ足なアンタに彼女は当分出来ない。
480774ワット発電中さん:2010/10/11(月) 00:48:17 ID:A3jNO7jP
>>479
はじめから見てねえものw
481774ワット発電中さん:2010/10/11(月) 00:53:04 ID:Tb2WMqpP
でもさ、実際それを経験しましたって人の話が聞きたいよ。
自分で試してここへ報告に来いってか?
482774ワット発電中さん:2010/10/11(月) 00:55:45 ID:ulfFf3To

なにこの、いつも上げちゃう勘違い Tb2WMqpP って誰?

483774ワット発電中さん:2010/10/11(月) 00:57:50 ID:+AqCpI80
このスレのレベル高くて、ついて行けないオレがいる。
I2Cは何度も使っているけど、プルアップ抵抗を1kとか820Ωでやってる。
電線の長さはフラットケーブルで30cmくらい。
とりあえず動いてる。
484774ワット発電中さん:2010/10/11(月) 00:58:42 ID:Tb2WMqpP
オマエ  
誰? って
ここで住所とか名前を名乗るとでも思ってるのか?
よく考えて発言しなさい
485774ワット発電中さん:2010/10/11(月) 01:06:14 ID:A3jNO7jP
>>481
過去レスに有ったよ、実際経験した人
486774ワット発電中さん:2010/10/11(月) 01:11:21 ID:iseCOP8p
>483
抵抗小さすぎねえ?
487774ワット発電中さん:2010/10/11(月) 01:33:10 ID:ulfFf3To
VDDが3.3Vならそんなもの。5Vだとかなり小さすぎますね。
488774ワット発電中さん:2010/10/11(月) 03:27:52 ID:hL23MpRS
>>487
だな
489774ワット発電中さん:2010/10/11(月) 10:23:57 ID:zho9XIgS
抵抗値は電圧に直接的に関係は薄いよ。
それより、LからHに上がる速度を気にしているんじゃないか?
抵抗値が大きいと、Hに上昇するのに時間がかかり、通信エラー。

490774ワット発電中さん:2010/10/11(月) 11:34:05 ID:BiPUGaGC
>>486-488
>5Vだとかなり小さすぎますね。
5Vだと、いくつならいいのでしょうか?
1kでは小さすぎる理由も知りたいです。

>>489
はい、その通りです。10kとかだと、電圧上昇にとても時間がかかります。
491774ワット発電中さん:2010/10/11(月) 12:41:55 ID:a7J4r83K
492774ワット発電中さん:2010/10/11(月) 12:57:47 ID:pkTchlwS
I2Cバス仕様書ではVOLmax=0.4Vで規定最小シンク電流=3mAなどとあるから
5V(±10%)では最小1.7kΩ程度みたいだな。 1kΩは小さ過ぎといえる。

但し、上記は'L'ドライブ能力が3mAと想定した場合なので
実際には約5mAのドライブ能力あればギリギリ1kΩ
それ以上ならさらに低抵抗も可

PIC側よりも相手Device次第
493774ワット発電中さん:2010/10/11(月) 13:09:12 ID:BiPUGaGC
>>491
ありがとうございます。
わかりました。5V/3mA=1.7kですね。
ありがとうございました。大変勉強になりました。
今後は、1.8kを使用するようにします。
494774ワット発電中さん:2010/10/11(月) 13:40:06 ID:pkTchlwS
因みに苺屋のI2C-LCDでは高抵抗が推奨されてる。
ttp://strawberry-linux.com/support/27001/1051713
チト大き過ぎるよな
495774ワット発電中さん:2010/10/11(月) 13:58:35 ID:4Txf/1kr
PIC12F675/629のerrataを見ているのだけれど
手持ちの石が
Revision ID for Silicon Revision:
で、"A9" "B0"どちらに属すかわからん。
MPLAB + PICkit2で読み出すと

一つは : PIC12F629 found (Rev 0x3)
もう一つは : PIC12F629 found (Rev 0x10)


496774ワット発電中さん:2010/10/11(月) 14:49:27 ID:pkTchlwS
>もう一つは : PIC12F629 found (Rev 0x10)
これがRev.A9。  Rev.B0ならば(Rev 0xB)

>一つは : PIC12F629 found (Rev 0x3)
こちらはよく判らないが Rev.A4あたり?
497774ワット発電中さん:2010/10/11(月) 16:11:11 ID:4Txf/1kr
>>496

素早いレス助かります。

"A9"
629: 0x0F90 : 00 00.1111.100 1.0000
675: 0x0FD0 : 00 00.1111.110 1.0000

"B0"
629: 0x0F8B : 00 00.1111.100 0.1011
675: 0x0FCB : 00 00.1111.110 0.1011

だと、予測はしていたんですけれど、REVISON番号として、
"A9"(0x10) < "B0"(0x0b)と最新のほうが小さい値になってしまうので混乱しています。

(Rev 0x3) の刻印は YYWW=0239(2003年 39週)です。l

EEPROMのerrataは回避策はありますが、PORの問題は、ハングしたときMCLRピンが効かないので
VCCを直接管理しなければならないので深刻です。
といっても、手持ちの "A9"とおぼしき石で現象の再現がしないので困ります。
12F683を使えばいいんですけれどね。
498774ワット発電中さん:2010/10/11(月) 20:34:48 ID:4Txf/1kr
>>497
>(Rev 0x3) の刻印は YYWW=0239(2003年 39週)です。
(2002年 39週)でした。


499774ワット発電中さん:2010/10/14(木) 22:31:37 ID:oOdbVt+q
加速度センサを使ってバーサライタを作ってみたけど、
振り回す加速では2G程度は軽く振り切ってしまうので、
いちばん知りたいポイントで飽和しとる

あれは傾斜とかの検出用だな
500774ワット発電中さん:2010/10/14(木) 22:48:32 ID:DVu0vXsZ
飽和部分で反転と判れば隠者ね?
501774ワット発電中さん:2010/10/14(木) 23:53:14 ID:oOdbVt+q
両端1/4ずつくらいが全部飽和してるんだって
502774ワット発電中さん:2010/10/15(金) 00:01:31 ID:+vAO/ifl
振ってる周期や表示展開すべき期間も判るんじゃね?
503774ワット発電中さん:2010/10/15(金) 00:22:05 ID:nGOGhAYy
ゆっくりふればいんじゃね?
504774ワット発電中さん:2010/10/15(金) 02:10:33 ID:bGeM03yP
センサの取り付け位置をなるべく回転軸の近くにすればOK

必要なら、自分のヒジとか肩とかに取り付ける事も考えるべし
505山崎貴:2010/10/15(金) 12:45:44 ID:g0lCFm0V
質問します。
PIC18F2550を使用してC++アプリからWriteFileを使用してLEDを点滅(1mm Sec)させていますが
WriteFileの前後でAPIのTimeGetTimeで時間を測定すると100回の内に15回位は、15mm Sec位かかり残りは0になります。
もっと早く受信処理はできないのでしょうか。それともこんなものでしょうか。
よろしくお願いします。
506774ワット発電中さん:2010/10/15(金) 18:08:44 ID:nGOGhAYy
WriteFileを1msecごとに実行してるの?
Windowsはそんなシビアなタイミングで実行できるようなOSじゃないよ。
507山崎貴:2010/10/15(金) 19:00:05 ID:g0lCFm0V
506
ワット発電中さんありがとうございます。
以下にもう少し詳しくかいてみます。もしよろしかったらご回答お願いします。

PICの書込み(WriteFile)は、for文の中に約50mmm Sec位の時間をとって連続100回送信しています。
PICの受信側では、PortBの0ビットのみを1にして Delay1KTCYx(5)後に0にしています。その時の時間をリスト
してみると連続、又は数回毎に15mmSecかかっています。これは、ほとんどPICの処理にかかった時間だとすると
あまり早くないのかなと思いました。毎回数mmSecとかだとなんとなく納得できますが
0か15のどちらかがリストされるのでどうしたらよいか迷っているところです。
以上よろしくお願いします。
508774ワット発電中さん:2010/10/15(金) 19:14:27 ID:nGOGhAYy
USBで接続してるからでしょ.....
509774ワット発電中さん:2010/10/15(金) 19:19:29 ID:3pSXJR9+
WinXP以降ではtimeGetTimeをそのまま使うと15msの分解能しかない
1msの精度で計測したければtimeBeginPeriod/timeEndPeriodと併用する必要がある

PICとは関係ない話なのでもっと知りたければWindowsプログラミング系のスレへ
510山崎貴:2010/10/15(金) 19:28:27 ID:g0lCFm0V
509
何度も御返事ありがとうございます。
スレッドを間違っていたようです申し訳ありません。てっきり・・・。
しかし参考になりました。
 ご指摘の通りUSB接続です。
計測しなおしてみます。
ありがとうございました。
511774ワット発電中さん:2010/10/15(金) 20:20:46 ID:9GsWWnPB
結局、センサが振り切った瞬間をセンスして、
そこからカウンタをスタートさせて、光り始めと光り終わりを決める、という
シンプルな方法がベストだった

折角加速度の移動平均から変曲点を割り出したり、
速度を計算して点灯間隔を調節したりしたのに
512774ワット発電中さん:2010/10/15(金) 20:38:26 ID:TXj+Z55H
>>511
結局バネとスイッチを超えられなかったって?
513774ワット発電中さん:2010/10/15(金) 21:51:33 ID:0Z0MJ+qo
加速度減衰器をメカ的に作れば飽和を防げるんじゃね?
514774ワット発電中さん:2010/10/15(金) 22:02:06 ID:TXj+Z55H
ヲヒヲヒ
515774ワット発電中さん:2010/10/15(金) 22:44:42 ID:9GsWWnPB
感度は工場で設定できるんだけどな
秋月が2G品しか用意してないのがいけない
516774ワット発電中さん:2010/10/15(金) 23:51:07 ID:If6NXHTW
センサを加速度検出方向に対して斜めに取り付ければ
サインだかコサインだかでより大きな加速度まで測定できるんじゃね
517774ワット発電中さん:2010/10/15(金) 23:54:56 ID:TXj+Z55H
>>516
それ遠心力で、さらに大きなGがかかりっぱなんでは?
518774ワット発電中さん:2010/10/16(土) 07:31:20 ID:mG2JKmIw
>>507
単位書くときは落ちつこうな。mが増えてきている。
519774ワット発電中さん:2010/10/16(土) 09:49:04 ID:xYmJIe7m
AD変換の結果を10進数で3桁の7セグに表示するように作ったのですが、
可変抵抗に軽く触れると7セグの1桁目が[010→009→011]と行ったりきたりバタついてしまいます
そこそこの衝撃でもバタつかないようにする方法はありませんか?
520774ワット発電中さん:2010/10/16(土) 10:25:47 ID:xCfuFats
>>519
衝撃やノイズより充分長い期間での平均値を表示するようにソフトを変更する
521774ワット発電中さん:2010/10/16(土) 11:05:59 ID:7BsZtlZM
16bitの変数に10bitで読むから6bit余ってる
だから64回まで平均が取れる
割り算なんかは必要なくて、加算してシフトするだけ
522774ワット発電中さん:2010/10/16(土) 11:58:29 ID:asq3KQrL
>>521
それは立派な割り算だがw
523774ワット発電中さん:2010/10/16(土) 12:05:12 ID:MQfLpCzW
除算ユニットもってない石でもストレスなく割り算できるシフト演算
524774ワット発電中さん:2010/10/16(土) 12:21:30 ID:7BsZtlZM
PICCは結構賢いんだけど、/ 2 を >> 1 に置き換えるとかはしてくれないんだよな
% の方は何かやってる
525774ワット発電中さん:2010/10/16(土) 15:39:15 ID:85QhaJVw
/5は、>>2してから、1回引く。
/7は、>>3してから、1回足す。 とか、するのでしょうか?
526774ワット発電中さん:2010/10/16(土) 15:42:17 ID:asq3KQrL
>>525
そうだよ〜
527774ワット発電中さん:2010/10/16(土) 17:02:05 ID:IxjfJwi6
>>525-526
何それ?
528774ワット発電中さん:2010/10/16(土) 17:20:58 ID:5x2WjV3V
>>527
2ビット右シフト、3ビット右シフトな。
529774ワット発電中さん:2010/10/16(土) 18:17:39 ID:7Xo1hdXD
>>524
除算命令ないのにシフト使わずにどうやって除算してるの?
530774ワット発電中さん:2010/10/16(土) 18:37:36 ID:3nn/KoV6
お前、小学校のとき、割り算どういう風に理解したんだよ。
シフトで覚えたんか。
531774ワット発電中さん:2010/10/16(土) 18:48:13 ID:OeL54hQD
>>530
ええ。割り算の筆算はシフトそのものでしょう?
532774ワット発電中さん:2010/10/16(土) 18:54:40 ID:W0RcjP77
引き算もするよな
533774ワット発電中さん:2010/10/16(土) 18:55:50 ID:asq3KQrL
>>531
高度な理解をしたんだなw

子供に割り算て何って聞かれたらどう答えるよ
534774ワット発電中さん:2010/10/16(土) 18:57:39 ID:PhMCHud9
>525-526
ちょ、それ逆
一回引いてからシフトする、一回足してからシフトするだろ
シフトしてから足したり引いたりしちゃダメだろ
535774ワット発電中さん:2010/10/16(土) 19:03:48 ID:D8aLo6Z4
>>531
すげえな、全部2の割り算でこなすのか…

>>534
13/5 =2

13-1=12
12>>2=3

む。

10/5=2
10>>2=2
2-1=1

むむ。
536774ワット発電中さん:2010/10/16(土) 19:06:24 ID:IxjfJwi6
>>534
それも違うだろ。
皆で釣り合い?
537774ワット発電中さん:2010/10/16(土) 19:23:25 ID:85QhaJVw
僕は、割り算は「引き算とかけ算」を使って習った。

c = a / bだとすると、

  c = 0;
*1
  while( b*(c+1) < a ){ c++; } // aから(b*c)が何回引けるか考える。
  fprintf( SCI0, "%u", c );    // 答えの表示
  a -= (b*c);           // 残りを出して、
  b = b / 10;           // 割る数を1/10して
  goto *1             // もう一度行う
538774ワット発電中さん:2010/10/16(土) 19:42:32 ID:PopJPYRJ
アセンブラ使う俺はかけ算を意識的に使わないようにしてる

めんどくさいし
539774ワット発電中さん:2010/10/16(土) 19:50:13 ID:7BsZtlZM
2の累乗以外は素直に汎用のルーチン使えよ
そんなところに労力使っても得しないし面白くもない
540774ワット発電中さん:2010/10/16(土) 19:50:24 ID:asq3KQrL
>>536
釣って釣られてw
541774ワット発電中さん:2010/10/16(土) 19:55:05 ID:asq3KQrL
>>537
もっと簡単に、何回引けるかでFA

あとは速く計算する技
542774ワット発電中さん:2010/10/16(土) 23:11:32 ID:NziTY1rY
九九の逆引きとシフトだろ
543774ワット発電中さん:2010/10/17(日) 00:12:10 ID:RsRIPvr4
演算コプロセッサでしょう
544774ワット発電中さん:2010/10/17(日) 00:23:09 ID:dyeLHb9u
浮動小数点が一カ所でも入るとコンパイル不能
545774ワット発電中さん:2010/10/17(日) 05:39:28 ID:RsRIPvr4
FPUでしょう
546774ワット発電中さん:2010/10/17(日) 08:00:53 ID:B9i0Oy3j
>/5は、>>2してから、1回引く。
>/7は、>>3してから、1回足す。 とか、するのでしょうか?
もう少し面倒くさい。
a÷5:((a<<8)-(a<<6)+(a<<4)-(a<<2))>>10
a÷7:((a<<6)+(a<<3)+a)>>9
なんていう調子
547774ワット発電中さん:2010/10/17(日) 08:27:52 ID:vMgC0J9+
PICCいれたんだけど
Error [939] ; . no file arguments
とでてビルド出来ない
解決法教えてくれ
548774ワット発電中さん:2010/10/17(日) 08:40:52 ID:O/6wgYE1
>>547
コンパイルするソースファイルを指定してないんじゃね?
549774ワット発電中さん:2010/10/17(日) 08:52:56 ID:vMgC0J9+
どーも
できました
550774ワット発電中さん:2010/10/17(日) 08:54:34 ID:HAJ9Z1yK
>>546
a÷5 : a*204/1024 = a/5.020
a÷7 : a*73/512 = a/7.014
を計算しているわけかー。おもしろい。
551774ワット発電中さん:2010/10/17(日) 11:27:29 ID:dyeLHb9u
>>548
よくやる
552TA7502M:2010/10/17(日) 11:30:58 ID:j55Cu38E
5.02とか7.014とかで割っても、unsigned だから、5, 7で割るのと等価ということでしょうか?

204とか73という数字は、どのようにして見つけ出すのでしょうか
553774ワット発電中さん:2010/10/17(日) 11:46:46 ID:dyeLHb9u
255/5=51だが、
255/5.02=50.79.. になるぞ
554774ワット発電中さん:2010/10/17(日) 14:55:31 ID:7cz+83ro
>552
unsigned 符号無し とは、プラスとマイナスを区別しないというか、すべてプラスとして扱うという意味。
マイナス符号を取り扱うことができない変数型ってことだ。

それよりだ。
int型では小数を扱うことができないぞ。
小数点以下切り捨て(マイナスの場合は切り上げ)だ。四捨五入すらしてくれない。

>204とか73という数字は、どのようにして見つけ出すのでしょうか
近似計算と2進シフト演算の組み合わせじゃないの。
555774ワット発電中さん:2010/10/17(日) 15:54:46 ID:dyeLHb9u
実数が必要かもと思う計算は大抵、
ビット数を増やした整数で事足りる
556774ワット発電中さん:2010/10/17(日) 15:54:55 ID:NiQjtrlz
固定少数点数のこともたまには思い出してください(´・ω・`)
557774ワット発電中さん:2010/10/17(日) 19:04:17 ID:2rzEem5o
886で秋月のジャイロで角度出そうと頑張っているのですが、
上にも出てた http://jr1wfhbbs.s5.pf-x.net/micom/
のサイトを見ながらやっていますが、いまいちピンと来ません。
とりあえず誤差出てもいいから角度らしいの1回出してみたいのですが…。
558774ワット発電中さん:2010/10/17(日) 19:20:02 ID:B9i0Oy3j
>>552
10分くらいで軽く考えただけだから、もう少し洒落た方法もあるかも。
a÷5:((a<<8)-(a<<6)+(a<<4)-(a<<2)+a)>>10
で、最後に+aをつけて、205÷1024にしないと誤差が大きいね。すまん。
559774ワット発電中さん:2010/10/17(日) 19:43:05 ID:ZU3Zfuz7
>>557
ジャイロは角速度センサだから単純に積分すれば角度になるでしょ
現状どんなプログラム組んでるか書かなかったらなにもアドバイスできないよ
560774ワット発電中さん:2010/10/17(日) 20:01:15 ID:2rzEem5o
>>559
すみません、今はほとんど最初の方です。
積分のプログラムの方がよく分からなくて…。
今はジャイロの素の値をそのままLCDに出している状態です。
561774ワット発電中さん:2010/10/17(日) 20:21:55 ID:dyeLHb9u
積分って言うから難しい
単にひたすら加算するだけ
562774ワット発電中さん:2010/10/17(日) 20:29:26 ID:B9i0Oy3j
まずは、加速度の定義からじっくり考えてみると良い。
563774ワット発電中さん:2010/10/17(日) 20:35:02 ID:WJVP30qg
こういった使ったことがない装置で
よくわからない数値が出るデバイスを使うときは
カタログやデータシートや作成例なんかを眺めずに
実際に分度器なんかで測ってその数値と照らし合わせればいい
どういう時にどういった数値が出るか勉強にもなる
ローテクなやり方だけど初めての時は一番理解しやすいよ

LCDで高速に表示させれば自動的に平均を表示してくれる
564774ワット発電中さん:2010/10/17(日) 21:22:37 ID:dyeLHb9u
実験する時は液晶よりもシリアルで繋いでPCに出した方が楽
ピンも1本だし無限にバックスクロールできるし
565774ワット発電中さん:2010/10/17(日) 21:25:59 ID:O2MivuyU
t0:1回目にAD変換を行った時間
t1:2回目にAD変換を行った時間
ω:2回目のAD変換で得た角速度
θ:t0からt1までの間に回転した角度
以上のように定義したら
θ=(t1-t0)×ω
で回転した角度が求められる。後はこれを複数回繰り返して平均化するなり、適当にやればいい
これが角速度の定積分の一番簡単な例

実際のt1-t0はAD変換の間隔になるけど、1ms,1sとかの切りのいい間隔にすれば
単純に得られた角速度の加算だけになる
566774ワット発電中さん:2010/10/17(日) 22:45:39 ID:dyeLHb9u
んなものは、arbitrary unit
567774ワット発電中さん:2010/10/18(月) 21:17:00 ID:j14Vl9UR
乾電池で動かす時、何Vから何Vを作ってる?
568774ワット発電中さん:2010/10/18(月) 22:16:12 ID:ztbZ/937
2本から5V
569774ワット発電中さん:2010/10/19(火) 00:17:01 ID:jt/5TDQ8
初カキコなのに教えて君です。ごめんなさい。
PICFUN他日本語はほぼggrった感じですが英語は学力が問題で理解半々?(10%も満たないかもw

環境はCコンパイラにsdcc、asm/lnkはgputils、統合環境MPLABと言うLinux/窓兼用環境です。

知りたいのは「ある変数」の割り当てを固定する方法。
組込の予約語に知悉していないのでキーワードも乏しく検索も憚らないので
「これでぐぐれks」って言う「これ」を教えてください。
後は読み進めればと思っています。
__configのat修飾子も良く理解できてない程度なのでなにとぞよろしくお願いします。

sdccの出力(*.asm/*.lst)を見る限り割付自動過ぎてどこでどうやって指定してよいのか。。。
希望はソース内で「この変数をこのアドレスに固定する」が出来ればベストですが
そもそも可能なのかすら判断できませんでした。orz
*.lnkでむりくり1つ自分用に名前切って*.asmの割付名変更でできるっちゃ出来る。
けどそれじゃC使っている意味がない。
でも組込み系なら「ある特定アドレスに変数を割り当てる」がないとメモリマップドI/Oですら困るだろうし?

ん…チップ別インクルードにヒントあるか?ちと見てくる!
570569:2010/10/19(火) 00:37:46 ID:jt/5TDQ8
しかしと言うか予想通り__sfrと__atだったか。
「C言語 組込み 予約語」で検索した時もうちょっと詳しく追いかけるべきだった。orz

あっけなく答えに辿り着いたけど、これ実体がないと被ったりしないのかね?
ヘッダとLIBのソースにアセンブラのINCとリンカのスクリプトまで読めれば粗方掴めるが
実体がないと他の変数が被ってきそうでいやだな。
ヘッダ&LIBの定義は固定のSFRのみだからGPRを意図するように書くのは無理なのかね?
オーバーラップの回避策とか小技っぽいのってありますか?
571774ワット発電中さん:2010/10/19(火) 00:43:01 ID:KWPMpN5k
ccs PICCだったら #locate hoge = 0x70 とか
sdccでは uint8_t at 0x70 hoge; や uint16_t at 0x70 hoge;
ってことらしいぞ。

ttp://particle.teco.edu/software/sdcc/sdccmigration.html
572569:2010/10/19(火) 06:57:28 ID:jt/5TDQ8
>>571
ありがとう。 >>570 で事故レスってるけど__at修飾子でガチっぽい。
メモリマップドI/Oに関して繋がったし。

ただここで問題なのがsdccでat修飾して使ったアドレスを「コンパイラ・リンカ」の配置属性から外したい場合。
で、出来るならlnkスクリプトは変えたくない。。。
でも一番安全なのは特定の石のリンクスクリプトだけあるエリアを動的配置表記コメントアウトして
そこのアドレスを自分でatするのが安全みたいね。

あれこれ試したけどどうやってもリンカの自動割り当てに勝てなかったwww
もしかしたらコンパイラスイッチ等、オプションで逃げ技があるのかも知れないが。
573774ワット発電中さん:2010/10/19(火) 09:05:15 ID:Kh7TKc94
>>572
リンカスクリプトで特定アドレスのセクション作った方が
いいんじゃない?
574569:2010/10/19(火) 13:06:50 ID:jt/5TDQ8
>>573
アドバイスあり。
やっぱりそれしかないかね?汎用性失うから躊躇している。

といっても個人のホビーなら誰かが使う事もないから良いっちゃ良いのだけどね。
コンパイラの比較とか「自己投資」的な話なので、本件はこの辺にしておきます。
皆さんありがとう。

しかし開発し易くなったね〜。
10年一昔とは言うけどちょっとファームを離れると現場がまるで変わってしまう。
575774ワット発電中さん:2010/10/19(火) 13:33:44 ID:JAMDkkpa
「問題が発生したため、cgpic18.exeを終了します」
ググると過去の情報としては存在するけど、明確な対策方法はありません。
問題の要因知っている人います?回避方法あるんでしょうか?

小さな評価プログラムを作っている分には問題がなかったので、がんがん
ソースを打ち込んでビルドしたらこの状態。MPLAB Cに乗り換えた方が早い
かな?
MPLAB環境だけは変えてみたけど、同じ状態。謎だ orz
XP SP3 + MPLAB IDE Ver8.4 + HITECH C PIC18 V9.63PL3 Lite mode
XP SP3 + MPLAB IDE Ver8.56 + HITECH C PIC18 V9.63PL3 Lite mode
576774ワット発電中さん:2010/10/19(火) 14:33:53 ID:Kh7TKc94
>>574
固定アドレス使うとか特定コンパイラの予約語使った時点で
汎用性を言っても仕方ないっしょw
577774ワット発電中さん:2010/10/19(火) 16:16:43 ID:R7DeAOI+
PIC10F222をPICKIT2でプログラムの読み書き(ICSPです)したいのですが、
Readボタンを押して読み込んでみても、CodeProtect状態になってしまいます。

OSSCAL値を取得するために読み込む必要があるのですが、それができません。

なにか特別な方法があるのでしょうか?
578774ワット発電中さん:2010/10/19(火) 18:26:41 ID:KWPMpN5k
>>577
>CodeProtect状態になってしまいます。

もしそうならCodeProtectが掛かってるのでしょ。
でも、OSCCAL値はCPに係わらず読めるよ。
たとえPICkit2でEraseしても影響は無いはず。

正常に読み書きできないならICSP結線が間違ってるかも。
DIPとSOTどっち?
579774ワット発電中さん:2010/10/19(火) 23:56:29 ID:tr0lLtq1
>>578

試しているのは新品の状態のSOTです。
ICSPの結線は間違えていません。

OSCCAL値はCPに関係なく読めるのですね。

pickitをHUB経由から直刺しにして、何度か試しているうちに
たまに読みこむことができました。

どうもSOT用に製作したアダプタの精度が良くなくて、接触不良が
起きていたようです。

もう少し色々試してみます。
ありがとうございました。
580774ワット発電中さん:2010/10/20(水) 06:52:40 ID:d5U2RKcd
>>575
メインメニュー「コンフィグ」→「セッティング」、
「ワークスペース」タブの「最近使ったワークスペースで始動」チェックを外す。
ぐらいかなぁ対応策。
同じ構成で一時期頻繁に落ちてたんですが
リビルドしてからプロジェクトセーブし終了するよう気をつけてたら、シミュレターロジアナでも使わない限り平気になった。
…つっても俺の場合ソース1kワード越え辺りなんですけどorz
581774ワット発電中さん:2010/10/20(水) 09:01:14 ID:1bX/K7nb
PIC18F4525について
CCS社のCコンパイラで開発しているものです。

EEPROMの初期値を書込みたいのですが、
CCS社のCコンパイラでは
#ROM ROM_ADRESS = {**, **...}
と記述すればよいということは分かりましたが、
PIC18F4525ではそのROMアドレスの番地が何番地にあたるのか分かりません。
データシートも英文でさっぱりです。
どなたかヒントだけでも教えていただけないでしょうか?
582774ワット発電中さん:2010/10/20(水) 09:18:32 ID:EU3OFGrm
583774ワット発電中さん:2010/10/20(水) 09:35:21 ID:LUSkXqi9
PICC Lite9.60PL2でビルドしたhexファイルを
プログラマーキットver4付属のライタソフトpicpgm6.exeで
PICに書き込んじゃ駄目なの?正常に動作しません

ちなみにプログラマーキットを使うことを前提とした
電子工作サイトに記載されていた回路で配線し、用意されたhexファイル
をpicpgm6で書き込んでも正常に動作しました
584774ワット発電中さん:2010/10/20(水) 09:39:02 ID:8/3XP7+/
自家謹製ソフトになにかあると疑うのが最初じゃないの
585774ワット発電中さん:2010/10/20(水) 10:34:25 ID:5O/ZDsQU
>>581
PIC18系の内蔵EEPROM先頭アドレスなら 0xF00000 だよ。(桁注意)
http://ww1.microchip.com/downloads/en/DeviceDoc/39622L.pdf

ついでに・・・ #ROM ディレクティブは基本がword単位だから注意な
#ROM rom_address = {word,word, ...}
byte単位で格納指定したい場合は int8 を付ける
#ROM int8 rom_address = {byte,byte, ...}
586774ワット発電中さん:2010/10/20(水) 11:32:47 ID:1bX/K7nb
>>585
ありがとうございます。
デバッガで確認できました。
とても分かりやすいご説明で助かりました。
587774ワット発電中さん:2010/10/20(水) 11:53:29 ID:bgSGrvYS
>>580
ありがとうございます。初期状態のままなのでチェックは外れてます。
ソースの構成、プロジェクト設定で回避できれば救われるのだけど///
別のコンパイラに乗り換える準備はじめた方が近道な気がしてきた。
588774ワット発電中さん:2010/10/20(水) 12:42:44 ID:d5U2RKcd
>>587
ひとつ書いてなかったけど、注意ね。
どのコンパイラでも同じような事だと思うが、
ソースはデスクトップやマイドキュメント以下に置かないこと。
ディレクトリを覚えるとなんとなく説明できるんだが今回は割愛。
589774ワット発電中さん:2010/10/20(水) 13:13:03 ID:bgSGrvYS
>>588
日本語文字の入らないフォルダで構築しています。
ログイン名も英字。
ローカルドライブD、Eは駄目。もしやCしか許さない?それはあるまい。
過去の英文フォーラムの記録を見るとパッチがあるらしいですが、最新版
に対応した物は見つかりません。ロシア語と中国語での質問がいくつか見
つかりましたが本件については情報数は少ないですね。
日本語でのヒットはcgpic.exeの1件だけ。レアケースなのかな?と。
590774ワット発電中さん:2010/10/20(水) 14:27:10 ID:6C8pfbwg
>589
どういうフォルダに置いてるのか、部分的に伏せ字を使ってもいいから、書いておくれ。
と横レス。
関係ないかもしれないけど念のため。
591774ワット発電中さん:2010/10/20(水) 14:37:20 ID:Jnv6aYl9
ウイルスバスター使ってない?とか言ってみたり
592774ワット発電中さん:2010/10/20(水) 14:42:48 ID:bgSGrvYS
>>590
d:\working\src\_Pj
ソースはsrc直下、プロジェクト関連は_Pj直下
ソースは相対パスの指定をチェック。
他に試した場所は深いので略。パスの長さは関係なかったです。
セキュリティーソフト?試しに外してみます。
50行くらいのサンプルを作って試したところでは問題無いです。
作ったプログラムファイルのサイズ、記述内容で問題が発生するしない
があるような感じ。もう少しプログラムサイズ縮めてみます。
過去にdelay系が報告されてましたが、コメントアウトしても駄目でした。
593774ワット発電中さん:2010/10/20(水) 14:47:02 ID:bgSGrvYS
>>591
文章書いている最中の投稿。恐縮です(汗
あたり。VB2010。けど警告表示ポップアップ、ログ記録有りません。
594774ワット発電中さん:2010/10/20(水) 14:54:55 ID:sA8CaGKh
こんにちはdspic30f2012で外部割り込みのプログラムを組んで(スイッチのオンオフでLEDをオンオフさせる)
動作させて見たですが、全く反応しません。
プログラムを何度も見直しましたがどこに不具合があるのか見当が付きません。
なおスイッチ、LEDなどには問題はありませんでした。
どこに不備があるか指摘してくださいお願いします。
#include<p30F2012.h>
//configuration
_FOSC(XT_PLL8 & CSW_FSCM_OFF);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN);
_FGS(CODE_PROT_OFF);

//intrrupt func
void _ISR _INT0Interrupt(void)
{
IFS0bits.INT0IF=0;//flag clear
PORTBbits.RB2=!PORTBbits.RB2;//LED turn

}
//main function

int main(void){

TRISB=0x00;
_TRISF6=1;


INTCON2=0;//stand edge
IEC0bits.INT0IE=1;//enable

while(1){}

}
595774ワット発電中さん:2010/10/20(水) 15:24:13 ID:Jnv6aYl9
>>593
ルネサスの統合環境HEWがバスターに阻害されてコンパイルすらまともにいかないのよ。
警告もポップアップもなし。

だもんで、PICの環境でもあるかなーと、ね。
一回バスターを終了させてやってみては。
596774ワット発電中さん:2010/10/20(水) 16:31:23 ID:bgSGrvYS
>>595
VB2010終了してから再挑戦。。駄目でした orz
問題の発生しないプロジェクトから、発生するプロジェクトへの遷移
を追ってみます(切り貼りだけど)。
PIC10/12/16系は問題起きてなかった(コンパイラは別)だけに、
PIC18系は悲しい状況。Lite版だからという話もあるかもしれないが。
597774ワット発電中さん:2010/10/20(水) 18:11:05 ID:3JuJCKYj
VMPlayerインスコしてそのゲストOS内で環境整えたよ。
598774ワット発電中さん:2010/10/20(水) 18:54:33 ID:bgSGrvYS
>>597
教えて下さいな。
それってHEW、それともcgpic18問題の回避方法?
599774ワット発電中さん:2010/10/20(水) 22:47:57 ID:d5U2RKcd
>>594

グローバル割り込み許可ビットはありませんでしたか?

吸い込みで見えてない気もするので否定!を~反転する。とかどうでそ
600774ワット発電中さん:2010/10/21(木) 01:29:00 ID:BYzptozG
16F886等TinyBootloaderが使える機種で、回路作るとします。

この場合PICのTX/RXに、MAX232等レベル変換のICとDサブ9pinコネクタつけますが
この二つの部品を別の基板に分けてしまい、開発中のみ接続し完成したら取り外
してしまうようにしたいと思ってます。

完成後PICのTX/RXはどのように処理すればいいでしょうか?

自分で考えたやり方は、

完成後シリアルの機能を使わない。
->TX/RX共に、一般ポート出力に設定し、Lを出力しっぱなしにする。

完成後シリアルの機能(もちろん基板は電源オフ時接続)を使う。
->RXは10Kくらいでプルアップする。
->TX/RXともに100Ωくらいのダンピング抵抗を入れる。

どうでしょうか?
601774ワット発電中さん:2010/10/21(木) 01:58:12 ID:Xup9JIXk
>599

dspic30f2012ではグローバル割り込み許可ビット(GIE)のようなものはないようです。
割り込み以外の書き込みならできるのですが割り込みを使うと反応しなくなります。どこが原因なのかさっぱりです。
602774ワット発電中さん:2010/10/21(木) 02:18:17 ID:a7Tbp5m6
>>600
TXはそもそも出力だから放置、RXだけプルアップでいいんジャマイカ?
603774ワット発電中さん:2010/10/21(木) 02:37:22 ID:N8YoR6un
>>594
何で自分でdebug出来ないの?
604774ワット発電中さん:2010/10/21(木) 05:20:57 ID:XJIql2km
>>594

> なおスイッチ、LEDなどには問題はありませんでした。
デバッグもまともにできないのにこのセリフは信用できないなぁw
なぜ問題無いって言い切れるんだか?

割り込みを使わないでLEDピカピカは出来るか?
LED反転ロジックは正常に動作するか?
順を追ってプログラムを作成すれば自分で出来るんじゃない?

605569:2010/10/21(木) 06:34:20 ID:m9hz7G0G
なかなか手厳しい意見だけど「デバッグも出来ない人」の「問題はありません」は確かにあてにならんかも。(笑)
今回私もTXIFには見事にやられた。先人の知恵をもっと読んでおくべきだった。
(16550の時の癖でてっきり「送信完了割込み」と勘違いした…まさかトランスミッタ空き信号同等とは^^;)

英語力無さ杉が英語しかドキュメントのない型番選んだのもダメな点か。
ペリフェラルいじくる時はせめて得意言語かデバイスメーカの人間と話が出来ると楽だが、
その上16シリーズのバンクにめっぽうやられた。今更6502を思い出させるとか、なついね。www

今はネットマンセーのご時勢だし調べると「デバッガーの便利ノート」すらある。
>>594 も見えない部分が多いうちは暗中模索だろうが、がんがれ。

>>576
自己の保守性・可読性の話も考慮してみたり…と研究レポートみたいなお話ですまん。

乗算・除算の話が出てたが懐かしいね。Z80時代人としては1行40/80文字が当たり前なので「次の行」のアドレスは40/80倍。
当時の先輩に教わったシフトと加算で40倍する術は今も現役だな〜。
因みに8倍(3回シフト)を一時記憶、32倍(更に2回シフト)に8倍を足しこめば…。ってね。
⇒シフトが2で割る同等とかまさになつい。
606569:2010/10/21(木) 12:00:22 ID:m9hz7G0G
再び569です。教えて君です。ごめんなさい。

環境sdcc+gputils+MPLAB、石16F627/628(a)/648(a)です。
現象:パワーオンでシリアルにゴミが乗る。(シミュだと起きない)

多重割込みではあるけどソフト的には思惑通り?な挙動ですがこの1点だけ。
0xffが1バイトでるパターンと0x00が4バイト出るパターンと0x00×4、0xffの5バイト出るパターンと…。
初期化手順が良くないのか?
ソース上TXREG書込みはTX割込処理内の一箇所のみ。
通信自体のパラメータは非同期8N1の38400
クロック12.8MHzでBRGH=1(高速)SPBRG=20で384のはず。(低速82で2400bpsも試したが変わらず)

レジスタ初期化の優先順位ってありますか?
「CMCON⇒TRISA/B⇒OP_REG⇒SPBRG⇒TXSTA⇒RCSTA⇒T1CON⇒T2CON⇒INTCON⇒PIE1⇒GIE=1」
「CMCON⇒TRISA/B⇒OP_REG⇒T1CON⇒T2CON⇒INTCON⇒PIE1⇒TXSTA⇒RCSTA⇒SPBRG⇒GIE=1」
「CMCON⇒TRISA/B⇒INTCON⇒PIE1⇒OP_REG⇒T1CON⇒T2CON⇒TXSTA⇒RCSTA⇒SPBRG⇒GIE=1」
上は試したが効果なしです。

そもそもソフトの問題なのだろうか?ハード(回路)の問題か?(でも以前と同じ回路なのに。
レベルコンバーターはお馴染みMAX232、TX/RXのみで他折り返し。「いわゆるありきたりな接続」なんだけど…
607774ワット発電中さん:2010/10/21(木) 12:27:45 ID:a7Tbp5m6
どっち側にゴミが出るんだよw
608774ワット発電中さん:2010/10/21(木) 12:29:24 ID:N8YoR6un
>>606
PIC16F627/628(a)/648(a)の場合、RX/TXにあたるRB1/2のI/O定義は
両INPUT(TRISB<2:1>='1')とすべきなんだが、大丈夫?
もしかして RB2出力(0/1)を決定せずにTRISB出力初期化してない?
609774ワット発電中さん:2010/10/21(木) 19:47:38 ID:QiE2vd2q
TXIFはどっちの実装の方が楽なんだろうね
イネーブルを頻繁に変えるというのがなんか力業な気がして
610774ワット発電中さん:2010/10/21(木) 20:21:10 ID:oVpBxvnB
>>603
>>604
>>605

ありがとうございます。デバッグという存在を知りませんでした。
ご指摘通りスイッチに連動してLEDオンオフのプログラムを割り込みあり、なしの両方で
デバッグしてみました。
しかし書き込んでみると割り込みありの方は全く動きませんでした。何が原因なのでしょうか?
611774ワット発電中さん:2010/10/21(木) 21:00:04 ID:gj/fp40R
何も変わってねえw
612774ワット発電中さん:2010/10/22(金) 00:15:27 ID:okMQTGOX
>>606
シリアルを初期設定したら空読みしてゴミを取るっていうような内容じゃ
ないのかな。
613774ワット発電中さん:2010/10/22(金) 01:44:16 ID:tNDJqEMZ
>>610
原因があるから予定通り動かない。
もう一度ソースとデータシートを
よーく見ながら1ステップづつ追っかける



と、割込で1日悩んだ俺がいる
割込イネーブルが3箇所あるなんてorz
614774ワット発電中さん:2010/10/22(金) 09:56:57 ID:aADyKPCC
三ヶ所って、そんなにあるの?

タイマーモジュール許可
割り込み全体ぬ許可
ぐらいじゃないの?
615774ワット発電中さん:2010/10/22(金) 20:11:00 ID:AsHLuyju
つ周辺モジュール割り込み
616774ワット発電中さん:2010/10/22(金) 21:11:37 ID:XI3XzmwS
あの割り込みツリーは何度見ても覚えられん
617774ワット発電中さん:2010/10/22(金) 21:19:34 ID:stF1IMV1
>>616
ツリーなんか覚える必要ないよ〜
「データシートに書いてある」だけ覚えとけばOK
618774ワット発電中さん:2010/10/22(金) 21:30:09 ID:G+NCxbB2
俺は英語が満足に読めないから、データシートも核心部分しか見ない
おかげてたまにハマったりする

読めないというより、アセンブラのソース追ってるような感じで
1語ずつ翻訳、時間の掛かること掛かること
619575:2010/10/22(金) 21:37:24 ID:G+TakpWA
HI-TECH C Lite 利用しての cgpic18.exe のシステムエラー。
最近ばたばたしてたけど、本日作業再開。
なんか、ソースの切り取りしたら、少しだけ様子が判明したのでちょっとだけ。
Lite版の意地悪な助長的なバンク切り替えを抑止するべくコーディングに凝った
のが要因らしい。意地悪を素直に受け入れるとエラーは出ない。
変数をポインタにキャストし、中身が指す場所を更にポインタでキャストして中身を参照。
Lite版の意地悪と根比べしたらLite版がイヤイヤしている感じ。
この部分はインラインアセンブラで置き換えるつもりだから、数日の寿命なんだ
けどね。
620774ワット発電中さん:2010/10/23(土) 00:32:35 ID:sUy7xnUk
>>594です。データシートを見てやっと原因がわかりました。
割り込みベクタテーブルをIVTにしていたことが問題でした。

皆さんありがとうございました
621774ワット発電中さん:2010/10/23(土) 02:47:51 ID:4s1TPiIQ
>>618
オレもそう、英語訳すのに時間がかかる。
英語ってthat, of, as, などで、1文がドンドン長くなっていくんだよな。
また、文末から読んだ方が意味が良くわかるし。
622774ワット発電中さん:2010/10/23(土) 07:33:54 ID:UEdJhRsc
翻訳する時は文末からになってしまうけど、
意味を理解するだけなら頭からの方がいいに決まってる
理解したからといって即座に日本語にはできないんだが
623774ワット発電中さん:2010/10/23(土) 08:18:36 ID:UPAritRW
>>621
>英語ってthat, of, as, などで、1文がドンドン長くなっていくんだよな。
連中の頭の中は、そういう「付け足し文化」なんだよ。
あたりまえだけど、ネイティブな連中はいちいちひっくり返したりしないで、
そのまま理解しているんだから、こちらが読むときも
そのまま読み下していく癖をつけると楽になる。

プログラムを実行しているCPUな気分で、与えられたオペコードを
そのまま処理していくような感じだな。

This cart is too heavy for one horse to pull.
を全体を俯瞰して「SだVだCだ・・」なんてやるからいけない。
単純に頭から1単語ずつ見て理解するようにする。(きれいな日本語の
”文章”に直す必要は無い)
しばらくやってると、日本語にはならないけど、何を言いたいのかって
いうことはなんとなく理解できるようになってくる。
データシート類には、あまり文学的な表現は無いから、比較的楽だと思うよ。
624774ワット発電中さん:2010/10/23(土) 09:19:06 ID:UEdJhRsc
HT7750Aで遊んでみた
電池1本じゃやっぱり全然足りない
625575:2010/10/23(土) 11:01:48 ID:nwHgQlQg
>>624
消費電力次第
626774ワット発電中さん:2010/10/23(土) 11:13:29 ID:UEdJhRsc
いや、違うな
電池次第だ
627774ワット発電中さん:2010/10/23(土) 18:20:27 ID:075QbW57
18F14K50マジいかす。
628774ワット発電中さん:2010/10/23(土) 18:25:57 ID:Khl6mDvN
生かすの活かすの逝かすの?
629774ワット発電中さん:2010/10/24(日) 00:04:25 ID:DJqt4PCL
ええのんか?ここがええのんか?
630774ワット発電中さん:2010/10/24(日) 07:47:30 ID:rZmpy3A0
18F14K50を使った、汎用USB-I/Oとか、HIDなジョイスティックとか、
低速でいいからUSB-シリアル変換(TTLレベルで、他のマイコンに直結)とか、
そういうのなかなか見つからないのですがご存知の方おられますか?
631774ワット発電中さん:2010/10/24(日) 08:46:47 ID:VOF3Jzcl
632774ワット発電中さん:2010/10/24(日) 08:54:01 ID:rZmpy3A0
いやソフトの方...
633774ワット発電中さん:2010/10/24(日) 08:56:37 ID:0Nap8I1q
2550が楽だよ
634774ワット発電中さん:2010/10/24(日) 08:58:50 ID:YmDdmY/I
MicrochipのサンプルソースにHID,CDCとかそのまま使えるのがあるじゃん
635774ワット発電中さん:2010/10/24(日) 10:22:45 ID:eR0HoXy2
16F18XXシリーズが速いし安いしで魅力的なんだが、CCSは動作未確認になってるね?
前IDEのHCPICはメモリアロケーションにビッグバグがあったそうだけど、今は大丈夫かな?
入手性はどうなんだろ?
636774ワット発電中さん:2010/10/24(日) 13:56:05 ID:/DYLJleN
>>635
> 入手性はどうなんだろ?

(゚Д゚)ゞ ども。インターネットパトロール隊です。
入手性だって!? 下記のような不正Warezサイトから入手するのはいけませんよ?
ttp://www.sonsivri.com/forum/index.php?board=3.0
637774ワット発電中さん:2010/10/24(日) 15:02:35 ID:eR0HoXy2
>>636
ワラタ 入手性ってチップの事ですよ
638774ワット発電中さん:2010/10/24(日) 15:18:34 ID:fu214Vji
スクリプトじゃね?
639774ワット発電中さん:2010/10/24(日) 23:58:38 ID:RT2LGbAm
>>632
最近発売されたこれ、18F14K50使ってるみたいよ。
Assembly Desk - REVIVE USB
http://a-desk.jp/modules/forum_module/index.php?cat_id=3
ソース、回路図は全部公開なので参考になるのでは。
パソコン側のプログラムはC#みたいだけど。
640774ワット発電中さん:2010/10/25(月) 00:28:10 ID:p1qvilXP
>>639
価格設定が微妙かな
沢山買う場合の割引設定もした方がいいよね。

Beauto Racer
http://www.vstone.co.jp/robot/beautoracer/
Pololu USB AVRプログラマ
http://www.switch-science.com/products/detail.php?product_id=255
とかも18F14K50だから、割高に感じる。

641774ワット発電中さん:2010/10/25(月) 03:25:39 ID:RTwLSPD7
その値段だとオプチマイズのPIC24USBでも買った方がいいな
642774ワット発電中さん:2010/10/25(月) 17:27:02 ID:sNGCjKQM
http://uproda.2ch-library.com/307044Lq6/lib307044.jpg
ゲーム機のようなものを作ろうと思っている。
643774ワット発電中さん:2010/10/25(月) 17:39:05 ID:g1NpG4lN
>639
秋月の実装済み2550ボードの方がいいんじゃないかね。ピン数多いし。
こっちは自分の代わりにソフト考えてくれる点が出来ない人には魅力か。
644774ワット発電中さん:2010/10/25(月) 20:07:02 ID:2ZO/3/4I
>>642
この矢印の付け方だと俺だったら逆差ししちゃうな。
645774ワット発電中さん:2010/10/25(月) 21:15:39 ID:JIG95nDv
1ピンの反対側になんか丸い印が付けてあるICを、
判ってても逆に挿す
646774ワット発電中さん:2010/10/25(月) 22:19:26 ID:cHi/bLGu
>>642
ワニ口の間にあるセラコンって意味無くね
647774ワット発電中さん:2010/10/25(月) 23:44:39 ID:JIG95nDv
ダイオードはショットキー?
648774ワット発電中さん:2010/10/26(火) 00:26:52 ID:tKYPj0JY
>>646
なんで? 電源間に入っているコンデンサとして、有意義だと思うけど。
もしかして、写真のダイオードを逆接防止のダイオードと勘違いして、
それにパラについたコンデンサと思ってない?
649774ワット発電中さん:2010/10/26(火) 00:33:58 ID:PMj4GnuS
>>648
高周波のバイパス用ならもっとICの近くにあるべきだし。
低周波用途なら、もっと容量があるべきじゃないか。
と、いう話じゃないかな。

回路図を見ないと、何のつもりで入れたコンデンサなのか分からんから
オレにはなんともいえないど。
650774ワット発電中さん:2010/10/26(火) 00:34:12 ID:WPgJLpxS
>>648
逆接防止ダイオードだろ。
シリーズじゃなくてパラに入れるやつ。
651774ワット発電中さん:2010/10/26(火) 02:46:58 ID:tKYPj0JY
ヒューズを焼き切るタイプね。
652774ワット発電中さん:2010/10/26(火) 03:11:42 ID:qh1mGH2t
>>649
輻射対策用として、コネクタ近くにセラミックコンデンサを入れる事は良くある。
653774ワット発電中さん:2010/10/26(火) 03:13:15 ID:O5jNBoWf
少なくとも逆接防止用ではなくて逆接保護用だな
防止については役にたっていない
654774ワット発電中さん:2010/10/26(火) 03:23:48 ID:MjiGPqr9
16F88でADの結果をTXで送ろうとしています。
使っていないRXピンを別の用途で使おうとすると反応が無いのですが、TXだけ使おうとしてもRXもシリアル用として固定されるのでしょうか・・・?
655774ワット発電中さん:2010/10/26(火) 03:32:39 ID:jMdGwMvx
内蔵USARTではそうだよ
656654:2010/10/26(火) 03:45:19 ID:MjiGPqr9
>>655
やっぱり固定されるんですね、ありがとうございました。
657774ワット発電中さん:2010/10/26(火) 10:16:31 ID:nygHorpD
>>651
その並列型のダイオードによる保護は、ダイオードがあってこそ意味をなすので
直列にダイオードを入れる保護のほうが良い。
並列型でヒューズが切れないと、ダイオードが溶断して、逆の電圧が回路にかかり、ついには回路壊れる。
しかも、再開するには、別のヒューズが必要であり、予備がないと出先などでは困ってしまう。
直列型では、全く問題なし。
658774ワット発電中さん:2010/10/26(火) 13:48:16 ID:tKYPj0JY
電圧降下が発生してしまうことと、ダイオードに電流容量が要求されること、
くらいかな。
659774ワット発電中さん:2010/10/26(火) 22:50:59 ID:WPgJLpxS
電流制限付きの実験用電源を使えばヒューズは切れない。
660774ワット発電中さん:2010/10/26(火) 23:12:18 ID:xqsDf3kW
出力のポートがすでにHIGHかLOWかで分岐したいのですが、
出力に設定したポートをBTFSCで読んでも大丈夫でしょうか?
661774ワット発電中さん:2010/10/26(火) 23:25:03 ID:jMdGwMvx
>>660
やってみれば判るよ
662774ワット発電中さん:2010/10/26(火) 23:27:16 ID:WPgJLpxS
>>660
また、もめる元になるような質問だなw
大丈夫だと思えばBTFSCでいいし、不安ならRAMに保存した値で判断する。
663774ワット発電中さん:2010/10/26(火) 23:27:21 ID:TimAcRqQ
大丈夫じゃないかも、という予感がする時点で大丈夫
普通はそんなこと何も心配せずに読む
664774ワット発電中さん:2010/10/26(火) 23:41:52 ID:RpK9GjRq
過負荷とか短絡検出したいんじゃないの
665774ワット発電中さん:2010/10/26(火) 23:49:37 ID:q477Mlsc
>>664
それを気にする知識があれば、ここで聞いてもダメだと分かるはず
666774ワット発電中さん:2010/10/27(水) 00:22:11 ID:zwMdtWWA
>>661-665
大丈夫みたいでした
レスありがとー
667774ワット発電中さん:2010/10/27(水) 11:16:19 ID:iT8FkXfZ
piccliteで配列要素にアクセスするとこんなエラーが出る
Error [491] ; . can't find 0x4C words for psect "rbss_0" in segment "BANK0"

Error [593] ; . can't find 0x2 words (0x2 withtotal) for psect "code_ptr" in segment "BANK0"

Error [593] ; . can't find 0x1 words (0x1 withtotal) for psect "intsave" in segment "BANK0"
配列変数の宣言自体には何も言われないんだが
668774ワット発電中さん:2010/10/27(水) 23:50:44 ID:vplJZdyk
ICSPについて質問です。
PICの解説などされているサイトを見ると、Vccはターゲットの基板から供給して、
ライター側からはVccを繋がないとか、基板のVccとPICのVccをジャンパで切り離
せるようにするとかの工夫をされているようです。
自分が作る回路はPICの出力でLEDを2個点灯させる程度で、周辺回路もほとんど
電流を喰わない(はず)なので、書き込みする際はターゲットの電源は切っておく
ことにしてPICのVccとICSPのVccピンをそのまま繋いでみました。
無事に書き込みは出来ていますが、何か問題が起きる可能性はありますでしょうか?
ライターはPickit2です。
Vpp/MCLRはダイオードでVcc側に影響しないようにしています。
669774ワット発電中さん:2010/10/27(水) 23:59:48 ID:9j9Ko7Sm
あります
670774ワット発電中さん:2010/10/28(木) 00:14:13 ID:V0/XF7y0
ありません
671774ワット発電中さん:2010/10/28(木) 00:15:21 ID:qLgAKFRB
さぁどっちもどっちも
672774ワット発電中さん:2010/10/28(木) 02:05:43 ID:qVGI7bgY
>>668
詳細が分からない回路に対して、すべての可能性を挙げることは
当然ながらできない。

うーん。

例えば、ターゲット側の電源生成回路が動作してない状態で出力に
電圧がかかるのは問題だったりしないかな。
673774ワット発電中さん:2010/10/28(木) 03:05:44 ID:5J7rv/N+
>>668
ターゲット側の電源を入れっぱなしで書き込めば、自動的にPICkit2から
電源が供給されないで書き込まれる。
674774ワット発電中さん:2010/10/28(木) 05:57:10 ID:DdDu/Mq5
EEPROMのデータを電源入れた後に7セグに表示されるようにプログラミングしているのですが、
電源を入れると255と表示され、EEPROMの読み出しがうまく出来ません。
書き込みがうまく行ってないのかMPLAB SIMでデバッグしても書き込みも読み込みも問題ありませんでした。
何が問題なのかさっぱりわからないのですが、読み出しのコードに問題は無いでしょうか・・・。
movf 0x00,W
banksel EEADR
movwf EEADR

banksel EECON1
bcf EECON1,EEPGD
bsf EECON1,RD
banksel EEDATA
movf EEDATA,W

bcf STATUS,RP0
bcf STATUS,RP1
movwf VAL_VR
675674:2010/10/28(木) 05:58:20 ID:DdDu/Mq5
途中で送信してしまった・・・、PICは16F88です。
どなたかアドバイスお願いしますorz
676674:2010/10/28(木) 06:02:10 ID:DdDu/Mq5
更に書き忘れてしまった・・・
EEPROMへの書き出しはPICKIT2で読み出すとEEPROMに書き出した数値が入っていた為
書き込みはうまく出来ていると判断しました。
重ねてよろしくお願いしますorz
677774ワット発電中さん:2010/10/28(木) 06:39:15 ID:5J7rv/N+
>>874
movf 0x00,W というのが謎だな
678774ワット発電中さん:2010/10/28(木) 06:41:28 ID:5J7rv/N+
↑ >>674だった
679774ワット発電中さん:2010/10/28(木) 07:42:46 ID:V0/XF7y0
>677
間接アドレシングでのデータ呼び出しだろ?
680774ワット発電中さん:2010/10/28(木) 08:30:43 ID:2vDOPndw
movf 0x00,W

movlw 0x00

多分こう
681774ワット発電中さん:2010/10/28(木) 08:46:25 ID:fVKjIa3e
>>667
配列要素の大きさ、配置場所が関係してないかい?
たとえば、const忘れとか。
配列宣言の冒頭、アクセスする側の手法を載せると解決に近づけると思う。
もち、差し支えない範囲で。
682668:2010/10/28(木) 09:57:12 ID:URNTSzbt
>672
> 例えば、ターゲット側の電源生成回路が動作してない状態で出力に
> 電圧がかかるのは問題だったりしないかな。

今のところはLEDだけなので大丈夫と思います。他に繋ぐ場合は注意
します。

>673
> ターゲット側の電源を入れっぱなしで書き込めば、自動的にPICkit2から
> 電源が供給されないで書き込まれる。

なるほど、そういう事だったのですか。あれから調べてみたらPickit2の
メニューでVDD Source->Auto-Detectにしておけばおkということですね。

どうもありがとうございました。
683676:2010/10/28(木) 18:17:35 ID:DdDu/Mq5
>>680さんのmovlw 0x00に書き換えたら動きました!
そういえば前にも同じ状況で繰り返しデバッグしたのを思い出しました・・・。
皆さんありがとうございました。
684774ワット発電中さん:2010/10/28(木) 21:32:59 ID:xrHm5L6m
http://page5.auctions.yahoo.co.jp/jp/auction/e108611117
なんでこんな値段上がってるのかさっぱり理解できん
685774ワット発電中さん:2010/10/28(木) 22:04:41 ID:rcztNEki
財務省から、日本国債の利払いができなくなったというニュースリリースが出てないか
誰かチェックしてくれ。
686774ワット発電中さん:2010/10/29(金) 03:11:07 ID:f0j7n8En
お舞らどう思う?

「自営業者、家族への給与も必要経費…税法改正へ」
http://www.yomiuri.co.jp/atmoney/news/20101028-OYT1T00663.htm
687774ワット発電中さん:2010/10/29(金) 03:33:03 ID:f0j7n8En
スレ間違えたけどまぁ、いいや。
688774ワット発電中さん:2010/10/29(金) 07:41:31 ID:ItmkHvyh
>>686
別にいいんじゃねぇの?というか、それが認められていなかった方がおかしい。
689774ワット発電中さん:2010/10/29(金) 12:09:07 ID:EMjjHUYn
>>686
今までどういう扱いだったんだろw
690774ワット発電中さん:2010/10/29(金) 14:48:28 ID:cH9k4ZDv
今までは法人税と所得税二重で取られてたんだろうか
691774ワット発電中さん:2010/10/29(金) 17:27:35 ID:ItmkHvyh
青色申告していれば「青色専従者」への給与は認められていたけど、
白色だと認められなかった。つまり、仮に給与として払ってもそれは
「事業主貸」と同じようなものになるだけで、事業所得から差し引けない
んで、支払わないのと同じ。
たとえば夫婦で1000万円の事業所得があったとして、実際には「二人で
1000万円」だから「一人当たり500万円」としたいところだけど、
単に「事業主(たいていは旦那か?)が1000万円の所得を得た」っていう
ことになってしまう。
「世帯所得」で課税されることになるんで累進課税っていうこともあって不利。

ちなみに法人の場合でも、特殊支配同属会社(簡単に言えば家族経営な自営業
がそのまま法人化したような奴)の場合、給与支払いはできるけども、
給与所得控除分は損金扱いにできない(つまり、給与所得控除分は
法人が払うことになってしまって、給与所得控除が無いのと一緒)
というのがあった。ただ、この変な特例は今年から廃止。
692774ワット発電中さん:2010/10/30(土) 07:12:13 ID:K4vTVrGK
電波時計作りたくなってきた
フェライトバーだけ何とか入手して、コイル手巻き、
LCメータ無しでオシロで何とかして、デコーダICも使わずに、
多少のディスクリートとPICだけで何とかなるだろうか
693774ワット発電中さん:2010/10/30(土) 08:19:04 ID:2EneibsM
>>692
Psoc ならやってるひといるよ
694774ワット発電中さん:2010/10/30(土) 08:58:47 ID:K4vTVrGK
インダクタンスを実測してるあたりで、何か機械を使ってる気がする
695774ワット発電中さん:2010/10/30(土) 10:31:46 ID:mr9l2d5t
関連質問だが、時刻無調整な時計の自作だと
電波時計とGPSを利用した時計と、ntpまたはwebサーバーから時刻を拾得する時計の
どれが簡単なんろうか?
696774ワット発電中さん:2010/10/30(土) 10:57:36 ID:Nv2yRKfs
>>695
たぶんtcp。
使える選択肢も多いし、ソフトが楽。
どこから自作するかで、どれも、難易度は天と地ほど変わると思うけど。
697774ワット発電中さん:2010/10/30(土) 11:04:45 ID:mr9l2d5t
ありがとうございますでつ。
698774ワット発電中さん:2010/10/30(土) 11:07:40 ID:KJ3BehCh
>>695
GPSがインタフェース簡単だと思うが。調歩同期式通信だし。
電波時計も同様だけど。アンテナの位置には注意しないとね。圏外は辛い。
699774ワット発電中さん:2010/10/30(土) 11:31:37 ID:mr9l2d5t
698さんもありがとう御座ざいます。
700774ワット発電中さん:2010/10/30(土) 12:59:56 ID:S1khkalT
>>692
電波時計を自作するなら市販の電波時計ばらしてバーアンテナと共振用の
コンデンサ、フィルタ用のクリスタルを取り出して使うっていうのが楽で
はあるんだけど、なにせ40kHzだの60kHzというのはノイズがすごくてな。
実際に受信信号を聞いてみると分かるけど、もうザラザラバリバリ
ジュルジュル・・と、賑やかなこと。

とりあえず音として聞くところまでは作ったことがあるけど、
そこから目的の信号だけを抽出してデコードするのが結構面倒でな。
701774ワット発電中さん:2010/10/30(土) 14:04:49 ID:z6KLKJvu
>電波時計を自作するなら市販の電波時計ばらして

イミフ
702774ワット発電中さん:2010/10/30(土) 14:30:38 ID:i3HRTrhR
>>701
技術的興味を満たすためには有りな選択じゃね?
完成品ばらしたほうが、単品部品でそろえるより安いからなw

百均ラジヲをばらしてラジヲ部品を手に入れるなんてのも流行ったよなw

703774ワット発電中さん:2010/10/30(土) 15:13:34 ID:K4vTVrGK
秋月のアンテナと水晶のセット700円は魅力的なんだけど、
なんかキットを組み立ててる気分になっちゃうんだよな
水晶だけ100円でなんとか済ませたい
704774ワット発電中さん:2010/10/30(土) 16:45:03 ID:S1khkalT
>>701
>702の言うとおりで、単品で集めてくるより入手性も良いし、安い。
(全部コミコミで1000円しないからなぁ)
どのみち、水晶は買ってくるしかないし、フェライトコアも
自分で作れるわけじゃないんだから、結局やるのはインダクタンス
見ながら電線をひたすら巻くだけだろ?
705774ワット発電中さん:2010/10/30(土) 20:50:11 ID:DY/5gKxV
16f84A使ってます
RB0/INTピンにタクトスイッチを繋ぎ押されたらRB3のLEDを消すようにしたいんですが
押しても何も起こりません、何故?

#include <pic.h>
__CONFIG(HS & WDTDIS & PWRTEN & UNPROTECT);

void interrupt intr(void){
if(T0IF){
T0IF = 0;

} else if(INTF){
INTF = 0;
RB3 = 0;
}
}
void main (void){
TRISB = 0b00000001;
TRISA = 0b00000000;
OPTION = 0b10000111;
TMR0 = 0;
T0IE = INTE = 1;
INTF = 0;
GIE = 1;

RB3 = 1;
while(1);
}
706774ワット発電中さん:2010/10/30(土) 21:44:31 ID:EfWIL8a7
>>705
で、回路は?
707774ワット発電中さん:2010/10/30(土) 22:58:13 ID:QE7ur6sC
http://www.youtube.com/watch?v=VxMoy4WYgg4
ショボーンを右を向かせたり左を向かせたりしている。
708774ワット発電中さん:2010/10/31(日) 16:41:10 ID:03PjmRbX
ネタプログラミングは
WTDENでやれ
709貴闘力:2010/10/31(日) 16:51:55 ID:O1BJhJN/ BE:4649054898-2BP(0)
705>
マイコンとLED、スウィッチはどのようにつないでいますか?

割込みなしで、とりあえず、RB3につないだLEDをつけたり消したりできますか?
(タクトスイッチのボタンを押す前のLEDは点灯していますか?)
710774ワット発電中さん:2010/10/31(日) 17:21:52 ID:37AthIDX
>>692
フェライトバーなんか無くてもペットボトルに線を巻くだけで大丈夫。
711natu:2010/10/31(日) 18:05:31 ID:rcuGnMRQ
>>705
INTCONにもアクセスしてやって
712natu:2010/10/31(日) 18:16:00 ID:rcuGnMRQ
>>711
すまん、勘違いだ。無かった事に...
713貴闘力:2010/10/31(日) 19:25:33 ID:O1BJhJN/ BE:4132493388-2BP(0)
Error [237] C:\PIC_project\test\lcd.h; 25. function "_lcd_out" redefined
Error [237] C:\PIC_project\test\lcd.h; 42. function "_lcd_data" redefined
Error [237] C:\PIC_project\test\lcd.h; 51. function "_lcd_cmd" redefined
Error [237] C:\PIC_project\test\lcd.h; 59. function "_lcd_clear" redefined
Error [237] C:\PIC_project\test\lcd.h; 66. function "_lcd_init" redefined
Error [237] C:\PIC_project\test\lcd.h; 90. function "_lcd_pos" redefined
Error [237] C:\PIC_project\test\lcd.h; 104. function "_lcd_printf" redefined

このようなエラーが出た場合はどのように対処すればいいでしょうか?

環境は
WINDOWS VISTA
MPLAB 8.56
PICC LITE 9.60PL5
です。

プログラムとしてはcソースを2ファイルにしています。
メイン(main.c)と周辺機器(module.c)の2つでファイルをモジュール化していますが、
メインから
#include "module.c"
としてmodule.cの中の関数を使おうとすると、
上記のようなエラーが出てきます。

そこで、
対策1
#include "module.c"
を消すと
下記のエラーが出ます。
conflicting declarations for variable "_func1" (D:\〜\main.c:183)

func1はmodule.cの中にある関数で
main.cから呼び出します。

これは、おそらく、main.cからmodule.cを
呼び出しできる状態になっていないのだとおもいます。

そこで、
対策2
main.cに
extern void func1(BYTE cmd);
と追加しました(その他の関数も)。

すると下記のエラーがでました。
Omniscient Code Generation not available in Lite mode (warning)
0. undefined symbols:
_func1(unit6.obj) _func2(unit6.obj) _func3(unit6.obj)

ここで、unit6は プロジェクト名です。
これらのエラーは初めてでどのように対処していいものか困っています。
714774ワット発電中さん:2010/10/31(日) 20:26:22 ID:YoaFwRtM
redefinedの荒らしになるのは前に何かで経験したな
プロトタイプの判別が厳密なんだよ確か
完全に同じに書かないとredefinedとみなされる
715774ワット発電中さん:2010/10/31(日) 20:46:13 ID:Q3wOFZLt
func1の定義をヘッダファイルで行って、main.cではそのヘッダファイルをincludeする
cファイルをincludeするとか意味分かってやってるのかね
716774ワット発電中さん:2010/10/31(日) 20:56:00 ID:zyLnhmsX
>メインから
>#include "module.c"
とするなら、プロジェクトのソースリストにmodule.cを含めるな。
717774ワット発電中さん:2010/10/31(日) 21:31:34 ID:uS9v1ovA
>>713
>対策2
>main.cに
>extern void func1(BYTE cmd);
externいらねぇんじゃね
718774ワット発電中さん:2010/10/31(日) 22:47:24 ID:rGN8YyXW
>>713
PIC と言うより
Cの勉強からやり直した方が良い。
719貴闘力:2010/10/31(日) 23:28:21 ID:O1BJhJN/ BE:2711948876-2BP(0)
皆さん、イロイロありがとうございます。
>>714
どことどこを同じに書けばいいですか?
関数の宣言と関数の定義(実装部)ですか?

>>716
なるほど。
>#include "module.c"
としないなら、どうすればいいですか?
今、includeしないほうで考えています。
すると、対策2のようなエラーが出ます。

>>717
externは最初無かったんですが、
エラーが出ていたので追加しました。
externをついかすることで
main.cで直接呼び出している関数のエラーがなくなりました。
720貴闘力:2010/10/31(日) 23:34:26 ID:O1BJhJN/ BE:2324527294-2BP(0)
>>718
確かにソウかもしれません。
自分自身もcファイルを
インクルードっていうのはあまりやったこと無いんで、
よくわかってないんですが、
解説書にソウかいてあったので。。

解説書がCCSで、自分がPICCLITEなんで
その辺の違いにけっこう戸惑っています。

みなさんごめんなさい。
721774ワット発電中さん:2010/10/31(日) 23:59:37 ID:03PjmRbX
WDTENを間違えた表記で書き込んでしまい混乱を招いたようだ。今は反省している。
722774ワット発電中さん:2010/11/01(月) 00:01:03 ID:fkvpV9ka
>>720
>#include "module.c"
とするのは、その場所にmodule.cの内容をコピペするのと同じことだぞ。
includeが必要なのは関数のプロトタイプだけだろ。
723貴闘力:2010/11/01(月) 07:20:07 ID:N7E7/Lym BE:4132493388-2BP(0)
0. undefined symbols:
_func1(unit6.obj) _func2(unit6.obj) _func3(unit6.obj)

このエラーはどういったものでしょうか?
724774ワット発電中さん:2010/11/01(月) 19:47:18 ID:Xziz/Q4n
16F84Aの電源を1.5Vの乾電池3個直列で使用する予定のときに
乾電池がカラに近かったら動作させないというアルゴリズムを実現するのに
抵抗分圧で、デジタル入力がLと判断されたら、乾電池がカラに近いと判断する
という方法でいけますか?

725774ワット発電中さん:2010/11/01(月) 19:54:08 ID:3BculxZN
Brownout
726774ワット発電中さん:2010/11/01(月) 20:09:58 ID:Xziz/Q4n
ブラウンアウトリセット機能ってのがあるんですね。勉強になりました。
727774ワット発電中さん:2010/11/01(月) 20:34:50 ID:MV+jLzit
ブラウンアウトリセットは、16F84にはついていない。
ただし、ブラウンアウトリセットは消費電流値が多いので、乾電池駆動の場合には、
専用リセットICを使う場合もあります。
728774ワット発電中さん:2010/11/01(月) 21:28:44 ID:b9qg9O4C
PICについて勉強したいのですがお勧めの書籍などはありますか?
書店でいろいろ見てみたのですがどのようなものがいいのかいまいちわからりませんでした
あれば教えてください
729774ワット発電中さん:2010/11/01(月) 21:35:54 ID:zAt/HFs5
ウィーンブリッジ発振回路で遊んでるとこ
PIC何も関係ねえ
730774ワット発電中さん:2010/11/01(月) 21:50:40 ID:Qd60a8oX
>>713
Error [237] C:\PIC_project\test\lcd.h; 25. function "_lcd_out" redefined
...
はおそらく、main.cでもmodule.cでもlcd.hをインクルードしていたため、
#include "module.c"
した時点で、コンパイラが2重にlcd.hを読んだから多重定義エラー
になったんでしょう。
で,
>対策1
>#include "module.c"
>を消す
>対策2
>main.cに
>extern void func1(BYTE cmd);
>と追加しました(その他の関数も)。
ここまではよさそうです。一般的なお作法としては
module.cに含まれる関数のextern宣言をmodule.hなどの
ファイルに作って、それをインクルードするでしょうが、
別に直接書いてもよろしい。
で,
>Omniscient Code Generation not available in Lite mode (warning)
>0. undefined symbols:
>_func1(unit6.obj) _func2(unit6.obj) _func3(unit6.obj)
は、よくわかりませんが、おそらくmodule.cを開発環境側で
認識してなくて、コンパイル−リンクができていないのではないですか。
main.cと同じディレクトリに入れておくだけではだめだと思います。
方法は各開発環境に依存しますが、必要なファイルとして認識
されるようにしないといけないと思います。インポートとか表現している
環境が多いかな。

731774ワット発電中さん:2010/11/01(月) 21:53:48 ID:z2Sv/kUq
>>728
本屋で見て心にグッときた物が無かったのならこの世に君の求める本は無いよ
それがあるなら君は既にその本を買っている筈だからね
732774ワット発電中さん:2010/11/01(月) 22:31:13 ID:zAt/HFs5
そこらへんの本屋にぴったりの本がある方が希
ネットで情報を仕入れてamazonで買うのが確実
733774ワット発電中さん:2010/11/01(月) 22:40:29 ID:gBXUtA9q
>>732
それはある程度慣れてからだな。
734774ワット発電中さん:2010/11/01(月) 22:41:54 ID:vqega0Rd
arduinoがいいよ
735774ワット発電中さん:2010/11/01(月) 23:01:51 ID:KI4RE7xr
>>733
amazonで本買うのに慣れが要るのか
736774ワット発電中さん:2010/11/01(月) 23:10:05 ID:b9qg9O4C
とりあえずレビューでも見てみてそれから決めます
ありがとうございました
737774ワット発電中さん:2010/11/01(月) 23:10:23 ID:zAt/HFs5
少なくともターゲットが決まってないとどうしようもないけど
16よりも18とかでスタートした方が楽なのかな
738774ワット発電中さん:2010/11/02(火) 07:36:02 ID:+R2tGzB+
>>728
英文データシート
739774ワット発電中さん:2010/11/02(火) 21:28:41 ID:s1qDylvP
16F88で7セグで数字を数えるものを作っているのですが、
上限値を設定しようと思ってカウントアップのサブルーチンの直前に
上限値に達していたらなにもしないで戻る判定とGOTO KEYLOOPを書いてあるのですが、
これを入れると何故か3までしかカウントしなくて、0に戻ってしまいます。
0に戻るのは9の後か1からカウントダウンしたサブルーチンへ飛んだ時だけなはずなので
原因が分からずお手上げなのですが、なんとなくGOTOやCALLが変な動作になっている
気がするのですが、GOTOやCALLは何回でも使えるものではないでしょうか?
740774ワット発電中さん:2010/11/02(火) 21:36:55 ID:K/8w7KQp
>>735
本当の初心者じゃ、ネット情報では最適レベルの本を選べない、ということだろ。

>>739
データシートにスタックの深さの記述があるよ。
まさかCALLから帰るのにGOTO使ってるわけじゃないよね?
741774ワット発電中さん:2010/11/02(火) 21:48:16 ID:3Umusebc
>>739
WDTがタイムアウトしてたり
742774ワット発電中さん:2010/11/02(火) 21:58:18 ID:ay5mv38H
昔のベーシックの時代とかは入門書がたくさんあって
CALLにはRETURNで戻るというのは初歩的なことだったんだけどなー
後閑さんの本を見てもその辺は当然のこととして扱われていて
特に記述もない
というか、後閑さんが想定している読者というのが
マイコンでベーシックの時代を経験してきた人間なんだろうな
後から生まれてきて勉強しなきゃならない人は
覚えることが多いから大変だよ
743774ワット発電中さん:2010/11/02(火) 22:51:42 ID:B/ZvQ7Tl
>>742
> CALLにはRETURNで戻るというのは初歩的なことだったんだけどなー

トイレ使ったら水流すのと同じくらい、初歩的なことの気が駿河。

> 後から生まれてきて勉強しなきゃならない人は
> 覚えることが多いから大変だよ

その代わり、今じゃガラクタ以下のHDDさえ付いていない8bitパソコンに20万
とか30万払ったり、標準でOSにラインエディタしか付いてなくて、わざわざ
スクリーンエディタを買ったり、CDの書き込みさえできない、単品の標準速
(x1)CDROMドライブに5万円を払ったりしなくて良いではないか。

ボーナス出たら、20万30万払ってVHSのビデオデッキを買ったりとか。

さらに、開発ツール等も常時接続のブロードバンドネット経由で無料で手に
入る便利な世の中になったが、労働者の賃金は下がり、雇用もなくなったと。

何かを忘れる為に酒を買って酔っ払うこともできず、グリーやモバゲーでも
やって死ぬまで過ごすしかないな。
744774ワット発電中さん:2010/11/02(火) 22:55:48 ID:CoaeHO5H
既に国内の雇用すらなく成り、印度とかでシステム開発行われてる時代だしね。
今から勉強してpic覚えるって将来役に立つの?
745774ワット発電中さん:2010/11/02(火) 23:08:17 ID:s1qDylvP
レスありがとうございます。
WDTはOFFにしてあるので原因ではないようです。
あと、CALLはそこへ行き着くまで2箇所(チャタリング対策部分のwaitのcall)しか使っていなくて
2つともreturnで戻っているのでそれも原因ではないようです。

カウントアップのボタンを押すとチャタリング対策でもう一度確認して
間違いなければ、ボタンを離すのを待つループに入るのですが、
(ここにもチャタリングの再確認あり)
この2つのループの中にSHOW7SEGという7セグをダイナミック点灯させる
サブルーチンを呼び出しているのですが片方を消したら設定した上限値で止まりました。
ただそうするとボタン押下中に表示が消えてしまうのでその対策を考えなくてはならないのですが
キー入力待ちのループ中に無数にcallを使うというのはダメでしょうか?
8段階のcallが使えるという情報を見つけたのですが、一旦returnで戻ればループの中で何回もcallしても
8回を超えることはないですよね?
別の変数を用意してその内容に戻る位置の情報を記録して、全部gotoで飛んで
変数の内容を判断してgotoで戻るようにした方が良いのでしょうか?
746774ワット発電中さん:2010/11/02(火) 23:56:17 ID:LcYq5HR8
プログラムがわからないのでなんとも
747774ワット発電中さん:2010/11/03(水) 00:40:38 ID:hX3qiCxA
>>739
> 上限値を設定しようと思ってカウントアップのサブルーチンの直前に
> 上限値に達していたらなにもしないで戻る判定とGOTO KEYLOOPを書いてあるのですが、
> これを入れると何故か3までしかカウントしなくて、0に戻ってしまいます。

せめてこの部分のソース数行だけでも晒せば、誰か回答くれるかも。
748貴闘力:2010/11/03(水) 00:59:29 ID:I9VGnwce BE:774843034-2BP(0)
723です。
暫定の解決策はみつかりました。

[方法]
main.cといっしょにコンパイルしていた、
モジュールのCソースをソースリストからはずして、
ヘッダーファイルとして、保存します。
そのヘッダーファイルをmain.cから呼び出すとコンパイルを通すことが出来ました。
(正常に動作するかどうかは後々確認が必要)

ただ、この場合モジュールが多くなったりするとオッつきません。
そして何より雑く、整理がされていません。

なので、今後のためにも関数を実際に処理している部分はmain.cではなく、
モジュールのソースとして編集していきたいと思っていますl。

そこで、
PICC LITE を使って、複数のCソースをコンパイルでき、
それらの依存関係も設定できるような手段があれば教えて下さい。
749774ワット発電中さん:2010/11/03(水) 01:58:17 ID:ZTd6aIQo
>>748
だから、関数のプロトタイプだけmain.hとかmodule.hに移して必要な
ヘッダをincludeするってアドバイスされてなかったっけ。
Cの基本的な解説書とか教科書とか他人のソースを読むとかしたら?
750774ワット発電中さん:2010/11/03(水) 02:31:37 ID:EIcKI3Mw
PICの問題ではなくてC言語での分割コンパイルがわかってないんじゃどうにもならんわな
751貴闘力:2010/11/03(水) 03:15:04 ID:I9VGnwce BE:4067922997-2BP(0)
>>749
そうですね。
言われてました。
それを実行したのが748のつもりだったのですが。。。。
ちょっと違った感じですね。
すいません。

これでモジュール化したプロジェクトが作成できそうです。

ただ、cのなかにあるexternのプロトタイプ宣言をhに持っていくだけで
上手くいくのは何故でしょうか?
いままで、モジュール.cの中でextern宣言をしていたのに、
メイン.cでオブジェクト内の関数を参照することが出来ませんでした。

752貴闘力:2010/11/03(水) 03:17:43 ID:I9VGnwce BE:3615931687-2BP(0)
>>750
たしかに。。。。
そのとおりです。

分割コンパイルがわかってないので、
コンパイラ違いによる問題なのか、
Cの書き方の問題なのか自分ではなかなか判別に苦労しています。
753774ワット発電中さん:2010/11/03(水) 05:56:18 ID:tDIqHXmX
>>736
よほどの僻地でもない限り、図書館に数冊は該当する本がある。
外出できないNEETでもない限り、こっちのほうが楽だけどな。
754774ワット発電中さん:2010/11/03(水) 06:00:59 ID:9Xq3Prbd
>ただ、cのなかにあるexternのプロトタイプ宣言をhに持っていくだけで
>上手くいくのは何故でしょうか?

main.c側で
#include "module.h"
してれば、コンパイラがそのファイルを読むから。
ただmodule.cにプロトタイプ宣言を入れても
main.c側で読めと書いていなければコンパイラは
読みに行かない。#includeがあると
<ファイル名>だったらあらかじめシステムで規定された
インクルードファイルのあるフォルダを探しに行き、
"ファイル名"だったらコンパイル中のCプログラムファイル
と同じフォルダを探しに行く。
ググっただけの知識だけど、
PICCってのはImagecraft社の製品でたいていMPLABという
統合環境と組み合わせて使うのね?
ttp://www6.plala.or.jp/hide_kok/nannda/pic/pic.htm
のMPLAB導入編-MPLAB V6.40の設定編ってのを見ると、
プロジェクトウインドウのsource fileってとこを
右クリックしてメニューを出しAdd Filesってやれば…
という記述があるから、これで統合してやれば、コンパイラ
は、ああmakeって言われた時はこれらのファイルを
コンパイルすればいいのね、ってわかるから。

いままで、モジュール.cの中でextern宣言をしていたのに、
メイン.cでオブジェクト内の関数を参照することが出来ませんでした。

755774ワット発電中さん:2010/11/03(水) 06:13:36 ID:9Xq3Prbd
>>728 >>736
おすすめの本は、という質問だから、みんなに本の名前を
ずらずらっと出してもらって、名前が出た奴から見ていこうか、
って作戦だったんだろうね。本大杉だから。
みなさんも後閑さんのサイト見たり本をいろいろ眺めたり
苦労しているから、この1冊でおけ、ってのはないんじゃないの?

教科書参考書に苦労したくなければ、マイナーなCPU選べばいいんだよ。
サンプルも少なくてごっつ苦労しますけど^^;
#無責任ホビイスト発言
上司から3日でPICのプロになってね、とか命令
されたら、うーん、私だったらデータシートやテクニカルリファレンス
マニュアルの類はまずダウンロードしといて、
なんか適当なPICの学習キット買って(秋月の新居浜高専の学習キットとか)
あとは後閑さんの本かしらね。やるべき仕事が決まってるなら
そっちの作例を先に探して、CPUが何かは後付けで考えるだろうし。
756774ワット発電中さん:2010/11/03(水) 07:43:20 ID:k0RxAF00
PIC本を買ったことはないなぁ。
ユニバーサルプログラマは持ってるから、デバイスだけ買ってきて
あとはデータシート眺めただけ。
どうせたいした物じゃないからと、プログラムはハンドアセンブル。
スイッチの読み込みとLEDの点滅はすぐできたから、
PIC2個でADB<=>PS/2変換(PIC2個連携動作させたっけな)作るまで
一週間程度だったかな。
757774ワット発電中さん:2010/11/03(水) 08:15:12 ID:kmIennOs
C言語の入門サイトをいくつか調べてみたが、
分割コンパイルを取り上げているところは少ないな

苦しんで覚えるC言語
http://9cguide.appspot.com/

20.複数のソースファイル
 1.最小限の分割 http://9cguide.appspot.com/20-01.html
 2.分割の定石  http://9cguide.appspot.com/20-02.html


C言語入門講座
http://c-production.com/contents/c/

9.プリプロセッサとメイクファイル
 9-3. ヘッダーファイル http://c-production.com/contents/c/sec09.html#03
 9-4. 分割コンパイル  http://c-production.com/contents/c/sec09.html#04
758774ワット発電中さん:2010/11/03(水) 10:42:32 ID:g4QK1CK0
VB厨は何をやってもだめだな
759774ワット発電中さん:2010/11/03(水) 10:58:30 ID:rMLfeGJa
>>756
見たかも。2個のPICのセラロック周波数が違ってなかったっけ。
760774ワット発電中さん:2010/11/03(水) 13:19:16 ID:i4gxDqX7
>>748
>ただ、この場合モジュールが多くなったりするとオッつきません。
>そして何より雑く、整理がされていません。

何故そう感じたのか説明してくれ。
761739:2010/11/03(水) 14:07:49 ID:dSrlkKSl
>>746-747
7セグのパターンを取得するサブルーチンのところでPCLの内容をいじって
いる部分があったので、それ(RETLW)をやめて別のレジスタを使って内容を判断し
個別にwレジスタに設定して戻るようにしたら正常に動きました。
あまり理解できていないので、質問するにしてもどこの部分を抜き出せば良いかわからず
文章だけの質問になってしまいましたが今度からはコードを使って質問するように心がけます。
レスありがとうございました
762774ワット発電中さん:2010/11/03(水) 18:41:40 ID:BK1bQh4h
>>761
PCLの演算結果が1byteを超えてないですか?
763774ワット発電中さん:2010/11/05(金) 14:50:41 ID:gFx7TKfE
昔あった初心者スレが電気板にも機械板にも見当たらなかったのでこちらで失礼します
趣味でPIC18F2550とC18の勉強をしています

・なぜ割り込みだと時間が正確なのか?
delay()関数でも命令回数分delayしているはずなのに5分で数秒のずれが生じる
printとかその他の処理ステップのせいかと思って、割り込み文の中に
色々条件分岐やprint文などを詰め込んでみたのですが、割り込みは正確でした
>どんな処理をしてようが、常にタイマーレジストリは動いているため?

・LATの存在意義
>イメージとしてはバケツの中身を出して確認するんじゃなくて、上からのぞく感じ?
>if(port*)で見れば良いのでは?高速処理の時に威力を発揮するとあるが…

・AD変換
簡易電圧テスターを作ったのですが、数字がふらついたり、0x00or0xFFだけになる
計測端子になにも接続していなくても数字が揺れる
リファレンス電圧がUSBだからか、と考え、参照電圧を外部(AN2,3)に設定し
ACアダプタ5vをつなげてみたが変わらず
ふと思い立って、(ttp://www.ggtmagic.com/electric/05zero.voltage.shtm
10kΩの抵抗を、計測対象乾電池の両極と計測端子の間にいれてみたところ無事計測できた
>いわゆるプルアップ?orプルダウン?なぜこの抵抗がないとおかしな値が出力されるのか
また、
ttp://www.ys-labo.com/pic/pic%20chips/pic%20chips%20contets/061001%20Internal%20ADconverter.html#C18 18F4550
このページだと端子が1カ所しか無いのに計測が出来ているのはなぜか
>片方の端子をGNDにつなげている?(+と−をつなげて計らないと電圧は測れないという理解)

最後のはPICというよりは電気の部分かもしれませんが、宜しくお願いします。
764774ワット発電中さん:2010/11/05(金) 22:51:38 ID:ZKb9Ce0I
その引用記号は何なの。
765774ワット発電中さん:2010/11/05(金) 23:04:15 ID:57O/q2gM
たまに書き込みが全部引用の人とかいるな
766763:2010/11/06(土) 00:04:52 ID:jzWifaTA
レス遅れてすいません
引用記号とは>のことでしょうか
その部分は自分なりに考えてみたのですが
なにぶん素人で自信がないため、間違っていたら指摘していただきたいと思った点です
最後のは考えたのですが理由が分かりませんでした
767774ワット発電中さん:2010/11/06(土) 00:25:53 ID:q765Zd3x
そこで引用記号とは何かを自分で調べて欲しかったな。
調べる習慣が身についておらず、人に聞く習慣はあるとは。
768774ワット発電中さん:2010/11/06(土) 00:52:20 ID:LnDqPfvv
>>763
全般的に言えることだけど、君の回路やプログラムだけで成り立つ
問題をあたかもPICをつかった回路一般の問題のように書くのは
どうなんだ。

> ・なぜ割り込みだと時間が正確なのか?
割り込みを使うほうが正確な時間を作るのが簡単なのは同意するが、
割り込みを使わずに正確な時間を作ることもできるし、逆に割り込みを
使ってるのに不正確な時間になってしまうミスをすることもある。

> ・LATの存在意義
LATは書き込んだ値を保存しているレジスタ。
PORTは出力端子の状態を読み出せるレジスタ。
全然別物じゃないか?

> ・AD変換
前半は何を言ってるのかさっぱり分からないが、
> >片方の端子をGNDにつなげている?
多分ここだけはあってる。
769763:2010/11/06(土) 01:33:10 ID:jzWifaTA
>>768
読み直してみて相当聞き方が悪いと認識しました
すいません
ですが、1点目と2点目の質問は割とこんなこと気にしても何にもならない、って一蹴される類の質問ではあるかもしれませんw
すいません

1点目は、割り込みの利点とは何か、です
正確な一定間隔で処理が出来る、というのは目にしたのですが
ご指摘の通り、他のやり方でも実現できるとのことなので
(いくつかの本やサイトではコンパイラを使うとステップ計算が面倒とありました)
利点としては手軽に使える、という理解でいいのでしょうか?
2点目はLATの役割とは何か、です
お答えいただいたのですがまだ理解出来ていません
例えばPORTAを全てDigitalInputとし、何らかのスイッチと接続してあるとして
スイッチの状態を知るためにPORTAbits.RA1をみるのと
LATA.RA1を見るのとでは違うのでしょうか

3点目は電圧計測の基本的な理解は大丈夫なようですので安心しました
どうもありがとうございます
プルアップ、プルダウンについてはもう少し勉強してきます
770774ワット発電中さん:2010/11/06(土) 01:44:47 ID:DGxAMUU7
>>763
>・なぜ割り込みだと時間が正確なのか?
割り込みというよりタイマに与えられたクロックが正確だからでしょう。
タイマは与えられたクロックを正確に数えるのが仕事です。

>delay()関数でも命令回数分delayしているはずなのに5分で数秒のずれが生じる
命令の数で時間を計っているのですから、
delay()関数以外の命令や割り込みでの命令も数の内ですよ。
delay()関数は、大きくても秒単位程度の「おおよそ」の遅延を作るためのものです。
時間を計るものではありません。

>・LATの存在意義
ポートが出力になっている場合には、書き込んでからポート端子の状態がその通りになるまでに、
わずかですが時間がかかります。
PORTでは、読み込み時にポート端子の状態を使うので、
書き込んですぐに読み込むと間違った内容を読み取ることがありえるのです。
ポート端子につながった回路によっては、それさえ保証できない可能性もあります。
つまり、PORTは、メモリと同じに考えることができません。
ビット操作命令では、全ビットを読み取り1ビットを変更して全ビットを書き込みます。
正確な読み込みができなければ、正確な書き込みもできません。
入力と出力を切り替える使い方をする場合にも、このことは問題になります。
それを避けるなら、別にメモリを用意して、そこで操作し、ポートへ書き込むことになります。
LATは、メモリと同じと考えてよいので簡単になります。

>・AD変換
AN端子は、GNDからVDDの範囲内で、GNDからの電圧が基準になります。
VREFは、それを補助するためのものです。
771774ワット発電中さん:2010/11/06(土) 02:02:40 ID:LnDqPfvv
>>769
> 1点目は、割り込みの利点とは何か、です
どっちが楽か(あるいは、どちらでないと実現できないか)も、究極的には
ケースバイケースだろう。
ただ、割り込みの方が考えなければいけないことが少ない場合は多いと
思う。

> 2点目はLATの役割とは何か、です
「違わない」が答えだったと思うけど、あんまり自信ないな。

LATが必要になるのは、出力のとき。
例えば、出力端子をGNDに短絡してしまったら"H"を出力しても実際の
端子電圧は"L"になっちゃうでしょ。
こういう時LATをよむと"H"となりPORTを読むと"L"になる。
772774ワット発電中さん:2010/11/06(土) 02:10:31 ID:VKEQtmGx
>>763
>・なぜ割り込みだと時間が正確なのか?
delay()関数はそれだけ廻すなら、それなりに正確だけど
割込みを含め他の処理が入ると、その分遅れる。
タイマー割込みでも、(他の)割込み処理に時間取られると
ズレが生じる場合もある。

>・LATの存在意義
LATxは出力ラッチ限定のread/writeレジスタ。
PORTxはI/Oピンのread/writeレジスタ。
write(出力)時はどちらも出力ラッチへの書き込みだけど・・・(ry

>・AD変換
PIC18系ADC入力の信号源インピーダンスは2.5kΩ以下推奨な。
入力オープンはダメ
773763:2010/11/06(土) 02:14:05 ID:jzWifaTA
度々すいません、2点目は、とこんなこと気にしてもryどころか
理解不足による勘違い、だとおもいます
そしてこんな時間なのにありがとうございます
>>770
メモリでのたとえ、何となく腑に落ちました
>>771
例えば〜、以下の説明でかなり、なるほど!と納得しました

PORTでのチェックは>>読み込み時にポート端子の状態、をチェックするが
ポート端子の状態は物理的制約や環境に左右されるので
今出力している状態ではなく、出力させようとしている状態、を
チェックしたいときはLATという理解でよろしいでしょうか
774774ワット発電中さん:2010/11/06(土) 02:42:03 ID:LnDqPfvv
>>773
> 〜という理解でよろしいでしょうか
PIC18シリーズ(以降)を使う限りは、その理解でいいと思う。

LATの無かったPIC16以前のシリーズでは、BSF/BCFがリードモディファイライト
であるという仕様とあいまって誤動作の原因に・・・と、年寄りの愚痴はこの辺に。
775774ワット発電中さん:2010/11/06(土) 08:19:37 ID:PKhX6ABn
割り込みだと正確になるんじゃなくて、
タイマーをフリーランにしてイベントを発生させようとすると、
割り込みを使うのが素直な実装というだけ
逐次タイマーを読んでも、多分同じくらい正確にはなる
776774ワット発電中さん:2010/11/06(土) 09:00:50 ID:onkeHoXX
>>763
割り込みが正確という表現はちと違う。
専用のタイマーが現在進行中の処理とは関係なく定期的にカウントアップして、タイムアウトで要求を
かけることが重要化と。かつ、タイムアウトしても引き続きカウントアップを継続。
割り込みを使ったからといってメイン処理(割り込み処理じゃないほう)で割り込み禁止していれば結局
はタイミングは相対的にずれる。けど累積は抑止される(2倍の周期未満で処理してね)。
たまにタイマー0でカウンタの時間を再調整しているプログラムを見かけるけど、メイン処理側で割り込み
禁止されたら周期はずれてしまう。フリーラン、もしくはタイマー2を使うほうがベター。
まぁ割り込み処理にこだわらず、割り込み要求フラグを見ればすむような構成なら割り込み処理という
構成は不要だけどね。ただし、フリーランでの運用を進める。
数マイクロ秒の待機だったら迷わずdelay関数を使うけどね。。
777774ワット発電中さん:2010/11/06(土) 09:09:56 ID:onkeHoXX
誤:進める、正:薦める
誤:使うけどね(最終行)、正:割り込み禁止状態(状況により)で使うけどね
orz
778774ワット発電中さん:2010/11/06(土) 09:15:10 ID:msKWqara
orz=3
779774ワット発電中さん:2010/11/06(土) 11:15:13 ID:lZBsL1iI


И
||
ω
780774ワット発電中さん:2010/11/06(土) 14:31:38 ID:40rbh2ov
ようするに
>割り込み文の中に
色々条件分岐やprint文などを詰めここ留意な。
次にたとえ処理の何処そこへ戻ろうともオーバーフロウすれば
インターラプトは等間隔になるであろう。もちろん発生と実行は、同時ではないのだし
内容の精査は必要だ。
781763:2010/11/07(日) 10:35:23 ID:dvw4kI2g
>>772,776,780
使途によって使い分けが重要ということですね
>>現在進行中の処理とは関係なく定期的にカウントアップして、タイムアウトで要求
という理解をしましたが、そのほかにも留意すべき点がある、ということを
記憶しておきます

>>774
ありがとうございました
回路を色々いじったり、プログラムを走らせてみて
ようやくLATが有るからこそ実現出来る状況を再現できました

小っ恥ずかしくなるくらい分かりづらい質問にもかかわらず
丁寧な回答して下さった皆様
どうもありがとうございましたm(__)m
782774ワット発電中さん:2010/11/08(月) 12:12:08 ID:PSnQCAtm
MacOs10.4上でGPASMを使ってPIC18f2420のプログラムを昨日してみました。
movff tablat,myval
てな具合でテーブルリード後にtablatを自分の変数myvalにコピーしようとしたら、うまく出来ないんです。
movf tablat,w
movwf myval
だとちゃんと動くみたいです。ググッてみたらSFRの一部にmovffがうまく働かないとの情報もあったのですがホント?
783774ワット発電中さん:2010/11/08(月) 17:22:43 ID:R2NvZ79i
PIC24に対してC言語で勉強しています.
RB12-15にHEXスイッチでスイッチ入力する時,
スイッチの状態をコード化するときに,
unsigned int SWS

SWS=(~(PORTB>>12)&0x000F);
としてこの後 switch caseで条件判別をしているのですが,
case 0〜8で条件分岐しています.
SWS=の部分の内容が分かりません.
PORTBのレジスタを12bitシフトして bit0〜3の論理積をして否定ですか?
何故このようにしているのか分かりません.
基礎的なことで申し訳ないのですが,誰か教えてくれませんか
784774ワット発電中さん:2010/11/08(月) 17:28:25 ID:ksAEG6Ct
>>783
引用元は?
使ってる部品とどういうコード書きたいかで変わってくるからそれだけ示されても分からん
785774ワット発電中さん:2010/11/08(月) 17:49:21 ID:R2NvZ79i
>>784
PIC24F活用ガイドブックを参考にしています.
PIC24FJ64GB002で,基本ですので,特にまだ部品を含めて考えておりません.
電源を供給して,ヘキサスイッチをつなげてモードをいくつか設定して,出力でパルスを出すことを目指しています.
RB12-15にヘキサスイッチをつなげてそのスイッチ状態を読み込んで,
パルス幅を変化させたいと思っています.他は何もありません.
そのヘキサスイッチの状態を整数に読み込んでcase文で判定している部分の
最初がわかりません.
786774ワット発電中さん:2010/11/08(月) 18:03:15 ID:tTflX2XX
785です.
bit12-15がRB12-15でそれを0-3bitに移動して,000Fとかけると思うのですが,
なぜ~を付けているのでしょうか?
787774ワット発電中さん:2010/11/08(月) 18:24:46 ID:4MtSREyk
プルアップしてて負論理になってるから反転してるんでしょ
自分でスイッチがONの時、ここが1でここが0でって計算してみればすぐわかるのに
788774ワット発電中さん:2010/11/08(月) 18:40:29 ID:tTflX2XX
>>787
ありがとうございました.
計算していましたが,ちょうど逆になりなやんでいました.
負論理なことを忘れてました.
789774ワット発電中さん:2010/11/09(火) 20:07:43 ID:nP+93ZyU
教えてください。

現在、PIC16F648Aでプログラム作成しています。
内部クロック(4MHz)を用いて、タイマ割り込みを作成しました。
100usecのタイマを作ったつもりなのですが、120usecくらいにずれてしまいます。

タイマー0モジュールを使用しています。
4MHzなので、1クロックは0.25usec。
カウント数=インターバル時間 / (CPUクロック×4) なので、
カウント数=100usec / (0.25usec×4) = 100 ですので、
プリスケーラは1、TMR0を156(0x9C)と設定しました。
割り込みの中でTMR0を再設定し、出力ビットをトグル出力するだけのプログラムを作成しました。

計算はあってると思うのですが、間違っていますか?
また、合っている場合は何かズレる原因はありますか?
ちなみにCCSのCコンパイラを使用しています。

初歩的な質問ですいませんが、どなたか教えて頂ければ幸いです。
よろしくお願い致します。
790774ワット発電中さん:2010/11/09(火) 20:20:11 ID:GLgZvssh
>789

それは、タイマ割り込み発生から、TMR0に156(=256-100)を設定するまで、
20usecかかっているからじゃないの?
791774ワット発電中さん:2010/11/09(火) 21:12:36 ID:3NVjW49X
>>789
SIMのStopWatchで割込み周期を確認・調整
792774ワット発電中さん:2010/11/09(火) 21:53:38 ID:vl48qrb9
>>789
内部4MHzだから20us=5サイクルか。タイマ再設定のぶんかな。
793774ワット発電中さん:2010/11/09(火) 21:58:42 ID:o6sJoph+
4MHzの1サイクルは1usだよ
794774ワット発電中さん:2010/11/09(火) 23:04:14 ID:/9zXAh1A
MOVLW B'00000010'
MOVWF CNT1

という内容のレジスタを
RLF CNT1,1
とやると内容が 00000101 になるのですが、
00000100 になるはずだと思うのですが、どうしてでしょうか?
その後に RLF CNT1,1 を何度も実行すると
101が左へシフトしてそれは期待通りなのですが、
最初だけはなぜ最下位に1が付いてしまうのでしょうか?
795774ワット発電中さん:2010/11/09(火) 23:16:43 ID:/9zXAh1A
すみません。
BCF STATUS,C
で解決しました。
796774ワット発電中さん:2010/11/09(火) 23:17:36 ID:JQfF6FBg
STATUS,Cが 1 なんだろ

BCF STATUS,C
基本じゃないのか?
797774ワット発電中さん:2010/11/09(火) 23:21:57 ID:3xXTGp9d
ICSP接続方法の解説について、PIC16F819にはVSS,AVSS,VDD,AVDDに接続と書いてあるがAD変換回路内蔵ということで理解したらOK?ピン配列をどう見てもAVSS,AVDDが見当たらないので・・・
798774ワット発電中さん:2010/11/09(火) 23:34:38 ID:3NVjW49X
RLF(/RRF)はキャリを含むローテート(巡回シフト)命令だから。
先に一度 bcf status,C とか Cフラグ クリア しとけばok
799789:2010/11/09(火) 23:37:40 ID:r5wN29Pt
皆様、ご回答ありがとうございます。

>790
>792
割り込みの中身は再設定とトグル出力しか行ってないのですが、
再設定に20usかかっているということでしょうか。
set_timer0(156)で20usかかってしまうということでしょうか。

ちなみに、同じように1msのタイマーを作成してみたのですが、
これも最初はあっているように見えるのですが、徐々にずれていきます。
これも設定時間が数十usかかっていて、徐々にずれてきているということでしょうか。

内部クロックの4MHzでは限界ということですか?

>791
SIMはその場でシミュレーションできるんですね。
初めて知りました。
確かめてみたいと思います。ありがとうございます。

>793
4クロックで1サイクルということですか。
ありがとうございます。
800774ワット発電中さん:2010/11/09(火) 23:40:50 ID:LPti4h6T
イミフだぞ
801774ワット発電中さん:2010/11/09(火) 23:45:21 ID:3NVjW49X
>>797
PIC16F819には無いが、dsPICとかPIC18F6xxxや8xxxなどにはあるから
ICSP時は繋げと・・・
802774ワット発電中さん:2010/11/09(火) 23:52:13 ID:3xXTGp9d
>>801
なんとなく理解できました、ありがとう
803774ワット発電中さん:2010/11/10(水) 00:50:49 ID:1UR9j2FW
>>796
>>798
ありがとん
804774ワット発電中さん:2010/11/10(水) 03:28:14 ID:HTHgNWuO
>>799
>内部クロックの4MHzでは限界ということですか?
クロックの問題ではなく、割り込み処理の中でTMR0を再設定して
いるのがずれる原因です。
そこで、タイマの再設定をしなくてすむようにTMR2とPR2を使えば
ずれはなくなります。
805774ワット発電中さん:2010/11/10(水) 07:54:51 ID:IH0BZd2o
>>804
TMR0の再設定の直前でブレークしてその時のTMR0を読んで見るとよろしい。
806799:2010/11/10(水) 10:06:17 ID:Zi6vyG+Y
>804
ありがとうございます。
今回はタイマがうまくいかなかったので、テストとしてタイマ0のみ使用していますが、
実はPWMも使用したいと考えていますので、TMR2は使用できないです。
普段はコンペアマッチタイマを使用しているんですが、
今回は使用できなかったので、タイマ0を使用してみてたという次第です。

>791
SIMって簡単にテストできるんですね。
初めて知りました。ハードがないとデバッグできないものだと思ってました。
これから活用していきたいと思います。
ありがとうございます。

>790
>792
>805
タイマの設定前の値を確認したところ、32カウントしていることがわかりました。
したがって、カウント100回のつもりが132回分カウントしており、
132usくらいの割り込みになっていることになります。
これでつじつまが合いました。ありがとうございます。
割り込みの外でうまく設定できるかやってみたいと思います。

ちなみに、、、
この32カウントを見越して、カウンタを68に設定したら
100usタイマになると思うんですが、これは理論的にどうなのでしょうか。。。
807774ワット発電中さん:2010/11/10(水) 10:27:38 ID:1UR9j2FW
起動時の状態の為の情報をEEPROMに書き込もうと思うのですが、
理想なら電源を切るという指令を出したら書き込んで終了という形にしたいのですが、
実際は電源を落とすだけということになるので、変更した都度書き込むという感じになりそうなのですが、
こういうのは書き変え上限回数の点からまずいでしょうか?
タイマーで一定時間とか電源を切る際に電圧が落ち始めたらとか・・・
どんなのが普通でしょうか?
808774ワット発電中さん:2010/11/10(水) 10:31:29 ID:w+bzKRy0
>>806
TMR0 = -100; の代わりに TMR0 -= 100; とすれば改善できる。

ccs-cの標準関数では set_timer0(get_timer0()-100);
または
#byte TMR0 = 0x01 などと定義した上で割込処理の再セット
TMR0 -= 100;
809774ワット発電中さん:2010/11/10(水) 11:20:41 ID:waUdqr1U
>>807
何の制御か分からないので何ともいえないが、人間が操作してるなら
変化してもすぐに書き込まないでおいて、一定時間変化しなかったら
書き込むとか工夫して極力書き込み回数は減らした方がいいだろね。
810774ワット発電中さん:2010/11/10(水) 12:47:47 ID:8sNYcptS
>>807
EEPROMの書込は、結構難しいと思う。
電源off入力〜完全断の間に書き込んでしまうのが一番だと思う。
1. 電源on中に書き込む場合
  EEPROMのデータを、A, Bの2組持ち、最新情報はAかBかの区別も記憶。
  Aに書き込んで、検査してOKなら、最新はB→Aとする。
  次はBに書き込んで、検査してOKなら、最新はA→Bとする。
  Bに書込中に問題があっても、Aにあるからデータは死なない。最新はAのままで。
2.電源off後に頑張る方法
  電源SWをFETなどに変更し、ソフトウェアSWにすれば、
  時間が稼げるので何でもあり。
811774ワット発電中さん:2010/11/10(水) 13:18:52 ID:uURWejUW
メインの電源がPIC部の倍以上あるなら、キャパシタ挟んで時間をかせぎ、落ちてくる電圧を検知、トリガーにしてEEPに書く
データ量次第だが、5V以下(かDC-DCなどの限界電圧)になるよりまえに書き終わればいい
812774ワット発電中さん:2010/11/10(水) 13:51:28 ID:EUfVOjX9
シリアルFRAMでもつけとけ。
813774ワット発電中さん:2010/11/10(水) 19:11:48 ID:z+BXSs5n
>>807
それは昔俺も悩んだ。
2秒以上情報に変化がなければ記録するようにして、極力書き換え回数を減らした。
操作して2秒以内に電源を落とした場合に、記録できなくても問題ない用途にしか使えないけど。
814774ワット発電中さん:2010/11/10(水) 21:01:28 ID:HTHgNWuO
>>807
データや起動条件等によっては、以下のような方法でEEPROMの寿命を
伸ばすもことが出来るかも知れません。
・EEPROMに空きがあるのなら、同じ場所に書き込まないで
書き込み場所を毎回変える。
・データがたまに一部しか変化しないのなら、書き込む前にEEPROMの
値と比較して変化した部分だけ書き換える。
・EEPROMに書き込まないで、電源が切れた時はSleepし、バックアップ
電源でRAM上のデータを保持する。

>>808
100の減算だとTMR0の書き換えの遅れ分が足りないですよね?
それとプリスケーラを使う場合には、タイマの再設定で
プリスケーラがクリアされるので、その分のずれが累積します。
815774ワット発電中さん:2010/11/10(水) 22:24:18 ID:pQzpqFFs
保存する情報は人間が設定した内容なんでしょ
設定した時に保存すればいいような
信号の入力が状態が頻繁に変わるのならば、
そもそも保存する意味がない
816774ワット発電中さん:2010/11/10(水) 22:34:36 ID:HC1lK1a7
>・EEPROMに空きがあるのなら、同じ場所に書き込まないで
>書き込み場所を毎回変える。

それって・・・・・・何処に書いたかの情報を
決まった場所に保存する必要あるんじゃね?
817774ワット発電中さん:2010/11/10(水) 23:17:35 ID:PRHElAwH
書き込み場所を毎回変える・・・場所全部のサム値が
保存する値になるようにすれば
何処に書いたかの情報はいらないよ。
818774ワット発電中さん:2010/11/10(水) 23:18:48 ID:+fyrb8oG
それが拙いと思ったら、回避する方法を考えろよw
読む分には回数制限はないんだ。
819774ワット発電中さん:2010/11/10(水) 23:36:36 ID:lDzMdFEK
保存するデータが少ないなら、アドレスが一巡すると同じ場所に戻ってくるようにデータ長決めてしておいて
一番最後に数字を数バイト書いて、書き込む度に+1していれば、その時点で一番大きな数字か
間がアドレス1巡以上の値で飛んでいる場所を探せばいいな…
820774ワット発電中さん:2010/11/11(木) 02:38:36 ID:vk4AVF0W
>>817
サム値としてデータを保存するのですか?
次に書き換えるEEPROMのアドレスもサム値に入れるのでしょうか?

>>819
>アドレスが一巡すると同じ場所に戻ってくるようにデータ長決めてしておいて
と言うよりも、普通はデータ長が決まっているはずなので、EEPROMにあわせて
データ長×n個分の書き込み領域を用意する事になると思います。
最後に書いたデータの判別は仰る通り、データの最後にカウンタを持たせて
書き込み番号としますが、nが256未満なら1byteで十分です。
821774ワット発電中さん:2010/11/11(木) 04:21:08 ID:DLGu7gL8
ページ書き込みで高速で書いたと思っても、書き込み後の5ms以上待ちが面倒だよね。

いろんな意見が出ましたが、この中でプロの人いますか?
プロはどのようにするか、知りたいな。
822774ワット発電中さん:2010/11/11(木) 07:31:51 ID:d/adNgLw
プロは仕様がはっきりしていないものには明確な答えを出さないものです。
823774ワット発電中さん:2010/11/11(木) 07:35:40 ID:ExUpPIAW
>821

昔検討したことがある。
そのときは電池駆動が前提だったので、
・PICは常に通電状態、ただし電源OFFのときはsleep状態
・電源SW ON はポートのステータス変化で sleep mode を抜ける
・データは基本的にRAMに保存、電源OFF操作時にEEPROMに
 保存後、sleepに入る
という風にした。なお、PIC以外周辺機器への電源供給はoff時にはカット。
(この機能はもともと省電力対策で必須だった)

sleepに入る前にEEPROMに保存するのは、電池交換対策。
キャパシタを追加する案は、ハードウェア的に不利
(部品点数および実装面積の増大)で不採用
こんな感じだった。
824774ワット発電中さん:2010/11/11(木) 12:43:41 ID:CZpkyjXO
>>820
 >次に書き換えるEEPROMのアドレスもサム値に入れるのでしょうか?
乱数でも発生させてお好きなアドレスに書き込めばOK
825774ワット発電中さん:2010/11/11(木) 17:42:17 ID:L26gaHlM
F社のFRAM内蔵なマイコンにでもすりゃあ、全部簡単に解決なんだけどね。

826774ワット発電中さん:2010/11/11(木) 17:52:53 ID:g3W7DwOl
毎回1バイトづつずらして、数値の頭に3バイトくらい使ってキーになる数値を書き込み
次回読み込みの時先頭からキーを探す方式で、毎回違う所に書き込めるんじゃないか
827774ワット発電中さん:2010/11/11(木) 18:27:50 ID:uCPYg5kg
PIC単体なら大きなキャパシタ付けなくても、
EEPROM書き込み終わるまでぐらいは動作出来るんじゃない?
828774ワット発電中さん:2010/11/11(木) 18:32:56 ID:9FGWmMW+
>>827
EEPとPICだけ独立させればね
829774ワット発電中さん:2010/11/11(木) 18:34:37 ID:00ojNUl+
>>826
毎回、前回のキーを消さなきゃ遺憾じゃないか?
830774ワット発電中さん:2010/11/11(木) 18:59:40 ID:g3W7DwOl
消したらいいんじゃないか
831774ワット発電中さん:2010/11/11(木) 19:42:22 ID:YYT6LYlu


なんやかんや言っても、結局プロでもなんでも>>822が結論だと思うんだが。
質問主は聞き捨て書き捨てのようだから、議論は発散して終了。

832774ワット発電中さん:2010/11/11(木) 20:00:52 ID:kBVf97Wm
マイコン初心者です。
質問よろしいでしょうか。
とりあえず,サンプルプログラムをコンパイルしてみようと思いSDCCとgputilsを使用してコンパイルを試みたのですが,
次のようなエラーが出るのはどうしてなのですか??
test5.c:36: error 20: Undefined identifier 'PORTA'
test5.c:31: error 20: Undefined identifier 'PORTB'
test5.c:28: error 20: Undefined identifier 'TRISB'
test5.c:27: error 20: Undefined identifier 'TRISA'
test5.c:25: error 20: Undefined identifier 'ANSEL'
833774ワット発電中さん:2010/11/11(木) 20:32:17 ID:nlsOxeGE
そろそろ、太陽電池一枚+単三充電池一本でPICなりAVRなりマイコンを
動作さす電源系の回路つくってください〜。



834774ワット発電中さん:2010/11/11(木) 20:39:26 ID:W0IA4E+x
>>832
includeファイルを読み込んでないのでは?
835774ワット発電中さん:2010/11/11(木) 21:00:27 ID:kBVf97Wm
>>834さん
解決いたしました。
的確な指摘ありがとうございました。
836774ワット発電中さん:2010/11/11(木) 21:37:38 ID:kBVf97Wm
度々すみません。
プログラムについてのエラーは消えたのですが,次は
can't find pic14devices.txt
'16f84a'was not found
can't find pic14devices.txt
can't find pic14devices.txt
といったメッセージが出ます。
pic14devicesも同じフォルダ内にあるのですが,どうしてこのようなメッセージが
でるのでしょうか??
簡単な質問で申し訳ないです。
837なぜ陰謀厨召喚したいし:2010/11/11(木) 21:42:19 ID:Mt+f7Gzf
>>831ええ。

文字列を生成し、素数を利用した謎技術がPICにどう使えるのだか伺えるまであきらめませんとも

>とりあえず,サンプルプログラムをコンパイルよい心掛けと思ふ
もはや板には煽るだけな人も居ないがより見習って欲しい。
838774ワット発電中さん:2010/11/11(木) 22:02:17 ID:Mt+f7Gzf
>>836
チップの選定でなにか間違えているんではないか?
個人的にはMPLABをお勧める。
839774ワット発電中さん:2010/11/11(木) 22:11:46 ID:d/adNgLw
>>836
16F84Aを使いたいのなら pic14devices.txt じゃなくて pic16devices.txt を使うべきなんじゃないか?
840774ワット発電中さん:2010/11/11(木) 22:13:23 ID:d/adNgLw
>>836
あと、インクルードファイルを置く指定された場所があるんじゃないか?
841774ワット発電中さん:2010/11/11(木) 22:14:55 ID:Mt+f7Gzf
すまんそれかインストール直後は
Deviceセレクトが、数字の低いファミリから並べられてるとかありがち
842774ワット発電中さん:2010/11/11(木) 22:22:54 ID:sUvpE5pI
mikroC いいよ らくちん
843774ワット発電中さん:2010/11/11(木) 23:21:12 ID:kBVf97Wm
>>839さん
16F84Aは14ビットなので,pic14devices.txt を使うのだと思います。
いろいろやってみましたがまだ同じメッセージが出てしまいます。
844774ワット発電中さん:2010/11/11(木) 23:21:58 ID:kBVf97Wm
>>839さん
16F84Aは14ビットなので,pic14devices.txt を使うのだと思います。
いろいろやってみましたがまだ同じメッセージが出てしまいます。
845774ワット発電中さん:2010/11/11(木) 23:38:44 ID:/CTRjjU0
PIC16Fxxxを使うことになりました。
ROMサイズがカツカツですが、値段の関係上がんばるしかありません。
現在、CコンパイラにHi-tech-PRO (45日試用版)を使っていますが、
より強力な最適化をもつコンパイラはありますか?
コンパイラの価格は少々高くても構いません。
846774ワット発電中さん:2010/11/12(金) 00:20:51 ID:tRjsrRPC
>>842

mikroCのIDEって、シミュレータでソースおよびマシン語レベルのデバッグが
簡単に出来ますか?
特に割り込み関係の模擬とかが効率良く出来るのなら使いたいのですが
847774ワット発電中さん:2010/11/12(金) 00:31:01 ID:/sWQeid6
出来る。問題ない
848774ワット発電中さん:2010/11/12(金) 13:47:56 ID:J2zszWp/
>>845
人間コンパイラ。
アセンブラを直接吐き出す。
お前さんの給料よりも何倍か必要だけど10倍早くてコンパクトなコードが生成される。
849774ワット発電中さん:2010/11/12(金) 20:05:14 ID:BYr0qfs8
俺も>>848に一票。真面目な話。
850774ワット発電中さん:2010/11/12(金) 20:33:37 ID:kSA/LTR+
>>848 >>849
どこの設計技術にも「人間コンパイラー」と揶揄されるヤシが居て、
好い加減なコンパイラより遙かに高速で、サイズの小さいコードを吐くヤシが居たもんだ(w
851774ワット発電中さん:2010/11/12(金) 21:05:05 ID:Rg2ZaoGa
そういう人って趣味がgccの解析とかだったりするの?
852774ワット発電中さん:2010/11/12(金) 22:06:49 ID:WShaaesz
>>847
なんと言うかそれだけではない気もするが
アレには割込み掛かったコトにするボタンがある。
精確さどうの以前の問題だよね

アセンブラ画面でステップ実行は出来るよ。
>>843
SDCCに関するウィキですが参考になりましょうか
http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?install%2Fsdcc_tips2#d80a5056
853845:2010/11/13(土) 00:07:26 ID:nlDoy0xZ
人間コンパイラ、ですか。
それもやむなしかもしれませんね。

既存のコンパイラで比較すると、最適化面では
Hitec-PROがよさげですか?
854774ワット発電中さん:2010/11/13(土) 00:11:04 ID:0/Vz0LFM
昨日からまだ悪戦苦闘しています。
コンパイルすると

PIC14 processors supported:

-----------------------------------------
processorprogram RAM EEPROM I/O

PIC14 processors and thier characteristics:

can't find pic14devices.txt
'16f84a'was not found
can't find pic14devices.txt
can't find pic14devices.txt

と表示されます。
必要なファイルはダウンロードしているはずなのですが・・・
コンパイルとリンカに必要なファイルはコンパイルしたいファイルと同じディレクトリ
に置いておいて良いのでしょうか?
初心者なのでとりあえずサンプルプログラムをマイコンに書き込んで実装したいと
考えております。
855774ワット発電中さん:2010/11/13(土) 00:12:27 ID:XzJBvGmY
大文字小文字の区別確認
856774ワット発電中さん:2010/11/13(土) 00:54:09 ID:+gLyw0kX
あぁ、ν速+からここのスレに来ると癒されるw
857774ワット発電中さん:2010/11/13(土) 01:33:26 ID:0/Vz0LFM
アドバイスありがとうございます。
確認しましたが,全て半角小文字でした。
完全に負のループに入りました・・・・
858774ワット発電中さん:2010/11/13(土) 09:31:40 ID:BvCfemPP
パスの問題でない?、ディレクトリをドライブ直下に移して試してみるとか
859774ワット発電中さん:2010/11/13(土) 09:35:48 ID:COEPBBYl
>>857
何を加えると問題が発生するかを確認してみることを勧める。
現在の状態から削除する方法と0から足す方法。
余計なのがあるかないかでずいぶん違うよ。手を動かさないと前に進まない。
ずいぶん昔に、//コメントの行末で「可能」コメントにはまったのは内緒。
860774ワット発電中さん:2010/11/13(土) 10:23:43 ID:QuPnjiAQ
>857
どんなサンプル使ってるかわかんないのでエスパーレス:

http://www.welcome.mech.nagasaki-u.ac.jp/gs400e/pic_sdcc/sdcc_start.htm
ここにあったpic16f88のサンプルは、そのままではコンパイルできなかったので、

1. sdcc/non-free/include/ の中身を sdcc/include/ にコピー
2. sdcc/non-free/lib    の中身も  sdcc/lib/ にコピー
3. コマンドラインにライブラリパスを指定 
  sdcc -mpic14 -p16f88 test.c -L"\program files\SDCC\lib\pic14"

てやったらコンパイルできた。
861774ワット発電中さん:2010/11/13(土) 11:07:03 ID:duyEwV5i
pathに-(ハイフン)って、許されるの?
862774ワット発電中さん:2010/11/13(土) 14:24:06 ID:CKFlUkot
>>833
普通にやってるよ。ぜんぜん問題無い。
863774ワット発電中さん:2010/11/13(土) 16:47:02 ID:qsUhcyVv
シナ人を日本から叩き出せ!!
尖閣諸島と秋葉原をシナから守れデモ行進、決行!

http://pds.exblog.jp/pds/1/201010/20/41/d0178541_13491429.jpg
不買運動のお願い
対象:オノデン、ソフマップ、ラオックス、ヨドバシカメラ
理由:日本人を差別してシナ人を優遇・大歓迎
売国商人は恥を知れ!

http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17105420.jpg
在日特権を許さない市民の会の八木康洋筆頭副会長
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_1712288.jpg
主権回復を目指す会の西村修平代表
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17125456.jpg
日本を護る市民の会の黒田大輔代表
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17135528.jpg
外国人参政権に反対する会・東京の村田春樹氏
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17144694.jpg
NPO外国人犯罪追放運動の有門大輔理事長
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17155317.jpg
維新政党・新風元副代表のせと弘幸氏
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_1717916.jpg
千風の会の渡辺祐一代表
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_17211341.jpg
政経調査会の槇泰智代表
http://pds.exblog.jp/pds/1/201010/18/41/d0178541_1722179.jpg
新攘夷運動 排害社代表の金友隆幸代表
864774ワット発電中さん:2010/11/13(土) 22:21:42 ID:tnH1qyqI
>>863
「在日特権を許さない市民の会」って、ただ一人日本に残された中学生の女の子を中学校まで押しかけて
集団で取り囲んで「日本から出て行け〜〜」ってよわいもの虐めをやったどうしようもなく卑劣なクズ共でしょう。
朝鮮諸島中等学校への突撃ってのもあって、これはとっつかまったけど、かなりいい大人がミットもないからヤメロよな〜。

ここはPIGの溜まり場じゃなくてPICな。
全くのすれ違いウザイぞ。
865774ワット発電中さん:2010/11/13(土) 23:24:28 ID:k8W6n3SS
>>864
誰が上手いこと(ry
866774ワット発電中さん:2010/11/14(日) 03:28:21 ID:80iQRIiJ
そのサンプルプログラムならコンパイル出来ました。
こちらのサイトのプログラムでは出来ないのですが
http://shino.pos.to/eda/downloads/sdcc-remocon_c.txt
またアドバイスいただければと思います。
よろしくお願いします。
867774ワット発電中さん:2010/11/14(日) 05:27:37 ID:v3JWLIgV
>>866のサイトのソース、書き方をもう少し工夫すると、見やすくなるよね。
同じ繰り返しは、横に長くすればいい。
コメントは行中に入れずに、ソースの右側に書けば良い。
868774ワット発電中さん:2010/11/14(日) 05:45:25 ID:Tq30wkkS
悪い見本ってことか
869774ワット発電中さん:2010/11/14(日) 09:00:03 ID:PCewUtYn
PIC12HV615のPWM Enhanced Mode Haif-Bridgeで悩んでます。

PWM1CONがゼロの時は設定したなりの波形がPA・PBに出るのですが、
PWM1CONにDead-Band Delayを設定するとおかしな波形になります。
(PWM1CONに00000001Bを設定するだけで)
どなたか経験された方はおられませんか??
870774ワット発電中さん:2010/11/14(日) 09:49:06 ID:vjm8PJuO
>>866
エラー情報を教えてくんないと。
871774ワット発電中さん:2010/11/14(日) 11:41:18 ID:80iQRIiJ
>>870さん
C:\test>sdcc -mpic -p16f84a test.c -L"\program files\SDCC\lib\pic14"
と打ち込んでコンパイルしようとすると、

at 1: warning 119: don't know what to do with file 'test.c -L"\program files\SDCC\lib\pic14".file extention unsupported
SDCCC : mcs51/gbz80/z80/ds390/pic16/pic14/TININative/ds400/hc08.3.0.0 #6037 (Oct31 2010) (MINGW32)
Usage : sdcc[options] filename
Options :-


というエラーメッセージが表示されます。
872774ワット発電中さん:2010/11/14(日) 12:26:40 ID:ikzgJlXX
>>871 test.c は最後に書きましょう、というオチかな。

>Usage : sdcc[options] filename

っていってんだから。オプションはコンパイルしたいファイルの
前に書いてくださいね、っていう。
873774ワット発電中さん:2010/11/14(日) 12:40:59 ID:80iQRIiJ

test.cを最後にもって来てもコンパイルできませんでした。

SDCC DEVELOPERを使ってコンパイルすると
message: using default linker script "C:Program File\ggutils\lkr\16f84a.lkr"
error: no target memory available for section "code_idata"
warning: relocation of section "UD_shadowregs_0" failed, relocating to a shared memory location
error: linker script has no definition that maches the type of section "UD_shadowregs_0"

というエラーメッセージが表示されます。
874774ワット発電中さん:2010/11/14(日) 14:54:05 ID:b4ov+Pot
プログラム書込済みのPIC16F88を購入したのですが、電源ON/OFFを繰り返すと動作しなくなりました。
電源電圧はACアダプター使用で5.1V、入力のケミコンは100μです。
アースを強化しても動かなくなります。
電源投入のタイミングでプログラムがお亡くなりになることや、PICそのものがお亡くなりになることは
あるのでしょうか?
初心者なので???です。
875774ワット発電中さん:2010/11/14(日) 15:14:38 ID:ni5bEShC
>>874
IO回路に不具合があってPICに負担が掛かってたんじゃね?
876774ワット発電中さん:2010/11/14(日) 15:31:40 ID:80iQRIiJ
873です。
>>872さん
test.c を最後に持ってくるとエラーメッセージはつぎのようになりました。

at 1: error 131: cannot generate code for target 'pic'

自作アンプをリモコンで操作したいのですがなかなか難しいですね。
877774ワット発電中さん:2010/11/14(日) 16:37:22 ID:ikzgJlXX
>at 1: error 131: cannot generate code for target 'pic'

わしゃ pic なんてチップのコードは生成できないよ、っていってますねえ。
適当にググって
http://homepage3.nifty.com/~masumoto/embed/pic/sdcc.html
とか読むと、-mpic じゃなくて -mpic14 だろうなあとか。
878774ワット発電中さん:2010/11/14(日) 17:17:01 ID:80iQRIiJ
ご指摘ありがとうございます。
-V -mpic14 を加えたところ次のメッセージが表示されました。

message: using default linker script "C:Program File\ggutils\lkr\16f84a.lkr"
error: no target memory available for section "code_idata"
warning: relocation of section "UD_shadowregs_0" failed, relocating to a shared memory location
error: linker script has no definition that maches the type of section "UD_shadowregs_0"

このエラーが問題だと思うのですが,
どういうことをいっているのかわかりませんか?
879774ワット発電中さん:2010/11/14(日) 17:38:53 ID:cnhW1IKy
sdcc
わかんなかったら もっと簡単なコンパイラーでやってくれよ




880774ワット発電中さん:2010/11/14(日) 18:01:48 ID:54nbON6P
881774ワット発電中さん:2010/11/14(日) 18:21:44 ID:80iQRIiJ
とりあえずSDCCでやってみようと思いまして・・・
882774ワット発電中さん:2010/11/14(日) 19:33:54 ID:Xlk4mc0q
microcontoroller
883774ワット発電中さん:2010/11/14(日) 20:26:20 ID:ikzgJlXX
> message: using default linker script "C:Program File\ggutils\lkr\16f84a.lkr"
16f84a.lkr っていうファイルがインストール時に
C:Program File\ggutils\lkr
というフォルダに作られるんでしょうね。で、それが正しくないんでしょう。
> error: no target memory available for section "code_idata"
とかからみると、ライブラリファイルの場所をリンカがわかってない感じですね。
メモ帳で16f84a.lkr の中身をみて、そこに書いてあるファイルパスを手動で
それらしいところに直してやるところから始めたらどうでしょう。

884774ワット発電中さん:2010/11/14(日) 21:43:19 ID:ikzgJlXX
http://www.welcome.mech.nagasaki-u.ac.jp/gs400e/pic_sdcc/sdcc_path.htm
ここみると
GPUTILS_HEADER_PATH C:\Program Files\gputils\header
GPUTILS_LKR_PATH C:\Program Files\gputils\lkr
path C:\Program Files\gputils\bin;C:\Program Files\SDCC\bin
こんなのがあるから、まさかgputils→ggutilsのタイポじゃないでしょうねえ。
要するにちゃんと環境がインストールできてないと。


885569:2010/11/14(日) 23:09:47 ID:vyiVTvPY
569です。規制でかけないから古い話でごめんなさい。まずはお礼、そして結果。
>>608
Bit SPEN (RCSTA<7>), and bits TRISB<2:1>,
have to be set in order to configure pins RB2/TX/CK and RB1/RX/DT as
the Universal Synchronous Asynchronous Receiver Transmitter.
これを「TRISB設定がいるよー」程度にしか読めない語学力がつらいぜ。
しかも設定が「TXは出力だから出力だろー」はダメなのかYO。orz
早速修正…頻度は減ったけど?まだ数回に一回0x00×4を送信している。
ドキュメント40ページの「FIGURE 5-10: BLOCK DIAGRAM OF RB2/TX/CK PIN」見て思うのは
※Note 1: Peripheral OE (output enable) is only active if peripheral select is active.
とあるから、ペリフェラル設定がすると負論理でデジタルI/O止めてると思うのよね。(ANDとってるし)
初期化のタイミングでゴミが漏れる可能性は否定できないので規制しちゃう方で正解と思っておきます。勉強になりました。

>>607
と、言うわけでPICの送信(Tx)、PCの受信(Rx)です。記述もれてすまん。

その後回路シミュレータでも正常で、あったま来たからロジアナ引っ張り出した。結果はあっけなく。
リセットタイム不足。。。外部クロックを供給しているのだが、これの発振安定が悪く、POR時間でも足りずと言うオチ。申し訳ない。
つまりソフト的問題ではなかった。そして >>608 のはどっちに設定しても変わらない結果を報告しておく。
やはり内部回路の通りで「FIGURE 5-10: BLOCK DIAGRAM OF RB2/TX/CK PIN」通りの挙動をした。

遅れたお詫びではないが >>860 よ、下記をみろ。sdccがある版以降「ライセンス関連の修正」をした。その結果このオプションなしだとそうなる。
ttp://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?install%2Fsdcc-mplab#content_1_17
886774ワット発電中さん:2010/11/15(月) 00:11:47 ID:i5xWeNhO
gputilsになってました。申し訳ありません,私の打ち間違えでした。
ほんと何度もすみません。
16f84a.lkr の内容をメモ帳で確認したところ次のような内容でした。
16f84.lkrの内容も全く同じでした。

// Sample linker command file for 16F84A

LIBPATH .

CODEPAGE NAME=page START=0x0 END=0x3FF
CODEPAGE NAME=.idlocs START=0x2000 END=0x2003 PROTECTED
CODEPAGE NAME=.config START=0x2007 END=0x2007 PROTECTED
CODEPAGE NAME=eedata START=0x2100 END=0x213F PROTECTED

DATABANK NAME=sfr0 START=0x0 END=0xB PROTECTED
DATABANK NAME=sfr1 START=0x80 END=0x8B PROTECTED

DATABANK NAME=gprs START=0xC END=0x4F

SECTION NAME=PROG ROM=page // ROM code space
SECTION NAME=IDLOCS ROM=.idlocs // ID locations
SECTION NAME=DEEPROM ROM=eedata // Data EEPROM

16f88のサンプルをコンパイルしたときは問題なかったのになぜなのでしょうか?
887774ワット発電中さん:2010/11/15(月) 22:33:16 ID:Fj7OxtQZ
>16f88のサンプルをコンパイルしたときは問題なかったのになぜなのでしょうか?

さあ?としか言いようがないですが。

>LIBPATH .

があやしいと思ったけど、それは正しく環境設定ができていれば
のことだから。

チップごとに決まったアドレスに置かないといけない
(ベクタテーブルなど)ものだけ、アドレスを固定する
指示がされている部分みたいですね。
888774ワット発電中さん:2010/11/16(火) 00:00:06 ID:88KRZrWS
これ完成させるまで続くのか?
889774ワット発電中さん:2010/11/16(火) 07:44:32 ID:PgRiZTCF
自分のブログでやって欲しいよな
890774ワット発電中さん:2010/11/16(火) 16:34:42 ID:OY7EBe8D
無謀過ぎるね。
ここは無料サポートじゃないし。
891774ワット発電中さん:2010/11/16(火) 18:56:01 ID:rs4He112
>>885
Bit SPEN (RCSTA<7>), and bits TRISB<2:1>,
have to be set in order to configure pins RB2/TX/CK and RB1/RX/DT as
the Universal Synchronous Asynchronous Receiver Transmitter.
ビットSPENとビットTRISB[2:1]は、RB2,RB1をUSARTに設定するために、セットする(1にする)必要がある。
892774ワット発電中さん:2010/11/16(火) 19:07:53 ID:WOiu/ixE
16fはアセンブラでやれ。
893774ワット発電中さん:2010/11/16(火) 22:40:25 ID:+gSu4hm3
PICでディレイやリバーブの回路とか出来る?
894774ワット発電中さん:2010/11/16(火) 23:28:11 ID:2+Eo9/j0
>>893
dsPICなら、条件次第でOK。
ただ、ここにそんな質問をするレベルでは、先ず無理。
895774ワット発電中さん:2010/11/16(火) 23:37:53 ID:FJg9bmYX
ディレイは楽だけどリバーブは難しい
896774ワット発電中さん:2010/11/16(火) 23:50:39 ID:+gSu4hm3
>>894-895
ググっても見つからないんだけど、どっかにプログラムとか載ってないかな?
ディレイでいいんだけど。
897774ワット発電中さん:2010/11/17(水) 00:11:37 ID:0ZP01jw1
ディレイなんて、サンプリングして、少し溜めて出すだけじゃん
mixしてもいいけど、速度優先でopampに任せた
898774ワット発電中さん:2010/11/17(水) 06:54:59 ID:NpWjsMQM
>>896
その程度のことを考えるのも嫌なのかねぇ。
模範解答が無いと何も出来ないんだな。これもゆとり教育の成果?
899774ワット発電中さん:2010/11/17(水) 07:42:37 ID:qWYOvg+X
ゆとりとかすぐに言い出すおっさんいるな、
急行の券売機も使えないクセにw
900774ワット発電中さん:2010/11/17(水) 07:45:04 ID:ux5LsIlV
「自分はゆとりだ」と思っている人間の発言だな
901774ワット発電中さん:2010/11/17(水) 07:58:02 ID:poEZNDyA
ググっても出てこないということはできないということだからあきらめなさい。
902774ワット発電中さん:2010/11/17(水) 08:00:30 ID:2l6pkOYG
明解w
903774ワット発電中さん:2010/11/17(水) 08:47:05 ID:I/vohpFZ
遅延素子使え
904774ワット発電中さん:2010/11/17(水) 09:27:04 ID:w+QXF10U
FIRフィルタで作れるだろ
905774ワット発電中さん:2010/11/17(水) 09:48:33 ID:3p38uHgc
PICで電子工作をする人向けに回路図やプログラムなど製作方法を紹介した本やHPは色々あるのに
どうしてそれらにはデジタルディレイが載ってないんだろう?
やっぱり本やHPでは簡単に説明が出来ないシロモノなのかな?
ここで聞いても分かる人はいなさそうだし。
906774ワット発電中さん:2010/11/17(水) 10:11:12 ID:SThfaEJE
ディレイとかリバーブってことは音だよね?
とりあえずリアルタイムで、AD、遅延分のバッファリング、DA、をずーっとやるわけよね?
PICで?

AD,DA,ラインバッファをセットで使うようなのしかイメージできないや。
907774ワット発電中さん:2010/11/17(水) 10:49:26 ID:nRMBgFgx
ドンピシャな解説が無ければ何も出来ないならPICに限らず向いてないからあきらめた方が良い。

普通(PIC経験の有無関係なく)はね、まずどうすれば実現できるか考える訳よ

俺なら、
 1.ADCで信号を読む
 2.読んだ内容を逐一RAMに保存していく
 3.RAMから一定時間経過したデータを読み込む
 4.DACにデータを出力する
1〜4を適当な間隔でループすれば遅延回路になるかなーとかざっくり考えるわけよ。

で、大まかに考えた各要素に関してHPや解説書で方法を調べる。
この場合はADC、DACの扱い方がメインになるね。


まぁでも君は、完成品かキットでも使った方が良いと思うな。
自分で考える気ゼロだし。
908774ワット発電中さん:2010/11/17(水) 11:53:40 ID:3p38uHgc
「自分で考える気ゼロならやめろ」というのは自作を勧める本やHPの著者をも馬鹿にしてると思うし、
そういう人って実際のところは多分、自分でも分からないんだろうな。

確かにゼロから自分で考えて作る知識は無いけど
周波数カウンターなどのように回路図やプログラムが載ってる記事さえあれば自作出来るので
そういう記事を探してるわけだ。

「PICでは出来ない。」とか「自分でゼロから開発するしかない。」というのであればそれは仕方が無い。
PIC以外の方法でやるしかないな。
909774ワット発電中さん:2010/11/17(水) 12:06:06 ID:5nWbn5rp
音源→LPF→AD→RAM書込→(遅延)→RAM読出し→DA→LPF→音
音源5kHzまで処理できるとして、
5kHzの1波形を10点で、8bitで表現するとして、5*10=50kHzサンプリング
遅延を1secとるとして、50k*8bit=50kbyteのメモリ
PICのメモリって、そんなにあるのか?
H8でもRAM32kとかが多いし。
CPLD+メモリーならできるかも。
910774ワット発電中さん:2010/11/17(水) 12:10:23 ID:SThfaEJE
著書やサイトなんてのは知識を提示しているわけで、それをもとに
ただ図面通りに作るだけでも、まず何が必要なのか、どういう行程が要るのか、ということを読むわけで、
そこを考えるキッカケを貰うわけだわな。ふつー。
つまり、キットでも作ってろ、でも、キットの設計者の知識がのっているワケだから、解析する気があるなら、著書と一緒の効果が得られるハズだ。

コピーで作るだけ作って全く知識に蓄積して、自己展開しないなら、それこそ著者を(ry

……って書いてたら、
8ビットPCのころの雑誌のゲームプログラムを、打ち込むだけ打ち込んで遊ぶだけ遊ぶ派と
打ち込んだのを解析したり改造したりして覚える派がいたなーとか、ちょっち思い出した。
911774ワット発電中さん:2010/11/17(水) 12:36:03 ID:Ldkrb/z/
>>909
50kHzでサンプリングしたらナイキスト周波数の25kHzの音源まで再現できる気がする
実際5kHzまででいいなら2.5k*8bitでいけるんじゃ?
912774ワット発電中さん:2010/11/17(水) 12:59:46 ID:FPuRGYrS
PIC18F2550について教えてください。

USB機能を使っていますが、その際にRC6とRC7は自由に使えるのでしょうか?
トランジスタスイッチのONOFFをしたくて、出力に設定してますが、上手くいきません。
原因がコードにあるのか、USBを使う場合は使用できないのか、
切り分けをしたいので、教えてください。
913774ワット発電中さん:2010/11/17(水) 14:15:29 ID:HPvCTHb0
使えます
914774ワット発電中さん:2010/11/17(水) 14:21:35 ID:FPuRGYrS
>>913
ありがとうございます。

となると、回路かコードですね…
質問ついでで申し訳ありませんが、プルアップの必要も無いのですか?
915913:2010/11/17(水) 15:15:05 ID:HPvCTHb0
出力ポートでプルアップの要否は、後段の回路構成によります。
常識です。
916774ワット発電中さん:2010/11/17(水) 15:48:08 ID:FPuRGYrS
>>915
すみません。
私なんか勘違いをしてるかもしれませんが、
>後段の回路構成
というのは、どの出力ポートにも関わらず、電流的な制限を守れば、
不要であるということでしょうか?

たとえば、トランジスタをLEDに置き換えて5mA(全体で20mAとして)流せば、
PICにとっては許容内の出力ですが、
このような場合は不要と言う意味なのでしょうか?

ポートによってプルアップが必要か必要じゃないか決まるって思ってましたが、
間違ってる認識だとすると、改めたいので指摘をお願い致します。
917774ワット発電中さん:2010/11/17(水) 16:13:30 ID:SThfaEJE
おれも後段の回路によって影響される内容は知りたいな。
オープンコレクタに繋ぐこと前提の後段回路なら不要、とかいうのなら判る。

許容量云々はトランジスタ挟んで解決しちゃうからなあ。
PIC18F2550がオープンコレクタなのかはしらないが。
918774ワット発電中さん:2010/11/17(水) 16:57:37 ID:/JQy4TtA
>>896
あきらめて専用IC使えば。PICと同じくらいの値段で買えると思うよ。
919774ワット発電中さん:2010/11/17(水) 17:02:26 ID:5nWbn5rp
後段の回路の、入力仕様が
・「入力がGNDに落ちること」でLを感じ、開放でHになるように作ってあるのなら、
その後段につなぐときは、プルアップは要らない。
・後段のHと感じる電圧と、PICの吐くHの電圧が同じなら、
 プルアップ抵抗なしにPICの通常ポート(吸える、吐ける)をつないでも問題ない。

通常、後段の回路の入力部は、線が開放になったとき「H/Lを確定したい」
と考えている。だから開放にされたときでも安全なように、プルアップかプルダウンしてある。
920896:2010/11/17(水) 17:21:12 ID:rSqRwKD4
>>918
専用ICのはもうPT2399で作ったんで
他の作り方はないかを模索してたんですよ。
921774ワット発電中さん:2010/11/17(水) 17:43:47 ID:/JQy4TtA
>>920
これ見てPICで実現できるか調べなさい。
http://elm-chan.org/works/srp/report.html
922774ワット発電中さん:2010/11/17(水) 17:51:28 ID:I/vohpFZ
923774ワット発電中さん:2010/11/17(水) 18:25:31 ID:4vS9RTSr
>911
5kHzだったらサンプリング定理から10kHzのサンプリングが必要なはず
10k程度のRAMならPICでもラインアップあるね
924774ワット発電中さん:2010/11/17(水) 19:48:49 ID:UD/envnZ
50kHzで25kHzのSIN波をサンプリングしたとする。
4/πや3/4πのところをとると振幅が正しく再現されるけど、
0やπのところを取ると出力は0なままになる。
もう少し周波数を低くすると、サンプリングポイントがずれていって、
うねりが出てしまう。(Excelでも使って確認してみるよろし)

元波形を再現しようとしたら単に2倍以上ならいいってことにはならないんよ。
925774ワット発電中さん:2010/11/17(水) 20:48:56 ID:zcQ+m8ui
> サンプリングポイントがずれていって、 うねりが出てしまう。
直線補間なんかするからでしょ?
926774ワット発電中さん:2010/11/17(水) 21:09:25 ID:w+QXF10U
>>924
50kHzでサンプリングしたデータの間に0データを7個くらいずつ入れてから、
カットオフ25kHzのローパスフィルタに通せば補間されて元の波形が出てく
るよ。
927774ワット発電中さん:2010/11/17(水) 22:03:57 ID:kG27AGJY
>924
サンプリング定理さえ満たしていれば、うねりが出ている状態でも
鋭いポストフィルタを通してやればちゃんと元に戻る。
この辺は理論と感覚のズレだな。

まぁ、PICにしろ何にしろ、そのクラスのマイコンでやるには外付けメモリが絶対必要になるなぁ。
以前、PICかAVRにDRAMをつないで音声処理の実験をしていたひとがいたような。
928774ワット発電中さん:2010/11/17(水) 22:12:14 ID:hlEglMNv
>サンプリング定理さえ満たしていれば、うねりが出ている状態でも
>鋭いポストフィルタを通してやればちゃんと元に戻る。

へー
929774ワット発電中さん:2010/11/17(水) 22:44:49 ID:0ZP01jw1
ノイズかと思うほど雑なサンプリングでも、鳴らしてみるとちゃんと聞こえる不思議
930774ワット発電中さん:2010/11/17(水) 23:15:20 ID:w2Ll34aQ
PSoC1でできるんだからdsPICは楽勝じゃないんですか?
http://www.cypress.com/?rID=2808
931774ワット発電中さん:2010/11/17(水) 23:25:21 ID:plezgm3Z
DIP ソケット2段重ねでも
16F84A 20MHzでノイズによる誤動作無くちきんと動作しますか?

28年前に技術の時間に購入した半田ごてを捜索中なので
今すぐは試せませんが。
932774ワット発電中さん:2010/11/17(水) 23:39:48 ID:0ZP01jw1
リバーブは乱数の質の良さがダイレクトに影響するぞ
933774ワット発電中さん:2010/11/18(木) 02:24:03 ID:I0WBrMqO
リバーブって、時間とともに、だんだん音量を下げないといけないですよね
934774ワット発電中さん:2010/11/18(木) 07:44:10 ID:J0d7hwR2
>>931
こてが暖まった状態で
こて先と100vの絶縁
調べといたほうがいいよ
935774ワット発電中さん:2010/11/18(木) 10:14:28 ID:+/xSzPCQ
>>934
そいつは28年前に中学1年生だとしたら現在41歳くらいだろ。
子供の頃以来ずっとハンダゴテさえ握ってなかったようなド素人だ。
ヘタに絶縁を調べようとしても感電するかもしれん。

>>931
そんな年になって28年も放置してたコテが使えると思う判断力しかないのか?
ハンダゴテくらい新しいのを買え。
936774ワット発電中さん:2010/11/18(木) 14:22:15 ID:H7Ne5nqD
AVRマイコンでディレイやエコー処理をやっている例

http://elm-chan.org/works/vp/report_j.html
937774ワット発電中さん:2010/11/18(木) 16:55:51 ID:Wuq3Q43g
半田も今は昔とは違うしなあ。


もう他で目的は達成しているみたいだから自分で考えろでいいと思う。
picのスペック的に無謀過ぎるし。
4bitマイコンで円周率演算世界一を目指す様な物だし。
938774ワット発電中さん:2010/11/18(木) 19:44:17 ID:6FYjYQ+1
20円のPICを100万個使うより、200円のARMを10万個使う方が早いだろうな。
939774ワット発電中さん:2010/11/18(木) 22:21:05 ID:rcbWypl3
20円のなんかあるのか
940774ワット発電中さん:2010/11/19(金) 07:01:53 ID:P7oltUGG
100万個って書いてあるよ
941774ワット発電中さん:2010/11/19(金) 13:39:44 ID:sny/GsN+
>>937
16Fで時代が止まってないか?
dsPICならフィルタ処理くらい軽々だよ。
わかるほどのディレイだとメモリ大量に要りそうではあるが。
942774ワット発電中さん:2010/11/19(金) 13:48:16 ID:gEGRRD7q
外付けRAMにして、AD/DA兼DMAみたいなことをPICにやらせるのが一番実用的か。
新しいPICはあんまり知らないから、足が足りるのかは判らないけどsa。

汎用的に可変操作とかは無理だろうけど。
943774ワット発電中さん:2010/11/19(金) 13:58:05 ID:I7NDTBPD
ADCしてDAC出力しなくても

コンパレータで帰還かけた1bit変調のアナログ回路を用意してやれば
1BITのDRAMを ひたすらアクセスすれば 実現出来るとおもう
944774ワット発電中さん:2010/11/19(金) 14:29:14 ID:4O3T3zTR
PIC10F200
ソースでは、
// #fuses NOWDT, PROTECT, NOMCLR
と書いているのに、
秋月ライターV4(Ver6.72.17) や MPLAB(Ver8.4)のPICKIT3 でHEX読み込むと
CONFIG が NOPROTECT、MCLR ENABLE になってる。ナゼ?
毎回手動で設定し直してから書き込んでます。
12F629や12F683は大丈夫なのに。
945774ワット発電中さん:2010/11/19(金) 17:37:10 ID:kTyNMmwS
>925-927
つまり、単純サンプリングしただけじゃだめってことなんだよね。
でも、単純にADCしてDACした(まぁ、直線補完だわな)だけでサンプリング
レートの1/2までは忠実に再現できるかのように思い込んでいるのとか、
そんなことを堂々と書いてる本があったりして。
ちゃんと実験して波形で示してみろってね。
946774ワット発電中さん:2010/11/19(金) 18:57:27 ID:2KfL49V3
よく分からんけどCDとかでもそういう複雑なことしてるの?
947774ワット発電中さん:2010/11/19(金) 19:02:19 ID:GKNSNZHx
むしろ複雑な事が理解で着てないとエンジニアとして通用しない。
948774ワット発電中さん:2010/11/19(金) 19:05:10 ID:gEGRRD7q
>>946
CDは44.1kHzのリニアPCMだから、PCMの再生技術の話になるんじゃないかしら
ttp://zigsow.jp/pickup/linn/part8/index2.html
949774ワット発電中さん:2010/11/19(金) 19:05:37 ID:wePxG4CG
>>929
「聞こえる」レベルはできても、「綺麗に聞こえる」レベルは難しかったり。
950774ワット発電中さん:2010/11/19(金) 19:22:39 ID:2KfL49V3
今までの話ってまさにPCMのことでしょ?
CDはサンプリングレート44.1kHzで22kHzまで再生できることになってるから
>925-927の話が本当ならそういう処理をしてるのかな?ってこと
951774ワット発電中さん:2010/11/19(金) 19:28:00 ID://dQZnAU
>>950
CDプレーヤーではなく、CDに収録するPCMデータを作るスタジオでやってるんじゃないかな。
952774ワット発電中さん:2010/11/19(金) 20:12:43 ID:1IOq6fAd
>>950
折り返しノイズ
オーバーサンプリング
とかでググれ
953774ワット発電中さん:2010/11/19(金) 20:24:20 ID:2KfL49V3
>>952
それはCDでの22kHz以上での話で、>>924からの流れはは22kHz以下の周波数でも
サンプリング定理を守っても元波形を再現できる、できないって議論でしょ?
954774ワット発電中さん:2010/11/19(金) 20:35:15 ID:sny/GsN+
>>950
CDに限らずデジタルオーディオは、オーバーサンプリング、インタポレーション、ディジタルフィルタ等の技術を駆使してサンプリング定理の限界に近い帯域まで確保してるよ。
955774ワット発電中さん:2010/11/20(土) 01:07:50 ID:SuT7xV7s
>>945
原理的にはそれで良い。ADCとDACだけじゃなくてLPFがあるから。
ただし現実にはサンプリングレートの1/2まで再現しようとするとLPFの
仕様が厳しくなるから、デジタル的にサンプリングレートを上げてから
アナログLPFに通している。
956774ワット発電中さん:2010/11/20(土) 10:47:55 ID:5d9nTiW9
つかサンプリングレート48kHzで24kHzの正弦波が出せると思うのが間違い
正弦波でなくて矩形波だから忠実でないと思うのも間違い
24kHzの1倍音が出てればそれで十分
実際には、24kHzの成分はもっと低い音の波形の微妙な形の変化としてしか現れない
957774ワット発電中さん:2010/11/20(土) 12:28:29 ID:6RjRBDan
>>955
なるほど。
ということは、
・サンプリングレートの1/2の周波数でスカッっと直角に落ちるような特性のLPFがあるならば、
 ADC→DAC→スカッとLPF という構成でOK。オーバーサンプリングは不要
・しかしそれが出来ないので、LPFの特性よりずいぶん上の周波数でサンプリングする
 「オーバーサンプリング」が用いられている。

という理解は合っているでしょうか?
958774ワット発電中さん:2010/11/20(土) 16:29:06 ID:+ZXDbKjZ
>>957
その場合のDAC はパルス出力するものでなければならないけどそういうDACは存在しないので
ADC→DAC→パルス化回路→LPF 
959774ワット発電中さん:2010/11/20(土) 16:44:01 ID:Sj1z/2pf
えっ
960774ワット発電中さん:2010/11/20(土) 17:51:38 ID:+ZXDbKjZ
だからサンプリング定理の世界は デルタ関数の世界なのよ
DAC出力は階段状だからそのままでは1遅延した関数を減算して積分した事になるわけ

つまり階段状のままでは周波数特性は {1-e^儺s}/s だけ加工された状態なわけ
それを減らすには可能な限り細いパルスを作るしかないわけ
そんな細いパルスを精密に出すには、整数倍クロックでゲート作るしかないけど
そんな苦労をするならデジタル信号状態の時にそのクロックで強烈なLPFをかけて、オーバーサンプリングしてしまえばいいって事になるって事
961774ワット発電中さん:2010/11/20(土) 18:43:54 ID:VXpNNS5n
たとえば1.9kHzの正弦波を1msごとにサンプリングしたとして、
サンプリングされたデータがどうなるか、Excelでも何でも
使ってやってみれば良いのよ。
信号レベルまで含めて、果たして本当に元の1.9kHzの正弦波に
戻るかどうか。
元のとおりのレベル一定な正弦波に戻すにはどうしたら良いかって
いうのもわかるんでない?
962774ワット発電中さん:2010/11/20(土) 19:13:31 ID:goJDJz3x
> たとえば1.9kHzの正弦波を1msごとにサンプリングしたとして、

> 信号レベルまで含めて、果たして本当に元の1.9kHzの正弦波に 戻るかどうか。

これが戻ると言ってる人はいないと思うけど。
唐突に何?
963774ワット発電中さん:2010/11/20(土) 20:38:32 ID:VdvFswe1
>>962
サンプリング定理を、2倍と1/2倍で入れ替えて覚えちゃってる脳弱さんなんだろ
964774ワット発電中さん:2010/11/20(土) 23:14:49 ID:/kHNH3UN
499Hzの正弦波を1mSでサンプリングしたとして元の波形に戻るかどうか試してみたらいいんでない?
少なくとも500Hzだとサンプリング開始タイミングによってはゼロのままになってしまうから、完全な再現は不可能だろうな。
499Hzなら再現出来るっていう理屈になるんだろうけど、実際にやると、少しずつ振幅が変わる波形になるなあ。振幅一定の正弦波に戻せるかなあ
965774ワット発電中さん:2010/11/20(土) 23:55:58 ID:T4S2WNtV
戻るよ。実際。
DFじゃないと再現は不可能だけど。
966774ワット発電中さん:2010/11/21(日) 00:10:25 ID:zSxIXIZ6
>>964
499Hz以外の成分があるから、499Hzの振幅が変わっているように見えるだけ。
499Hz成分の振幅は変化なし。
967774ワット発電中さん:2010/11/21(日) 00:18:13 ID:l9bBZSJj
>>964
499Hzの折り返しが501Hzにあるから、499Hzを通過させて501Hzをカットする
ようなLPFが必要。サンプリング周波数を少し高くするのが現実的。
968774ワット発電中さん:2010/11/21(日) 00:46:04 ID:DhXpL0oc
>>964
だからさぁ、波形を見るだけしか脳がないのかよ。
エクセル使ってるなら、ちゃんと計算してみ。
やり方はこうだ。

1. 元データをオーバーサンプリングして0補完する。
2. それにLPFを適用する。特性は499Hzを通して501Hzを通さない程度。たぶん、タップ数爆発。
3. 結果をプロットしてみる。
4. 日頃の行いが良ければきれいな正弦波が現れる。

レポートの提出期限は今日中な。
969774ワット発電中さん:2010/11/21(日) 03:44:50 ID:IGpDSD1l
>1. 元データをオーバーサンプリングして0補完する。
この場合のオーバーサンプリングとは、信号帯域上限周波数の2倍より高い頻度でサンプリングすること
という理解で良いでしょうか?

また、この場合の0補完とは、具体的にどのようなことをするのでしょうか?
970774ワット発電中さん:2010/11/21(日) 05:44:01 ID:RpEbn4g7
>>968
そんな力技に出なくなったて、波形眺めてりゃ、よほどセンスの無い奴以外
は「あぁ、乗算になってるな」ってことで、正弦波の乗算なら和と差が出て
くることになるから、和の方をぶった切れば良いだろう・・なんてことは
計算するまでもなく想像つくだろ。

でも、そういう大前提を抜かして、「サンプリングレートの1/2までOK」
なんて言っちゃう例のなんと多いこと。どちらかといえば、
「どんなにあがいても1/2未満しか再現しようがない」と言うほうが
正しいだろうな。
971774ワット発電中さん:2010/11/21(日) 10:18:43 ID:phcNOzMb
もう、PICの話じゃないだろ....
972774ワット発電中さん:2010/11/21(日) 10:51:51 ID:eDmV48my
PWMで鳴らす時は、ターゲットの周波数よりも遙かに高い周波数に
パルスの周波数を設定しないと、LPFのかけようが無いという話
でも20MHzで駆動してもまだ不足なので、ラダー回路がいい
973774ワット発電中さん:2010/11/21(日) 10:56:26 ID:59KA93ao
>970
> 「どんなにあがいても1/2未満しか再現しようがない」

そんなことはない。エイリアシングによる折り返しが重なってくることが本質だから、
重なってくる元ネタが一つしかないことが明らかなら、それが 0〜0.5fs であろうと 10〜10.5fs であろうと再現できる。
この方法で 65Mspsで200MHzくらいのRFをデコードするようなADCも存在する。
アンダーサンプリングでぐぐれ。



974774ワット発電中さん:2010/11/21(日) 11:09:20 ID:s4DXWiIe
さすがに完全にエイリアスと重なったらどんな処理もムリだな。
存在はするが分離は不可能ってことで。
975774ワット発電中さん:2010/11/21(日) 11:26:30 ID:IL3NTyze
なんか本質からずれてきてる気がするけど・・・
976774ワット発電中さん:2010/11/21(日) 12:31:21 ID:RpEbn4g7
>>973
そりゃあ、曲解の類だろ。もともと
「重なってくる元ネタが一つしかないことが明らかなら」という
条件は入ってないんだから。
確かにネタとしては面白いけどね。
977774ワット発電中さん:2010/11/21(日) 16:34:10 ID:99NjGJPN
>>974
DAするときに、折り返しを利用して中音域のダイナミックレンジを
稼ぐ奴はあるな。
978774ワット発電中さん:2010/11/21(日) 16:55:36 ID:/adyImPp
AD変換や別の処理をしつつ一定の間隔でシリアル送信するにはタイマー割り込みを使うといいのでしょか?
979774ワット発電中さん:2010/11/21(日) 17:42:18 ID:++iyre+r
>>978
時間精度に寄るよなぁ
csmaとかやらんの?
980774ワット発電中さん:2010/11/21(日) 20:39:48 ID:rnJ1Q70A
>>973
「0〜0.5fs であろうと 10〜10.5fs であろうと」帯域幅はFs/2じゃん。
それで揚げ足取ったつもり?
981774ワット発電中さん
>>979
csmaとは何ですか?