制御系なら俺に聞いて ..
[2ch|▼Menu]
175:163
04/07/10 15:21
>>174さん ご丁寧にありがとうございます。

>> 0<10101010>1
の場合“だけ”ですよね?
start/stop,1bitで周期がずれずに送信可能なのって。
Highを出力するのはこの手でいけそうですが、
Lowが続くとき、 0x00 を送信したとしても 受信する側からみたら
b' 00000 00001 になっちゃうから結局リモコンとしては使えなさそうですね…

PICみたいな感覚でいたのでもっとDTRにしろTxDに任意のピンをいじれるかなって
思ってたので、考えが甘かったみたいです。


176:163
04/07/10 15:24
PICみたいな感覚でいたのでもっとDTRにしろTxDに任意のピンをいじれるかなって
↓訂正
PICみたいな感覚でいたので、DTRにしろTxDにしろ任意のピンの状態をいじれるかなって

すいません。


177:デフォルトの名無しさん
04/07/10 17:00
>>174
アヒャ!
Low/Highみてなかった

>>175
正直、そういう用途でピンを弄るなら
プリンタ出力でやれ

178:デフォルトの名無しさん
04/07/10 17:15
>>175周波数が違えば振幅変調になるから 0 0000 0000 1 でも距離を離せばいけるかもしれないよ。

他に、例えば DTRとの間で送信するようにして、TXには常時送信してるようにしてDTRでON/OFFするとか

あるいは、PIC使えるなら PICにシリアル送信でコマンド送って PICで赤外送信したらどう?

179:163
04/07/10 17:28
みなさんお付き合い頂きありがとうございます。
>>177さん
LPTですか。 盲点でした。 LPTの扱いについてもこれを機にちょっと調べてみます。

>>178さん
2ピン使ってANDとるのもありですね。

TxDにbyte[]送るときに、 byte[] = 0x00なら DTR = LOW
それ以外で、Highにして。

早速やってみます!



180:デフォルトの名無しさん
04/07/10 17:53
>>179
and 取るというか、単純に2電間でLEDを点けるだけだよ。
TxD-GND間にLED入れてるんでしょ? GNDの代わりにつなぎ変えるだけ。

RS232Cでは、ショートした時の電流規格があった筈で、火災が起きないような電流に制限されてたから
リモコン用の赤外LEDなら壊れないとは思うけど・・・まあ抵抗入れた方がいいと思うけどね。

181:デフォルトの名無しさん
04/07/10 17:57
|3・)・・・

182:デフォルトの名無しさん
04/07/10 17:58
|3・)アルェーゴバクシッチャッタyo

183:ホンモノの163
04/07/10 20:09
しょうがねえなぁ…
COMポートを速度 115200bps、データ長 7bits、ノンパリティ、ストップビット長 1bit
で設定して、データとして 0x12 か 0x5B を連続して送出してみな。
TxDからきれいな38.4kHzの信号が出るはずだから。

184:163
04/07/10 20:24
>>183
ありがとうございます。
ちょうど>>174さんの方法だと57.6khzになるので困ってました。
0x12 は 0 0100100 1 で100,100,100でバッチリなるのでこれで行ってみます。

185:ホンモノの163
04/07/10 21:01
おっ!飲みこみが早いねぇ
その調子ならきっとうまく行くよ。

ちょっと気になるのは、TxDから直接取れる電流じゃ多分弱々なんじゃってこと。
昔の記憶を辿るとLEDには数100mA(ピーク時)を流した覚えがある。
そうしないと数メートルと離れられない。
もしかしたら今のLEDは高輝度だから大丈夫なのかもしれないが…

186:デフォルトの名無しさん
04/07/10 22:02
>>185
正直、PCからの出力でTr制御して
別電源で駆動したいところだ

187:デフォルトの名無しさん
04/07/10 22:09
アキバでLEDと抵抗買ってこい
今時のLEDは10mA流せば十分

188:デフォルトの名無しさん
04/07/10 22:13
なんか面白そうな事やってるなぁ。
夏休みの自由研究にでも出来そうなネタだ。


189:187
04/07/10 22:18
ああ、ただLED光らせるんじゃないのか・・・
IR-LEDでリモコン制御か、ログ全然読んでなかった
スマソ

190:デフォルトの名無しさん
04/07/10 22:21
>>189
そんなトコじゃないかと思ってた。



