Skip to main content
LibreTexts - Ukrayinska

9.3: Швидко махаючи

  • Page ID
    29406
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    Так що все це справа про необхідність зробити такого роду речі дуже швидко? Одним із застосувань може бути прямий цифровий синтез довільних форм хвиль. Ідея полягає в тому, щоб створити форму хвилі довільної форми, а не тільки звичайні синуси, квадрати і трикутники (хоча це теж можливо). Довільні форми хвиль можуть бути реалізовані за допомогою методів аналогових осциляторів у поєднанні з ланцюгами формування хвиль, але це може бути проблемою, щоб зробити добре. Замість цього розгляньте можливість створення великої таблиці цілих значень. Як правило, розмір столу буде приємною потужністю в два, як 256. Кожен запис у таблиці буде оцифрованим значенням бажаної форми хвилі. Простий пандус може виглядати наступним чином:

    unsigned short int ramp_table[] = { 0, 1, 2, 3, /* and so on */};
    

    Більш складна хвиля може виглядати наступним чином:

    unsigned short int squiggly_table[] = { 0, 21, 15, 33, /* etc */};
    

    Потім ці значення можуть бути відправлені послідовно на цифро-аналоговий перетворювач (ЦАП) для створення бажаної форми хвилі. Як тільки ми дійдемо до кінця таблиці, ми просто петля назад до початку, щоб зробити наступний цикл. За допомогою таблиці входу 256 ми можемо використовувати незнаковий символ як індекс таблиці, і як тільки він досягне 255, збільшення його призведе до того, що він автоматично повернеться назад до 0. Оператор інкременту пост ідеально підходить для цього. Для коду нижче припустимо, що PORT - це місце пам'яті ЦАП, до якого ми пишемо.

    unsigned char i = 0;
    
    // loop forever
    while ( 1 )
    {
        PORT = ramp_table[i++];
    
        // now wait between each value, dependent on sample rate
        delay();
    }