- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
! 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
!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);
}