えべす屋工房

色々なモノを作ります

Lチカしてみる

前回開発の準備が整いましたので今回はいよいよプログラミングして行きます。

AVR Studioは使ったことありましたがそれすらもかなり前です。Microchip Studioを起ち上げてどうすれば良いのか分からない所から始めます。

まったく触ったことがない方でも分かる様に書いて行きたいと思います。一緒に学びましょう(^o^)/

Microchip Studioの使い方

まずはMicrochip Studioを起ち上げます。

矢印の所にある「New Project…」をクリックします。

C言語を使うので「GCC C Executable Project」を選択すれば良いようです。プロジェクトの名前を入れ「OK」をクリック。

使用するマイコンを選びます。今回はATmega88を使用するので検索窓に「88」と入力すると選択肢が絞られます。選択後「OK」をクリック。

それではプログラムを書いてみましょう。

#define F_CPU 1000000UL	// マイコンを1MHzで使用します
 
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRC  = 0b11111111;	// ポートC出力
	PORTC = 0b00000000;	// ポートC初期化
	
    while (1) 
    {
		PORTC = 0b00100000;	// PC5 H
		_delay_ms(500);		// 500ms待つ
		PORTC = 0b00000000;	// PC5 L
		_delay_ms(500);		// 500ms待つ
    }
	return 0;
}

プログラムについては次回解説します。

最初にmain.cが開いた時には/* 〜 */に囲まれたコメントが表示されています。邪魔だったので消しています。

//の部分もコメントです。この場合は1行のみ有効になります。

プログラムが書けたら「Build」ボタンを押します。良く分かっていませんがこれで記述のミス等があれば下のウィンドウに表示されます。

問題が無ければ次は作ったプログラムをマイコンに書き込みます。

「Tools」→「Device Programming」か右上の雷マークのアイコンをクリックします。

前回の配線通りマイコンを接続しAVRISPmkIIをPCに接続します。「Apply」をクリックし「Device signature」の「Read」をクリックします。

接続に成功すると「Device signature」と「Target Voltage」が表示され左下に「Reading device ID…OK」と表示されます。

これでいよいよ書き込みです。ATmega88の動作クロック周波数は、工場出荷時1MHzにセットされているようなので特に変更しません。左の「Memories」を選択します。ファイル名がプロジェクト名と一致しているか確認しましょう。「Program」をクリックすると書き込まれます。

書き込みに成功すると左下に「Erasing device…OK」「Programming Flash…OK」「Verifying Flash…OK」と表示されます。

回路図

R1は前回と同じ5.1kΩとしておきます。

LEDは適当な物を用意しました。テスターで測定してみた所Vfが1.88Vでした。Vfとは順方向電圧の事でこの場合、電圧1.88V以上で発光するという事のようです。通販サイト等を見るとVf3.5V等と表記されています。標準電流も参考にしてください。

今回のLEDは標準電流が不明な為適当に流します。

ブレッドボードでテスト

今回は電源に電池ボックスを使用します。1.5V電池2本で電圧が3VでVfを1.9Vとして10mA流そうと思うと、(3V-1.9V) / 0.01A = 110Ωとなります。

手持ちに150Ωの抵抗があったのでこれを使用します。電源電圧は電池が弱っていたので実測2.9Vでした。電流を求めると(2.9V – 1.9V) / 150Ω = 0.00666…Aです。約6.7mAです。光っていれば良いので適当でOKです。

28番ピン(PC5)に繋いだLEDが1秒間隔で点滅します。

別のコード

動作は同じですが別の書き方でプログラミングしてみます。

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
	DDRC  = 0b00100000;
	PORTC = 0b00000000;
    while (1) 
    {
		PORTC = PORTC | (1 << PC5);
		_delay_ms(500);
		PORTC = PORTC & ~(1 << PC5);
		_delay_ms(500);
    }
	return 0;
}

このように書いても28番ピン(PC5)のLEDが点滅します。こっちの方が出来る人感がありますね。こちらも次回解説します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です