中国製エアバンド レシーバーキット改造で、局発のデジタル化(アルディーノでもっと簡単に手掛けられないか)と中間周波数フィルタを替えての狭帯域化が残っています。
今回アルディーノの再勉強を行い、やっとsi5351a接続まで来ました。
1.先に報告の通り、ロータリーエンコーダーを割り込みで受けるスケッチ を実験。
2.先に報告の通り、アルディーノでi2c液晶使いi2cスキャン を手掛けました。i2cのポートを動かした。
i2cアドレススキャンno
確かにつながっているi2cLCDのアドレスが引っ掛かりました。
3.次にアルディーノ互換ボードチビィディーノ 付属LCD コネクタ(4ビット並列接続)でi2cスキャンを動かす。(今となってはUNO互換中国製ボードの方が安くなってしまいましたが、このボードはATMEGAがDIP でICコネクタに入っている点は今後の試作で役に立つかもしれません)
4.チビィディーノに用意したi2cのポートに秋月電子 で買ったsi5351aブレークアウト基板を接続。i2cスキャン確認。0x60。
ARDUINO 互換基板上のLCD コネクタとi2C引き出し
0x60がでました
5.JH7UBCのWEBサイトからスケッチを流用させていただき、10Mhzを設定、発振させました。周波数カウンタは秋月12.8MHzTCXO基準です。6pF負荷だと周波数が低めでしたので、8pFに変更しました。
10MHzでました
続いてロータリースイッチでの周波数設定(この間実験した割り込み利用ロータリースイッチ制御のマージ)、EEPROMメモリー 制御が課題です。
今回の10Mhz設定・発振スケッチは次です。
------------------------参考スケッチ--------------------------------- // SiI5351a 10MHz OSCILLATION // // Si5351_ADDR = 0x60 // // Thanks jh7ubc FOR YOUR giving INFORMATION // http://jh7ubc.web.fc2.com/arduino/ex1_10MHz.png // load:8pF 9.9999MhZ // // i2cLCD address 0x3E // LCD on chibiduino with lcd (5,6,9,10,11,12); // // SCL:A5,SDA:A4 // 20200711 ok // // #include <Wire .h>
// Thanks Kimura "http://zattouka.net/GarageHouse/micon/Arduino/LCD/I2CLCD.htm " #include <skI2CLCDlib.h>
/* ChibiDuino2 LCD sample * SETUP: (Hitachi HD44780 compatable LCD ) * +5V LCD Vdd pin 2 >>> Gnd LCD Vss pin 1, and R/W pin 5 * LCD RS pin 4 to D5 >>> LCD Enable pin 6 to D6 * LCD D4 pin 11 to D9 >>> LCD D5 pin 12 to D10 * LCD D6 pin 13 to D11 >>> LCD D7 pin 14 to D12 * 10K pot: - ends to +5V and Gnd, wiper to LCD VO pin (pin 3) */
#include <LiquidCrystal.h> // Sure 8x2 LCD works with this lib
#define led_pin 13
//lcd instance skI2CLCDlib LCD (0x3E, 16); // LCDのi2cアドレス、画面カラム数16文字 // instanciate the library and pass pins for (RS, Enable, D4, D5, D6, D7) LiquidCrystal lcd (5,6,9,10,11,12);
// Si5351a ADDRESS const byte Si5351_ADDR = 0x60;
void PLLA_set() { Si5351_write(26,0); //MSNA_P3[15:8] Si5351_write(27,1); //MSNA_P3[7:0] Si5351_write(28,0); //MSNA_P1[17:16] Si5351_write(29,0b00001110); //MSNA_P1[15:8] Si5351_write(30,0); //MSNA_P1[7:0] Si5351_write(31,0); //MSNA_P3[19:16]MSNA_P2[19:16] Si5351_write(32,0); //MSNA_P2[15:8] Si5351_write(33,0); //MSNA_P2[7:0] }
void MS0_set(){ Si5351_write(42,0); //MS0_P3[15:8] Si5351_write(43,1); //MS0_P3[7:0] Si5351_write(44,0); //MS0_P1[17:16] Si5351_write(45,0b00100110); //MS0_P1[15:8] Si5351_write(46,0); //MS0_P1[7:0] Si5351_write(47,0); //MS0_P3[19:16]MS0_P2[19:16] Si5351_write(48,0); //MS0_P2[15:8] Si5351_write(49,0); //MS0_P2[7:0] }
void setup() { Wire .begin(); Serial.begin(9600); Serial.println("\nSi5351a 10MhZ"); pinMode(led_pin, OUTPUT); // i2c LCDモジュールの初期化処理 // ICON OFF,コントラ スト(0-63),VDD=5Vで使う LCD .Init(LCD _NOT_ICON,32,LCD _VDD5V) ; //5Vへ変更 // 書き込む LCD .SetCursor(0,0) ; // 表示位置を1行目1列[00H]に設定 LCD .Puts("\nSi5351a 10MhZ ") ; // [00H]から書込まれる(表示する) LCD .SetCursor(0,1) ; // 表示位置を2行目1列[40H]に設定 LCD .Puts(" 10MhZ v1.0 ") ; // [40H]から書込まれる(表示する)
// 並列接続LCD lcd .begin(2,8); // set lib for display size (8x2) lcd .clear(); // clear the screen lcd .setCursor(0,0) ; // 表示位置を1行目1列[00H]に設定 lcd .print("\nSi5351a 10MhZ ") ; // [00H]から書込まれる(表示する) lcd .setCursor(0,1) ; // 表示位置を2行目1列[40H]に設定 lcd .print(" 10MhZ v1.0 ") ; // [40H]から書込まれる(表示する)
// Si5351a set up Si5351_write(3,0xFF); //Disable Output Si5351_write(16,0x80); //CLOCK0 Power down Si5351_write(183,0x80); // 8pF PLLA_set(); MS0_set(); Si5351_write(177,0xA0); //Reset PLLA and PLLB Si5351_write(16,0x4F); //CLOCK0 Power up 8mA Si5351_write(3,0xFE); //Enable CLOCK0 }
void Si5351_write(byte Reg , byte Data) // REG write sequence { Wire .beginTransmission(Si5351_ADDR); // Start condition Wire .write(Reg); // Reg select Wire .write(Data); // Data, Wire .endTransmission(); // stop condition }
void loop() { boolean led_status; Serial.println("Si5351a 10Mhz"); digitalWrite(led_pin, led_status); led_status = !led_status ; delay(2000); } -------------------------------------------------------------