COUNTER



新BLOG
 
新BBS
MN-BBS
旧BBS
CALENDAR
S M T W T F S
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30     
<<  2024 - 04  >>
 
LOGIN
現在モード: ゲストモード
USER ID:
PASS:
CATEGORIES
ARCHIVES
PROFILE
OTHERS
    処理時間 0.301335秒
POWERED BY
POWERED BY
ぶろぐん
DESIGN BY
ブログンサポート
          
---自作MPGワイヤレス化 (15)---
 自作手パ(MPG)をワイヤレス化するのにアダプターを作製

 し、後は、ケースに組む状態になってます。

 ただ、念のデータの取りこぼしを調べたら、パルスジェネレータ

 を早く回すと、約半分の取りこぼしがあったので、受信側の

 プログラムにリングバッファーをいれました。

 リングバッファーをいれることで、ほぼデーターの取りこぼし

 がなくなりました。

 
 
 多少、疑問が残ったので、送受信のデーターの取りこぼし

 を調べるのに、ローコストLCDシリアル通信モニター

 作製しました。

 これだけでは、ただデーターの表示をするだけなので、

 カウントしたデータを計測してターミナルに表示できるように

 基板とプログラムを作成しました。

 基板といっても、PICにバスコンとICSPの端子をつけ
 
 ただけのものです。

 

 比較的短時間で、ほぼ動くようになりましたが、二つほど

 ドツボにはまって、二日ほどもがくことになりました。

 
 一つは、リングバッファーの操作でした。「s」のキャラクター

 が入力された一つ前のデーターをカウントのキーにするのに、

 リングバッファーの読み取りのポインターを「s」の一つ前に

 もどせばいい、と思いこんでいました。これが、ドツボの始まり

 でした。

 いくら、やっても、思ったキーになりません。

 読み込んだデータを、デバッグ用に表示してみて、やっと

 分かりました。

 データを取り込んだ後、ポインターを次の読み込みにそ

 そなえて、一つ進めていたのです。

 本来なら、ポインターを二つもどさないとだめなわけでした。

 「-1」としていたところを「-2」にしてやっと解決です。


  もう一つは、久しぶりに使ったprintf( )のフォーマットの間

  違いでした。

 「int」の「%4d」としなければならないところを、「char」の

 「%c」としていました。当たり前に、表示されないので、

 あれこれいじって、やっとprintf( )のフォーマットにたどり

 つきました。

 昔、PC用に、Cであれこれやっていたころは、printf( )が

 大嫌いで、直接ビデオラムを操作して表示する関数等を作って

 使ってました。

 今回は、ターミナルへの表示位置を決めるのに、printf( )を

 つかって、エスケープシーケンスの使いまくりでした。

 

 とりあえずのプログラムです。

 main.c

 例によって、ゴミが沢山のこっています。表示をもうちょっと洗練

 させたいなと思ってますが、計測中の表示をやめて、計測終了

 後に表示させた方が、いいのかなと、思案中です。Webはくしゅ

| mabo52 | 11:11 | comments (4) | trackback (0) | DIY:: -MPGワイヤレス |
コメント
oldmanさん、こんばんは。引き続きありがとうございます。

oldmanさんおっしゃるように、A相B相の立ち下がりの検出の方法が思いつかなかったことも、今回のようなプログラムにした一因です。

でも、oldmanさんのNOT・A相を作ればいい、というお話をきいて、今回も目から鱗でした。これでしたら、私にもできそうです。

受信側は、
switch(Buffer){
case \'A\':RA0=1;//A相-立ち上がり
break;
case \'a\':RA0=0;//A相-立ち下がり
brak;
case \'B\':RA1=1;//B相-立ち上がり
break;
case \'b\':RA1=0;//B相-立ち下がり
break;
}
で、パルスの生成が可能なんでしょうか。追従できるのかどうか、ちょっと分かりませんが、やって見ようと思います。ありがとうございました。
| mabo | EMAIL | URL | 15/12/06 21:16 | AbwKzIS6 |

maboさん、こんにちは。

>多分、同期をとならないとだめだろうな、と言うことで、断念いたしました。
との事ですが、しっかりと割り込み処理( = 同期処理!)をされてますよね。
(1) A相、B相の信号から、NANDを使って notA相とnotB相という逆転した信号を作る
(2) これら 4個の信号を RB1~RB4に接続する
とする事で、PIC 16F1783 でA相とB相および not-A相とnot-B相信号の立ち上がりを送信する事が出来ます。

つまり、例えば、
・A相が \'on\'になった時に 文字\'A\'を送信し、\'off\'になった時( = not-A相が\'on\'になった時)に 文字\'a\'を送信し
・B相が \'on\'になった時に 文字\'B\'を送信し、\'off\'になった時( = not-B相が\'on\'になった時)に 文字\'b\'を送信し
て、A相/B相の信号変化のタイミングを通知する訳です。
受信側では このタイミングで A相/B相の信号をon/offすることで、信号線同士の『同期が取れた』事になります。

