【メモ書き】 ArduinoでPLL制御                 2023年冬  

中華PLLのADF4351、ADF5355とかMAX2870の周波数書き込みは
いつもはPICでアセンブラでやっているのだが、Arduinoで書いてみた。
そのコードと作り方を忘れないように書いておく。
(ちゃんと動くかあまり確認してない。コードも用途に合わせ書き換え必要)

本件ポイントはArduino基板上でプログラム開発後、CPUチップだけを移しPLL基板を制御するものである。

必要なもの

Arduino Uno R3 (例えば秋月電子M-07385
この上でプログラムを書き、ライター代わりに書き込みまで行うのでCPUはDIPソケットが良い

CPU Atmega328P ブートローダー書き込み済み   秋月電子 I-12774 (5V 16MHz用のこと)   

8MHz セラミック発振子  秋月電子 P−00153



プログラム
Arduino開発環境が必要。ボードはArduinoUnoR3を選択するとかUSBでつながることなど準備は必要。
当然操作方法とかも。

以下 ADF4350で1296MHzを出した例、
 ピン番号を回路に合わせ変更する
 PLLによりレジスタ数、書き込み順序が違うのでそれに合わせ変更する。
 ADF4350はR5からR0の順に書くので以下のようになる。
 レジスタ数は6に限らない、いくつでも書き込み順に並べて可。
 レジスタは32bitのこと。
この例では1回設定すると無限ループに入る。
***************************************************************************

const int PIN_DATA = 2;
const int PIN_LE = 3;
const int PIN_CLK = 4;

//1296.0MHz ref25MHz ADF4350
unsigned long reg[] = {
0x00580005, //reg5 書き込む順番に並べること
0x009C803C, //reg4
0x000004B3, //reg3
0x00004E42, //reg2
0x080080C9, //reg1
0x00338088 //reg0
};

void setup() {
pinMode(PIN_DATA, OUTPUT);
pinMode(PIN_LE, OUTPUT);
pinMode(PIN_CLK, OUTPUT);
}

void loop() {
for ( int i=0; i<sizeof(reg)/sizeof(unsigned long); i++) {
digitalWrite(PIN_LE, LOW);
shiftOut(PIN_DATA,PIN_CLK,MSBFIRST,reg[i]>>24);
shiftOut(PIN_DATA,PIN_CLK,MSBFIRST,reg[i]>>16);
shiftOut(PIN_DATA,PIN_CLK,MSBFIRST,reg[i]>>8);
shiftOut(PIN_DATA,PIN_CLK,MSBFIRST,reg[i]);
digitalWrite(PIN_LE, HIGH);
}
delay(1000);
while(1); //無限LOOP

}

***************************************************************************

回路、接続


左はArduinoUnoR3とPLLボードをつなぐ開発時のイメージ
 この時、CPUは16MHzで動きCLK,LE,DATA線は0-5Vとなる。
 PLLボードの電源は省略したが5Vの場合、3.3Vの場合があり、PLLが3.3VでArduinoUnoは5Vの場合直接続は注意が必要

右はプログラム書き込み済みATMEGA328PとPLLボードを接続したもの。組み込み型のイメージ
 CPU ATMEGA328PはArduinoUno上で開発、デバッグが終わったものを抜いてくる。
 CPUを8MHzで動作させる理由はCPUを3.3Vで動作させる場合があるので。
 8MHzでの動作は開発時の16MHzにくらべ処理速度が半分になることを承知していること。
 CPUを3.3Vで動作可能なのでPLLボードが3.3Vの時は特別な注意は必要ない。
 PLLが5VならCPUも5Vでで動かせば簡単。

PLLボードの電源、その他CEなどの端子は省略してあるが適切に処理のこと。

ArduinoUno上でプログラムを作りそこからCPUを抜いてくることでライターは不要となる。
抜いたあとはブートローダ書き込み済みCPUを挿せばまた同じことができる。


 

   戻る