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

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

Vodafone 携帯で録音した音声を Fedora PC で聴いたり変換してみようかなと思ったのですが、それ以前のところでハマってしまいました。

まずは mplayer で再生しようとしたら、共有ライブラリ(libdts.so.0)の問題で起動せず。どうも livna と freshrpms の両方からアップデートしている間に、コンフリクトしてしまったようです。

freshrpms の yum リポジトリを無効にし、全部ではありませんが freshrpms のパッケージをアンインストールして、livna からインストールし直すと、mplayer が起動するようになりました。

が、コーデック未対応のようで、再生できず…
疲れたので、今日はここまで。

【追記】RealPlayer で再生できました。

せっかくなので、録音した音声を置いときます。

アキバ電気街口のメガネスーパー(1) (amr)
アキバ電気街口のメガネスーパー(2) (amr)
PR
7セグメント LED 用の BCD デコーダ/ドライバ SN74LS47 を使い、複数の7セグメント LED を点灯させる実験をしました。

7セグメントLED

最初は4桁で実験する予定だったのですが、3桁で力尽きました。二度とやりたいとは思いません。ブレッドボードでこの有様ですから、この回路を基板にはんだ付けするのは無理だと思います(苦笑)

前回の実験のようなスタティック点灯では、各 LED に0〜9を点灯させるのに7つのポートが必要でしたが、74LS47 を使うと LED の数に関係なく4ポートで済みます(74LS47 を使用しなくても、ダイナミック点灯であれば7ポートで済むとは思います)。今回の実験では、LED に表示する値の出力に P90〜P93 の4ポート、点灯させる LED の選択に P98〜P910 の3ポートを使用しました。

接続のメモです。(n = 1, 2, 3)

[CON3-1] +3.3V → SN74LS47(VCC)
[CON3-10] GND → SN74LS47(GND)

[CON1-1] P90 → SN74LS47(A)
[CON1-2] P91 → SN74LS47(B)
[CON1-3] P92 → SN74LS47(C)
[CON1-4] P93 → SN74LS47(D)

SN74LS47(a) → 680Ω → LED<n>(a)
SN74LS47(b) → 680Ω → LED<n>(b)
SN74LS47(c) → 680Ω → LED<n>(c)
SN74LS47(d) → 680Ω → LED<n>(d)
SN74LS47(e) → 680Ω → LED<n>(e)
SN74LS47(f) → 680Ω → LED<n>(f)
SN74LS47(g) → 680Ω → LED<n>(g)

[CON3-1] +3.3V → 2SA1015<n>(B)
2SA1015<n>(C) → (+)LED<n>

[CON1-9] P98 → 10kΩ → 2SA1015<1>(E)
[CON1-10] P99 → 10kΩ → 2SA1015<2>(E)
[CON1-11] P910 → 10kΩ → 2SA1015<3>(E)

以下、主要なコードです。タイマ割り込みハンドラで点灯する LED を切り替え、表示する値を 74LS47 に出力します。また、100回ごとに数値をインクリメントしています。

#define T 256

static int led[3] = { 0, 0, 0 };
static int cur = 0;
static int count = 0;

// ポート初期化
void init_port()
{
// P90〜P94の設定
PMC9L = 0; // 入出力ポート
PM9L = 0; // 出力モード
P9L = (unsigned char)led[cur];

// P98〜P910の設定
PMC9H = 0; // 入出力ポート
PM9H = 0; // 出力モード
P9H = (unsigned char)~(1 << cur);
}

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

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

// タイマ割り込みハンドラ
void timer_int_handler()
{
if (++count == 100) {
// LEDに表示する値を変更
count = 0;
led[0] += 1;
if (led[0] == 10) {
led[0] = 0;
led[1] += 1;
if (led[1] == 10) {
led[1] = 0;
led[2] += 1;
if (led[2] == 10) {
led[2] = 0;
}
}
}
}

// 点灯LEDの切り替え
if (++cur == 3) cur = 0;
P9H = (unsigned char)~(1 << cur);

// 点灯LEDの値を設定
P9L = (unsigned char)led[cur];
}

【備考】gcc で開発しています。
7セグメント LED のスタティック点灯の実験を行いました。使用したのは秋月で4個100円で売ってた LN516RA(アノードコモン)です。

7セグメントLED

後先考えず P90〜P96 に適当につないだら、激しく使いにくくなってしまいました。

[CON3-1] +3.3V → 2SA1015(B)
[CON3-8] P37 → 10kΩ → 2SA1015(E)
2SA1015(C) → (+)LED
LED(e-) → 680Ω → P90 [CON1-1]
LED(d-) → 680Ω → P91 [CON1-2]
LED(c-) → 680Ω → P92 [CON1-3]
LED(g-) → 680Ω → P93 [CON1-4]
LED(f-) → 680Ω → P94 [CON1-5]
LED(a-) → 680Ω → P95 [CON1-6]
LED(b-) → 680Ω → P96 [CON1-7]

この週末には、回路図エディタを探したいと思ってます…

以下、主要なコードです。1, 2, 3, 4, 5, 6, 7, 8, 9, 0 の点灯パターンを繰り返します。

#define T (20000000 / 512) // 1000ms周期

