2012年5月6日日曜日

STBeeでDAC

STBeeには12bitのDACが2本あります


PA4のDAC1とPA5のDAC2です
で これが使えれば面白そうだなぁと おもって
関数もADCより少ないので 楽にできそうだな と思って
試してみました



初期化コード↓

void DAC_init() {
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = _BV(4);
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

    DAC_InitTypeDef DAC_InitStructure;
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
    DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
    DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_4095;
    DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
    DAC_Init(DAC_Channel_1, &DAC_InitStructure);
    DAC_Cmd(DAC_Channel_1, ENABLE);
}

おかしな部分もあるかもしれませんが
とりあえず動作確認ということで

ちょっと気になるのが
GPIO_Modeで
なんでPP(プッシュプル)なのかなぁと
動いてるしいいはずですが
アナログ値を出す以上プッシュ・プルじゃないだろ と思うんですよね

で ピンに値を出すには
DAC_SetChannel1Data
という関数を使います
これは引数が2個あり
1個目がデータのフォーマット
2個目がデータ自体
となります
基本的に
DAC_SetChannel1Data(DAC_Align_12b_R, 0x0FFF);
という感じでいいはずです

出力される電圧は0~3.3で12bitなので
0.80566406mV単位となります
まぁ普通に遊ぶ程度なら問題ないかと


とりあえず STBeeには2本のDACがあるので
音を出したら面白いかなぁと 思っています
声とか 曲とか

12bitなので ちょっと心配ですが
(PCは16bitが一般的)

これでPCで録音した声を再生できたら
面白いんじゃないかと思ってます

フリーのセリフ素材とかもあるので
時計作ってみたり
別の重要な理由もありますが

とりあえず今回はこんなとこまでで

0 件のコメント:

コメントを投稿