AD9834DDSの初期バージョンが一応できました。
AD9834で希望周波数を発生し、周波数は、I2C LCD AQM0802に表示します。
周波数ステップは、以前にPICで製作したAD9850DDS SGと同じように、STEPボタンを押すたびに
1MHz→100KHz→10KHz→1KHz→100Hz→10Hz→1MHzと循環するようにしました。
ロータリーエンコーダーを右(時計回り CW)に回すとステップ周波数の値だけ周波数が上がり、左(反時計回り CCW)に回すと周波数が下がります。
回路図です。
Arduino UNOとブレッドボー上の配線の様子です。
スケッチの一部を紹介します。(JA2GQP局のスケッチを使わせていただいています)
//Main Program
void loop() {
if(digitalRead(SW_STEP) == LOW){
Fnc_Stp();
}
Fnc_Dds(FREQ);
Fnc_Lcd();
delay(100);
}
void loop() {
if(digitalRead(SW_STEP) == LOW){
Fnc_Stp();
}
Fnc_Dds(FREQ);
Fnc_Lcd();
delay(100);
}
//割り込みサービスルーチン
ISR(PCINT2_vect){
unsigned char result = r.process();
if(result){
if(result == DIR_CW){
FREQ = FREQ + STEP;
}
else{
FREQ = FREQ - STEP;
}
}
}
unsigned char result = r.process();
if(result){
if(result == DIR_CW){
FREQ = FREQ + STEP;
}
else{
FREQ = FREQ - STEP;
}
}
}
//STEPボタンが押された時の処理
void Fnc_Stp(){
if(STEP == 10){
STEP = 1000000;
}
else{
STEP= STEP / 10;
}
delay(250);
Fnc_Step_Disp();
while(digitalRead(SW_STEP) == LOW){
delay(250);
}
}
void Fnc_Stp(){
if(STEP == 10){
STEP = 1000000;
}
else{
STEP= STEP / 10;
}
delay(250);
Fnc_Step_Disp();
while(digitalRead(SW_STEP) == LOW){
delay(250);
}
}
これで、任意の周波数を発生できるようになりました。
発生できる周波数の上限を測定すると約23.6MHzでした。マスタークロックの半分まではいきません。
将来7MHz CWトランシーバーのVFOとして使いたいと考えています。その場合は、16MHz台を発生させる予定なので、このAD9834DDSで大丈夫だと思っています。
なお、ここまでのArduinoでAD9834DDSの記事をまとめてJH7UBCホームページに掲載します。