реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Помогите сделать цифровой фильтр на AVR микроконтроллере, Цифровой фильтр на AVR микроконтроллере.
Petka
сообщение Apr 25 2006, 21:13
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 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 займёт вечер а от стандартных вопросов избавит =)
Go to the top of the page
 
+Quote Post
Дмитрий Анатолье...
сообщение Apr 26 2006, 19:20
Сообщение #17





Группа: Новичок
Сообщений: 3
Регистрация: 25-04-06
Пользователь №: 16 479



Кстати, эта ссылка может быть полезной: http://lord-n.narod.ru/walla.html
Есть масса литературы по цифровой фильтрации, в частности вышеупомянутый Айфичер. Почти все в формате DjVue.
Go to the top of the page
 
+Quote Post
ATMEL_AVR
сообщение May 2 2006, 17:51
Сообщение #18





Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244



Здраствуйте. хотел попросить у кого-нибудь программу QED 2000 v3.6.2 , скачал в интернете QED2000 v3.6.4, а к ней ни один кряк не подходит, фильтры она считает. а коэффициенты посмотреть нельзя. Дайте пожалуйста кому не жалко.
Go to the top of the page
 
+Quote Post
Petka
сообщение May 2 2006, 19:05
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(ATMEL_AVR @ May 2 2006, 21:51) *
Здраствуйте. хотел попросить у кого-нибудь программу QED 2000 v3.6.2 , скачал в интернете QED2000 v3.6.4, а к ней ни один кряк не подходит, фильтры она считает. а коэффициенты посмотреть нельзя. Дайте пожалуйста кому не жалко.

см. мои посты выше. я Вам просчитал фильтр, о котором Вы просили.
Go to the top of the page
 
+Quote Post
kanzler
сообщение May 4 2006, 10:29
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Столкнулся с проблемой того что фильр не работает. Связка такая Полосовой фильтр - синхронный детектор - ФНЧ - ФВЧ. Связка до ФВЧ работает. Фильтр взял от Atmel AVR223. Характеристика ФВЧ: частота среза 0,1 Гц, частота преобразования 5404 Гц. Фильтр IIR второго порядка, коэффициенты рассчитывал в МатЛабе и в QED2000, почти схожи но не суть. На выходе ФВЧ должен быть ноль если сигнал не меняется, и изменение если меняется с частотой от 0,1 Гц, но сиго не происходит. Кто подскажет, что могло случиться?
Go to the top of the page
 
+Quote Post
ATMEL_AVR
сообщение May 22 2006, 17:22
Сообщение #21





Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244



Делаю фильтр на Mega16, 23 коеффициента, подскажите как выбрать нормированные коеффициенты, чтобы во время перемноженияи и суммы не было переполнения результата.
Go to the top of the page
 
+Quote Post
kanzler
сообщение May 23 2006, 04:43
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 340
Регистрация: 27-02-06
Из: Екатеринбург
Пользователь №: 14 728



Цитата(ATMEL_AVR @ May 22 2006, 23:22) *
Делаю фильтр на Mega16, 23 коеффициента, подскажите как выбрать нормированные коеффициенты, чтобы во время перемноженияи и суммы не было переполнения результата.

Скорее всего вам надо выбрать разрядность аккумулятора из расчёта Разрядность данных * Разрядность коэффициентов.
Go to the top of the page
 
+Quote Post
ATMEL_AVR
сообщение May 30 2006, 18:08
Сообщение #23





Группа: Новичок
Сообщений: 9
Регистрация: 18-04-06
Пользователь №: 16 244



Вроде сделал цифровой фильтр полоса 300-8000 Гц, Fd=16000,
Сейчас делаю эффект называемый pitch, по-русски изменение частоты воспроизводимиго звука,
т.е. из женского получается мужской голос. Посмотрел пример из DSP эксперимент, мне не ясно как там происходит интерполяция, и как в итоге получается сдвинутый по частоте сигнал, может кто-нибудь делал что-нибудь подобное, подскажите.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение May 30 2006, 18:45
Сообщение #24


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



ATMEL_AVR
Покажите пожалуйста исходники из Вашего:
Цитата
"Посмотрел пример из DSP эксперимент".

Я тоже так хочу :-)


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ATMEL_AVR
сообщение Jun 1 2006, 19:04
Сообщение #25





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2006, 19:31
Сообщение #26


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



А какой тип фильтра? НЧ?


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
Sergiy
сообщение Jun 4 2006, 12:20
Сообщение #27


Участник
*

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



да шож там того программирования - какая разница на микроконтроллере или на персоналке, или в маткаде, сообразил разностное уравнение фильтра нужной конструкции для тебя и все готово. Разностное уравнение или со справочников, или сам состряпай, и все - да желательно изобрази работу этого разностного уравнения в Маткаде например, подав на него шум с полезным сигналом и посмотри что получилось после с шумом и особенно с сигналом. А можешь все теоретически - вывести зону устойчивости фильтра, расчитать шум квантования, smile.gif, но вот такие классные фирмы как TI делают много чего за нас, у них файлики в Матлабе, и потом сразу все на Сях под CCS в их же сигнальники заливается, сигнальники то у них классные TMS320F28xx, хотя почему то мой босс торчал на Аналог Девайс, говорит у них сигнально-ориентированные команды правильно реализованы а у техаса нет, но я не спорю, все таки босс, он ваял на аналогах, я на техасах. А вообще скачай книжки с dspguide.com Steve Swith. У меня была скачана с инета элементрарна переведенная на русский язык эта классика, а современные книжки тоже супер, введи в гугле, что тебя интересует на данный момент и дерзай. А спрашивать - правильно люди говорят, ну сделаешь проект, решишь задачу, а ничему не научишься, а вот если бы сначала разобрался. а потом спросил для лучшего усвоения - тогда было бы супер.
Go to the top of the page
 
+Quote Post
SvetaM
сообщение Jun 5 2006, 10:52
Сообщение #28





Группа: Новичок
Сообщений: 6
Регистрация: 5-06-06
Пользователь №: 17 783



Цитата(Sergiy @ Jun 4 2006, 16:20) *
да шож там того программирования - какая разница на микроконтроллере или на персоналке, или в маткаде, сообразил разностное уравнение фильтра нужной конструкции для тебя и все готово. Разностное уравнение или со справочников, или сам состряпай, и все - да желательно изобрази работу этого разностного уравнения в Маткаде например, подав на него шум с полезным сигналом и посмотри что получилось после с шумом и особенно с сигналом. А можешь все теоретически - вывести зону устойчивости фильтра, расчитать шум квантования, smile.gif, но вот такие классные фирмы как TI делают много чего за нас, у них файлики в Матлабе, и потом сразу все на Сях под CCS в их же сигнальники заливается, сигнальники то у них классные TMS320F28xx, хотя почему то мой босс торчал на Аналог Девайс, говорит у них сигнально-ориентированные команды правильно реализованы а у техаса нет, но я не спорю, все таки босс, он ваял на аналогах, я на техасах. А вообще скачай книжки с dspguide.com Steve Swith. У меня была скачана с инета элементрарна переведенная на русский язык эта классика, а современные книжки тоже супер, введи в гугле, что тебя интересует на данный момент и дерзай. А спрашивать - правильно люди говорят, ну сделаешь проект, решишь задачу, а ничему не научишься, а вот если бы сначала разобрался. а потом спросил для лучшего усвоения - тогда было бы супер.



Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо.
Go to the top of the page
 
+Quote Post
Proton
сообщение Jun 5 2006, 17:19
Сообщение #29


Частый гость
**

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



Цитата
SvetaM
Привет! Не знаю у кого спросить, но я делаю диплом по теме "Определение дефектов подшипников путем анализа вибрации". И мне надо на промежуточном этапе сузить частоты идущие от датчика, делаю я это на Atmege16. Не подскажете каким образом можно напистаь Фурье преобразование на данном микроконтроллере. Если есть какие-нибудь исходники, буду признательна. Спасибо.


Исходники есть, для Вас ничего не жалко, заходите ещё.Прикрепленный файл  avrfft.zip ( 15.86 килобайт ) Кол-во скачиваний: 590
Прикрепленный файл  FFT___asm_code_example.zip ( 7.63 килобайт ) Кол-во скачиваний: 394


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
SvetaM
сообщение Jun 6 2006, 07:08
Сообщение #30





Группа: Новичок
Сообщений: 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-той?
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01525 секунд с 7
ELECTRONIX ©2004-2016