トップ 一覧 検索 ヘルプ 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
!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);
 }