191:名無しさん@そうだ選挙に行こう
04/07/11 11:50
(´-`).。oO(X68000+ジョイスティックポートで学習リモコン作ったなぁ…)

192:名無しさん@そうだ選挙に行こう
04/07/11 14:09
昔は楽しそうだなあ

193: ◆Wsx33BP8MQ
04/07/11 18:57
162(170/173/175)です。
>>163さん
途中から番号間違ってしまってすいません。 トリップつけます。

38kHzのパルスを作るには0x12@7bitでいけそうなんですが、
0x00がやはりstopbitがついて 0 0000 0000 1 0 0000 0000 1 0...
になってしまうので、上ででた
TxD-IR_LED-CRD-DTR
にして、
bool pulse //LED,ONの時true
byte p = 0x12 l = 0x00 で、
this.serialPort1.BaudRate=115200;
this.serialPort1.DataBits=7;
if(pulse)
{this.serialPort1.DtrEnable = false;
this.serialPort1.Write(p,0,1);

}
else
{this.serialPort1.DtrEnable = true;
this.serialPort1.Write(l,0,1);
} }

としてるのですが、LEDはちゃんとpulse=trueの時だけ発光してるのですが、
機器が動作しない=コードが認識されてない 状態です。


194:名無しさん@そうだ選挙に行こう
04/07/11 20:01
>>162
発振はRとCとインバータでマルチバイブレータ作ったほうが簡単だと思うが。。。
あとIR-LEDが光ってるかどうかはビデオカメラ等でも確認できる。(CCDでは緑っぽく光って見える)

195: ◆Wsx33BP8MQ
04/07/11 21:21
PICで作った100mSecに何個パルスが来るか数える周波数カウンタに
TxDの出力を入れると…80Hzとか…
while(true)
this.serialPort1.DtrEnable = false;
this.serialPort1.DtrEnable = true;

しても1(ずっとHight)
無限ループ中に for(int i =0;i<4000<i++){}
な空ループ入れると8kHzくらいになるんですが。
いったいどこが悪いんでしょうか…
わけわかんなくなってきました…
WinLIRCはいったいどうやって高速にシリアルポート制御してるんだろう…
DTR出力ですら38kHz作れるなんて…

196:ホンモノの163
04/07/11 23:28
>>193
COMポートから 0x00 を送信する局面ってあるか?
赤外線リモコンってキャリアのON/OFFだけで変調かけるわけだから、
TxDでキャリアを送出するならタイマ割り込み契機でトランスミッタを
Enable/Disableすれば良いんじゃないかなぁ。
書かれたコードじゃどうに変調かけてるのかサッパリ分からんです。

>>195
そのカウンタってのにTxDを直接入れたのか?
TxD(というかCOMポートの出力)はTTLレベルじゃないのはOK?

197:デフォルトの名無しさん
04/07/11 23:41
PICがあるなら PICにデータ出力して送出してもらえば?
つうか そんな問題じゃないか。。

198: ◆Wsx33BP8MQ
04/07/11 23:49
>>163さん 長らくお付き合い頂きありがとうございます。

トランスミッタってのはどの部分をさしてるんでしょうか?
後、タイマ割り込みはμsecオーダーで機能するんでしょうか?

カウンタにはフォトカプラ経由で入れました。


で、さらに調べて、WinLIRCでTxDにIR-LEDをつないで送信して機器が動作するのを確認して、
LEDはずしてカウンタにたたき込んでも全然カウンタが拾えてないみたいです。
PICカウンタ自体は、555なんかで発振したのをたたき込むと16bit/100mSecまで確実にカウントできるので、

何が原因か調査中です。

199: ◆Wsx33BP8MQ
04/07/12 00:57
フォトカプラ使うのやめて
TxD抵抗-Red_LED-ベース
Vcc-コレクタ
エミッタ-10kΩ-GND(232C,PIC共通)
でエミッタ電圧をカウントするようにしたら無事カウントできました。

で、たぶん機器が赤外線受け手も動かない原因は
>>193で書いた0x00にstop bit 1がつくのと、
示したコードだと38kHzがでてないっぽいです

とりあえずコードの問題のようなので、いろいろがんばってみます。


200:ホンモノの163
04/07/12 01:28
>>198
トランスミッタってのはCOM?のデータ送信部のことだよ、この場合。

PCのタイマ割り込みでもH/Wとしてはμsec単位程度の精度は出る。
Windowsの上でどうかと云われると分かんない。調べてみてくれ。
尤も赤外線リモコンじゃμsecの精度は全然要らないと思うが…
WinLIRCとやらでも充分な精度の計時をやってるはずだから何等かの方法は
あるってわけだ。

>>199
>193のコードだと 1byte送出しておしまい、なんてことはない?よな…
まあがんばってくれ。

201:デフォルトの名無しさん
04/07/12 07:52
実機デバッグのまったくできない環境は、制御系の場合、けっこうあると思うのですが、
こういう場合、どうやって、実戦投入一発で決めたり、実機のない状態で、バグをつぶしたりするのですか?

202:デフォルトの名無しさん
04/07/12 09:24
>>201
脳内エミュレータ


203:デフォルトの名無しさん
04/07/12 09:37
>>201
"HILS" "検証"でググれ!

204:デフォルトの名無しさん
04/07/12 16:50
>>201
人生色々。 環境も色々。
実機デバッグ出来ないような環境だと、仕様さえまともに決まってない場合が多いしね。

自分が良くやるのは制御系なら簡単な中間言語スクリプトを作って
そいつのエミュレータをWindows上で作って、そいつで主な動作は仕上げるようにして、対応力を上げておき
先に元客にそいつを触って貰って実機来る前に大方を固めるパターンかな。


205:デフォルトの名無しさん
04/07/13 06:24
>>204
中間言語スクリプトと言うとPerlか何かですか?

206:デフォルトの名無しさん
04/07/13 06:37
>>205
なんでやねん。

207:デフォルトの名無しさん
04/07/14 08:30
>>205
そんな賢いもんじゃなくて、四則演算と内部関数呼び出しが出来る程度のものね。
言語仕様としては昔のbasicより貧弱な程度、中間言語はスタックマシンで十分実用になるよ。


208: ◆Wsx33BP8MQ
04/07/15 22:22
ちょっと間が空きましたが、進展なしです…
winLIRCの出力パルスを見てみたんですが、405と変な数で
もう何がなんだか分けわかんなくなってPICなぞ買ってみましたorz
まぁPICは別に使う予定なんですが、こっちも最悪PICかなとも思ったり…

209:163
04/07/16 21:02
>>208
> winLIRCの出力パルスを見てみたんですが、405と変な数で
ってのは、もしかして100ms間のパルスを数えたんじゃないの?
事象が100ms以下の場合のことは考慮してる?
赤外線リモコンって1シーケンスはせいぜい数10msだと思うんだよな。

210:デフォルトの名無しさん
04/07/17 09:20
赤外線リモコンは 変調 40KHz付近 (38〜42K)で 16周期程度が1単位になってる事が多い

1:1/1:3 とか 1:1/ 1:2 が1ビット つまり0,1で長さが異なる 固定長レートではない事が多い。


211: ◆Wsx33BP8MQ
04/07/17 13:26
ぇーっと大事な発見をしました。
URLリンク(elm-chan.org)
をみてたんですが、
100100100 を 送ると ピンの出力電圧としては -10V,+10V,+10V,-10V,+10V,+10V,-10V,+10V,+10V
になるんですね。

>>163さん
100msで数えてます。出力は合計39msくらいです。うち発光部が20msなので
20msで405だとキャリアが38kHzにならないんですよ…
winLIRCみるかぎり38kHz Duty1/2で出してるみたいなんですが。

212:デフォルトの名無しさん
04/07/17 13:52
>>193 >としてるのですが、LEDはちゃんとpulse=trueの時だけ発光してるのですが、

ほんとにこうなってるなら ±10Vで反転してるのは問題ないと思うが

213: ◆Wsx33BP8MQ
04/07/17 15:29
>>193
が間違えていたようです。
常に38kの変調かけてるつもりだったので、
duty1/3じゃなく2/3で光ってたみたいです。
ぁぅぁぅ

214: ◆Wsx33BP8MQ
04/07/18 22:29
笑ってください…ヘタレです…
555つかって38kHzのキャリア作って無事動作しました…

今の僕には100us単位でしか制御できないみたいです…
while(true)
{
this.serialPort1.DtrEnable=true;
this.serialPort1.DtrEnable=false;
}
ってコード書いてDTRを抵抗通してPICのカウンターに入れても
10.3kHz程度しかでないの…C#+シリアル通信ラッパーだと38kのキャリア生成できなさそうで…

調歩同期で0x6Dおくれば38kHz duty1/3でますが、こちらもいまいち
動いてくれないので…
可能性としてはまだ調歩同期ならいけそうな気もするのでがんばってみます…

215:デフォルトの名無しさん
04/07/18 22:35
>>214
いいやん。取り敢えず別法ってのはアリだよ。全部ソフトで
やらなあかんって事はないし、全部ハードでやらなあかんっ
て事もないしね。

ソフトで38kHzのキャリア作るのは宿題と言う事で今後も
研究してみるといいと思う。

216:デフォルトの名無しさん
04/07/18 23:54
>>214
なんか基本的なところで間違ってる気がするんだよな〜

217: ◆Wsx33BP8MQ
04/07/19 01:05
まとめ
・DTRを切り替えるのは遅い。
・TxDに115200bpsに 1101101(0x6D)を送ればduty1/3の38kHzになる
・ラッパーのWrite(byte[],int offset,int count)メソッドで
各要素が0x6Dの配列pulse[]を Write(pulse,0,発光時間(μsec)/78)
で送信
QueryPerformanceCounter(ref long);
で出力Low時間分待ち。
上に戻る。
でやってみましたがだめでした
>>216さん
ヒントください…

218: ◆Wsx33BP8MQ
04/07/19 01:13
できたーーーーーーーーーーーーー
217の内容読み直して自分で見直したらできたーー!!!

やったーーー
for(int i=0;i<len.Length;i++) //len[1]=(発光時間/78)μsec len[2]消灯時間そのまま(μsec) len[3](発光時間/78)μsec …
{
pulse=!pulse;
if(pulse)
{
last+=len[i]*freq/12820; // 78/1000000 = 1/12820
this.serialPort1.Write(p,0,(int)len[i]);
end = last + len[i+1] * freq / 1000000;
}
else
{
while (last < end)
{
QueryPerformanceCounter(ref lasttime);
}
}
}
でいけました!

219: ◆Wsx33BP8MQ
04/07/19 01:17
あ、ソースの
QueryPerformanceCounter(ref lasttime);

QueryPerformanceCounter(ref last);
です。板汚しスマソ
一応プログラム全体としては,high,lowを一行ごとにusec単位で書いた
テキストファイル読み込んで動作します。
6行目が味噌でした。 現在の時間を取るのに
送信終わった跡で、
QueryPerformanceCounter(ref time);
をかけずに自分で指定しないとだめだったみたいです。

長らくありがとうございました。
ASPと組み合わせて携帯からアクセスしてエアコンの効いた部屋に帰れそうです。

220:216==163
04/07/19 01:50
まずは良かったね。
ん? 0x6D なんてどっから出てきたんだよ!
ふ〜ん、そんなんでも動いちゃうんだヽ(^o^;ノ
勉強になりました。ありがとう

221: ◆Wsx33BP8MQ
04/07/19 11:30
0x6D=1101101
にstart stopがついて 0 110 1101 1
出力はこれを反転させて1 001 0010 0
のつもりだったんですが。

で…0x12,0xED,0x7Dとか0x11(これは適当) でも動いちゃいました…
結構アバウトというか何というか…
極めつけに0x00でも動きましたよ…

一応0x6Dが38kHz duty 1/3には一番近いと思うのでこれで行くつもりです。


222:デフォルトの名無しさん
04/07/19 16:30
>携帯からアクセスしてエアコンの効いた部屋に帰れそうです。
志低いなぁ、おい。w

まぁ、サボるために定時連絡電文発呼装置作ったエジソンよりはましか。

223:デフォルトの名無しさん
04/07/19 20:01
>>222
まぁ必要は発明の母だからな。

あれだ、目的意識がある分、所謂「言語やろうと思いますが、何作ったらいいでしょうか?」
って頭悪い奴よりは遥かにマトモかと。この経験はきっと何処かで生きると思うしね。

基本的にモノと言うものは人間が楽をする為に作る訳だしね。


224:デフォルトの名無しさん
04/07/19 22:27
>>223
>まぁ必要は発明の母だからな。
それを言ったのはエジソンだってことだね。
ついでに言えば、>221は「発明は1%のひらめきと、99%の努力」をも地で行ったわけだね。

225:デフォルトの名無しさん
04/07/19 23:08
>>224
んだな。まぁエジソンは若い頃は列車でボヤを出したり、>>222のように
手段に溺れて目的を逸脱したモノも作っちゃうんだけどね。それでクビ
になるのは当然なんだが。それもまた経験なのかも知れず。


226: ◆Wsx33BP8MQ
04/07/20 00:00
いろいろとご意見ありがとうございます。

99%の努力のうちまだ30%くらいしかできてない気がします。
残りの69%は受信部分…
これまではwinLircって別のソフトで受信したのを送ってたんですが、
DSRピンをIR受光モジュールの出力につないで、
100usecごとに読めばいけるかと思いきや全然そんなこと無いみたいで。
まだまだ長い道のりがまってそうです。

227:163
04/07/20 00:01
>>221
> 0x6D=1101101にstart stopがついて 0 110 1101 1
もう一度基礎からやり直せ。

> 出力はこれを反転させて1 001 0010 0のつもりだったんですが。
そういう論理レベルと物理レベルをごっちゃにするような考え方はすべきでない。

短いお付き合いでしたが以上を餞の言葉とさせて頂きます。

228:デフォルトの名無しさん
04/07/22 22:59
19じとか、20じとかに こんなこと書いてるなら、もう少しやってから帰ればいいのに・・・

229:デフォルトの名無しさん
04/07/24 15:09
多数の入力が非同期に入力され、
それに応じて、出力や内部状態を変化させる、
そういう場合にエレガントにコーディングする方法はないのでしょうか?
状態遷移を関数テーブルなどで組んだとしても、
入力が多数で、その入力の組み合わせで、次の状態が決まるようなケースだと、
状態遷移関数が複雑で長くなると思うのですが。

230:デフォルトの名無しさん
04/07/24 15:40
>>229
入力の検出手段を複数用意するとか

231:デフォルトの名無しさん
04/07/24 16:01
>>229
いっそラダーチャートの方がシンプルかつエレガントだったりして。


232:デフォルトの名無しさん
04/07/24 16:23
象かよ

233:デフォルトの名無しさん
04/07/24 20:46
>>232
それはエレフ(ry

234:デフォルトの名無しさん
04/07/25 00:09
>>231
ラダーはシンプルかつエレガントでしょ
グラフィカルで直感的に把握しやすい
>>229のような用途に使うために開発された言語なんだから
>>229もラダーを使ってみたら?

235:デフォルトの名無しさん
04/07/25 02:26
>>229
分割っつーか、個々の状態の組み合わせには出来んのか?

236:デフォルトの名無しさん
04/07/25 06:47
>>236
ラダーか。自分がやったなかでは、最も嫌いなものだな。20世紀に置いて
くるべきだって思うくらい嫌いだったな。

昔のBASICの悪夢を極端に増幅させてたな。ちょっと前なので、改善
されてるかもしれないが、自分が仕事中に感じたのは

(1) 基本的に機能拡張がないので、際限なく増えた命令
(2) 遅い、制御には問題ないが、処理には向かない。
(2) サブルーチンやライブラリもないので、カット アンド ペースト命
(3) 変数、I/Oはコイル番号。記憶力が良くないときつい。
(4) ソースをパソコンに読み出して編集とかできなかった。不便だった。
(5) 機種ごとの互換性がない。
(6) 人の書いたラダーなんか読めたもんじゃない。

オブジェクト指向どころか、構造化プログラミングも糞食らえの、
超プリミティブ環境。簡単な制御ならOKだと思うけど、結構複雑な制御も
しているみたいで、信じられなかった。

かなり偏見が入っている気がするが、自分はもう二度とやりたくない。

237:デフォルトの名無しさん
04/07/25 06:50
>>229
論理演算でさらっと


238:デフォルトの名無しさん
04/07/25 07:29
>>239
>そういう場合にエレガントにコーディングする方法はないのでしょうか?

もっと具体的な例を出してもらわないことには何ともいえないな・・・


239:デフォルトの名無しさん
04/07/25 12:31
>>236 かなり偏見が入っている気がするが
偏見ではない。

ラダーは、電気が流れると磁石が働き、スイッチが閉じることを知っているだ
けで設計できるもの。本来は機械屋さんが電気屋を介さずに、自分で機械系を
制御するときに使うもの。

でも、工場のラインの制御で使われることが多く、ラインの保守担当が理解で
きて、変更できるものとして使われている。

まともな頭を持っていたら、ラダーの設計なんてアホくさくてできない。
OOP を理解しているやつに、ラダー回路を設計させたら辞めてしまう。


240:デフォルトの名無しさん
04/07/25 13:14
だって、「エレガントに」なんておっしゃるんですもの〜(くすくす

241:デフォルトの名無しさん
04/07/25 14:17
夏を感じるぜ

242:デフォルトの名無しさん
04/07/25 18:04
まぁ>>239が偏見に満ちているのは間違いない事実だが。

単なるOOPバカだろ。


243:デフォルトの名無しさん
04/07/25 23:52
ラダーはクズだ

244:デフォルトの名無しさん
04/07/26 01:08
>236
今のラダーは、構造化プログラミングの影響を受けて、多少マシになっている

> (1) 基本的に機能拡張がないので、際限なく増えた命令
メーカーごとに、命令を増やしている。
しかし、ユーザー定義の命令を使えるものもある。
(だが、ラダーに無理矢理、シーケンシャルな処理を追加したような形となっているので、使い勝手はよくない。)

> (2) 遅い、制御には問題ないが、処理には向かない。
組込向けCPUよりも、大幅に汎用性を持たせているために、CPU規模の割りにはるかに遅いのは事実。
しかし、最近は、CPUパワーにものを言わせ、1msecスキャンのものも出ている。

> (2) サブルーチンやライブラリもないので、カット アンド ペースト命
最近は、サブルーチン、モジュール構成を使えるものが多い。

> (3) 変数、I/Oはコイル番号。記憶力が良くないときつい。
I/Oコンフィギュレーションのようなもので割付を行う。コイル、リレーは実アドレスではなく、変数で管理できる。

> (4) ソースをパソコンに読み出して編集とかできなかった。不便だった。
ソース、コメントもPLCに保存できる。

> (5) 機種ごとの互換性がない。
これは、進歩なし。

> (6) 人の書いたラダーなんか読めたもんじゃない。
これも進歩なし。ただ、どのプログラミング言語でも、同じことでは?

> かなり偏見が入っている気がするが、自分はもう二度とやりたくない。

・・・いろいろ、PLCを擁護しつつ、同意。
最近のトレンドを採り入れて、あまり凝ると、生産現場から、理解できない、メンテナンスできないとクレームが来るから。

245:デフォルトの名無しさん
04/07/26 02:17
漏れもラダー図を使う人種の発想は理解できないが、それで良いんじゃないかい。

「ソフト屋の言うことは信用するな」ってのが、メカ屋の鉄則らしいし、
同じ物を違う観点から見たほうがシステム全体の信頼性は上がるんでないの。

オブジェクト指向で設計しました、とか言うメカ屋がいたら逆に怖いと思う。

246:デフォルトの名無しさん
04/07/26 06:22
俺は職業ラダー使いだが・・・。JAVAもやってる。

確かに馬鹿みたいな言語は同意だが、ラダープログラムって超安定してるんだよねー。24時間365日絶対止まらない。
生産現場では抜群の信頼性を持つので重宝されている。

俺はラダーやってて、「こんな馬鹿みたいな言語やってたら将来ホームレスだよ」なんて心配したから、JAVAも勉強してる。
でも、最近思ったのは、JAVAよりもラダーの方が飯が食えそうだ(金になる)な。と思った。
だって中途半端なJAVA技術者→デジドカでしょ?
話によると、業界の方向性としては、どうやら組み込み系JAVAとラダーが融合していく方向性のようだ。どんな形になるか分からんが。。

俺は>>237さんに同意かな。

247:デフォルトの名無しさん
04/07/26 20:33
>>246
ちゅうか
ラダー = 論理演算のかたまり
なんだよね


248:デフォルトの名無しさん
04/07/26 20:45
>>247
組み方にもよる

249:229
04/07/26 22:54
で、組み込みマイコン制御で多数の非同期入力を扱うにはどうしたらよいのでしょうか?

250:デフォルトの名無しさん
04/07/26 23:08
>>249
>>230, >>231, >>235, >>237, >>238

251:デフォルトの名無しさん
04/07/26 23:09

これがほんとのメッセージループ




252:デフォルトの名無しさん
04/07/26 23:12
>>249
だから階層化して分割出来んのか? と言ってるだろう

最終的に導き出す状態が1つだからってなんでもかんでも
一つの状態遷移表にまとめる必要はないだろ

253:デフォルトの名無しさん
04/07/27 23:07
ロータリーエンコーダの発注の時、パルス数指定するの忘れて
100P/Rのが来てしまった。500P/Rのが必要だったのに…
素人過ぎだ俺。

254:デフォルトの名無しさん
04/07/28 03:46

バ ル ス


255:デフォルトの名無しさん
04/07/28 04:00
小は大を兼ねない

256:デフォルトの名無しさん
04/07/28 09:08
>>253
パルス数指定なしで、なんの疑いも無く100P/R
よこしてくる方も、なんかあれな感じだな

257:デフォルトの名無しさん
04/07/28 09:08
ロリータエンコーダ禁止

258:デフォルトの名無しさん
04/07/28 10:36
制服系?

259:デフォルトの名無しさん
04/07/28 12:20
援交だ

260:デフォルトの名無しさん
04/07/28 13:33
>>259
うまい

261:デフォルトの名無しさん
04/07/28 20:33
ロリータ援交だの発注のとき、年齢指定するのを忘れたら、10歳のが来た
14歳がよかったのに

262:デフォルトの名無しさん
04/07/28 21:15
ここでやれ
スレリンク(tech板)


263:デフォルトの名無しさん
04/07/28 21:55
知り合いの言葉を借りるとロリータの定義は、「初潮を迎える前の美少女」らしい。
となると14歳も10歳もロリータには当てはまりそうにないな。


264:デフォルトの名無しさん
04/07/28 22:20
>>263
ぐぐってみたら、平均年齢は12歳くらいらしいぞ

265:デフォルトの名無しさん
04/07/28 22:26
>>264
乙。今でもそんなものなのか。最近じゃ平均が10歳だと
思ってた。正直12歳ってのは20年位前の統計じゃない
かと疑ってしまった。スマソ

まぁ14歳がロリータだと思ってる>>261は、俺の知り合いに
失笑を買うだろうな。

だからなんだ? って言われると困るけどな。

266:デフォルトの名無しさん
04/07/28 22:40
流れからすると、>>261はパルスの話じゃないのか?
まあ、そっちの方はよく分からんけど。

267:デフォルトの名無しさん
04/07/28 22:44
>>266
空気読めてない奴ハケーンヽ(゚∀゚)ノ








>>253>>257>>259>>261


268:デフォルトの名無しさん
04/07/28 22:44
14歳のパルスを1.4分周すると10歳になりますか?

269:デフォルトの名無しさん
04/07/28 22:57
ラピュタが滅びます


270:デフォルトの名無しさん
04/07/29 10:24
>>269
そりゃパルスじゃなくてバルスだと突っ込んでみるテスト

271:デフォルトの名無しさん
04/07/29 12:24
>>269-270
概出
>>254


272:デフォルトの名無しさん
04/08/04 23:38
2種類以上の割り込み要因による割り込みがあるとき、
その割り込みが重なったときに、どうやって対処する?
プライオリティを考える?
多重割り込みを許可する?
ケースバイケースだろうけど

273:デフォルトの名無しさん
04/08/05 02:31
あーここ制御系スレだったね。
>>272
プライオリティ順に処理する。
もしどちらもプライオリティが高いなら、
割り込み処理を分割して最低限のことだけやって
続きは別の機会に片付ける。


274:デフォルトの名無しさん
04/08/07 01:22
>>272
多重割り込みを許可するのと複数の割り込みが
Pendingされてる時は、別の問題だと思うが?

どっちのことを言ってるんだ?
その質問だとよくわからんぞ

275:デフォルトの名無しさん
04/08/07 07:08
ようするに反応時間を満足するように作るしかないわけで、
  満足出来なければクロックを上げるてなんとかするとか、 
  外部ハードで反応時間の余裕を上げるとか

多重割り込みで解決出来るケースはそれほど無いだろう。
まあ多重割り込みで解決出来るくらい割込処理に負荷かけてるなら別だが

276:デフォルトの名無しさん
04/08/09 07:36
クロック上げてくれと言ったら却下された
俺が選定したわけじゃないのに

277:デフォルトの名無しさん
04/08/10 01:53
>>276
そんなタイトなクロックを決める方がアホかと

278:デフォルトの名無しさん
04/08/10 08:56
原子力発電所のプログラム書いたことある人いる?

279:デフォルトの名無しさん
04/08/10 09:07
います

280:デフォルトの名無しさん
04/08/10 09:15
あんまり多くは語れないか。

281:デフォルトの名無しさん
04/08/10 17:40
>>279
原子力発電所/飛行機/車などの制御プログラムを、どうやってテストしているか教えていただけ
ますでしょうか。

私がもし飛行機制御のプログラムを作ったら、その飛行機には乗りたくありません。ましてや他人が作った
プログラムが制御している飛行機なんて絶対に乗りません。

282:デフォルトの名無しさん
04/08/10 17:47
飛行機って、製作元の異なる3つくらいプログラムが、
互いに結果を照合しあって合致してるかどうか
確認してるんじゃなかったっけ?


283:デフォルトの名無しさん
04/08/10 18:31
>>281
男なら覚悟を決めて、実機デバッグ
もちろんテストパイロットはプログラマーなw

284:デフォルトの名無しさん
04/08/10 19:01
飛行機なら、ハードのバグよりも操縦士のバグの方が問題視されてるよな。

285:デフォルトの名無しさん
04/08/10 19:08
>>284
どういう意味だ?

286:デフォルトの名無しさん
04/08/10 19:20
>>285
パイロットが予想外な警告に対応できなかったりとか。

にしてもさ、未だに事故があるたびに、ボイスレコーダーが
どうとか言ってるんだけど、本当はコックピットの全ての
オペレーションに大してログ取ってるんでしょ?取ってないの?

287:デフォルトの名無しさん
04/08/10 19:28
>>286
パイロットだって人間だぞ?ミスはあるし混乱もする
おまえだって人間だろ?ミスしないのか?混乱しないのか?

288:デフォルトの名無しさん
04/08/10 19:33
>>286
フライトレコーダーはあるが、こまかい操作まで取っているものではない

289:デフォルトの名無しさん
04/08/10 19:36
これは中々象徴的な出来事だった。
URLリンク(www.asagaku.com)

で、やっぱりボイスレコーダーがどうとかやってる。
まだこんなことやってるの?って感じ。

290:デフォルトの名無しさん
04/08/10 19:38
あー、もちろん空の世界はアナログ、デジタル混在、
新旧よりどりみどりの、いろんなシステムが飛んでるわけだから、
たまたま原始的な方法を用いた、旧来の飛行機が事故にあった
という話は分ります。

291:デフォルトの名無しさん
04/08/10 19:42
あんなただの鉄のかたまりが飛んでいるのに、空港も空路も満杯なのに
事故は多くないんだよ。

292:デフォルトの名無しさん
04/08/10 19:43
まあ、ヒューマンエラーを引き起こすようなソフトは仕様の不備というのもあるわな
それよりエアバスみたいにホントにバグで落ちる方がこわい
あと、最近流行の自動車のリコール
ソフトのバグでリコールとかないの?

293:デフォルトの名無しさん
04/08/10 19:46
>>292
URLリンク(u-cfc.mitsubishi-motors.co.jp)
こんな感じの?検索したらいっぱいでたが。

294:デフォルトの名無しさん
04/08/10 19:46
>>292
航空機産業はエアバスの1人勝ちらしいですな。
ボーイングもうダメポらしい。

っていうか、マ板に制御ネタのスレあったっけ。
あればそっちでやるべきか。
でも、最近のマ板のあまりラウンジ化で、ひとが
いないからなあ。

295:デフォルトの名無しさん
04/08/10 23:32
>>294
ここ

制御系プログラマーこそ神
スレリンク(prog板)


296:デフォルトの名無しさん
04/08/11 19:24
ながーい割り込み処理のトンネルの中に
遅くてもOKな処理がポツポツと浮かんでいる上越新幹線みたいなプログラムを組んでみた
これって変?

297:デフォルトの名無しさん
04/08/11 22:02
>>296
書いてることが変

298:デフォルトの名無しさん
04/08/11 22:40
上越新幹線の辺りを説明してくれ

299:デフォルトの名無しさん
04/08/11 22:48
>>298
トンネルを抜けるとまたトンネル
割り込み処理が終わるとまた割り込み処理
ということでは?

300:デフォルトの名無しさん
04/08/12 22:10
普通に割り込みだけのプログラムを作っているが何か?

301:デフォルトの名無しさん
04/08/12 22:16
いや、別に・・・・w

302:デフォルトの名無しさん
04/08/13 01:07
今日ビックカメラ行ってきたんだが、マッサージチェアって
凄いな。もはやマッサージロボットと呼んでもいいだろ。

金と置き場があれば一台欲しいとオモタヨ

303:デフォルトの名無しさん
04/08/13 05:10
Z80とかって割り込みベクタとハンドラ作ってHALTして終わり
っていうプログラムの書き方しなかった?


304:デフォルトの名無しさん
04/08/13 16:35
HALTしたら、リセットしか受付なくないか?

305:デフォルトの名無しさん
04/08/13 18:44
>>304
そんなことはない

306:デフォルトの名無しさん
04/08/13 21:55
>>305
じゃあ、割り込みハンドラから帰ってきたら、どこへ行く?
HALTの次の命令???

307:デフォルトの名無しさん
04/08/13 23:22
>>304
DI
HALT
するとそうなるかな?
あ、NMIを受け付けるか。

>>306
そう


308:デフォルトの名無しさん
04/08/13 23:36
昔のCPUはそんなシンプルなつくりしかできなかったんだよな
凝ったもの作ろうとしても
OSなんか載らないし

309:デフォルトの名無しさん
04/08/14 04:50
>>306
0000H
0008H
0010H
0018H
0020H
0028H
0030H
0038H
0066H
の中から選べる。


310:デフォルトの名無しさん
04/08/14 04:52
>>308
Z80系にはCP/Mという立派なOSが載っていた

311:デフォルトの名無しさん
04/08/14 10:50
>>309
それは戻り先じゃないっしょや。
0-0x38がRST0-RST7の割り込みベクタ。
0x66がNMIの割り込みベクタ。
割り込みモードによっては0x00-0xffをバスから与える。

>>306
処理が終わったらHALTしておく。
つまり、割り込みハンドラから戻らない。


312:デフォルトの名無しさん
04/08/14 15:57
むかーし、取引先が新規に自社CPUをつくった。
NMIがマスクできる仕様だった・・・・・・(;´Д`)??????

