|
Помогите сделать цифровой фильтр на AVR микроконтроллере, Цифровой фильтр на AVR микроконтроллере. |
|
|
|
Apr 25 2006, 21:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(ATMEL_AVR @ Apr 25 2006, 22:51)  Спасибоза помощь, за советы, я действительно раньше не занимался программированием ЦФ, тем более на микроконтроллере. Просто у меня задание по диплому сделать три Лабораторных работы(для следующег поколения студентов): ЦФ, Реверс, Перестройка по спектру(надо обрабатывать звук, а потом полученное воспроизвести в динамике компьтера). Необходимо наглядно продемонстрировать как на микроконтроллере можно реализовать Цифровую обработку сигнала - Задание руководителя. Я вообще то хотел на Delphi что-нибудь сделать. взял тему по прогаммированию - оказалось микроконтроллер. Подписался под дипломом, надо делать, делаю, но уже времени маловато остается, я хотел взять за основу эксперимент DSP на AVR http://elm-chan.org/works/vp/report.html. но не могу понять как там происходит умножение на заданные коэффициенты, и как с внешней памятью там работают. Там написано что нужно записать в память микроконтроллера два файла основной и переможающую таблицу, но ведь там память всего 2к, а файлы весят 1,5 и 2,4 кбайта. Извините я новичок, может задаю глупые вопросы, но до защиты диплома остается мало времени, а делать надо, я пытаюсь разобраться, но куда ни посмотри везде примеры на Си, а просто не понимаю как этот язык устроен. Хотел в дипломе попрограммировать, придется программировать, самому придумывать. Спасибо еще раз, что по крайней даете хорошие и правильные советы. прошивки часто хранят в *.HEX файлах, где запсаны HEX представления байт прошивки(т.е. тесктовый а не бинарный вид). в итоге прошивка в HEX имеет минимум в 2 раза больше размер. Кроме того коэффициенты(те которые константы) не обязательно загружать в SRAM, можно ещё загрузить в память программ(Flash), которая в несколько раз больше. Хотя зачем я всё это рассказываю? Почитайте сами хотябы обзор AVR займёт вечер а от стандартных вопросов избавит =)
|
|
|
|
|
Apr 26 2006, 19:20
|
Группа: Новичок
Сообщений: 3
Регистрация: 25-04-06
Пользователь №: 16 479

|
Кстати, эта ссылка может быть полезной: http://lord-n.narod.ru/walla.htmlЕсть масса литературы по цифровой фильтрации, в частности вышеупомянутый Айфичер. Почти все в формате DjVue.
|
|
|
|
|
May 2 2006, 17:51
|
Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244

|
Здраствуйте. хотел попросить у кого-нибудь программу QED 2000 v3.6.2 , скачал в интернете QED2000 v3.6.4, а к ней ни один кряк не подходит, фильтры она считает. а коэффициенты посмотреть нельзя. Дайте пожалуйста кому не жалко.
|
|
|
|
|
May 22 2006, 17:22
|
Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244

|
Делаю фильтр на Mega16, 23 коеффициента, подскажите как выбрать нормированные коеффициенты, чтобы во время перемноженияи и суммы не было переполнения результата.
|
|
|
|
|
May 30 2006, 18:08
|
Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244

|
Вроде сделал цифровой фильтр полоса 300-8000 Гц, Fd=16000, Сейчас делаю эффект называемый pitch, по-русски изменение частоты воспроизводимиго звука, т.е. из женского получается мужской голос. Посмотрел пример из DSP эксперимент, мне не ясно как там происходит интерполяция, и как в итоге получается сдвинутый по частоте сигнал, может кто-нибудь делал что-нибудь подобное, подскажите.
|
|
|
|
|
May 30 2006, 18:45
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
ATMEL_AVRПокажите пожалуйста исходники из Вашего: Цитата "Посмотрел пример из DSP эксперимент". Я тоже так хочу :-)
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jun 1 2006, 19:04
|
Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244