難しく考えないで、デジタル信号を伝送するには その信号が\'on\'になった時と\'off\'になった時を通知するという基本に立ち返る事です(ひとつのデジタル信号あたり2個の割り込み処理が必要ということです)。

混乱の原因は X,Y,ZやX1,X10,X100の信号は \'on\'になった事だけを通知すれば良いのだから A相/B相も \'on\'だけを通知すべきとの誤解だと思います(A相/B相の\'off\'になったという情報が無いので タイマーで補完せざるを得ない)。

X,Y,Z等の信号は 単独の事象では無く相互に関係しているので(ex. Yを\'on\'にすると XとZは\'off\'になる) \'off\'の通知が省略できるだけです。
例えば、モーターを動かすスイッチを考えると、スイッチの \'on\' 及び \'off\' を通知しなければいけないけど、スタートボタンとストップボタンを使うのであれば、スタートボタン及びストップボタンの \'on\' のみを伝えれば良い訳です。
(この例では、モーターの制御には、何れにしても 2種類の情報の通知が必要という事です)。
| oldman | EMAIL | URL | 15/12/06 12:21 | r0ohnno6 |

oldmanさん、こんばんは。お久しぶりです。書き込みありがとうございます。また、アドバイスありがとうございます。

アドバイスの内容、おぼろげながら理解できるのですが、能力不足でしょうか、今のところ実行には移せそうにありません。

無線化にあたって、MPGがどのような信号作ってるのか、分かりませんでしたので、トライアンドエラーで、似たような信号を作ってみました。
MPGの信号をオシロで見てみると、回転速度に応じて振幅にも幅があるようですが、プログラムが面倒そうなので、固定の振幅にしました。

MPGの信号、本来なら、同期をとらないといけないと思うのですが、今の私の、力では無理なので、全部、一端、キャラクターに変換して、キャラクターを送信し、受信側で、MPGは信号の生成をしています。
ですので、振幅等は、変化させていません。

oldmanさんのおっしゃるように、

>A相/B相パルスを直接無線伝送した方が簡単じゃないでしょうか

の方法もちょと頭よぎりましたが、多分、同期をとならないとだめだろうな、と言うことで、断念いたしました。

いつか、oldman さんのおっしゃるような方法ができるようになるかなあ、なんて・・・。還暦を3年ほど過ぎた年齢で、ちょっと、無理のような気もしますが・・・・。(笑)
| mabo | EMAIL | URL | 15/12/05 22:17 | AbwKzIS6 |

maboさん、こんにちは。

データの取りこぼし-受信側のプログラムにリングバッファ-の記述をみて?となり、過去ログを見させて頂きました。

ワイヤレス化 No.14 のcプログラムを見ると、
- 7.5mSecで A相/B相のパルスを生成
- (MPGを毎秒1.3回以上の速度で回転させると)パルス発生処理が間に合わなくなるのでバッファリング処理
していますが、この A相/B相のパルス幅を5mSec(or 周波数 133Hz)に制限する意味は無いように思えます。

ワイヤレス受信部 - SmoothStepper - USB - パソコンの間なら最低でも1kHz程度のパルス処理ができるハズですので
A相/B相のパルス幅はMach3(パソコン)の処理速度次第ではないでしょうか( ex. パルス幅 1mSec ?)。

また、「手パ(手動パルスジェネレーター)切り替え器制作(8)」内の「今回の設定は、諸兄の設定とほぼ同じです。」に行って「 手パの設定(1)」を見ると、
SmoothStepper(以下SS)に接続-A相 B相が主力される信号をポート3に入れます。
という箇所に目がとまりました(何せ ナナメ読みなもので ^^;)。
A相/B相パルスをDIR/Clockに変換 - 無線伝送 - Dir/ClockをA相/B相パルスに変換(含むバッファリング)
の替わりに、A相/B相パルスを直接無線伝送した方が簡単じゃないでしょうか( どこか読み落としているかも ? )。
| oldman | EMAIL | URL | 15/12/05 16:49 | r0ohnno6 |


コメントする









この記事のトラックバックURL
http://mabo52.sakura.ne.jp/tb.php/985
トラックバック

こんな物欲しいな
CLOCK
NEW ENTRIES
COMMENTS
    ---SPINDLEのPWM制御 (その2) (7)
  • TR >06.18
    ---番外編---
  • TR >06.02
    ---SPINDLEのPWM制御 (その2) (5)
  • mabo >05.30
保留中コメント:10件
LINKS
    相互リンクさせていただいてます。
  • The Rider
Search Box
名言集
メール
   
連絡は下記から
名前:

メールアドレス:

件名:

メッセージ(必須):


TOP PAGE