PLLコントロール回路
コントロールは、Atmel AVR(ATtiny2313-20PU)を使用
Z80アセンブラは20年前に卒業してしまっており、すっかり忘れている。PICアセンブラも挫折気味。そんなことから言語はBASCOMーAVRを使用。JA9TTTさんのホームページで基本を勉強しどうにか完成。
このデモ版は2Kワード(4KByte)までであり2313はフルにプログラミングできる。こんな言語が無料で使用できるのはありがたい。しかし生成されるコードはアセンブラに比べ大きいのは致し方ない。最近はmegaシリーズも秋月で販売されているので、この問題はそんなに大きな問題ではなくなってきた。やはり簡便にソフトが作れる方が良い。
最初にPLLコントロール
TC9256はシリアル制御である。CLOCK、PERIOD、DATAの3線をAVRと繋ぐ。
TC9256 ATiny2313 DATA(5)--------RB0(12)
CLOCK(4)-------RB1(13)
PERIOD(3)------RB2(14)
コマンドは、以下のようにしている。
1)TC9256のレジスタ設定準備
TC9256のモードは4種類ある
LFモード 直接分周方式 0.5~20MHz
HFモード パルススワロー方式 1~40MHz
FMLモード パルススワロー方式 30から150MHz
FMHモード 1/2+パルススワロー方式 30~130MHz
使用周波数 29.000MHz~29.7MHz
受信第一IF 10.7MHz
PLL出力 29.000+10.7=39.7MHz
29.700+10.7=40.4MHz
39.7~40.4Mhzとなる。 HFモードは40MHzまでであるが、これで設定することとした。
レジスタは「FM=0 MODE=1」
ステップ 10KHz
分周数 39.7MHz÷10KHz=3970
40.4MHz÷10KHz=4040となり 分周数=「3970~4040」分周
リファレンスカウンタの設定
使用水晶は入手しやすい4.5Mhz レジスタは「OSC1=1 OSC2=0」となる
基準周波数 10KHz レジスタは「R0=0 R1=1 R2=0 R3=1」となる
2)レジスタの書き込み
BASCOM-AVRでのシリアルOUT命令は「Shiftout」を使用
関係部分を抜粋すると以下のようになる
Config Portb.0 = Output 'clock出力
Config Portb.1 = Output 'data出力
Config Portb.2 = Output 'period出力
Declare Sub Pllw 'PLL書き込みサブルーチン
Dim Cm01 As Byte 'PLL書き込みコマンド(d0H)のアッパー格納
Dim Cm02 As Byte 'PLL書き込みコマンド(d0H)のロワー格納
Dim Pll1 As Long 'PLLレジスタ1 分周数格納「3970~4040」
Dim Pll2 As Byte 'PLLレジスタ2 PLL設定レジスタ格納
Cm01 = &B00001101 'd0H upper部分「d」の2進数
Cm02 = &B00000000 'd0H lower部分「0」の2進数
Pll2 = &B01101010 '「OSC2=0 OSC1=1」「MODE=1 FM=0」「R3=1 R2=0 R1=1 R0=0」の順番に並べたもの
Pll1 = 40000 '分周数 29.3MHz+10.7MHz=40MHz÷10KHz=40000
Set Portb.2 'PERIOD→H
Set Portb.1 'CLOCK→H
Set Portb.0 'DATA→H
Reset Portb.2 'PIREOD→L 転送開始
Shiftout Portb.1 , Portb.0 , Cm02 , 2 , 4 , 1 'レジスタ書き込みモードL送出
Set Portb.2 'PERIOD→H
Shiftout Portb.1 , Portb.0 , Cm01 , 2 , 4 , 1 'レジスタ書き込みモード送出
Shiftout Portb.1 , Portb.0 , Pll1 , 2 , 16 , 1 'PLLデータ(分周数)送出
Shiftout Portb.1 , Portb.0 , Pll2 , 2 , 8 , 1 'PLL各種設定レジスタ送出
Set Portb.0 'DATA→H
Reset Portb.2 'PERIOD→L 転送終了
PLL書き込みのワンポイント
・アイドル状態でPERIOD,CLOCK,DATAは(H)レベルとする
・データ転送開始後PERIOD信号がLの期間にクロック立下りが8回を超えてはいけない。
ということでd0Hを2分割して送出している。
・ データはLSB(ゼロビットから)から送出でPLLデータは立ち上がりで検出(下の赤字部分)
Shiftoout Portb.1 , Portb,0 , Cm01 , 2 , 4 , 1
これで一応PLLの設定完了。PLLがロックされた瞬間は感激!!
次回はその他のプログラムを説明する。
注意:プログラムは参考であり、責任は取れませんのでご了解願いたい。質問が有ればコメントに記載してください。
コントロールは、Atmel AVR(ATtiny2313-20PU)を使用
- PLL TC9256のコントロール
- 液晶表示
- エンコーダ
- MAIN切替スイッチ
Z80アセンブラは20年前に卒業してしまっており、すっかり忘れている。PICアセンブラも挫折気味。そんなことから言語はBASCOMーAVRを使用。JA9TTTさんのホームページで基本を勉強しどうにか完成。
このデモ版は2Kワード(4KByte)までであり2313はフルにプログラミングできる。こんな言語が無料で使用できるのはありがたい。しかし生成されるコードはアセンブラに比べ大きいのは致し方ない。最近はmegaシリーズも秋月で販売されているので、この問題はそんなに大きな問題ではなくなってきた。やはり簡便にソフトが作れる方が良い。
最初にPLLコントロール
TC9256はシリアル制御である。CLOCK、PERIOD、DATAの3線をAVRと繋ぐ。
TC9256 ATiny2313 DATA(5)--------RB0(12)
CLOCK(4)-------RB1(13)
PERIOD(3)------RB2(14)
コマンドは、以下のようにしている。
1)TC9256のレジスタ設定準備
TC9256のモードは4種類ある
LFモード 直接分周方式 0.5~20MHz
HFモード パルススワロー方式 1~40MHz
FMLモード パルススワロー方式 30から150MHz
FMHモード 1/2+パルススワロー方式 30~130MHz
使用周波数 29.000MHz~29.7MHz
受信第一IF 10.7MHz
PLL出力 29.000+10.7=39.7MHz
29.700+10.7=40.4MHz
39.7~40.4Mhzとなる。 HFモードは40MHzまでであるが、これで設定することとした。
レジスタは「FM=0 MODE=1」
ステップ 10KHz
分周数 39.7MHz÷10KHz=3970
40.4MHz÷10KHz=4040となり 分周数=「3970~4040」分周
リファレンスカウンタの設定
使用水晶は入手しやすい4.5Mhz レジスタは「OSC1=1 OSC2=0」となる
基準周波数 10KHz レジスタは「R0=0 R1=1 R2=0 R3=1」となる
2)レジスタの書き込み
BASCOM-AVRでのシリアルOUT命令は「Shiftout」を使用
関係部分を抜粋すると以下のようになる
Config Portb.0 = Output 'clock出力
Config Portb.1 = Output 'data出力
Config Portb.2 = Output 'period出力
Declare Sub Pllw 'PLL書き込みサブルーチン
Dim Cm01 As Byte 'PLL書き込みコマンド(d0H)のアッパー格納
Dim Cm02 As Byte 'PLL書き込みコマンド(d0H)のロワー格納
Dim Pll1 As Long 'PLLレジスタ1 分周数格納「3970~4040」
Dim Pll2 As Byte 'PLLレジスタ2 PLL設定レジスタ格納
Cm01 = &B00001101 'd0H upper部分「d」の2進数
Cm02 = &B00000000 'd0H lower部分「0」の2進数
Pll2 = &B01101010 '「OSC2=0 OSC1=1」「MODE=1 FM=0」「R3=1 R2=0 R1=1 R0=0」の順番に並べたもの
Pll1 = 40000 '分周数 29.3MHz+10.7MHz=40MHz÷10KHz=40000
Set Portb.2 'PERIOD→H
Set Portb.1 'CLOCK→H
Set Portb.0 'DATA→H
Reset Portb.2 'PIREOD→L 転送開始
Shiftout Portb.1 , Portb.0 , Cm02 , 2 , 4 , 1 'レジスタ書き込みモードL送出
Set Portb.2 'PERIOD→H
Shiftout Portb.1 , Portb.0 , Cm01 , 2 , 4 , 1 'レジスタ書き込みモード送出
Shiftout Portb.1 , Portb.0 , Pll1 , 2 , 16 , 1 'PLLデータ(分周数)送出
Shiftout Portb.1 , Portb.0 , Pll2 , 2 , 8 , 1 'PLL各種設定レジスタ送出
Set Portb.0 'DATA→H
Reset Portb.2 'PERIOD→L 転送終了
PLL書き込みのワンポイント
・アイドル状態でPERIOD,CLOCK,DATAは(H)レベルとする
・データ転送開始後PERIOD信号がLの期間にクロック立下りが8回を超えてはいけない。
ということでd0Hを2分割して送出している。
・ データはLSB(ゼロビットから)から送出でPLLデータは立ち上がりで検出(下の赤字部分)
Shiftoout Portb.1 , Portb,0 , Cm01 , 2 , 4 , 1
これで一応PLLの設定完了。PLLがロックされた瞬間は感激!!
次回はその他のプログラムを説明する。
注意:プログラムは参考であり、責任は取れませんのでご了解願いたい。質問が有ればコメントに記載してください。