static const unsigned char led[] = {
0xbb, // 1 (b + c)
0x94, // 2 (a + b + d + e + g)
0x91, // 3 (a + b + c + d + g)
0xa3, // 4 (b + c + f + g)
0xc1, // 5 (a + c + d + f + g)
0xe0, // 6 (c + d + e + f + g)
0x9b, // 7 (a + b + c)
0x80, // 8 (a + b + c + d + e + f + g)
0x83, // 9 (a + b + c + f + g)
0x88, // 0 (a + b + c + d + e + f)
};
static const unsigned char *cur = led;
static const unsigned char *end = led + sizeof(led) / sizeof(unsigned char);

// ポート初期化
void init_port()
{
// P90〜P96の設定
PMC9L = 0; // 入出力ポート
PM9L = 0; // 出力モード
P9L = *cur;

// ポート37の設定
PM37 = 0; // 出力モード
P37 = 0; // Lレベル
}

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

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

// タイマ割り込みハンドラ
void timer_int_handler()
{
if (++cur == end) cur = led;
P9L = *cur;
}

【備考】gcc で開発しています。
前回の実験と同様にフルカラー LED を使用し、PWM で色を変える実験をしました。

フルカラーLED

タイマ割り込みハンドラで「赤のみ点灯 → 緑のみ点灯 → 青のみ点灯」を繰り返すのですが、その都度デューティ比を設定することで、さまざまな色になります。

同時には1色しか点灯しないのでトランジスタは必須ではないと考えましたが、勉強を兼ねて追加してみました。かなり明るくなったと思います。
そろそろ回路図描かなきゃいけませんね。

[CON2-25] TOP11 → 10kΩ → 2SA1015(E)
[CON3-1] +3.3V → 2SA1015(B)
2SA1015(C) → (+)LED
LED(R-) → 680Ω → P90 [CON1-1]
LED(G-) → 680Ω → P91 [CON1-2]
LED(B-) → 680Ω → P92 [CON1-3]

以下、主要なコードです。RGB 各色において65段階で変化させています。
また、init_timer() 内の TP1OL1 の設定ですが、トランジスタを入れる前はハイレベルスタートで点灯→消灯だったのですが、トランジスタを入れると消灯→点灯になりました。

#define T 128
#define D 2

enum {
Color_Red,
Color_Green,
Color_Blue,
N_Color
};

static int color = Color_Red;
static int t[N_Color] = { 0, 0, 0 };

// ポート初期化
void init_port()
{
// P90〜P92の設定 (LED)
PMC9L = 0; // 入出力ポート
PM9L = 0; // 出力モード
P9L = 0xff; // すべて消灯

// ポート35の設定 (タイマ出力)
PFC35 = 1; // TOP11出力
PMC35 = 1; // TIP11入力/TOP11出力
}

// タイマ初期化
void init_timer()
{
// TMP1の設定
TP1CE = 0; // 動作禁止
TP1CKS = 7; // fxx/512
TP1MD = 4; // PWM出力モード
TP1OE1 = 1; // TOP11出力許可
TP1OL1 = 1; // TOP11ローレベルスタート
TP1CCR0 = T - 1;
TP1CCR1 = 0;
TP1CE = 1; // 動作許可
}

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

// タイマ割り込みハンドラ
void timer_int_handler()
{
switch (color) {
default:
color = Color_Red;
case Color_Red:
// 赤点灯
P90 = 0;
P91 = P92 = 1;
break;
case Color_Green:
// 緑点灯
P91 = 0;
P90 = P92 = 1;
break;
case Color_Blue:
// 青点灯
P92 = 0;
P90 = P91 = 1;
break;
}

if (++color == N_Color) {
color = Color_Red;

if (t[Color_Red] < T) {
t[Color_Red] += D;
} else {
t[Color_Red] = 0;

if (t[Color_Green] < T) {
t[Color_Green] += D;
} else {
t[Color_Green] = 0;

if (t[Color_Blue] < T) {
t[Color_Blue] += D;
} else {
t[Color_Blue] = 0;
}
}
}
}

TP1CCR1 = t[color];
}


【備考】gcc で開発しています。
今回はフルカラー LED を点灯させてみました。使用した LED は、日亜 NSTM515AS です。

フルカラーLED

アノードコモンですので、次のように接続しています。

[CON3-1] +3.3V → (+)LED
LED(R-) → 680Ω → [CON1-1] P90
LED(G-) → 680Ω → [CON1-2] P91
LED(B-) → 680Ω → [CON1-3] P92

データシートを見て、抵抗値は赤で400Ω弱、青・緑では50Ωくらいで計算していたのですが、試しに680Ωで点灯させてみたところ、実験するには十分明るかったので、各色すべて680Ωとしました。さすがに、青単色だと若干暗い感じはしますが。

以下、主要なコードです。約1秒ごとに、以下の点灯パターンで色が変化します。
無点灯 → 赤 → 緑 → 赤+緑 → 青 → 赤+青 → 緑+青 → 赤+緑+青

#define T (20000000 / 512) // 1000ms周期

static int count = 0;

// ポート初期化
void init_port()
{
// P90〜P92の設定
PMC9L = 0; // 入出力ポート
PM9L = 0; // 出力モード
P9L = ~count & 0xff;

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

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

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

// タイマ割り込みハンドラ
void timer_int_handler()
{
++count;
P9L = ~count & 0xff;

#ifdef DEBUG
PCT6 ^= 1;
#endif
}

PWM と組み合わせたりすると、癒し効果の演出も可能ではないかと思います。

【備考】gcc で開発しています。


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