1949398_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1949398_ja-JP

1949398_ja-JP

MC9S12DG256GポートAを正しく読み取らない

私は、シングルチップモードでMCUのポートAを使用して16キーのマトリックスキーパッドを読み取るアセンブリ言語プログラムを作成しようとしています。これには、ポートAのデータ方向レジスタであるDDRAを使用して、ポートAを4つの入力ピンと4つの出力ピンの2つの部分に分割することが含まれます。その後、4つの出力ピンすべてに同時にゼロが送信され、キーが押されると、そのゼロの1つが入力ピンの1つに接続され、MCUはポートAで読み取り、押されたキーがどの行にあるかを判断します。内部ポートAプルアップがアクティブになり、フローティングピンが1として読み取られます。

問題の原因となっているコードの一部を次に示します。

LDAA #%00001111 ;次に、ROW を検索します
staa DDRA ;出力ピン4本、入力ピン4本
bset PUCR、#$01 ;PORTAでプルアップを有効にする
LDAA #$F 0 ;列ピンに 0 を送信
ポルタ駅
ldaa PORTA ;どの行が 0 かを確認する

[ソフトウェアトラップはこちら]

最後の行であるポート A が問題です。キー パッドのキーを押したままにすると、プログラムの実行中にオシロスコープで確認されたように、ポート A ピンの 1 つが強制的に Low になりますが、プルアップにより High ニブルの他の 3 ビットは High のままになります。したがって、私は、Aレジスタでビットの1つ(7、6、5、または4)が0であり、残りのビットが1つを見つけることを期待します。ただし、Aレジスタは常に0000xxxxを読み取ります。つまり、上位ニブル ビットはすべて 0 です。

では、ポート A を読み取ったときに、ポート A ピンで実際に測定したロジック レベルが表示されないのはなぜですか?さらに、DBUG-12 モニターを使用してコードを 1 ステップ実行すると、完璧に動作します。

Dragon12-Light開発ボードを使用しています。

それは私を狂わせているので、私はどんな助けでも感謝します。ありがとうございます。

開発ボードRe:MC9S12DG256GポートAを正しく読み取らない

ラマさん、ありがとうございました。この問題は、ポート A への書き込みと読み取りの間に 4 つ以上の NOP を挿入することで解決されましたが、ポート A の 8 ビットすべてに外部 10kΩ プルアップを追加する必要もありました。 4つのNOPを追加するだけで、キーパッドの読み取りエラーは減少しますが、完全にはなくならず、コードをシングルステップスルーしてもエラーが発生しないことを見たとき、タイミング/ノイズの問題があるに違いないと気付きました。この場合、キーパッドとポートAをつないでいるリボンケーブルが原因で鳴り響いていました(添付写真参照)。残念ながら、ボード設計者はキーパッドとポートAの間のラインを終端しなかったため、ポートAのビット0からポートAのビット7にローが送信されると、たとえば「C」キースイッチを押して押すと、その信号はリボンケーブルを通過し、そのインダクタンスとキャパシタンスにより、24MHzのバスクロック速度が速いために大きなリンギングが発生しました。このリンギングは、信号がローロジックレベルで安定するまで、数NOP遅延時間よりも長く持続し、誤った読み取りを引き起こしました。そこで、内部ポートAのプルアップに加えて、外部プルアップ抵抗を8個追加し、最終的に問題を解決しました。NOP遅延は、時間をかけてリンギングを測定し、ラインを適切に終了して解消していれば、おそらく解消または削減できたと思います。(ボード設計者は、クロック周波数がわずか2MHzで、私のプログラムはタイミングやノイズの問題もなく問題なく動作した以前の68HC11ボードからキーパッド回路をコピーしたようです)。厄介な問題(大学のマイクロコントローラークラスの実験室演習)を最終的に解決するための正しい方向を指し示してくれて、改めて感謝します。

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎11-21-2025 08:50 PM
更新者: