Телефон в Минске
+375 17 317-59-11, +375 17 317-59-14
Электронная почта

Генератор сигналов на SigmaDSP, Генератор синуса, меандра, пилы и треугольника

Ном. номер: 9000468784
Страна происхождения: РОССИЯ
Производитель: DIY
Генератор сигналов на SigmaDSP, Генератор синуса, меандра, пилы и треугольника
56 BYN
Это набор компонентов
(см.спецификацию ниже)
Добавить в корзину 1 шт. на сумму 56 BYN

Спецификация набора

То, что у вас уже есть, вы можете удалить в корзине.

НаименованиеЦенаКол-во
Печатная плата RDC1-LD1, Печатная плата с разводкой, FR4 12.6х30мм (1.5мм, 18мкм) 40 BYN 4
74HC595D.118, 8-и битный сдвиговый регистр с выходным регистром-защелки и тремя состояниями, [SO-16] 10 BYN 4
Кер.ЧИП конд. 0.1мкФ,Y5V 50В, +80-20%,0603 4 BYN 1
0.063Вт 0603 10 кОм, 5%, Чип резистор (SMD) 0.90 BYN 4
16K1-B10K, L20KC, 10 кОм, Резистор переменный, Резистор переменный 40 BYN 4
CAT16-471J4 4х470 Ом, ЧИП резисторная сборка (SMD) 2 BYN 8
TOS-5161AMR-N, Индикатор красный 12.60х19.00мм 15мКд, общий катод 33 BYN 4
Мелисса, Arduino Mini, ATmega328P-AU + Neopixel 390 BYN 1
RDC2-0027v2, SigmaDSP ADAU1701. Модуль цифровой обработки звука. V2 820 BYN 1

При проведении испытаний, исследований и в тестировании работы радиоэлектронных схем работающих в акустике необходимы источники сигналов низкой частоты самых разнообразных частот и форм. С помощью модуля RDC2-0027 и любого контроллера Arduino можно легко построить генератор сигналов низкой частоты очень высокого качества. Например, синусоидальный сигнал будет искажен всего на 0,007% во всем диапазоне звуковых частот.
Давайте построим генератор сразу четырёх сигналов: синус, меандр, треугольник и пила.
Для постройки генератора соберем схему.

Схема

В схеме используются: RDC2-0027 v1 или v2 - модуль цифровой обработки звука на SigmaDSP ADAU1701, Мелисса – клон Arduino Mini, четыре семисегментных светодиодных дисплея RDC1-LD, четыре потенциометра на 10кОм и четыре кнопки.
RDC2-0027 – будет источником НЧ, ардуино управляет частотой сигналов, включает/выключает сигналы одной из четырёх форм в любой комбинации и выводит значение частоты на дисплей. Форму сигналов выбираем кнопками SW1-SW3, а частоту сигнала устанавливаем потенциометрами RV1-RV3.
Перед сборкой схемы необходимо будет в SigmaStudio собрать проект из четырёх генераторов, и загрузить сгенерированный .hex файл в EEPROM RDC2-0027. Сделать это можно с помощью USB программатора FLASH и EEPROM памяти RDC2-0026 или с помощью Arduino. Подробные инструкции найдёте в разделе Цифровой звук.

Проект четырёх генераторов SigmaStudio

SigmaStudio проект

Затем загружаем в Arduino скетч ADAU1701_Gen_LED_Dis.
Для понимания, откуда в скетче взяты данные посмотрите скрин IDE Arduino с загруженным скетчем генераторов. Строчки отвечающие за включение и частоту синуса подчеркнуты цветными линиями. В предыдущем рисунке те же данные в SigmaStudio подчеркнуты теми же цветами.

Arduino скетч

Следующим шаг это сборка генератора. Если вам не нужна индикация частоты просто не подключайте индикацию (четыре RDC1-LD), а в своих экспериментах отслеживайте сигнал осциллографом, подключенным к одному из выходов аудиопроцессора.
В ролике можно посмотреть как выглядит проект и как изменяется форма или частота выходного сигнала.

Это открытый проект! Лицензия, под которой он распространяется – Creative Commons - Attribution - Share Alike license.