|
Вот исходник, может чего усовершенствуете, поможете: А так вроде работает ; ;----------------------------------------------------------------------------; ; FIR Filter 300-8000 ;----------------------------------------------------------------------------; ; Note1: ATMega16 @ 8MHz ; .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m16def.inc" ; tn26def This file is contained in "AVR Family Assembler". .include "C:\Program Files\Atmel\vpsrc\avr.inc" .include "C:\Program Files\Atmel\vpsrc\vp_def.inc" ; коэффициенты .equ k23=-7 .equ k22=-8 .equ k21=-8 .equ k20=-8 .equ k19=-9 .equ k18=-9 .equ k17=-9 .equ k16=-9 .equ k15=-10 .equ k14=-10 .equ k13=-10 .equ k12=255 .equ k11=-10 .equ k10=-10 .equ k9=-10 .equ k8=-9 .equ k7=-9 .equ k6=-9 .equ k5=-9 .equ k4=-8 .equ k3=-8 .equ k2=-8 .equ k1=-7 .equ max=65 ;----------------------------------------------------------; ; Program code .cseg outi SPL, LOW(RAMEND) outi SPH, HIGH(RAMEND) rcall cl_data rcall init_io ;---------------------------------------; ; Main loop (38.5kHz)
main:
sbis ADCSR, 4 ;Wait for EOC rjmp PC-1 ;/ sbi ADCSR, 4 ;Clear ADIF in EL, ADCH ;Read A/D data sbi ADCSR, 6 ;// start new A/D conversion outi TCNT1L, 0x0 outi OCR1BH, 0x0 subi EL,45 ; out OCR1BL, EH ;Update analog output
ldiw Y, 0x70 clrw B ; clrw C ;сохраненные отчеты ; clrw A ;отчеты из памяти
; Cl_Data процедура для очистки памяти данных вначале фильтрации
; addi YL, 41 ; ori YL, 0x80 ; andi YL, 0xBF ;===================================== ;Z - регистр для загрузки последнего отчета ;В - регистр содержащий знчение костанты ;C - регистр для загрузки предпоследнего разряда, ; для того чтобы потом загрузить предпоследний отчет в последний ; таким образом отчеты здвигаются на один вправо ;===================================== ; k23 ld AL, Y+ ; загрузка в ZL 23 отчета - адрес х70 ldi DL,k23 cp DL,ZL ; если результат больше 0 тогда коэф считается отрицательным brcc PC+3 mul DL,AL rjmp PC+2 mulsu DL,AL addw B,T0 ld CL, Y ; загрузка в DL 22 отчета - адрес х71 st -Y,CL ; X23<-X22 inc YL ; B:=X(23)*k23 ; в X(23) записывается X(22), ; т.е. в память по ядресу x70 заноситься значение X(22) ;k22 ldi DL,k22 ld AL, Y+ ; загрузка в ZL 23 отчета - адрес х70 cp DL,ZL ; если результат больше 0 тогда коэф считается отрицательным brcc PC+3 mul DL,AL ; беззнаковое умножение rjmp PC+2 mulsu DL,AL ; DL < 0 , AL - беззнаковое addw B,T0 ld CL, Y ; загрузка в СL 21 отчета из адрес х72 st -Y,CL ; X22<-X21 inc YL ;k21 ;х72 ldi DL,k21 rcall summ ; k20 ldi DL, k20 ; ZL=20,х73 rcall summ ; k19 ldi DL, k19 ; ZL=19,х74 rcall summ ; k18 = -1 ldi DL,k18 rcall summ ; k17 ldi DL,k17 rcall summ ; k16 ; ZL=16,х77 ldi DL,k16 rcall summ ; k15 ; ZL=15,х78 ldi DL,k15 rcall summ ; k14 ; ZL=14,х79 ldi DL,k14 rcall summ ; k13 ; ZL=13,х7A ldi DL,k13 rcall summ ; k12 ; ZL=12,х7B ldi DL,k12 ld AL, Y+ ; загрузка в ZL 23 отчета - адрес х70 mul DL,AL ; беззнаковое умножение addw B,T0 ld CL, Y ; загрузка в СL 21 отчета из адрес х72 st -Y,CL ; X22<-X21 inc YL ; k11 ; ZL=11,х7C ldi DL,k11 rcall summ ; k10 ; ZL=10,х7D ldi DL,k10 rcall summ ; k9 ; ZL=9,х7E ldi DL,k9 rcall summ ; k8 ; ZL=8,х7F ldi DL,k8 rcall summ ; k7 ; ZL=7,х80 ldi DL,k7 rcall summ ; k6 ; ZL=6,х81 ldi DL,k6 rcall summ ; k5 ; ZL=5,х82 ldi DL,k5 rcall summ ; k4 ; ZL=4,х83 ldi DL,k4 rcall summ ; k3 ; ZL=3,х84 ldi DL,k3 rcall summ ; k2 ; ZL=2,х85 ldi DL,k2 ld AL, Y+ ; загрузка в ZL 23 отчета - адрес х70 cp DL,ZL ; если результат больше 0 тогда коэф считается отрицательным brcc PC+3 mul DL,AL ; беззнаковое умножение rjmp PC+2 mulsu DL,AL ; addw B,T0 ; AL загружается в регистр CL, чтобы в следующим цикле ; отот отчет был перед другим входным сигналом mov CL,EL ; CL=1,входное значение st -Y,CL ; X2<-X1 ; k1 ldi DL,k1 cp DL,ZL ; если результат больше 0 тогда коэф считается отрицательным brcc PC+3 mul DL,CL ; беззнаковое умножение rjmp PC+2 mulsu DL,CL ; DL < 0 , AL - беззнаковое addw B,T0 ; проверка на отрицательный результат ; sbis ADCH, 3 ; subi BH,220 st X, BH ; cp BH,ZH ; если результат больше 0 тогда коэф считается отрицательным ; brcc PC+3 mov EH,BH ; в EН записывается сумма произведений DL=k1*x1+k2*x2+...+k23*x23 ; rjmp PC+2 ; mov EH,EL rjmp main
; Очистка памяти для загрузки значений отчетов cl_data: ldi BL,0b10000000 ldiw Y,0x87 st -Y, BL inc BL cpi YL, 0x70 brne PC-3 ret
; Операция суммирования summ: ; k22 ld AL, Y+ ; загрузка в ZL 23 отчета - адрес х70 cp DL,ZL ; если результат больше 0 тогда коэф считается отрицательным brcc PC+3 mul DL,AL ; беззнаковое умножение rjmp PC+2 mulsu DL,AL ; DL < 0 , AL - беззнаковое addw B,T0 ld CL, Y ; загрузка в СL 21 отчета из адрес х72 st -Y,CL ; X22<-X21 inc YL ; B:=X(22)*k22 ; в X(22) записывается X(21), ; т.е. в память по ядресу x71 заноситься значение X(21) ret ret ;---------------------------------------; ; Initialize peripherals
init_io: clr _0 clr _255 dec _255
ldi AL, 0b10100111 mov _NTRL, AL
outi MCUCR, 0b01000000 ;Disable pull-ups
out PORTA, _0 ;АЦП out DDRA, _0
outi PORTB, 0b11110000 ; SCK, MISO, MOSI outi DDRB, 0b11110000 ; outi DDRD, 0b00010000 ; OC1 - выход ЦАП
;A/D converter outi ADMUX, 0b11100111 ;Ch:7, Vref:2.56V (Можно еще попробовать) outi ADCSR, 0b11010101 ;Clock:одиночный режим 8000000/32/13=19230 Гц запуск
outi TCCR1A, 0b00110001 ;00-отключен OC1A ;11-OC1B работает в инертированном режиме 1 при совпадении TC1 ;00-не используется ;01-WGM11,WGM10-8 битная Phase Correct PWM(ШИМ с точной фазой) ;// 8 bit Correct PWM, using COM1B Установка ШИМ работает вывод В, неинвертированный ШИМ OCB1 outi TCNT1H, 0x00 outi TCNT1L, 0x00 ;// set counter1 to zero Счетный регистр обнуляется outi TIFR, 0x04 ;// clear counter1 overflow flag флаг разрешения прерывания по переполнению ТС1 outi TIMSK, 0b00001100 ;1-флаг разрешения прерывания по совпадению TC1B ;// enable counter1 overflow interrupt флаг прерывания по переполнению ТС1 outi TCCR1B,0b00000001 ;0-отключена схема подавления помех ;0-сохр счетного регистра по спаду ;0-не используется ;00-WGM13,WGM12-8 разрядная ШИМ ;001-clkI/O=8МГц-тактовая частота счетчика ;// counter1 clock prescale = 1 8000000/256/2=15625 Гц частота дискретизации ШИМ outi OCR1BH, 0x00 ;// set output compare register B to zero Регистр сравнения очистим outi OCR1BL, 0x00 ldi ZL, max ldi ZH, 250 ret
|
|
|
|
|
Jun 4 2006, 12:20
|
Участник