でも、そのMPU関連の仕事くれたから(・∀・)イイ!!

313:デフォルトの名無しさん
04/08/14 17:04
それはNMIと呼ばないのではw

314:デフォルトの名無しさん
04/08/14 19:49
打ち合わせの時、「そのNMIはマスク出きるか、否か」の確認は取ったが、
その点以外は誰も突っ込まなかった。
カラスは白い場合もあるんだな、って思ったよ。

315:デフォルトの名無しさん
04/08/14 21:22
書込み可能なROMみたいなもんだな。

316:デフォルトの名無しさん
04/08/14 21:27
そのたとえはいかがなものかと

317:デフォルトの名無しさん
04/08/15 06:19
リセット入力をマスク出来るCPUみたいなもんだな

318:デフォルトの名無しさん
04/08/15 10:16
美子っていう名のブスみたいなもんだな。
誰も突っ込まないところも同じ。

319:デフォルトの名無しさん
04/08/15 10:21
>>317
 設定EPROMレジスタでリセット入力端子を汎用入出力に出来る一チップマイコンは普通にあるけどね


320:デフォルトの名無しさん
04/08/15 12:54
バグっててリセットできないとむかつく。ノートPC使ってるが、ハングッたら
電源OFFさえできないのでバッテリーはずして電源ケーブルを
抜かなきゃならん。ヽ(`Д´)ノ 
何を考えて設計しているのかと小一時間・・・

321:デフォルトの名無しさん
04/08/15 13:01
>>320
電源スイッチ長押し

322:デフォルトの名無しさん
04/08/15 15:02
>320
今時、電源スイッチ長押しでだめなノートPCあるの?
それとも自分の無知を棚上げ...

323:320
04/08/15 15:37
>>231>>232

え?電源スイッチ長押し・・・・・・?あ、ああ。そうだよ。そうとも

>>それとも自分の無知を棚上げ...
((((;゚Д゚)))y-~~ガクガクブルブル

・・・嫌だな。釣りだよ。釣り。
今時 知らない香具師いるわけないじゃん。w
次にハングしたら、慌てず騒がず、いつもの様に電源長押しで対処さっ ♪

                ∩
                ( ⌒)      ∩_ _グッジョブ !!
               /,. ノ      i .,,E)
              ./ /"      / /"
   _n グッジョブ!!  ./ /_、_    / ノ'
  ( l    _、 _   / / ,_ノ` )/ / _、 _    グッジョブ!!
   \ \ ( <_,` )(       /( ,_ノ` )      n
     ヽ___ ̄ ̄ ノ ヽ     |  ̄     \    ( E)
       /    /   \   ヽフ    / ヽ ヽ_//




