忍者ブログ
グラビアアイドルについて語るブログ。
[1] [2] [3] [4] [5] [6]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

引き続き CQ_V850 での LED 実験です。

前回は4つのポートに LED を1個ずつ接続しての実験でしたが、今回は1ポートで2つの LED を点滅させてみました。

LED点滅実験

次のように接続しました。赤色、緑色の各 LED はそれぞれ P37 の電圧レベルH, Lで点灯します。

[CON3-8] P37 → 680Ω → (+)赤色LED(-) → GND [CON3-10]
[CON3-8] P37 → 680Ω → (-)緑色LED(+) → +3.3V [CON3-1]

以下、主要なコードです。

メイン関数内で、ポート、タイマ、割り込みの初期化を行います。タイマとして、TMP1 をインターバル・タイマ・モードで使用しています。

// ポート初期化
void init_port()
{
// ポート37の設定
PM37 = 0; // 出力モード
P37 = 0; // Lレベル
}

// タイマ初期化
void init_timer()
{
// TMP1の設定
TP1CE = 0; // 動作禁止
TP1CKS = 7; // fxx/512
TP1MD = 0; // インターバル・タイマ・モード
TP1CCR0 = (20000000 / 512) - 1; // 1000ms周期
TP1CE = 1; // 動作許可
}

// 割り込み初期化
void init_intc()
{
// INTTP1CC0
TP1CCPR0 = 0; // 割り込み優先度 = 0
TP1CCMK0 = 0; // 割り込み許可
}


INTTP1CC0 割り込みハンドラで、LED 点灯状態を切り替えます。1000 ms ごとに、赤色 LED と緑色 LED が交互に点灯します。

// タイマ割り込みハンドラ
void timer_int_handler()
{
P37 ^= 1;
}



【備考】gcc で開発していますが、独自マクロで Applilet っぽく書けるようにしています。
PR
CQ_V850 で、4つの LED を順次点灯する実験を行いました。

ブレッドボードを使いました。配線がぐちゃぐちゃです。

4つのLEDでの点灯実験

次のようにポート9を使い、Hレベルで点灯しています。

[CON1-9] P98 → 680Ω → (+)LED(-) → GND [CON3-10]
[CON1-10] P99 → 680Ω → (+)LED(-) → GND [CON3-10]
[CON1-11] P910 → 680Ω → (+)LED(-) → GND [CON3-10]
[CON1-12] P911 → 680Ω → (+)LED(-) → GND [CON3-10]

以下、主要なコードです。

周期的に LED を点灯させるための変数です。Lレベルで点灯する場合は、配列の値を反転する必要があります。

static const unsigned char p9h[] = {
0x00, // none
0x01, // P98
0x03, // P98+P99
0x07, // P98+P99+P910
0x0f, // P98+P99+P910+P911
};
static unsigned int p9_count = 0;


メイン関数内で、ポート、タイマ、割り込みの初期化を行います。

// メイン
void sample_main()
{
...
init_port();
init_timer();
init_intc();
...
}

// ポート初期化
void init_port()
{
// ポート98〜ポート911の設定
PMC9H = 0; // 入出力ポート
PM9H = 0; // 出力モード
P9H = p9h[p9_count];
}

// タイマ初期化
void init_timer()
{
// TMM0の設定
TM0CE = 0; // 動作禁止
TM0CKS = 4; // fxx/512
TM0CMP0 = 20000000 / 512 - 1; // 1000ms周期
TM0CE = 1; // 動作許可
}

// 割り込み初期化
void init_intc()
{
// INTTM0EQ0
TM0EQPR0 = 1; // 割り込み優先度 = 1
TM0EQMK0 = 0; // 割り込み許可
}


INTTM0EQ0 割り込みハンドラで、LED の点灯状態を変更します。

void timer_int_handler()
{
if (++p9_count == sizeof(p9h) / sizeof(unsigned char))
p9_count = 0;
P9H = p9h[p9_count];
}



【備考】gcc で開発していますが、独自マクロで Applilet っぽく書けるようにしています。
マイコンと表示器をつなぐ10の方法』の最初の方を読み、ようやく LED を使った実験を開始する知識レベルに達しました。

この本では、以下のマイコンでの各種表示器の使い方が載っているのですが、実際にそのマイコンを使っていなくても参考になります。
・PIC16F84A
・PIC16F628A/PIC16F648A
・R8C/15
・H8/3694F
・78K0S/KA1+

プルアップ抵抗やトランジスタ等についてはさらっと書かれており、電子回路初心者にとっては完全に理解できていない部分もありますが、ポート出力による LED の点灯/消灯の仕組みはわかりやすく解説されていると思います。

CQ_V850 基板上の LED では、PCT6 に0を出力して点灯、1で消灯させますが、これまではその原理を知ることなく「これはそういうものなのだ」と処理していました。ポートに1, 0を出力するというのは電圧をそれぞれ H, L レベルにするということ、LED の接続方向によっていずれの電圧レベルで点灯するのかが決まるということだったのですね。回路図の見方もほんの少し上達しました。

さらに CQ_V850 の回路図を見ると、CON3 の9ピンが PCT6 であることに気づいたので、次のような回路を試してみました。

CON3-9 (PCT6) → LED (アノード) → LED (カソード) → 抵抗 (680Ω) → CON3-10 (GND)

この回路の LED は H レベルで点灯し、基板上の LED の点灯/消灯を繰り返すサンプルプログラムを動作させれば、基板上の LED と実験回路上の LED は点灯/消灯が逆になるはずだと考えたのですが、思った通りになってくれました。本当に簡単な実験ですが、ようやく前に進めた気がします。

また、回路を設計する上では、マイコンのドライブ能力というものを考慮しなければならないという点も勉強になりました。上の本では LED に流す電流は10mAで計算していますが、V850ES/JG2 ではソース電流、シンク電流ともにポートあたり最大4mAらしいので、注意しなければなりません。

今後はユニバーサル基板上に実験回路を作っていきたいと考えているのですが、配線が思った以上に難しいなと四苦八苦しているところです。『エレキジャック』で練習した方がいいのかもしれません。
今日はLEDや抵抗などを買いに秋葉原まで行ったのですが、抵抗をバラで買うと、どれが何Ωの抵抗だったのかを覚えられそうにありません。

そこで、抵抗のカラーコードがあるというのを知りました。4色のうちいちばん右は許容差を表すようですが、まずは最初の2色(数値)と3つ目の色(乗数)から抵抗値を読み取れるようになりたいと思います。

0 黒
1 茶
2 赤
3 橙
4 黄
5 緑
6 青
7 紫
8 灰
9 白

例:黄紫茶金
47×101=470Ω

初心者にはこの程度のことさえ壁になるのです。
電子工作の道険し。
マイコンと表示器をつなぐ10の方法』を読み始めました。

今週中には CQ_V850 で LED の点灯くらいはできるようになりたいと思っています。


忍者ブログ [PR]
ブログ内検索
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
最新コメント
[07/07 tiffany jewelry uk]
[09/17 車載モニター・阿蘇テック]
[08/30 愛]
[06/12 シモネッタ]
[06/11 arms22]
最新トラックバック
フリーエリア
あわせて読みたい
    Firefox 2 無料ダウンロード
    バーコード
    プロフィール
    名前:
    シモネッタ
    性別:
    非公開
    カウンター
    アクセス解析