Генератор DDS за 5$ своими руками. 4 мгц(PWM)

Тема в разделе "Глядите, что я сделал", создана пользователем Shem Pen, 15 янв 2019.

  1. Shem Pen

    Shem Pen Нерд

    Генератор в режиме синтеза сигналов произвольной формы (DDS) ограничен частотой 300кгц гарантируя приемлемую форму сигнала, в режиме Шима(PWM) 4мгц.
    Генератор может генерировать: синус, пилу правую, пилу левую, треугольник, меандре, шим-меандер со скважностью. Также можно добавить свою форму сигнала, путем правки таблицы в скече и перепрошивке контролера. амплитуда сигнала 5v. Благодаря стабилизатору напряжения на микросхеме LM317T Генератор работает в диапазоне напряжений от 6,5v до 39v. Генератор оборудован экраном LCD1602 (HD44780) подключенным по лини i2c через плату-микросхему PCF8574 по двум проводам данных.



    Управление:
    Кнопка режима(mode) переключает в режим DDS выбирая сигнал : Синус, треугольник, две пилы, Меандр.
    Кнопка на энкодоре Переключает в режим шима(PWM) и осуществляет переход от частоты к скважности и наоборот.
    Две кнопки: право и лево позволяют выбрать разрядность переключение энкодором частоты.

    Кнопка - Reset перезагружает устройство.
    144p-dds.JPG

    Код (C++):
    ......исходник целиком по ссылке ниже...............

    // DDS Алгоритм на ассемблере
    static inline void signalOUT(const uint8_t *signal) {
      asm volatile(  "eor r18, r18   ;r18<-0"  "\n\t"
                     "eor r19, r19   ;r19<-0"  "\n\t"
                     "1:"            "\n\t"
                     "add r18, %0  ;1 cycle"     "\n\t"
                     "adc r19, %1  ;1 cycle"     "\n\t"
                     "adc %A3, %2  ;1 cycle"     "\n\t"
                     "lpm      ;3 cycles"  "\n\t"
                     "out %4, __tmp_reg__  ;1 cycle" "\n\t"
                     "sbis %5, 7   ;1 cycle if no skip" "\n\t"
                     "rjmp 1b    ;2 cycles. Total 10 cycles" "\n\t"
                     :
                     :"r" (ad0), "r" (ad1), "r" (ad2), "e" (signal), "I" (_SFR_IO_ADDR(PORTD)), "I" (_SFR_IO_ADDR(PORTB))
                     :"r18", "r19" );
    } //конец DDS Алгоритм на ассемблере

    void setup() { //Настройка
      lcd.init();
      lcd.backlight();// Включаем подсветку дисплея
      lcd.clear();
      lcd.blink();
      lcd.setCursor(0, 0);//cтрока 0 символ 0
      lcd.print("DDS Gen 300khz");
      lcd.setCursor(0, 1);//cтрока 2 символ 1
      lcd.print("Meandr 4Mhz MAX");
      delay(1000);
      for (int n = 0; n < sizeof(initPortD_data); n++ ) {
        PORTD = initPortD_data[n];
      }
      PORTD = 0; DDRD = 0; TCCR1A = 0; TCCR1B = 0; TIMSK1 = 0;
      DDRB &= ~(1 << DDB0); DDRB &= ~(1 << DDB2);
      PORTC |= (1 << PC2) | (1 << PC3); //подтяжка логической единицы кнопок на порт PC2 PC3
      PORTB |= (1 << PB0) | (1 << PB2); //подтяжка логической единицы кнопок на порт PB0 PB2
      DDRB |= 1 << PB5; // PB5 светодиод на плате = выход
      main_screen(); //Экран выбора Частотомера
      //{если частотомер не выбран то загрузим генератор
      TCCR0B = 0;
      check_regim();
      int_on();//включить прерывание PCINT1
      main_flag = 1;
      lcd.cursor();
    } //конец Настройки.

    ......исходник целиком по ссылке ниже...............
     
    Скачать скеч, схему и библеотеки можно тут https://cloud.mail.ru/public/G5zi/wTfVCtfeMт
     
    Последнее редактирование: 17 янв 2019
    parovoZZ нравится это.
  2. parovoZZ

    parovoZZ Гуру

    это ещё что такое? У меандра одна скважность - 2.
     
  3. Shem Pen

    Shem Pen Нерд

    Скважность в dds режиме меняться не может, а вот в режиме шима запросто.
     
  4. parovoZZ

    parovoZZ Гуру

    Я не про изменение скважности, а про то, что меандр - это исключительно скважность 2. При любой другой скважности сигнал меандром не является.
     
  5. Shem Pen

    Shem Pen Нерд

    Вам виднее :) , меня учили по другому...
     
  6. parovoZZ

    parovoZZ Гуру

    учиться надо ВСЕГДА.
    Открываем ГОСТ 16465-70 и читаем:
    ГОСТ.png
     
    Shem Pen нравится это.
  7. Shem Pen

    Shem Pen Нерд

    интересно между народный стандарт на Меандр какой? в забугоровый генах тоже меандром называют последовательность прямоугольный импульсов любой скважности.
     
  8. parovoZZ

    parovoZZ Гуру

    Меандр на их языке называется square wave. Прямоугольная волна с произвольной скважностью pulse wave.