YAMAHA QY20のデータバックアップ回路(2)「ハードのチェックをしながら、基本ロジックを作成」

2022/08/25

YAMAHA QY20 バックアップツール 電子回路

 前回、ハードウェアが出来上がった続き。

ソフトウェアは、以下の順番で進めます。

  1. 割り込み処理(すべての基本となるため)
  2. 7segLED表示。
  3. キー入力(チャタリング対策)
  4. MIDI通信。
  5. EEPROM制御

割り込み処理の前に、挙動を確認するためには、表示が必要です。
ということで、7segLED表示の1つのポートを使って、信号がプログラム通りに出力されるか、テストプログラムを組みます。

その単一の処理だけのプログラムを作ると、そのまま肥大化して見通しの悪いプログラムになるので、全体設計だけは先に行います。ポートの初期化、UART初期化、キー入力処理、割り込み処理、表示処理などなど。

そして、信号が出ているかの部分だけを生かして、テスト。無事、動作確認。これで、統合環境から実動作テストの一連の作業ができていることを確認。入力ポートも正常に動作するか、コードを有効化して、テスト。ボタンを押すと、LEDがついて、離すと消える。これも成功。

次に、7SegLED表示部の作り込み。秋月電子のシリアルドライバを使っているので、3つのポートだけで、7SegLEDを操作できますが、シリアル制御が必要です。ますは、処理をべた書きしてシリアル制御で表示できるか、テスト。成功。続いて、番号表示するファンクションコードを書きます。これも成功。数字パターンをプログラムメモリ上にデータとして配置して、アドレス取得(FSR)したかったのですが、うまくできませんでした。データメモリ上だとできるのですが、データメモリの節約にならないので意味がない。。。
if.thenの繰り返しとなる同じようなコードを書くことになるので、マクロ化しました。

ここまで来て、やっと割り込みのテストができます。タイマ割り込みで、カウントアップし、カウンタをLED表示させます。

TIMER0を使いました。計算上の割り込みより、遅いです。また、TIMER0はカウンタが1バイトなので、2段階のカウント処理が必要です。面倒なので、TIMER1を使います。しかし、TIMER1は、結構複雑です。また、2桁のカウンタがありますが、割り込みのたびに毎回設定しなおさないといけないので、これも面倒です。割り込み処理では、微妙にタイミングが変わってしまうのでやりたくない。

ということで、やはり、TIMER2が一番良いです。32MHzのクロックが4分周され、さらにプリスケーラで64分周、ポストスケーラで10分周します。これで、1/12500sで割り込みが入ります。コンパレータのカウンタを125にセットすれば、TIMER2のカウンタが125になるごとに、割り込みが入ります。また、割り込みと同時に、TIMER2のカウンタがリセットさせれるので、後処理の必要がありません。これで、正しく、1/100sの割り込みができました。もっと、短いサイクルの割り込みが必要になりそうですが、プリスケーラ、ポストスケーラ、コンパレータの数値を変えれば、自在に変更できます。

ぴったり、1/100でカウントアップしたので、ほぼ成功。



割り込み処理を使って、キー入力検知、チャタリング無視の処理も入れました。
これで、1~3が完了。LEDの表示処理は、もう少し、機能を増やす必要があります。例えば点滅させるとか、ルーレット表示させるとか。そこで遊びすぎると、本命のMIDI通信とEEPROM処理が中々できないので、次回は、MIDI通信を予定しています。

ここまでで、ソフト開発の時間工数は約9時間。割り込み処理で3時間くらいかかってしまいました。

MIDI通信処理で10時間、EEPROM処理で40時間くらいかかりそうな気配。

QooQ