忍者ブログ
グラビアアイドルについて語るブログ。
[30] [29] [28] [27] [26] [25] [24] [23] [22] [21] [20]
×

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

前回はタイマ割り込みハンドラ内でポートへの出力値を変更することで LED を点滅させましたが、PWM を使えば、割り込みなしで LED を点滅させることが可能です。

次のように、タイマ出力(TOP11)を使用しました。

[CON2-25] TOP11 → 680Ω → (+)LED(-) → GND [CON3-10]

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

メイン関数内で、ポート、タイマ、割り込みの初期化を行います。タイマとして、TMP1 を PWM モードで使用しています。なお、実験対象 LED の点滅に割り込みは不要ですが、動作確認用に使用しました。

// ポート初期化
void init_port()
{
// ポート35の設定 (タイマ出力)
PFC35 = 1; // TOP11出力
PMC35 = 1; // TIP11入力/TOP11出力

#if defined(DEBUG)
// ポートCT6の設定 (動作確認用)
PMCCT6 = 0; // 入出力ポート
PMCT6 = 0; // 出力モード
PCT6 = 0; // Lレベル
#endif
}

// タイマ初期化
void init_timer()
{
// TMP1の設定
TP1CE = 0; // 動作禁止
TP1CKS = 7; // fxx/512
TP1MD = 4; // PWM出力モード
TP1OE1 = 1; // TOP11出力許可
TP1OL1 = 0; // TOP11ハイレベルスタート
// TP1OL1 = 1; // TOP11ローレベルスタート
TP1CCR0 = (20000000 / 512) - 1; // 1000ms周期
TP1CCR1 = (20000000 / 512) * 50 / 100; // デューティ比50%
// TP1CCR1 = (20000000 / 512) * 25 / 100; // デューティ比25%
TP1CE = 1; // 動作許可
}

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


動作確認用に、INTTP1CC0 割り込みハンドラ内で基板上の LED の点灯状態を反転します。これにより、基板上の LED は「1000ms点灯→1000ms消灯」を繰り返します。

#if defined(DEBUG)
// タイマ割り込みハンドラ
void timer_int_handler()
{
PCT6 ^= 1;
}
#endif


動作確認用 LED を基準として、実験対象 LED の点滅状態を確認します。1000ms周期で点滅しますが、init_timer() 内で TP1OL1 と TP1CCR1 を変更してみると、LED の点滅状態は次のようになりました。

ハイレベルスタート、デューティ比50% → 500ms点灯、500ms消灯
ローレベルスタート、デューティ比50% → 500ms消灯、500ms点灯
ハイレベルスタート、デューティ比25% → 250ms点灯、750ms消灯
ローレベルスタート、デューティ比25% → 250ms消灯、750ms点灯


【備考】gcc で開発していますが、独自マクロで Applilet っぽく書けるようにしています。
PR

コメント
初めまして
初めまして。で、このLEDパーツがあります。
http://www.marutsu.co.jp/user/shohin.php?p=36033
LEDの商品名は、1L0545B22E0CA004です。そして、青です。値段は、一つ120円で高いが、10個で600円ぐらいで買えたので、買って付けました。其れが、自分のブログの写真です。
http://blogs.yahoo.co.jp/true_love_of_gabriel
 これは、色は青だけど初心者だと思います。其れは抵抗無しで取り付けられるからです。CQ基盤の出力電圧は、3.3Vです。今、云っているLEDは、3.2Vです。だから、抵抗による出力電圧の調整をしなくても大丈夫です。入力する場合は、プルーアップ等の電圧調整は必要ですが、出力の場合は一切関係ありません。但し、電圧は3.3Vです。一部は5V出力もありますが、其れは内部ソフトの設定が必要です。確かアノード側に(間違えたらごめん)、+出力端子として設定すれば、ソフトは「1」を出力すれば付きます。勿論、LEDを光らせる電圧は3.3V以下の電圧の場合は、抵抗調整は必要です。
 PWM出力は、ソフト実現で行いました。其れは、タイマをインターバルタイマを設定し、インタバールタイマを数えて、その数によってLEDのON・OFFを調整するのです。そして周期は、ソフトタイマカウンターが0になるタイマカウント数を決めて周期を決めるのです。比率の分解能が8ビットの256にするならば、決めた周期の1/256をインターバルタイマの周期として、ハードウェアのイベント・タイマーとして決めるのです。そうすれば、0から255まで数えて、256番目に、ソフトタイマカウントを0にすれば周期周波数が出来るのです。その時に必ずソフトタイマカウントが0になる時、出力が必ず仕様によって「0」か「1」に決めるのです。そして、256の間のカウント中にデュティ比率によって、そのカウント数を決めその時に、出力を、消す場合は「0」、付けるならば「1」にするのです。そうすれば、ソフトのPWM出力になるのです。何故、そうしたかと思いついたのは、このCQ出版のV850基盤ではなく、サンハヤトが発売している(値段が高い)V850基盤に、三原色LEDが付いている、フルーカラーLEDなのです。但し、V850MPU側に付いている端子は、リアル出力端子だと3つ側全て付いているが、タイマ出力端子だと一つだけしか端子に付いていなくて、3つの光調整で、光の色作りが出来なくなっているのです。だからリアル出力端子として使い、ソフトPWM出力で光の輝きを調整して色作りを考えているのです。光の光度の調整が難しくて、中々思うような色が出ない現状であるが、でも色の変化がしているのは事実です。それは、自分のブログでの写真は載せていないが。一つ、ここで直接パソコンとの通信のやり取りで、光の色の調整を考えているけれど、最初は、パソコンのターミナルソフトで考えていたが、ターミナルの受信側は、表示はしているが、送信側、V850の受信でうまく出来ないのです。制御信号のキーがうまく取れていないのです。何故か知らないけれどコードが変わってしまう。その理由を探索中で、仕方なく、今はパソコンのターミナルソフトを作っている最中です。これで時間が掛かっていて、V850の制御基盤が出来ないのです。
 今の現状を話しています。でも、お宅が未だV850を真面目に研究して頂いてありがとうございます。
【2007/08/30 12:16】 NAME[愛] WEBLINK[URL] EDIT[]


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
ブログ内検索
カレンダー
03 2024/04 05
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
最新コメント
[07/07 tiffany jewelry uk]
[09/17 車載モニター・阿蘇テック]
[08/30 愛]
[06/12 シモネッタ]
[06/11 arms22]
最新トラックバック
フリーエリア
あわせて読みたい
    Firefox 2 無料ダウンロード
    バーコード
    プロフィール
    名前:
    シモネッタ
    性別:
    非公開
    カウンター
    アクセス解析