! 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 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); }