C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: サンハヤト キースキャンボード MT−E503 出力設定


(過去ログ 84 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■49579 / inTopicNo.1)  サンハヤト キースキャンボード MT−E503 出力設定
  
□投稿者/ tkana3 (63回)-(2010/05/10(Mon) 17:15:54)

分類:[C/C++] 

こんにちは。

標記件に関して質問お願いします。

まずは、MT-E503の取説です。
http://www.sunhayato.co.jp/products/item_data/MT-E503_Manual_SG087036.pdf

2のポートに関してですが、スキャン信号とスキャン信号アウトプットイネーブル
が「出力」になっています。このIC SN74HC139PWRを調べても間違っていないようです

SN74HC139PWR
http://pdf1.alldatasheet.jp/datasheet-pdf/view/205684/TI/SN74HC139PWR.html

例えばこの設定を、ポート5にこれらのビットを割り当てるとして。
6b アウトプットイネーブル(ローアクティブ)
5b スキャン信号ビット1
4b スキャン信号ビット0
3b LEDデコーダビット3
2b LEDでコードビット2
1b LEDでコーダビット1
0b LEDデコーダビット0

void main(void)
{
PCR5 = 0xf0;   //コントロールレジスタ
             //上位は出力 下位は入力
PDR5 = 0x00;   //初期化 「0」は違うと思います。
             //「0」に設定するとアウトプットイネーブルが
             //ローアクティブであるためSW1・SW5・SW9・SW13
             //のみ有効になり、スキャン信号の他の値「1・2・3」
             //を拾うことができなくなります。

このスキャン信号が入力であるなら設定できるのですが、出力時にはどのように
設定したらよいのでしょうか。長文ですみませんがよろしくお願いします。
引用返信 編集キー/
■49583 / inTopicNo.2)  Re[1]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ 774RR (500回)-(2010/05/10(Mon) 19:04:58)
何がいいたいのかさっぱりわからんのだが、ポート5って何?
何かマイコンで制御するわけ?
この回路図が何を主張しているか読み取れて、どうアクセスすればいいか理解できているわけ?

説明がまったく足らん。
引用返信 編集キー/
■49595 / inTopicNo.3)  Re[1]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ .SHO (1326回)-(2010/05/10(Mon) 23:57:06)
No49579 (tkana3 さん) に返信

774RRさんと同じく、なんだかよくわかんないけど…

> 例えばこの設定を、ポート5にこれらのビットを割り当てるとして。
> 6b アウトプットイネーブル(ローアクティブ)
> 5b スキャン信号ビット1
> 4b スキャン信号ビット0
> 3b LEDデコーダビット3
> 2b LEDでコードビット2
> 1b LEDでコーダビット1
> 0b LEDデコーダビット0

このビット割り当てが正しいとして

> void main(void)
> {
> PCR5 = 0xf0;   //コントロールレジスタ
>              //上位は出力 下位は入力
> PDR5 = 0x00;   //初期化 「0」は違うと思います。
>              //「0」に設定するとアウトプットイネーブルが
>              //ローアクティブであるためSW1・SW5・SW9・SW13
>              //のみ有効になり、スキャン信号の他の値「1・2・3」
>              //を拾うことができなくなります。

このソースから想像するに

PDR5 = 0x10 とか
PDR5 = 0x20 とか
PDR5 = 0x30 とか
でいいんじゃないの?

引用返信 編集キー/
■49602 / inTopicNo.4)  Re[2]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ tkana3 (64回)-(2010/05/11(Tue) 09:21:32)
SHO さん 774RRさん

説明不足失礼しました。
長文で申し訳ありません。

MPU h8/3694
マザーボード MB-RS10(そんなに重要ではないですが)
制御対象 キーボードスキャンのテスト
     
として、実験している段階です。16個の押しボタンキーがありますので、例えば16個の
それぞれのLEDを光らせたいと思います。

>何がいいたいのかさっぱりわからんのだが、ポート5って何?

h8マイコンの入出力を制御しているものです。h8シリーズですと大体ポート1〜8+ABポートがあり
それぞれ、8ビットで構成されています。ですから単純計算で、80個のビットの操作ができます。
兼用のものや使えないポートもありますので、この数は前後します。

ポート5はh8/3694の汎用ポートのことです。
h8/3694のポート5は8ビットあり、汎用入出力に設定可能ですので今回使用しています。

今回VPポート(仮想ポート)からh8/3694に、下記のように接続し制御しています。

VP(仮想)ポートのポート
↓   h8/3694ポート5のビット割当
↓   ↓
VP16 アウトプットイネーブル 6b 
VP15 スキャン信号ビット1   5b 
VP14 スキャン信号ビット0  4b 
VP13 LEDデコーダビット3  3b 
VP12 LEDデコードビット2  2b 
VP11 LEDデコーダビット1  1b 
VP10 LEDデコーダビット0  0b 