Скетч. Код программы



//#include "i2clib/EEPROM24.h"
#include "i2clib/I2CMaster.h"
#include "i2clib/SoftI2C_mod.h"
#include "i2clib/ADAU1701.h"
#include <RDC1_LD.h>
#include <Adafruit_NeoPixel.h>


//выводы для подключения ADAU1701
#define DSP_SDA       9
#define DSP_SCL       10
#define DSP_WP        12
#define DSP_RES       1//13
#define DSP_ADDRESS   0
//аналоговые входы
#define SIN_FREQ_PIN        A3
#define SQR_FREQ_PIN        A2
#define TRI_FREQ_PIN        A1
#define SAW_FREQ_PIN        A0
//выводы для кнопок
#define SIN_ON_KEY_PIN        2
#define SQR_ON_KEY_PIN        3
#define TRI_ON_KEY_PIN        4
#define SAW_ON_KEY_PIN        5
//выводы для индикатора
#define DIS_LATCH          6
#define DIS_DATA           7
#define DIS_CLK            8

#define LED_PIN            13
#define ACTIVE_COLOR       ((uint32_t) 0x000300)

//адреса взяты из SigmaStudio
#define SIN_ON_ADDR          2 //адрес в SigmaStudio для включение генератора синуса
#define SQR_ON_ADDR          5
#define TRI_ON_ADDR          12
#define SAW_ON_ADDR          15
#define SIN_FREQ_ADDR        1 //адрес в SigmaStudio для установки частоты генератора синуса
#define SQR_FREQ_ADDR        4
#define TRI_FREQ_ADDR        11
#define SAW_FREQ_ADDR        14

//значения взяты из описания на микросхему ADAU1701
#define       ADAU1701_DSP_CORE_CTRL       0x081C
#define       ADAU1701_DAC_SETUP           0x0827
#define       SAFELOAD_ADR_0               0x0815
#define       SAFELOAD_DATA_0              0x0810
#define       DSP_CORE_IST                 (1 << 5)

#define       GENERATOR_COUNT              4
#define       GEN_MAX_FREQ                 ((uint32_t) 6466219)
#define       FREQ_PER_ADC_VAL             ((uint32_t) (GEN_MAX_FREQ / 1023))
#define       GEN_MAX_FREQ_ALL             ((uint32_t) 1747626)
#define       FREQ_PER_ADC_VAL_ALL         ((uint32_t) (GEN_MAX_FREQ_ALL / 1023))
#define       HzFREQ_PER_ADC_VAL           ((float) (6466219.0 / 18500.0))
#define       HzFREQ_PER_ADC_VAL_ALL       ((float) (1747626.0 / 5000.0))
#define       ADC_THRESHOLD                25


SoftI2C   mI2C      (DSP_SDA, DSP_SCL);       
//EEPROM24  mEeprom   (mI2C, EEPROM_24LC256);   
ADAU1701  mDSP      (mI2C, DSP_ADDRESS); 
RDC1_LD Display(DIS_LATCH, DIS_DATA, DIS_CLK, 4);
            //  latch, data, clk, разряды     
Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(1, LED_PIN, NEO_GRB + NEO_KHZ800);


uint8_t KeyPins[] = { SIN_ON_KEY_PIN, SQR_ON_KEY_PIN, TRI_ON_KEY_PIN, SAW_ON_KEY_PIN, };
uint8_t AinPins[] = { SIN_FREQ_PIN, SQR_FREQ_PIN, TRI_FREQ_PIN, SAW_FREQ_PIN, };
uint8_t GenState = 0;
uint16_t AinPrevVals[] = {0, 0, 0, 0,};

