MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов

Views: 880


При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном варианте можно использовать буззер со встроенным генератором. В таком варианте различные состояния звуковых сообщений можно формировать длительностью сигнала. Более продвинутый уровень, это одноголосный генератор, для формирования сигналов разных частот.

Такой способ позволят, не только формировать сигналы по длительности, но и разделять их по частоте. В этом варианте можно формировать даже простые мелодии. Для этого нам потребуется так называемые пассивные buzzer, динамик. Можно применять как механические (они более дешевые), так и пьезоэлектрические.

Внешний вид буззеров выпускаемых фирмой MURATA:

Piezoelectric Sounders / Buzzers  

Но чаще нам предстоит иметь дело с китайским производителем, так как цена и качество у них более приемлемы.

Механическими буззерами проще всего управлять, схема подключения, может иметь следующий вид:

Резистор R14 предназначен для удержания транзистора в закрытом состоянии при включении устройства. R13 вместе емкостью затвора, создают фильтр низких частот, что позволяет в некоторой степени избавиться от гармоник, которые формирует меандр и придать формируемому звуку сигналу, более приятное звучание. Резистор R10 и конденсатор C9 уменьшают влияние на шину питания, работу звукового преобразователя. Для своих устройств я предпочитаю использовать пассивные буззеры типа HYG8503A или HY09.


Теперь перейдет к программной реализации. В PIC24 для создания генератора удобно использовать модули OCx. Один из вариантов настройки рассмотрим в нашем варианте с использованием MCC.

В начале все просто добавляем в проект модуль (любой который свободен) например, в моем варианте это был OC4. Выполним конфигурацию:

Тут очень просто, не нужен нам какой то режим, оставим OFF. Выберем источник FOSC/2. Настройки режима синхронизации, выберем сам модуль, т.е. при запуске модуля он будет сам себя потом запускать и будет нам, генерировать заданную нами частоту.

Для формирования звука нам потребуется создать функцию и описать частоты нот для формирования звуков. Частоты нот, можно легко найти при поиске в инете. Для себя я составил следующие определения констант для нот:

// константы для OC модуля для формирования частот
#define  Do         23888    // До
#define  Do_d       22548    // До-диез
#define  Re         21283    // Ре
#define  Re_d       20088    // Ре-диез
#define  Mi         18960    // Ми
#define  Fa         17896    // Фа
#define  Fa_d       16892    // Фа-диез
#define  Sol        15943    // Соль
#define  So_d       15049    // Соль-диез
#define  Ly         14204    // Ля
#define  Ly_d       13407    // Ля-диез
#define  Si         12654    // Си
// коэффициенты для переключения октав
#define  okt_bol    32      // Большая октава
#define  okt_mal    16      // Малая октава  
#define  okt_1      8       // 1 октава
#define  okt_2      4       // 2 октава
#define  okt_3      2       // 3 октава 
#define  okt_4      1       // 4 октава

Для “извлечения звуков” создадим простую функцию:

//------------------------------------------------------------------------------
void beep_n (uint32_t nota, uint8_t oktav, uint8_t dlit) // формирование сигнала
{
uint16_t dlitel;                // вспомог. переменная
uint32_t frequency = (uint32_t)(nota*oktav*(FCY/2000000)); 

    ClrWdt();                   // сброс сторожевого таймера
    if(!dlit) dlit=1;
    dlitel=500/dlit;            //
    
    OCxRS = frequency/16;       // задаем период
    OCxR    = OCxRS/2;          // половина периода  

    OCxTMR  = 0;                //
    
    OCxCON1_OCM = 6;        // включить модуль
    OCxCON2_TRIGSTAT = 1;
    ClrWdt();                   // сброс сторожевого таймера
    __delay_ms(dlitel);         //
    OCxCON1_OCM = 0;        // выключить модуль
    __delay_ms(10);             //
}
//------------------------------------------------------------------------------

Функция beep_n формирует звуковой сигнал частотой nota, которая расположена в октаве  oktav и длительностью dlit.

Частота которая будут загружаться в регистры модуля OCx предварительно вычисляется при инициализации переменной

uint32_t frequency = (uint32_t)(nota*oktav*(FCY/2000000));

Принцип прост, в регистр который отвечает за период работы OCx, загружаем частоту

OCxRS = frequency/16; // задаем период

А в регистр длительности импульса значение равное половине, чтобы формировать меандр

OCxR = OCxRS/2; // половина периода

Значение регистров в функции описаны как:

//------------------------------------------------------------------------------
// конфигурирование библиотеке на основании выбранного модуля OCx
#define OCxRS   OC4RS     
#define OCxR    OC4R      
#define OCxTMR  OC4TMR     

#define OCxCON1_OCM         OC4CON1bits.OCM        
#define OCxCON2_TRIGSTAT    OC4CON2bits.TRIGSTAT  
//------------------------------------------------------------------------------

Тут вы видите, что выполнено настройка под модуль OC4,  если вы будете использовать другой модуль, циферку “4” надо заменить на циферку используемого модуля ;)


Библиотека для XC16 v1.35

Значок

MCC PIC24 - модуль OUTPUT COMPARE - режиме генератора звуковых сигналов 1.93 KB 6 downloads

При проектировании простых устройств автоматики,...
Login Required Message:


Это может быть интересно


  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Views: 2503Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
  • MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
    Views: 1446 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на  Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0
    Views: 309 Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0   Here I want to share how I configure Altium Designer and how I use the DXPPreferences1.DXPPrf …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    Views: 1794 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
  • Индикатор кода – RC-5 Protocol PhilipsИндикатор кода – RC-5 Protocol Philips
    Views: 1201 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
  • Analog-to-Digital Converter with Computation Technical BriefAnalog-to-Digital Converter with Computation Technical Brief
    Views: 1524 Аналого-цифровой преобразователь с вычислительным модулем. ВВЕДЕНИЕ Аналого-цифровой преобразователь (ADC) с вычислительным модулем (ADC2) в 8-разрядном микроконтроллере Microchip имеет встроенные вычислительные функции, которые обеспечивают функции пост-обработки, такие как передискретизация, …
  • Стабилизатор тока на SN3350, часть 2Стабилизатор тока на SN3350, часть 2
    Views: 1373 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …
  • NeoPixel LED и PIC18NeoPixel LED и PIC18
    Views: 1924   Еще раз об управлении светодиодами на драйвере WS2812 и ему подобных. Как известно эти светики управляются по однопроводной шине. Основная особенность, что программно можно описать передачу данных, …
  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
    Views: 1312 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
  • ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    Views: 2540 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …



 

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее