Новости

DDS генератор на мікроконтролері ATmega16. Частина 2. Програмне забезпечення для мікроконтролера

В html?di=69926> першій частині ми розглянули схемотехнічне рішення і конструкцію DDS генератора на мікроконтролері html?cx=005338834574777012439%3Aqye0jsmt8tw&cof=FORID%3A11&q=ATmega16&ie=windows-1251&oe=windows-1251&sa=+%CF%EE%E8%F1%EA+#1100> ATmega16 .

Програмне забезпечення для мікроконтролера. Основні моменти

Як згадувалося в першій частині статті, алгоритм роботи DDS генератора, автором якого є Jesper Hansen, був трохи перероблений і адаптований під компілятор WinAVR. Розглянемо ці відмінні моменти.

Основний момент - це введення додаткового коду на асемблері, який дозволив зупинити генерацію при натисканні кнопки Start / Stop. У функції перевіряється стан біта CPHA в регістрі SPCR, який встановлюється в обробнику зовнішнього переривання (кнопка Start / Stop підключена до висновку зовнішнього переривання INT0). В результаті алгоритм займе 10 тактів процесора, замість 9.

void static inline Signal_OUT (const uint8_t * signal, uint8_t ad2, uint8_t ad1, uint8_t ad0) {
asm volatile ( "eor r18, r18; r18 <-0" "" "eor r19, r19; r19 <-0" "" "1:" "" "add r18,% 0; 1 cycle" "" "adc r19 ,% 1; 1 cycle "" "" adc% A3,% 2; 1 cycle "" "" lpm; 3 cycles "" "" out% 4, __tmp_reg__; 1 cycle "" "" sbis% 5, 2; 1 cycle if no skip "" "" rjmp 1b; 2 cycles. Total 10 cycles "" "::" r "(ad0)," r "(ad1)," r "(ad2)," e "(signal), "I" (_SFR_IO_ADDR (PORTA)), "I" (_SFR_IO_ADDR (SPCR)): "r18", "r19");}

Наступний момент - таблиця значень сигналів для прямого синтезу. Дана таблиця визначена в Flash-пам'яті за адресою з початком 0xXX00. Тому необхідно в make-файлі визначити цю секцію з метою правильного розподілу пам'яті:

#Define sections where to store signal tables LDFLAGS + = -Wl, -section-start = .MySection1 = 0x3A00 LDFLAGS + = -Wl, -section-start = .MySection2 = 0x3B00 LDFLAGS + = -Wl, -section-start =. MySection3 = 0x3C00 LDFLAGS + = -Wl, -section-start = .MySection4 = 0x3D00 LDFLAGS + = -Wl, -section-start = .MySection5 = 0x3E00 LDFLAGS + = -Wl, -section-start = .MySection6 = 0x3F00

Бібліотека управління ЖК дисплеєм - AVR-GCC 4 bit and 8 bit LCD .

Всі режими роботи і налаштування відображаються на дисплеї. Управління здійснюється за допомогою п'яти кнопок. Кнопки Up (вгору) і Down (вниз) використовуються для переміщення між пунктами меню, кнопки Left (вліво) і Right (вправо) використовуються для зміни значення частоти. Кнопка Start / Stop - запускає / зупиняє генерацію.

Вид меню генератора сигналів

Варто зауважити, що є окремий пункт меню, в якому змінюється крок перебудови частоти (Freq Step). Дана опція дозволяє змінювати значення частоти для всіх сигналів в широкому діапазоні з мінімальною кількістю натиснень кнопок і переходів по меню.

При генерації шуму настройки частоти не потрібно - використовується проста функція генерації випадкового числа, результат якої безперервно надходить на вихід DDS.

Значення частоти високочастотного сигналу можна вибрати 1 МГц, 2 МГц, 4 МГц і 8 МГц.

результати

Робота генератора була перевірена за допомогою осцилографа і частотоміра. На зображеннях нижче - вид форми сигналу і основні параметри на осцилографі.

завантаження

Текст вихідного коду і hex-файл - завантажити

scienceprog.com

Для коментування матеріалів з сайту і отримання повного доступу до нашого форуму Вам необхідно зареєструватися .
  • Хлопці, хто генерував ЕКГ-сигнал?
  • A Чому на AVR? куди приємніше це на PIC.
  • Доброго дня! Тема жива ще? Зібрав другу версію генератора, працює тільки дисплей, кнопки і високочастотний вихід, на виході з ЦАП тільки рівень 5в, самого сигналу немає .. Використовував Atmel studio 6, для прошивки стенд Stk 500, є припущення що з фьюз що щось не так .. І в Атмел вони виставляються як то по іншому, з параметрами ..
  • Я, на жаль 6 студію не використовую, тому підказати установки Fuse-бітів в ній не зможу. Викладіть скрін, подивимося ... І ще один момент, а навіщо ви використовували середу Atmel Studio 6. Як програматора або ви вносили зміни до початкового коду і компілювали його? Адже до статті є готовий hex-файл для прошивки.
  • Сьогодні зашив hex, який йшов в статті, заробив генератор, все генерується .. але все таки, стало цікаво, чому не працює мій проект, згенерований у Атмел студіо? подивився hex файли дисассемблер, в моєму hex файлі остання адреса 0x3076, а в вашому 0x2A56, і розмір відповідно менше. Що дивно, код то однаковий, думаю відмінність в make файлах, може я щось не додав туди? про адреси секції (mysection), як і говорилося, додав код. І ще, коли зашиваю свій hex, лається на пам'ять мовляв виходжу за межі flash .. Може знаєте чому так? Якщо потрібні скріни, можу викласти.
  • Я не можу точно сказати в чому справа, бо не бачив в очі 6 студію ... Може бути справа в налаштуваннях оптимізації, може в make-файлі не той кристал визначено ... може версія компілятора свіжіша ... компілює адже в 6 студії без помилок ... Мабуть все ж доведеться мені ставити Atmel Studio 6, а то дивлюся все більше і більше проектів в ній ...
  • Vadzz, світ не стоїть на місці) на офіційному сайті Атмел вже більш ранню версію можна скачати .. хочеш не хочеш, рано чи пізно доведеться ставити новий софт .. По темі, так і не розібрався в чому справа (а що саме з оптимізацією НЕ так може бути? увечері викладу свій make-фаил ..
  • Звичайно, я все це розумію. Але ось бачите, що відбувається зі старими проектами в новій студії. Буде вільний час, поставлю її і теж почну розбиратися з ісходником на прикладі цього DDS генератора. Я думаю, якщо ви щось дізнаєтеся, то поділіться інфою ...
  • Make-фаил. Що помітив, в astudio6 немає такого:: LDFLAGS + = -Wl, -Map = DDS_ver2.map LDFLAGS + = -Wl, -section-start = .MySection1 = 0x3A00 LDFLAGS + = -Wl, -section-start = .MySection2 = 0x3B00 LDFLAGS + = -Wl, -section-start = .MySection3 = 0x3C00 LDFLAGS + = -Wl, -section-start = .MySection4 = 0x3D00 LDFLAGS + = -Wl, -section-start = .MySection5 = 0x3E00 LDFLAGS + = - Wl, -section-start = .MySection6 = 0x3F00 Додав їх через toolchain, в сегмент Flash, але на жаль, та ж картина (І ще при компіляції вискакує таке: Warning 1 #warning "F_CPU not defined for <util / delay.h > "[-Wcpp] c: \ program files \ atmel \ atmel toolchain \ avr8 gcc \ native \ 3.4.2.1002 \ avr8-gnu-toolchain \ bin \ ../ lib / gcc / avr / 4.7.2 /../ ../../../avr/include/util/delay.h 90 3 DDS avr
  • З make-файлами ніби все ОК. Попередження Warning вискакує з-за того, що в исходнике або в налаштуваннях проекту в студії не встановлено параметр F_CPU - тактова частота МК, значення якого використовується при розрахунку функцій затримок (delay.h). Спробуйте в исходнике вставити рядок: #define F_CPU 16000000UL. Або вказати тактову частоту МК в настройках проекту в студії.
  • C warning му розібрався, спасибі. Але помилка залишилася, ось скрін. Після того як зашиваю hex, ігноруючи цю помилку, дисплей працює, кнопки теж, а ось сигналу немає ..
  • Блін я заплутався ... 1. Ви збираєте другу версію генератора (а обговорення ведеться для першої версії), правильно? 2. Де ви брали исходник і make-файл, зі статті http://www.rlocman.ru/shem/schematics.html?di=70216 або брали мій готовий варіант, який я скомпілював в зв'язку зі змінами і виклав http: / /www.rlocman.ru/forum/showpost...0&postcount=31 3. У 6 студії можна вибрати для компіляції зовнішній make-файл? Дивіться, в make-файлі прописуються адреси областей Flash-пам'яті, де зберігаються таблиці даних для генерування сигналів, можливо ці адреси ігноруються студією при компіляції (або вона не розуміє цієї вказівки) і тоді можлива поява такої помилки, я так думаю ... Якщо буде час, сьогодні усановлю 6 студію і буду розбиратися ... Додано 5.02.2014 8:49 Ні, на жаль, я не буду встановлювати 6 студію. Ось почитав про неї на форумах і зустрів безліч так сказати негативних відгуків. Вибачте :(.
  • Розплутую :) 1. Друга версія генератора, обговорення теж і прошивка відповідно. 2. Брав ваш готовий варіант. 3. Не впевнений точно, сьогодні спробую, але ніби як можна. Я скидав make-фаил в попередніх повідомленнях, і що цікаво, в вашому є адреси областей flash пам'яті, а в моєму - немає. Додавав адреси областей flash в свій make-фаил вручну, але при компіляції студія затирає їх .. Вирішив так цю проблему (скріншот додається). А що такого поганого в 6 студії?
  • А тепер при такому вказівці областей Flash, що студія говорить при програмуванні МК? Знову виходимо за область доступної пам'яті? Що поганого в 6 студії http://kazus.ru/forums/showthread.php?t=94871
  • Так, на жаль знову не поміщаємося в пам'ять ... Навіть і не знаю що робити вже (Підозрюю що справа в налаштуваннях Атмел .. ось тільки що і як налаштовувати не розібрався ще .. А ви на 4 студії працюєте?
  • Так, у мене студія 4.16. Може оновлю потім до 4.19, якщо знайду. Я в багатьох випадках користуюся JTAG-му (JTAG ICE) і це одна з основних причин, чому не хочу 6 версію (вона не підтримує цей JTAG). Та й не розробляю я супер-мега проекти на мікроконтролерах, так для себе в основному ...
  • Доброго Всім дня !! Що то тема заглохла ?? А ось у мене є питання-ктонібуть робив прошивку під однострочнікі з контролером HD44780 ??? Що то шкода витрачати 2-х строчник. Тим більше що вся виведена інфа поміщається на одному рядку (1 * 16).

При передруці матеріалів з сайту пряме посилання на РадіоЛоцман обов'язкове.

Запрошуємо авторів статей та перекладів до публікації матеріалів на сторінках сайту.

Хлопці, хто генерував ЕКГ-сигнал?
A Чому на AVR?
Тема жива ще?
6. Як програматора або ви вносили зміни до початкового коду і компілювали його?
Але все таки, стало цікаво, чому не працює мій проект, згенерований у Атмел студіо?
Що дивно, код то однаковий, думаю відмінність в make файлах, може я щось не додав туди?
Може знаєте чому так?
А що саме з оптимізацією НЕ так може бути?
1. Ви збираєте другу версію генератора (а обговорення ведеться для першої версії), правильно?
Html?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: