Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: UITDSP_ADDA mbed
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 //------------------------------------------------------------------------------
Generated on Thu Jul 14 2022 00:05:49 by
1.7.2