Новости
В 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?