LED チカしてみよう(I/O と USART)

やっと L チカです。
でも普通にやってもつまらないので、前回の USART 関係をやったのを踏まえて PC から USART 経由で指令を送って LED を On/Off しましょう。

実行プログラムを作る

前回と同様の手順で以下のファイルを解凍してプロジェクトに追加&ビルドして下さい。

追加ファイル

LED を追加する

LED の On/Off 制御には Port D の 6 で行います。
なんで PD6 でやるかというと次回のネタで同じ回路を流用できるからです。

回路はこんな感じ。

R1 は LED に流す電流制限抵抗ですが、使用する LED によって決めて下さい。
ここら辺は専門分野じゃないので、詳しく書かれていたマルツさんのHPのリンク張っておきます。
LED の極性なども気をつけて下さい。

ブレッドボードでこんな感じにやってみました。

実行する

前回と同様に Tera Term を立ち上げてから実行してみます。
正常にプログラムが書き込まれて実行すると下図の様に表示されます。

LED を点灯させてみましょう。
Tera Term でキーボードの 1 を押すと以下のように表示されて LED が点灯します。


0 を押すと LED が消灯します。

プログラム本体の解説

main.c を見ていきましょう。

インクルード関係は pio.h が増えています。

#include "std.h"
#include "pio.h"
#include "usart.h"

LED を On/Off する I/O ポートの設定をする為に init_pio() を呼び出しています。

    init_pio();
    init_usart();

USART 経由で PC からコマンドを受け付けて LED の On/Off を変更してるところです。
PORTD を直接操作しても良いのですが後からポートを変えたりの時の為に pio.h で OUTP_LED という別名を作っています。
PC から 0 が送られたら OUTP_LED を 0 にして LED を Off にし、1 が送られたら OUTP_LED を 1 にして LED を On にします。
それ以外の文字が入力された場合には無視して while ループの先頭へ飛んでいます。
コマンド受け付けてもだんまりでは寂しいのでコマンド受け付け後の設定を表示しています。

    while( 1 ) {
        /* コマンド入力     */
        switch( usart_getc() ) {
          case  '0':    /* LED を Off   */
            OUTP_LED = 0;
            stat_str = off_str;
            break;
          case  '1':    /* LED を On    */
            OUTP_LED = 1;
            stat_str = on_str;
            break;
          default:      /* その他の文字コードは無視(while ループの先頭へ) */
            continue;
        }

        usart_printf_p( PSTR("LED %S\n"),stat_str );
    }

終わり

前回までで取り敢えず知っておかないといけない Atmel Studio の最低限の操作方法などを解説し終えたので今回は随分と短い期間で更新できました。
相変わらず main.c 以外のファイルを解説してないですが、大した事していないので各自読んでもらえたらなと思っています。

取り敢えずプロジェクトフォルダーもサンプルとして置いておきます。

サンプル

次回はこれを踏まえて PWM で LED の調光をやってみます。