面実装超入門 その2
1.出来具合は?
出力が、0.5Vp-pと、小さくて、気になる(50Ω)、これでええんやろか?
OHPシートに、部品配置を印刷させて、糊でペタッ。
出来上がりです。
失敗は、CLK源が、TTLレベルのものだった....(^_^;; それでも、動いとるけど...
後で、CMOSレベルのもの25MHZ(秋月で2個100円)に、取り替えた。
2.ソフトは?
最初、以下のようなソフトを作ってみた。
動くか、どうか?の、簡単な、動作確認のための、ソフトです。
動かん...
/***********************************************************************/
/* */
/* FILE :control_AD9851_1.c */
/* DATE :Tue, Nov 01, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.0). */
/* */
/***********************************************************************/
#include "sfr_r815.h"
#define RESET p3_4
#define D7 p3_3
#define W_CLK p1_0
#define FQ_UD p1_1
#define high 1
#define low 0
float DDS_data;
unsigned long data,freq;
int i;
void set_FastCLK(void);
void set_terminals(void); //port設定
void reset_DDS(void);
void send_data(void);
void main(void)
{
set_FastCLK();
set_terminals();
reset_DDS();
freq=1100000; //初期値=1.1MHz
DDS_data=28.63345*freq; //DDS_data=設定値
// data=(unsigned long)DDS_data; //data=DDS_dataを32ビット整数値に変換したもの
data=(unsigned long)DDS_data;
send_data();
while(1);
}
void set_FastCLK(void)
{
prc0=1;
hra00=1;
cm06=0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
hra01=1;
ocd2=1;
prc0=0;
}
void set_terminals(void)
{
//出力に設定
pd1=0xFF;
pd3_3=pd3_4=pd3_5=pd3_5=pd3_7=pd4_5=1;
//入力に設定 (ハードで、Pull_Upされている)
//pd4_6=pd4_7=0; 不要なり
}
void reset_DDS(void)
{
RESET=high; //RESET
for(i=0;i<1000;i++); //たっぷり時間を掛ける
RESET=low;
W_CLK=high; //serial設定
W_CLK=low;
FQ_UD=high;
FQ_UD=low;
}
void send_data(void)
{
for(i=0;i<33;i++)
{
if(data & 0x01) D7=high;
else D7=low;
W_CLK=high;
W_CLK=low;
data=data >>1;
}
D7=high; //クロック6倍モード指定
W_CLK=high;
W_CLK=low;
D7=low; //logic 0
W_CLK=high;
W_CLK=low;
D7=low; //power down=no
W_CLK=high;
W_CLK=low;
for(i=0;i<5;i++) //位相制御 位相=0;
{
D7=low;
W_CLK=high;
W_CLK=low;
}
FQ_UD=high;
FQ_UD=low;
}
そんで、えらい失敗を、してしもうた。
AD9851に、正常に電圧が掛かっているか? チェックしたのです。
これが、落とし穴....
テスターの棒の先端が、滑って、 隣の端子と、接触、ショートしてしもうた。
直ぐに、電源を切ったが、ほんのり、煙が、あがったでは、ありませんか...
じゃんねん無念。
「面実装部品は、導通、非導通チェックに、留めたほうが、よい」
一応、AD9851は、動いたのですが、、このために、
出てきた結果が、正常な動作か、どうか、疑う訳です。
90%まで、できていたのに....
気を取り直して、ソフトを、じっくり眺めると、ソフトが、間違っていた...
32個の周波数データを送るはずが
void send_data(void)
{
for(i=0;i<33;i++)
{
i f(data & 0x01) D7=high;
else D7=low;
W_CLK=high;
W_CLK=low;
data=data >>1;
}
何と、33個のデータを送っていた....
for(i=0;i<32;i++) が、正解やんか....数もよう、数えんやんか...わし。
3.結果は?
周波数は、1.1MHZに、設定(AD9851のデータシートと、比べるため。)
狭帯域特性
この狭帯域特性は、good。(span=200KHz)
span=1KHz
広帯域特性
これは、データシートには、遠く及ばない。
次は、AD9859で行く、つもりです。
H.17.11.5