Группа: Новичок
Сообщений: 26
Регистрация: 29-05-06
Из: Netherlands (Delft)/Ukraine (Odessa)
Пользователь №: 17 547

|
да шож там того программирования - какая разница на микроконтроллере или на персоналке, или в маткаде, сообразил разностное уравнение фильтра нужной конструкции для тебя и все готово. Разностное уравнение или со справочников, или сам состряпай, и все - да желательно изобрази работу этого разностного уравнения в Маткаде например, подав на него шум с полезным сигналом и посмотри что получилось после с шумом и особенно с сигналом. А можешь все теоретически - вывести зону устойчивости фильтра, расчитать шум квантования,  , но вот такие классные фирмы как TI делают много чего за нас, у них файлики в Матлабе, и потом сразу все на Сях под CCS в их же сигнальники заливается, сигнальники то у них классные TMS320F28xx, хотя почему то мой босс торчал на Аналог Девайс, говорит у них сигнально-ориентированные команды правильно реализованы а у техаса нет, но я не спорю, все таки босс, он ваял на аналогах, я на техасах. А вообще скачай книжки с dspguide.com Steve Swith. У меня была скачана с инета элементрарна переведенная на русский язык эта классика, а современные книжки тоже супер, введи в гугле, что тебя интересует на данный момент и дерзай. А спрашивать - правильно люди говорят, ну сделаешь проект, решишь задачу, а ничему не научишься, а вот если бы сначала разобрался. а потом спросил для лучшего усвоения - тогда было бы супер.
|
|
|
|
|
Jun 5 2006, 10:52
|
Группа: Новичок
Сообщений: 6
Регистрация: 5-06-06
Пользователь №: 17 783

