写真1 AD9833 DDS MSOP 0.5ピッチ 変換基板に乗せる

 

それはさておき、

 

このチップは10ピンのMSOPで、写真にようにピンセットの先ほどの大きさです。

 

変換基板に取り付けましたが、ピンのピッチは0.5なので、半田付けにはちょっと技術が必要です。

 

まずチップをゲルタイプの瞬間接着剤で正確な位置に仮止めしておきます。

 

フラックスをほんのわずか塗って、すべてのピンにわざとまたがるくらい半田を盛ります。

 

半田吸い取り線で、余分な半田を吸い取って、出来上がり。

 

慣れれば簡単ですが、最初は数個パーにする覚悟がいります(笑)。

 

このDDSは、マスタクロック(MCLK)周波数は最高25MHzで、その場合最高発振周波数(ナイキスト周波数)は12.5MHzとなり、分解能は0.1Hzです。

 

今回は手持ち部品の関係で、20MHzのクリスタルを使用したので、10MHzまでのプログラマブルオシレータとして、実験してみました。この場合の分解能は約0.075Hzです。

FM3 LCDをつなぐ

投稿日 2012/05/06

インターフェース6月号付録のFM3評価ボードには、ヒューマンインターフェースらしきものは、LED 1個しか搭載されていません。

 

今後いろいろ実験するのに便利なように、LCDキャラクタディスプレイといくつかのタクトスイッチ、LED、ロータリーエンコーダ、ボリュームくらいはいつでもつなげられるようにしておきたいものです。

 

そこでLCDその他をセットにした拡張ボードを作ってみました。名付けてヒューマンインターフェースユニットです。^-^;

FM3_5.jpg

写真1 FM3にLCDをつないでみた

 

これらはGPIOの使い方がわかれば使える範囲です。

 

今回はLCDのみ配線をして、動作を確認しました。

 

LCDの配線は、データラインにGPIOポートを4本、制御に2本、いずれも出力として計6本必要です。

 

FM3評価ボードのピン配置表を見ると、多くのGPIOポートが使えるのですが、ADやI2Cバスのような他のペリフェラルと共用になっているピンを使うともったいないので、なるべくGPIO専用のピンを選びます。

 

今回は以下のように選びました。

 

LCDは3.3V電源のものを使いました。

 

結線(左からLCD信号名、FM3 GPIOポート名、FM3コネクタピン位置)
LCD RS P40 (CN4 P1)
LCD E P41 (CN4 P2)
LCD D4 P42 (CN4 P3)
LCD D5 P43 (CN4 P4)
LCD D6 P44 (CN4 P5)
LCD D7 P45 (CN4 P6)
Vcc 3.3V (CN4 P7)
GND (CN4 P8)

 

CN4はFM3評価ボードの4番コネクタ。Pnはピン番号です。

 

P40からP45はFM3のGPIOポート番号で、たとえばP43は、GPIOポート4の3番です。
CPUには、GPIO1からFまで多くのポートがありますが、そのうちのGPIO4の6個のポートを使います。

FM3_6.jpg

写真2 ヒューマンインターフェースユニット タクトスイッチやロータリーエンコーダも取付済み

 

LCDは輝度調整のための回路と、バックライトの電源が必要です。
今回使用したLCDは3.3V電源のLCDでバックライト付きの白文字です。

 

プログラムのLCD制御部分はCQ出版の「超入門キット STM32ディスカバリ」の記事のを使わせていただきました。一部変更し、関数を追加しています。

 

LCDの関数
lcd_xy(col, row)
lcd_clearall()
lcd_clearline1()
lcd_clearline2()
lcd_puts(str)
lcd_write(col, row, str)

 

ソースコード

 

main.c
Delay_Handler.c
LCD_Handler.c

 

main.cのみ以下に示します。
#include "mcu.h"

 

void Init_Port(void);
void delay_ms(__IO uint32_t nTime);
void Init_LCD(void);
void lcd_xy(uint8_t x, uint8_t y);
void lcd_puts(uint8_t *str);
void lcd_write(uint8_t x, uint8_t y, uint8_t *str);
void lcd_clearall(void);
void lcd_clearline1(void);
void lcd_clearline2(void);

 

void Init_LED(void) {

FM3_GPIO->PFRF_f.P3 = 0; //PF3 set to GPIO
FM3_GPIO->PZRF_f.P3 = 1; //PF3 set to open drain mode
FM3_GPIO->DDRF_f.P3 = 1; //FP3 set to output
FM3_GPIO->PDORF_f.P3 = 0; //FP3 set to init value low

}

 

int32_t main(void){
SysTick_Config(SystemCoreClock / 1000);
Init_LED();//<- ハートビート用でLCDには関係ありません
Init_LCD();

while(1) {
lcd_xy(1, 1);
lcd_puts("Hello! FM3 ^o^" );
delay_ms(3000);
lcd_write(1,2,"1234567890ABCDEF" );
delay_ms(3000);

uint8_t i;
for (i = 1; i <= 16; i++){

lcd_clearline2();
lcd_xy(i, 2);
lcd_puts("*" );
delay_ms(1000);

}

lcd_clearall();
lcd_write(1, 2, "アイウエオカキクケコサシスセソタ" );
delay_ms(3000);
}
}



 

(JF1VRR)