不韋 呂 / Mbed 2 deprecated UITDSP_ADDA_Example

Dependencies:   UITDSP_ADDA mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //------------------------------------------------------------------------------
00002 //  "UITDSP_ADDA" に含まれるライブラリの使用例
00003 //
00004 //      アナログ入力
00005 //          A0: ライン
00006 //          A1: マイク
00007 //          A2: 可変抵抗器
00008 //
00009 //  2015/07/25, Copyright (c) 2015 MIKAMI, Naoki
00010 //------------------------------------------------------------------------------
00011 
00012 #include "ADC_BuiltIn.hpp"      // かならず必要
00013 
00014 // 以下の "#define" 文を一つだけ有効にし,他はコメントとすること
00015 #define POLLING_1_CHANNEL
00016 //#define POLLING_SW_CHANNEL
00017 //#define INTERRUPT_1_CHANNEL
00018 //#define INTERRUPT_2_CHANNELS
00019 //#define POLLING_DA_2_CHANNELS
00020 
00021 using namespace Mikami;         // かならず必要
00022 
00023 //------------------------------------------------------------------------------
00024 // 基本的な使い方:ポーリング,1チャンネル
00025 
00026 #ifdef POLLING_1_CHANNEL
00027 #include "DAC_MCP4922.hpp"      // DAC MCP4922 用
00028 
00029 const int FS_ = 10000;          // 標本化周波数: 10 kHz
00030 ADC_BuiltIn adc_(A0, FS_);      // A0 からの入力を使うように設定
00031 DAC_MCP4922 myDac_;             // DAC を使うための設定
00032 
00033 int main()
00034 {
00035     printf("\r\nPOLLING_1_CHANNEL\r\n");
00036     myDac_.ScfClockTim3(420000);    // 出力の LPF の遮断周波数を 4.2 kHz に設定
00037 
00038     while (true)
00039     {
00040         float xn = adc_.Read();     // A0 からの入力信号を読み込む
00041         //-----------------------------------------------
00042         // この部分に信号処理のプログラムを記述する
00043         
00044         float yn = xn;  // 処理を行わず,そのまま出力する
00045         //-----------------------------------------------
00046         myDac_.Write(yn);           // DAC へ出力する
00047     }
00048 }
00049 #endif  // POLLING_1_CHANNEL
00050 //------------------------------------------------------------------------------
00051 
00052 //------------------------------------------------------------------------------
00053 // ポーリングで入力の切り替えを行う場合
00054 
00055 #ifdef POLLING_SW_CHANNEL
00056 #include "DAC_MCP4922.hpp"
00057 
00058 const int FS_ = 10000;          // 標本化周波数: 10 kHz
00059 ADC_BuiltIn adc_(A0, FS_, A1);  // ADC の A0, A1 を使うための設定
00060 DAC_MCP4921 myDac_;             // DAC を使うための設定
00061 
00062 DigitalIn sw_(D2, PullDown);
00063 
00064 int main()
00065 {
00066     printf("\r\nPOLLING_SW_CHANNEL\r\n");
00067     myDac_.ScfClockTim3(420000);    // 出力の LPF の遮断周波数を 4.2 kHz に設定する
00068 
00069     int swBefore = 0;
00070     while (true)
00071     {
00072         float xn = adc_.Read();     // A0 または A1 からの入力信号を読み込む
00073         //-----------------------------------------------
00074         float yn = xn;
00075         //-----------------------------------------------
00076         myDac_.Write(yn);           // DAC へ出力する
00077 
00078         int swNow = sw_.read();
00079         if (swNow != swBefore)
00080         {
00081             if (swNow == 0) adc_.Select1stChannel(); // 入力: ライン
00082             else            adc_.Select2ndChannel(); // 入力: マイク
00083             swBefore = swNow;
00084         }
00085     }
00086 }
00087 #endif  // POLLING_SW_CHANNEL
00088 //------------------------------------------------------------------------------
00089 
00090 //------------------------------------------------------------------------------
00091 // ADC の EOC 割り込みを使う場合,入力:1チャンネル
00092 
00093 #ifdef INTERRUPT_1_CHANNEL
00094 #include "ADC_Interrupt.hpp"    // ADC 変換終了割り込みを使う場合
00095 #include "DAC_MCP4922.hpp"
00096 
00097 const int FS_ = 10000;  // 標本化周波数: 10 kHz
00098 ADC_Intr adc_(A0, FS_); // ADC の A0 を使うための設定
00099 DAC_MCP4922 myDac_;     // DAC を使うための設定
00100 
00101 // ADC 変換終了割り込みに対する割り込みサービス・ルーチン
00102 void AdcIsr()
00103 {   
00104     float xn = adc_.Read(); // A0 からの入力信号を読み込む
00105     myDac_.Write(xn);       // DAC へ出力する
00106 }
00107 
00108 int main()
00109 {
00110     printf("\r\nINTERRUPT_1_CHANNEL\r\n");
00111 
00112     myDac_.ScfClockTim3(420000);    // 出力の LPF の遮断周波数を 4.2 kHz に設定する
00113 
00114     // ADC 変換終了割り込みに対する割り込みサービス・ルーチンを割り当てる
00115     adc_.SetIntrVec(AdcIsr);        // Assign ISR for ADC interrupt
00116 
00117     while (true) {}
00118 }
00119 #endif  // INTERRUPT_1_CHANNEL
00120 //------------------------------------------------------------------------------
00121 
00122 //------------------------------------------------------------------------------
00123 // ADC の EOC 割り込みを使う場合で,2チャンネル使う場合
00124 //      A0 から読み込んだ信号の振幅を,A2 に接続されている半固定抵抗器で,
00125 //      コントロールして出力する
00126 
00127 #ifdef INTERRUPT_2_CHANNELS
00128 #include "ADC_Interrupt.hpp"    // ADC 変換終了割り込みを使う場合
00129 #include "DAC_MCP4922.hpp"
00130 
00131 const int FS_ = 10000;          // 標本化周波数: 10 kHz
00132 ADC_Intr adc_(A0, FS_, A2);     // ADC の A0, A2 を使うための設定
00133 DAC_MCP4922 myDac_;             // DAC を使うための設定
00134 
00135 uint16_t vr_ = 0;   // A2 から読み込んだ現在の値
00136 uint16_t vr1_ = 0;  // A2 から,一つ前に読み込んだ値
00137 float vol_ = 1.0f;  // 出力の振幅の倍率
00138 
00139 // ADC 変換終了割り込みに対する割り込みサービス・ルーチン
00140 void AdcIsr()
00141 {   
00142     float xn = adc_.Read();     // A0 からの入力信号を読み込む
00143 
00144     adc_.Select2ndChannel();    // 入力チャンネルとして A2 を選択する
00145     adc_.SoftStart();           // AD 変換を開始する(ADC 変換終割り込みは禁止する)
00146     
00147     float yn = vol_*xn; // 出力信号の振幅を半固定抵抗器の値でコントロールする
00148     myDac_.Write(yn);   // DAC へ出力する
00149 
00150     // 半固定抵抗器の値を A2 から読み込む
00151     vr_ = adc_.ReadWait_u16();
00152 
00153     adc_.Select1stChannel();        // 入力チャンネルとして A0 を選択する
00154     adc_.ClearPending_EnableIRQ();  // 保留中の割り込みをクリアする
00155 }
00156 
00157 int main()
00158 {
00159     printf("\r\nINTERRUPT_2_CHANNELS\r\n");
00160     myDac_.ScfClockTim3(420000);    // 出力の LPF の遮断周波数を 4.2 kHz に設定する
00161 
00162     // ADC 変換終了割り込みに対する割り込みサービス・ルーチンを割り当てる
00163     adc_.SetIntrVec(AdcIsr);
00164 
00165     while (true)
00166     {
00167         if (abs(vr_ - vr1_) > 10)
00168         {
00169             vol_ = ((float)vr_)/4095.0f;
00170             vr1_ = vr_;
00171         }
00172         wait(0.1f);
00173     }
00174 }
00175 #endif  // INTERRUPT_2_CHANNEL
00176 //------------------------------------------------------------------------------
00177 
00178 //------------------------------------------------------------------------------
00179 // DAC を2チャンネル出力で使う場合, 入力:ポーリング,1チャンネル
00180 
00181 #ifdef POLLING_DA_2_CHANNELS
00182 #include "DAC_MCP4922Dual.hpp"
00183 
00184 const int FS_ = 10000;      // 標本化周波数: 10 kHz
00185 ADC_BuiltIn adc_(A0, FS_);  // ADC の A0 を使うための設定
00186 DAC_MCP4922Dual myDac_;     // DAC の2つのチャンネルを使うための設定
00187 
00188 int main()
00189 {
00190     printf("\r\nPOLLING_DA_2_CHANNELS\r\n");
00191 
00192     while (true)
00193     {
00194         float xn = adc_.Read();     // A0 からの入力信号を読み込む
00195         //-----------------------------------------------
00196         float yn = xn;
00197         //-----------------------------------------------
00198         myDac_.Write(yn, -yn);      // DAC の2つのチャンネルへ出力する
00199     }
00200 }
00201 #endif  // POLLING_DA_2_CHANNEL
00202 //------------------------------------------------------------------------------