引き続き、簡易版テストオッシレーターを作っていく。
ようやく発注しておいたAD9833モジュール基板↓が届いたので、早速ブレッドボードに実装
![](https://stat.ameba.jp/user_images/20240602/21/2110pu/fc/9f/j/o0400025315446675935.jpg?caw=800)
全体はこんな感じ
![](https://stat.ameba.jp/user_images/20240602/21/2110pu/b1/9e/j/o0600045015446675953.jpg?caw=800)
現状の回路図
![](https://stat.ameba.jp/user_images/20240524/14/2110pu/b6/14/j/o1078078215442737470.jpg?caw=800)
スケッチは少し修正してこんな感じ↓
#include <SPI.h>
#include <AD9833.h>
#include <TimerTC3.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// AD9833のピン接続
#define FSYNC_PIN 7 // FSYNCピンをデジタル7ピンに接続
#define SCK_PIN 8 // SCKピンをデジタル8ピンに接続
#define MOSI_PIN 10 // MOSIピンをデジタル10ピンに接続
#define SW_PUSH 2 // Push sw
// OLED設定
#define SCREEN_WIDTH 128 //OLED 幅指定
#define SCREEN_HEIGHT 64 //OLED 高さ指定
#define OLED_RESET -1 //リセット端子(未使用-1)
// I2Cに接続されたSSD1306用「display」の宣言
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int sindata[24];
int sincnt;
const long test_freq[] = {455000, 531000, 600000, 1000000, 1400000, 1620000};
int freq_no = 0;
bool PSW = false;
int freq_no_max = sizeof(test_freq) / 4;
//AD9833
AD9833 ad9833(FSYNC_PIN);
//-----------------------------------
void setup() {
pinMode(0, OUTPUT); //DAC
pinMode(SW_PUSH, INPUT_PULLUP); //SW
pinMode(FSYNC_PIN, OUTPUT);
digitalWrite(FSYNC_PIN, HIGH);
SPI.begin(); // SPI通信の初期化
ad9833.begin(); // AD9833の初期化
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(1000); // Pause for 2 seconds
// 初期値 455kHzの出力設定
ad9833.setFrequency(test_freq[freq_no], 0);
ad9833.setWave(AD9833_SINE);
Displayout(); // display to OLED
//sin波形データ作成
for (int n=0; n < 24; n++) {
sindata[n] = (sin(n*0.26)+1)*127;
}
sincnt = 0;
//Timer set
TimerTc3.initialize(69); //69usタイマー
TimerTc3.attachInterrupt(SINOUT) ; //割り込み関数を指定
}
//-------------------------------
// callback function
// sin波形出力
void SINOUT(){
analogWrite(0,sindata[sincnt]);
sincnt++;
if (sincnt == 24){
sincnt=0;
}
}
//
//-------------------------------
void loop() {
push_sw_check();
if (PSW == true){
freq_no +=1;
if (freq_no >= freq_no_max){
freq_no = 0;
}
ad9833.setFrequency(test_freq[freq_no], 0);
ad9833.setWave(AD9833_SINE);
Displayout();
}
delay(200);
// wait for Push SW off
while (PSW == true){
push_sw_check();
delay (50);
}
}
//-------------------------------
void push_sw_check(){
PSW = false;
if (digitalRead(SW_PUSH) == LOW){
delay(50);
if (digitalRead(SW_PUSH) == LOW){ // double check
PSW = true;
}
}
}
//-------------------------------
// Display freqency to OLED
//-------------------------------
void Displayout(){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0); // Start at top-left corner
display.println("Test oscillator");
display.setCursor(0, 32);
display.setTextSize(3);
if (test_freq[freq_no] < 1000000){
display.print(" ");
}
display.print(test_freq[freq_no]/1000); //
display.setCursor(80, 40);
display.setTextSize(2);
display.println("KHz");
display.display();
}
早速動かしてみる。
AD9833の出力端子波形(455KHz)
![](https://stat.ameba.jp/user_images/20240603/14/2110pu/9e/24/j/o0800048015446938484.jpg?caw=800)
AD9833の出力端子波形(1620KHz)
![](https://stat.ameba.jp/user_images/20240603/14/2110pu/21/9f/j/o0800048015446941885.jpg?caw=800)
おお、期待通りの綺麗な正弦波で出力されている。
あとは、ミキサーに程よく信号を入っていれば良いはず。
まぁ、ちょっと、いろいろと波形を見てみてちょうどよい感じになるように抵抗値を調整
調整後の回路図
*注)おじさんが適当に付け替えてみただけなので、真似して作る場合は最適値を自分で調整して欲しい。
![](https://stat.ameba.jp/user_images/20240603/14/2110pu/63/79/j/o1090077915446945097.jpg?caw=800)
NJM2594の7番端子(搬送波)のAC波形
![](https://stat.ameba.jp/user_images/20240603/15/2110pu/1c/79/j/o0800048015446948673.jpg?caw=800)
NJM2594の5番端子(信号波)のAC波形
![](https://stat.ameba.jp/user_images/20240603/15/2110pu/07/4c/j/o0800048015446948780.jpg?caw=800)
最後に、最終出力(OUT)の波形を確認する
普通のオシロだと、時間軸を長く取って圧縮して表示すれば変調波形がきれいに見えるのだが、おじさんが持っている2万円弱の格安中華オシロではメモリが少なすぎてそれが出来ない。
ああ、せめて普通のオシロが欲しい。
今どき10万円弱出せば、割と良いオシロが買える。(例えばRIGOL DHO814等)
でも鬼嫁が許してくれるはずがないのである。
ああ、それ以前に、Windows11が動くPCに買い替えも必要なのである。
世の中は厳しい。
仕方がないので、見た感じ、振幅の大きな時に対し、小さなときが波形が半分くらいになるようにVRを調整。下の波形は振幅が大きい時の波形。
![](https://stat.ameba.jp/user_images/20240603/15/2110pu/fc/2d/j/o0800048015446948830.jpg?caw=800)
波形崩れも無いので、まぁ、これで、テストオッシレーターが何となく出来たような気がする。
ここで、ようやく以前に作った、LA1600を使ったラジオの調整に入る。
![](https://stat.ameba.jp/user_images/20240605/16/2110pu/f7/01/j/o0600041415447767084.jpg?caw=800)
調整方法は、こちらのページを大いに参考にさせていただく。
バリコンのトリマーを中央にしておく。
・適当に放送局を受信して、黄色IFTを調整して音量が最大になるように調整。
おじさんは、セラミックフィルタを狭帯域の物に交換して、より455KHzに近くなるように
調整した。調整が終わったら広帯域のフィルタに戻しておく。
・バリコンを左に回して、オッシレータを531KHzに設定。バーアンテナのコイル位置と
OSCコイルをいじって聞こえるように調整。
・次にテストオッシレータを1620KHzに設定。バリコンを右に回して受信できるか確認
ここまでが準備段階
・テストオッシレータを600KHzに設定してバリコンを回して受信。OSCコイルで受信感度最大になるように調整
・テストオッシレータを1400KHzに設定してバリコンのOSCトリマとANTトリマを調整
以上を繰り返して追い込んでみる。
テストオッシレーターの設定周波数にバリコンを回すと「ポー」という600Hzくらいの音が聞こえる。この音を頼りに調整してみる。
何となく調整出来たような気がするので、普通に放送局を受信してみる。
おお、確かに調整前より感度が上がったような気がする。雑なおじさんの調整なので、本当にちゃんと出来ているかは怪しい。まぁ、調整しないよりはましな気がするのである。
「また何か怪しい物が出来たようだニャ」
![](https://stat.ameba.jp/user_images/20240602/21/2110pu/3d/5b/j/o0380045515446678152.jpg?caw=800)