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

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

PWM で LED の明るさを変える実験を行いました。

前回の実験と同じ回路を使用しています。

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

デューティ比は10%ずつ増加・減少させています。TMP1 の周期25msというのは、デューティ比が10%の時にチカチカしないという基準で決定しました。

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

#define F (20000000 / 512) / 40 // 約25ms周期

// ポート初期化
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ハイレベルスタート
TP1CCR0 = F - 1;
TP1CCR1 = 0;
TP1CE = 1; // 動作許可
}

// メイン
void sample_main()
{
volatile int d = 0; // デューティ比
volatile int diff = 10;// デューティ比の増加量
volatile int i;

init_port();
init_timer();

while (1) {
for (i = 0; i < 1000000; i++) ;

#if defined(DEBUG)
PCT6 ^= 1;
#endif

// デューティ比を変更
if (d == 0) {
diff = 10;
} else if (d == 100) {
diff = -10;
}
d += diff;
TP1CCR1 = (unsigned short)(F * d / 100);
}
}


当初、デューティ比の変更は INTTP1CC0 割り込みハンドラ内で行う計画だったのですが、期待通りに動作してくれませんでした。スタティック変数やグローバル変数を使うと変になる感じなのですが、まだ詳しいことは調べていません。
【追記】動作しました。

この程度の実験であればメイン内のループで対応できますが、できれば何とか解決したいと思っています。

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

コメント


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


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


忍者ブログ [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 無料ダウンロード
    バーコード
    プロフィール
    名前:
    シモネッタ
    性別:
    非公開
    カウンター
    アクセス解析