>この回路図が何を主張しているか読み取れて、どうアクセスすればいいか理解できているわけ?

完全に理解しているわけではないですが、4×4のマトリクス状になっており、横のラインVP10からVP13に
接続している部分は理解しています。(VPというのはポートの規格のことであまり気にしなくてもいいです。)

例えば、SW1〜4押下によってVP10がHighになります。
横のラインは、入力の設定で、押す→対応したLED光る→VP10〜VP13Highになる。で信号がとれています。

問題は縦のラインです(VP16〜14に接続されている部分です)
774RRさん指摘の通りに、ここの制御がうまく出来ていません。

> このソースから想像するに
>
> PDR5 = 0x10 とか
> PDR5 = 0x20 とか
> PDR5 = 0x30 とか
> でいいんじゃないの?

このようにすると、今回下位4ビットにスイッチ信号といわれる、VP13〜10が接続
されていますので、例えば

SW1押下で、LED1(ポート8の0ビット目に接続しているものとします)を点灯させようとすると。
*ポート8(h8/3694のポートのことです)

void main(void)
{
while(1)
{
unsigned int sw;
        PDR5 = 0x10   //←ここの部分違いますが、わかりやすいように
                // 書き換えました。
sw = PDR5;     //スイッチの値を読み込む
if(sw == 0x11)        
{
PDR8 = 0x01;  //LED1点灯
}
        PDR5 = 0x20   //←ここの部分も間違えです
sw = PDR5;     //スイッチの値を読み込む
if(sw == 0x21)
{
PDR8 = 0x02;  //LED2点灯
}
        PDR5 = 0x20   //←ここの部分も間違えです
sw = PDR5;     //スイッチの値を読み込む
if(sw == 0x31)
{
PDR8 = 0x03;  //LED3点灯
}
              :
              :
となりLEDデコーダのビット0に接続されている4つのLEDが点灯してしまうのです。

以上よろしくお願いします。
引用返信 編集キー/
■49631 / inTopicNo.5)  Re[3]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ てきとう (2回)-(2010/05/11(Tue) 16:42:05)
No49602 (tkana3 さん) に返信
> 例えば、SW1〜4押下によってVP10がHighになります。
> 横のラインは、入力の設定で、押す→対応したLED光る→VP10〜VP13Highになる。で信号がとれています。
>
> 問題は縦のラインです(VP16〜14に接続されている部分です)

MT-E503の取説をぱっとみて思ったことです
SWの選択にVP15,VP14を使用するのではないでしょうか?
SW1の押下を検出したい場合、VP15に0,VP14に0を出力してVP10で検出する
SW2の押下を検出したい場合、VP15に0,VP14に1を出力してVP10で検出する
VP10 SW1,SW2,SW3,SW4の押下検出
VP11 SW5,SW6,SW7,SW8の押下検出
VP12 SW9,SW10,SW11,SW12の押下検出
VP13 SW13,SW14,SW15,SW16の押下検出

SWの選択はスキャン信号の値でおこなう


引用返信 編集キー/
■49635 / inTopicNo.6)  Re[4]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ tkana3 (65回)-(2010/05/11(Tue) 17:45:02)
てきとう さん

こんにちは。ありがとうございます。

> MT-E503の取説をぱっとみて思ったことです
> SWの選択にVP15,VP14を使用するのではないでしょうか?

使用しています。

> SW1の押下を検出したい場合、VP15に0,VP14に0を出力してVP10で検出する
> SW2の押下を検出したい場合、VP15に0,VP14に1を出力してVP10で検出する
> VP10 SW1,SW2,SW3,SW4の押下検出
> VP11 SW5,SW6,SW7,SW8の押下検出
> VP12 SW9,SW10,SW11,SW12の押下検出
> VP13 SW13,SW14,SW15,SW16の押下検出
>
> SWの選択はスキャン信号の値でおこなう

下記のソースでソースラインデバックをすると、SW1とSW2に対応したそれぞれのLED1LED2が点灯するのですが
ソースラインデバックではなく、実行するとLED1LED2が同時に点灯してしまいます。
waitが必要なのでしょうか?

ポートはh8/3694のポート5に以下のように接続されているものとします。
今回VP13-VP11は使用していません。

> VP(仮想)ポートのポート
> ↓           h8/3694ポート5のビット割当
> ↓               ↓
> VP16 アウトプットイネーブル  6b 
> VP15 スキャン信号ビット1   5b 
> VP14 スキャン信号ビット0  4b 
> VP13 LEDデコーダビット 3  3b 
> VP12 LEDデコードビット2  2b 
> VP11 LEDデコーダビット1  1b 
> VP10 LEDデコーダビット0  0b 

void main(void)
{
while(1)
{
volatile unsigned int sw = 0;
PDR5 = 0x00;  // > SW1の押下を検出したい場合、VP15に0,VP14に0を出力して
sw = PDR5;   // > VP10で検出する (スイッチの値検出)
if(sw == 0x01)
{
PDR8 = 0x02;  //LED1点灯
PDR8 = 0x00;  //LED1消灯
}
PDR5 = 0x10;  // > SW2の押下を検出したい場合、VP15に0,VP14に1を出力して
sw = PDR5;   // > VP10で検出する(スイッチの値検出)
if(sw == 0x11)
{
PDR8 = 0x04;  //LED2点灯
PDR8 = 0x00;  //LED2消灯
}
}
}

以上よろしくお願いします。
引用返信 編集キー/
■49637 / inTopicNo.7)  Re[5]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ てきとう (3回)-(2010/05/11(Tue) 18:23:17)
No49635 (tkana3 さん) に返信

勘でいっていますが
VP15,VP14変更前にVP16をDISABLEにしてみたらどうなりますか?

VP16をDISABLE (High)にする
VP15,VP14の値を変更する
VP16をENABLE(LOW)にする


引用返信 編集キー/
■49638 / inTopicNo.8)  Re[6]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ 774RR (501回)-(2010/05/11(Tue) 20:29:19)
人間の目の反応速度とマイコンソフトの動作速度を考えれば当然なんらかの wait は必要だろう。
というか、周辺装置の反応速度とマイコンソフトの動作速度という点でも wait は必須。
どの程度の wait がどこにどれだけ必要かを回路図から読み取る力がないと
「プログラマの勝手な期待通り」に動くプログラムは組めないよん。
(時と場合によっては周辺回路をぶっ壊す可能性だってある)
提示コードには全体的に wait がまったく入っていなくて(期待通りに)動作するわけが無いように思える。

(非インバータ)蛍光燈は原理的に 100/120Hz で点滅しているのだが、見える?
マイコンソフトは うんMHz で動くと思われるけど・・・
引用返信 編集キー/
■49639 / inTopicNo.9)  Re[6]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ tkana3 (66回)-(2010/05/11(Tue) 20:30:08)
2010/05/11(Tue) 20:39:32 編集(投稿者)
2010/05/11(Tue) 20:34:55 編集(投稿者)

No49637 (てきとう さん) に返信

てきとうさん 774RRさん ありがとうございます。

> 勘でいっていますが
> VP15,VP14変更前にVP16をDISABLEにしてみたらどうなりますか?
>
> VP16をDISABLE (High)にする
> VP15,VP14の値を変更する
> VP16をENABLE(LOW)にする

この設定はやってみました。確かにその通りです。

> どの程度の wait がどこにどれだけ必要かを回路図から
> 読み取る力がないと

回路図から読み取れるのですか…?全くの力不足…勉強になります。

> 提示コードには全体的に wait がまったく入っていなくて

言い訳がましいですが

> PDR8 = 0x02;  //LED1点灯
> PDR8 = 0x00;  //LED1消灯

の間にはwait関数入れていましたよ。(いいわけですが…)

やはり、設定時とスイッチ読み取りの間のwaitの問題のようですね。
http://www.ei.fukui-nct.ac.jp/~t-saitoh/exp/h8/key-matrix.html


チャタリングじゃなくて、長押しで2回3回…と連続で同じ値がとれてしまうのでそこだけなのですが。

以上です。
引用返信 編集キー/
■49645 / inTopicNo.10)  Re[7]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ .SHO (1328回)-(2010/05/11(Tue) 22:38:20)
No49639 (tkana3 さん) に返信

>>VP15,VP14変更前にVP16をDISABLEにしてみたらどうなりますか?
>>
>>VP16をDISABLE (High)にする
>>VP15,VP14の値を変更する
>>VP16をENABLE(LOW)にする
>
> この設定はやってみました。確かにその通りです。

「どうなりますか?」の質問に「その通りです。」の回答は有り得ません。
よって、意味がわかりません。やってみたら正常に動いたんですか?

> チャタリングじゃなくて、長押しで2回3回…と連続で同じ値がとれてしまうのでそこだけなのですが。

ポーリングしてるんだから当たり前です。

引用返信 編集キー/
■49650 / inTopicNo.11)  Re[8]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ tkana3 (67回)-(2010/05/11(Tue) 23:51:26)
2010/05/12(Wed) 10:42:21 編集(投稿者)
2010/05/11(Tue) 23:58:41 編集(投稿者)

.SHO さん

再三すみません。

> 「どうなりますか?」の質問に「その通りです。」の回答は有り得ません。
> よって、意味がわかりません。やってみたら正常に動いたんですか?

ソースラインデバックですと正常に点灯消灯するのですが、そうでないと
sw1の時だけでもLED1とLED2が両方ついてしまいますね。(>>VP15,VP14の値を変更する
の後にwaitを入れていなかったからです)

あともう一点だけ、たぶん上記の取説ですと、スイッチを押下した時だけ、スイッチ信号LEDと
スキャン信号LEDが点灯するはずなのですが、スイッチ信号はその通り点灯するのですが
スキャン信号は、

>>VP15,VP14の値を変更する
>>VP16をENABLE(LOW)にする

の段階でスキャン信号LEDが付いてしまいますね。()
たぶんこれは、ソフト的な制御が間違えているのですが。

>>チャタリングじゃなくて、長押しで2回3回…と連続で同じ値がとれてしまうのでそこだけなのですが。
>
> ポーリングしてるんだから当たり前です。

ポーリングですね。

これ、キーマトリクスって言うんですね。検索でごった出てきました。たぶん解決出来ると思います。
もう少し頑張ってみます

一応の解決とさせていただきます。ありがとうございます(__)
解決済み
引用返信 編集キー/
■49676 / inTopicNo.12)  Re[9]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ .SHO (1331回)-(2010/05/12(Wed) 21:53:53)
No49650 (tkana3 さん) に返信

> あともう一点だけ、たぶん上記の取説ですと、スイッチを押下した時だけ、スイッチ信号LEDと
> スキャン信号LEDが点灯するはずなのですが

違います。

> スイッチ信号はその通り点灯するのですが
> スキャン信号は、
>
> >>VP15,VP14の値を変更する
> >>VP16をENABLE(LOW)にする
>
> の段階でスキャン信号LEDが付いてしまいますね。()
> たぶんこれは、ソフト的な制御が間違えているのですが。

違います。
スキャンLEDは、ソフトがどのラインをスキャンしているかを示しています。
従って、上記の動きは正常な動きです。

この考え方が間違っているから、正常に動作していないと勘違いしているだけで
問題なく動いているんじゃないかと思います。

実際、LED1〜LED4までをプログラムでスキャンしたら、人間の目には全てのLEDが
同時に点灯しているように見えると思います。

逆に言えば、それぐらいで動いてくれなければ、キーのレスポンスが悪くて
使い物になりません。
解決済み
引用返信 編集キー/
■49692 / inTopicNo.13)  Re[10]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ tkana3 (68回)-(2010/05/13(Thu) 11:35:51)
.SHO さん

ありがとうございます。

>>あともう一点だけ、たぶん上記の取説ですと、スイッチを押下した時だけ、スイッチ信号LEDと
>>スキャン信号LEDが点灯するはずなのですが
>
> 違います。
>

そうですか。取説P2@VP1ポートの最後あたりで押下されたスキャン信号LEDが点滅するもの
と、誤読していました。

というより、回路図その他もろもろからここら辺は読み取らないと問題外ですねorz

>>スイッチ信号はその通り点灯するのですが
>>スキャン信号は、
>>
>>>>VP15,VP14の値を変更する
>>>>VP16をENABLE(LOW)にする
>>
>>の段階でスキャン信号LEDが付いてしまいますね。()
>>たぶんこれは、ソフト的な制御が間違えているのですが。
>
> 違います。
> スキャンLEDは、ソフトがどのラインをスキャンしているかを示しています。
> 従って、上記の動きは正常な動きです。
>
> この考え方が間違っているから、正常に動作していないと勘違いしているだけで
> 問題なく動いているんじゃないかと思います。
>
> 実際、LED1〜LED4までをプログラムでスキャンしたら、人間の目には全てのLEDが
> 同時に点灯しているように見えると思います。
>
> 逆に言えば、それぐらいで動いてくれなければ、キーのレスポンスが悪くて
> 使い物になりません。

確かに、さらに拡張したボードと組み合わせて使ったら、拡張した方を使用していると
キースキャンの方の動作が完全に動きが止まりますね。割込み使わないとですね。

ありがとうございました。参考になりました。
引用返信 編集キー/
■49717 / inTopicNo.14)  Re[11]: サンハヤト キースキャンボード MT−E503 出力設定
□投稿者/ .SHO (1333回)-(2010/05/13(Thu) 22:47:27)
No49692 (tkana3 さん) に返信

> 確かに、さらに拡張したボードと組み合わせて使ったら、拡張した方を使用していると
> キースキャンの方の動作が完全に動きが止まりますね。割込み使わないとですね。

割込み使っても、キーの長押しの問題は解決しますが、LEDの問題は変わらないです。
割込みルーチンの中で結局キーをスキャンすることになるでしょうから。

# 解決済み外れちゃったけど、忘れただけですよね?
# 解決済みにしておきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -