トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

tips-AD9833

AD9833

Wave Generator

https://amzn.to/32h01VY

こっち?

https://amzn.to/2vVjEH5

昔に買ったのは動いているのですが。。現在のは問題がある??

参考

https://www.mgo-tec.com/blog-entry-esp32-ad9833-wave-generator-sign.html

ピンアサイン

AD9833
3V3 VCC
DGND GND
PA6 SDATA MISO
PA5 SCLK CLK
PA4 FSYNC CS
GND AGND
OUT

sample stm32duino

#include <SPI.h>

const uint8_t SCLK_OLED = PA5; //SCLK
const uint8_t MOSI_OLED = PA6; //MOSI (Master Output Slave Input)
const uint8_t Fsync_PIN = PA4; //CS (Chip Select)

const int SINE = 0b0010000000000000; //0x2000
const int TRIANGLE = 0b0010000000000010; //0x2002
const int SQUARE = 0b0010000000100000; //0x2020
const int SQUARE_half = 0b0010000000101000;

const float refFreq = 25000000.0;

// SPIClass spi(HSPI);
// SPIClass spi(MOSI_OLED, PA7, SCLK_OLED , Fsync_PIN);
 
void setup() {
 Serial.begin(9600);
 // spi.setFrequency(40000000);
 SPI.begin();
 // SPI.setDataMode(SPI_MODE2);
 SPI.setDataMode(SPI_MODE2);

 pinMode(Fsync_PIN, OUTPUT);
 digitalWrite(Fsync_PIN, HIGH);

 Control_Resister_Write(0b0000000100000000); //Reset
 delay(50);
}
 
void loop() {
 /*
 AD9833_SetFrequency(10000, SINE);
 delay(1000);
 //
 AD9833_SetFrequency(10000, TRIANGLE);
 delay(1000);
 */
 AD9833_SetFrequency(880, SINE);
 delay(1000);
 //
 AD9833_SetFrequency(440, TRIANGLE);
 delay(1000);
 //
 // AD9833_SetFrequency(10000, SQUARE);
 // delay(3000);
 //
}

void AD9833_SetFrequency(uint32_t frequency, int Waveform) {
 uint32_t FreqWord = (frequency * pow(2, 28)) / refFreq;

 uint16_t MSB = (uint16_t)((FreqWord & 0xFFFC000) >> 14);
 uint16_t LSB = (uint16_t)(FreqWord & 0x3FFF);


//Set control bits 15 ande 14 to 0 and 1, respectively, for frequency register 0
 LSB |= 0b0100000000000000; //=0x4000
 MSB |= 0b0100000000000000; //=0x4000

 Control_Resister_Write(0b0010000000000000); //0x2100 制御ワード書き込み
 Control_Resister_Write(LSB);
 Control_Resister_Write(MSB);

 Control_Resister_Write(0b1100000000000000); //0xC000 位相シフトはゼロ
 Control_Resister_Write(Waveform);
}
 
void Control_Resister_Write(uint16_t b){
 digitalWrite(Fsync_PIN, LOW);
 SPI.transfer16(b);
 digitalWrite(Fsync_PIN, HIGH);
}