void setup()
{
  pinMode(DSP_SDA, INPUT);
  digitalWrite(DSP_SDA, LOW);
  pinMode(DSP_SCL, INPUT);
  digitalWrite(DSP_SCL, LOW);
  pinMode(DSP_WP, INPUT);         
  digitalWrite(DSP_WP, LOW);      
  pinMode(DSP_RES, INPUT);
  digitalWrite(DSP_RES, LOW);

  for (uint8_t i = 0; i < GENERATOR_COUNT; i++)
    digitalWrite(KeyPins[i], HIGH);
  
  pinMode(DSP_RES, OUTPUT);
  delay(1000);
  pinMode(DSP_RES, INPUT);

  delay(22);
  while (digitalRead(DSP_WP) == LOW);

  delay(300);
  
  //дисплей с общим катодом
  Display.SetType(COMMON_CATHODE);
  LEDS.begin();
}


void loop()
{
  for (uint8_t i = 0; i < GENERATOR_COUNT; i++)
  {
    if (digitalRead(KeyPins[i]) == LOW)
    {
      delay(70);
      if (digitalRead(KeyPins[i]) == LOW)
      {
        uint16_t OnAddr[] = { SIN_ON_ADDR, SQR_ON_ADDR, TRI_ON_ADDR, SAW_ON_ADDR };
        
        uint8_t Data[5];
        Data[0] = 0;

        Data[1] = OnAddr[i];
        mDSP.write(SAFELOAD_ADR_0, 2, Data);

        Data[1] = 0;
        if (GenState & (1 << i))
        {
          GenState &= ~(1 << i);
          Data[2] = 0;
        }
        else
        {
          GenState |= (1 << i);
          Data[2] = 0x80;
        }

        Data[3] = 0;
        Data[4] = 0;

        mDSP.write(SAFELOAD_DATA_0, 5, Data);

        mDSP.read(ADAU1701_DSP_CORE_CTRL, 2, Data);
        Data[1] |= DSP_CORE_IST;
        mDSP.write(ADAU1701_DSP_CORE_CTRL, 2, Data);
      
        while(digitalRead(KeyPins[i]) == LOW);          
      }
    }
  }

  if (GenState == 0)
    LEDS.setPixelColor(0, 0);
  else
    LEDS.setPixelColor(0, ACTIVE_COLOR);
  LEDS.show();

  for (uint8_t i = 0; i < GENERATOR_COUNT; i++)
  {
    uint16_t ADCDataNew = analogRead(AinPins[i]);

    if ((abs(ADCDataNew - AinPrevVals[i]) >= ADC_THRESHOLD)
       && (ADCDataNew >= 3))
    {
      uint16_t FreqAddr[] = { SIN_FREQ_ADDR, SQR_FREQ_ADDR, TRI_FREQ_ADDR, SAW_FREQ_ADDR };
      
      AinPrevVals[i] = ADCDataNew;
      //if (AinPrevVals[i] == 0)
        //AinPrevVals[i] = 1;

      uint32_t FreqPerADC = FREQ_PER_ADC_VAL;
      if (i >= 1) //если не синус
        FreqPerADC = FREQ_PER_ADC_VAL_ALL;
      uint32_t NewFreqVal = ((uint32_t)AinPrevVals[i]) * FreqPerADC;
      
      float FreqToShow = NewFreqVal;
      float HzFreqPerADC = HzFREQ_PER_ADC_VAL;
      if (i >= 1) //если не синус
        HzFreqPerADC = HzFREQ_PER_ADC_VAL_ALL;
      FreqToShow = (FreqToShow / HzFreqPerADC) / 1000;
      Display.print(FreqToShow, 2);

      if (i == 3) //если пила
        NewFreqVal /= 2;

      uint8_t Data[5];
      Data[0] = 0;
      Data[1] = FreqAddr[i];
      mDSP.write(SAFELOAD_ADR_0, 2, Data);
      Data[1] = NewFreqVal >> 24;
      Data[2] = NewFreqVal >> 16;
      Data[3] = NewFreqVal >> 8;
      Data[4] = NewFreqVal;
      mDSP.write(SAFELOAD_DATA_0, 5, Data);

      mDSP.read(ADAU1701_DSP_CORE_CTRL, 2, Data);
      Data[1] |= DSP_CORE_IST;
      mDSP.write(ADAU1701_DSP_CORE_CTRL, 2, Data);
    }
  }
}
//----------------------------------------------------------------

Гарантийный срок

6 месяцев

Техническая документация

Видео

Нет информации по выбранному региону.