|
Цитата(Sergiy @ Jun 4 2006, 16:20)  да шож там того программирования - какая разница на микроконтроллере или на персоналке, или в маткаде, сообразил разностное уравнение фильтра нужной конструкции для тебя и все готово. Разностное уравнение или со справочников, или сам состряпай, и все - да желательно изобрази работу этого разностного уравнения в Маткаде например, подав на него шум с полезным сигналом и посмотри что получилось после с шумом и особенно с сигналом. А можешь все теоретически - вывести зону устойчивости фильтра, расчитать шум квантования,  , но вот такие классные фирмы как TI делают много чего за нас, у них файлики в Матлабе, и потом сразу все на Сях под CCS в их же сигнальники заливается, сигнальники то у них классные TMS320F28xx, хотя почему то мой босс торчал на Аналог Девайс, говорит у них сигнально-ориентированные команды правильно реализованы а у техаса нет, но я не спорю, все таки босс, он ваял на аналогах, я на техасах. А вообще скачай книжки с dspguide.com Steve Swith. У меня была скачана с инета элементрарна переведенная на русский язык эта классика, а современные книжки тоже супер, введи в гугле, что тебя интересует на данный момент и дерзай. А спрашивать - правильно люди говорят, ну сделаешь проект, решишь задачу, а ничему не научишься, а вот если бы сначала разобрался. а потом спросил для лучшего усвоения - тогда было бы супер. Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо.
|
|
|
|
|
Jun 5 2006, 17:19
|

Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334

|
Цитата SvetaM Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо. Исходники есть, для Вас ничего не жалко, заходите ещё.
avrfft.zip ( 15.86 килобайт )
Кол-во скачиваний: 590
FFT___asm_code_example.zip ( 7.63 килобайт )
Кол-во скачиваний: 394
--------------------
Всяк хорошая мысля к нам приходит опосля.
|
|
|
|
|
Jun 6 2006, 07:08
|
Группа: Новичок
Сообщений: 6
Регистрация: 5-06-06
Пользователь №: 17 783

|
Цитата(Proton @ Jun 5 2006, 21:19)  Цитата SvetaM Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо. Исходники есть, для Вас ничего не жалко, заходите ещё.
avrfft.zip ( 15.86 килобайт )
Кол-во скачиваний: 590
FFT___asm_code_example.zip ( 7.63 килобайт )
Кол-во скачиваний: 394Спасибо большое. Только вот меня интересует, что лучше из ассемблерных кодов и что мне больше подходит (к своему стыду интересуюсь по этому поводу у вас)? А именно так чтобы лишнего особо не было, так как хочу прямо так (ничего не делая) вставить прогу в диплом, так как времени уже не осталось. И еще нет ли чего ч русскими комментариями, а то на перевод тоже времени нет. Большое спасибо заранее. Цитата(SvetaM @ Jun 6 2006, 11:06)  Цитата(Proton @ Jun 5 2006, 21:19)  Цитата SvetaM Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо. Исходники есть, для Вас ничего не жалко, заходите ещё.
avrfft.zip ( 15.86 килобайт )
Кол-во скачиваний: 590
FFT___asm_code_example.zip ( 7.63 килобайт )
Кол-во скачиваний: 394Спасибо большое. Только вот меня интересует, что лучше из ассемблерных кодов и что мне больше подходит (к своему стыду интересуюсь по этому поводу у вас)? А именно так чтобы лишнего особо не было, так как хочу прямо так (ничего не делая) вставить прогу в диплом, так как времени уже не осталось. И еще нет ли чего ч русскими комментариями, а то на перевод тоже времени нет. Большое спасибо заранее. Да, и еще забыла, а это ничего что исходник для Atmega8, а мне надо для 16-той?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|