G2010_ひな形プロジェクトの実験
2024年12月7日
1:39
G2010_lpc_template_project_report_2
下記にLPCマイコンの早見表をアップしました、ダウンロードしてご活用ください
LPCマイコンの早見表.pdf
デバッグモードを使わない
- C#でも説明しましたが、Releseモードのみでデバッグを行うために、シリアル通信をメインに利用します
- シリアル通信が使えない場面では、LEDモニタを活用して、デバッグを行います
制御プログラムには欠かせないスキャンの概念
- while(1)ループの直前に開始をパソコンに知らせます UART_puts("start \r\n");
- while(1) 以下の無限ループの中をプログラムは巡回します
- いろいろな処理が実行され、ループを1周することをスキャンと言います
- 処理がほとんどないのですが、ひな形コードのままで、スキャン時間を計測してみます
- 符号なし32ビット整数を定義します uint32_t cnt = 0;
- while(1)ループ の直下で変数を加算します ++cnt;
- 毎スキャンに1ずつ加算されます
- 5000万回を超える判定を実行し、シリアル通信でパソコンに知らせます
if(50000000 <= cnt)
{
UART_puts("cnt=10000000
\r\n");
cnt = 0;
}
- 試行錯誤の説明
- 最初 1万回を設定し、シリアル通信がオーバーフローしました
- 次に 100万回を試し、3秒前後なので、正確な計測になりません
- そこで、1000万回で30秒と想定し、もう少し精度を上げるために 5000万回を設定しました
マイコン基板の準備をします
- モニタ用LEDが、薄暗く点灯し、ライターモードになりました
- Start ボタンで、緑のバーグラフが進めば、書き込み成功です
- マイコンとの通信を Flash Magic で実行します
- 上記に表示される、Start から cnt=10000000 までの時間をストップウオッチで計測します
- リセットボタンと同時に、ストップウオッチをスタートします
- ここでは、1分56秒 116秒が計測されました
- 0.00000232 2.32マイクロ秒
- パソコンのように、先読み、推測機能で同一処理が省略されていなければ
- 加算、IF判定、シリアル通信コマンドの判定合わせて、2.32マイクロ秒で実行されています
ここから先日紹介したLPC_uart.exeアプリを使います
- タイムラインを「時間」、これは時刻の間違いですね、設定して計測をしてみます
- 1分55秒が計測されました
待機関数の精度を実験してみます
- 早見表には、wait_sec('u',1); は 10マイクロ秒待機するとあります
- 12.32マイクロ秒なので、 610秒 10分10秒ということになるはずです
- 18分38秒 1.118 秒 という結果が得られました
- これから推測するに、22.36マイクロ秒 wait_sec('u',1); は 20マイクロ秒という結果です
さらに計測を進めるために利便性を追加します
追加した処理が、スキャンに影響ないことを確認します
wait_sec('u',1);が直線的に変化するか確認します
wait_sec('u',1); 3分44秒 224秒 22.4usec
5分25秒 325秒 32.5usec
7分6秒 426秒 42.6usec
- パラメータの指示に従って、直線的に機能しています
- wait_sec() 関数にパラメーターの誤差が発覚しました
- 1=20usec 2=30usec 3=40usec
(+10usec の誤差です)
- 後日修正します
wait_sec('m',1);を計測します
508/500000 0.001016 1.016 msec まあまあ正確でした