前回までで、LM32C041の基本的な制御がつかめたのでもう少し実用的なものとして、簡易なオシロに挑戦しました。
サンプリング周波数:アナログ1ch(ch0)としてA/D変換時間(70us)+α 10kHz(100us)
タイマ2のCTC動作による割込処理 T2CK=16M/8=2M、OCR2=200 ∴2M/200=10kHz
A/D変換基準クロック:データシートによると10ビット精度で最大クロックは200kHzであるが、今回CPU
クロックが16MHzのためプリスケーラとの関係から250kHz(16M/64)とした
(精度は若干落ちるが後で圧縮処理するので問題ないと考えた)
電圧軸:フルスケールVcc 1023digit → 200digit Vcc=5V 25mV/digit
表示領域:時間軸:300x電圧軸:200
基本的な流れ:@データを300サンプリングSRAMに保存
ASRAMデータから1lineごとのデータ作成し表示処理
目盛線:波形を見やすくするため40ドットごとに表示(横:4ms、縦:1V)
トリガ:とりあえず固定レベルの上昇に設定(将来調整可能としたい)
実行結果
約1.7V(AC)を入力表示させたところ、バックを白にした方が落ち着いた感じです。
いろいろやっているうちに、ポートCの5と3に30Vラインを接触させ2ポート壊してしまった。
機能追加
サンプリング周波数の可変(10k、5k、2.5k、1.25kHz)
トリガーレベル調整(7段階+連続モード)
画面に文字表示(サンプリングf)
ケースに収納
見づらいが画面左下に’Sf: 5kHz’を表示、トリガレベル:1
最大サンプリング周波数は10kHz(ロジックスコープであれば、もう少しあげられる)と実用範囲は少ないですが、ちょっとした観測には使えます。