324:デフォルトの名無しさん
04/08/15 16:20
漏れのノートPCの電源スイッチは落下のショックで押せなくなったのだが。

>>320
餅搗け。レス番間違ってるぞ。

325:デフォルトの名無しさん
04/08/15 17:01
>>324
起動できないね

326:デフォルトの名無しさん
04/08/15 18:34
>>325
大丈夫、ゼムクリップを使えばなんとか端子を接触させられる。
一度起動したら後はサスペンドかリセットしかしないし。
#サスペンド/サスペンドからの復帰は蓋の開け閉め。

327:デフォルトの名無しさん
04/08/18 11:44
割り込みで書き込み、普通のルーチンで読み込みするとデータが化けるんだけど、何で?

328:デフォルトの名無しさん
04/08/18 12:01
色んな原因が考えられる。一概には言えないので、
なにをどうしてるか、環境とかをUPしてください。


329:デフォルトの名無しさん
04/08/18 13:14
>>327
バグってるから

330:デフォルトの名無しさん
04/08/18 15:33
>>327 volatile付けた?

331:デフォルトの名無しさん
04/08/18 17:12
多いのが 8bitマイコンで割り込みで 16bitのINC をさせたりしてるのを
メインで比較しようとしたらとかのミスだね

332:デフォルトの名無しさん
04/08/18 19:02
メイン側の比較の最中に割り込みが起きるとアボーンというわけか・・・

333:デフォルトの名無しさん
04/08/18 21:23
int幅より大きい変数を扱う場合は化ける可能性がある
あと、構造体やデータブロックを扱うときは
メインでアクセスしている最中に割込が入れば、
割込前と割込後でデータに整合性がなくなることがある

334:デフォルトの名無しさん
04/08/19 07:47
単純に割り込み禁止・許可をすればいいんじゃない?

335:デフォルトの名無しさん
04/08/19 07:48
質問したひともういない?

336:デフォルトの名無しさん
04/08/19 16:39
セグメンテーション・フォールト って
叫んでみたんだけど、まるで何かの必殺技みたいだよな

337:デフォルトの名無しさん
04/08/19 17:01
>>336
プログラムを一発で停止させる必殺呪文

338:327
04/08/20 22:07
帰郷してました(^^;

職場の先輩に聞いてみたら、やっぱり>>331>>333のような話でした。
でも、割込禁止を使うと割込できるところが少なくなってしまうという問題があって。
割込って難しいですね。

339:デフォルトの名無しさん
04/08/20 22:20
>>338
複数命令にまたがって読むほんの数バイトのコードのとこだけ割り込み禁止にすればいいんだよ


340:デフォルトの名無しさん
04/08/20 23:08
>>338
割り込みは不必要に多用される傾向があります。

割り込みを使うと、今回のようなボラタイルなデータの発生があります。どの
データがボラタイルか明確ならば良いのですが、注意していても見逃しやすい
ものです。通常は、割り込みルーチンを先に作りあげ、後からはできるだけ
いじらないようにします。

割り込みの多用は、プログラムを難しくすること以外に CPU の時間不可を
消費することです。急いでもいないものに割り込み処理をさせることで、
本当に高速に処理しなければならない処理が遅らされてしまいます。

残念ですが、最初から、時間不可を適切に配分した制御プログラムの設計は
めったに見られません。

341:デフォルトの名無しさん
04/08/20 23:26
>>340
 今回の件はvolatile関係無いんじゃ?
 volatileつけてても、下位の計算と上位の計算の間に、割り込みルーチンにより変数が
変化したら壊れた値を読んでしまう。

342:デフォルトの名無しさん
04/08/21 01:15
どうしても割り込み使いたくないなら、排他制御でぐぐれば
何かよさげな方法が見付かるのではないかと。
atomic性を保証する手段はいくつかあるし。

まあ割り込み禁止してしまうのが簡単・確実だと思うが。


343:デフォルトの名無しさん
04/08/21 02:10
>>342
AVRとかでの推奨は、16ビットレジスタは、
unsigned int TIM16_Read_TCNT1(void)
{
unsigned char sreg; /* ステータスレジスタ一時保存変数定義*/
unsigned int i; /* TCNT1読み出し変数定義*/
sreg = SREG; /* 現全割り込み許可フラグ(I)を保存*/
_CLI(); /* 全割り込み禁止*/
i = TCNT1; /* TCNT1値を取得*/
SREG = sreg; /* 全割り込み許可フラグ(I)を復帰*/
return i; /* TCNT1値で呼び出し元へ復帰*/
}
というふうにしてヤレとなってますな。


344:デフォルトの名無しさん
04/08/21 08:42
>>338
割り込みで16bitのカウンタを実装しないというのもシンプルで有効な戦法だよ。

割り込みでは8bitのカウンタを inc だけして
メインではそのカウンタがゼロでなければ、ひとつdecして16bitカウンタを1つ動かす。

メインで実際のカウンタを実装するわけ


345:デフォルトの名無しさん
04/08/21 11:55
341>今回の件はvolatile関係無いんじゃ?
C 言語の volatile じゃなく、英語での volatile の意味と解釈してください

346:デフォルトの名無しさん
04/08/23 07:45
データブロックの場合はバッファを持たせて、ポインタを使えば、
バッファを指すポインタをつけ換えるところだけ割り込み禁止にするだけでよいので、
割り込み禁止の影響は最小にできる

347:デフォルトの名無しさん
04/08/23 08:38
>>346
その方法ならReadポインタ Writeポインタを別にすれば、割り込禁止も無くせるね

348:デフォルトの名無しさん
04/08/23 09:38
>>347
ReadポインタとWriteポインタが重なったときはどうする?

349:デフォルトの名無しさん
04/08/23 11:19
>>348
buff1
buff2
 ・・・
buffN
 とバッファがあるとしよう
PointerR PointerW が 最初 buff1を示しているとする。 
PointerW は割り込みでその位置に書いて 次のバッファを示すように更新される
PointerR はメインで、PointerWと値が違うときに、その位置を読んだ後に次の位置に更新される

たとえば、割り込み周期内でメイン内で1回以上呼ばれるなら、バッファのサイズは2でよい。

さて問題。
PointerWが2バイトで表現されたとして、メインの比較途中に割り込みが起きたとして、
それが誤動作の原因になるか?


350:デフォルトの名無しさん
04/08/23 15:18
>>340 デバイスドライバのトップハーフとボトムハーフみたいに、
「本当に必要な箇所のみ割り込みで動作」させるというのが解?

351:デフォルトの名無しさん
04/08/23 15:52
>>350
イエス

352:デフォルトの名無しさん
04/08/23 16:26
>>349
PointerW と PointerR の不一致検出なら
PointerRは割り込み側で更新されないから誤動作しないと思う

差などの演算結果を利用してたりするとダメダメ





353:デフォルトの名無しさん
04/08/23 16:33
>>352
もっとも比較のしかたによっては一周期検出が遅れる場合はあるでしょうから
それでタイミングが間に合わなくなるようだと誤動作するということになるですね
ほんなとこに神経使わなくていいように素直に割り込み禁止かけるのが吉
デバッグや機能追加でハマル原因


354:デフォルトの名無しさん
04/08/23 23:08
>>340
>残念ですが、最初から、時間不可を適切に配分した制御プログラムの設計は
>めったに見られません。
わたしゃ8ビットCPUのしょぼいコードしか書いたことないから偉そうなことはいえないけど、
「時間負荷の配分」がそんなに難しい問題とは思えない。

要はイベントaに対応する必須の処理を処理Aとすると、処理Aをブロックする処理(処理A自身を
含む)の合計時間がイベントaの最短の発生間隔を超えないようなコードを書くだけ。

あとはゲームや動画の分野では初歩の初歩である「忙しいときは
やってもやらなくてもいい処理は諦める」ようにするだけ。
これは時分割ルーチンのフラグをメインの中でポーリングするようにすれば
自然とそうなる。

355:デフォルトの名無しさん
04/08/24 00:29
>>349
ポインタをインクリメントするところだけは割り込み禁止にしないと危なくないか?
厳密には安全な場合だってあると思うが

356:デフォルトの名無しさん
04/08/24 11:34
HEW/C++では関数ポインタをvoid *で使えないみたいです。
何を定義したら良いですか?

357:デフォルトの名無しさん
04/08/24 12:23
>356
void (*pfunc)();

キャストするときはこんな感じ
pfunc=(void(*)())func;

358:デフォルトの名無しさん
04/08/24 14:49
>>355
良く考えれば、それぞれのポインタのインクリメントは割り込みとメインでされて
それぞれの不一致比較だけなので、問題無いと判ります。

危険そうだから保護というのは一見正しそうにみえて深く考えてなく
危険なのに保護されない原因になるので注意。

359:デフォルトの名無しさん
04/08/26 21:27
>>358
下の2行が なんか 心に響いた

360:デフォルトの名無しさん
04/08/27 02:51
SH3を扱っている方で、
マニュアルに、多重割り込み時のレジスタの保存はユーザがやれみたいな記述があったと思いますが
gccで開発するとき、このあたりを意識していますか?
ちゃんとコンパイラが吐き出したコードを見ればいいのでしょうけど
アセンブラが苦手なもので。。。
ご教授ください。

361:デフォルトの名無しさん
04/08/27 08:52
>>360
そんな人はこの業界から去ってください。
海外に発注したほうがマシだ。

362:360
04/08/27 09:53
>>361
ここは質問スレかと思った。すまんね。

363:デフォルトの名無しさん
04/08/28 03:02
>>360
意識以前にそんな濃いとこはアセンブラで書けよ


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4869日前に更新/237 KB
担当:undef