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

 
 
> Помогите сделать цифровой фильтр на AVR микроконтроллере, Цифровой фильтр на AVR микроконтроллере.
ATMEL_AVR
сообщение Apr 18 2006, 19:22
Сообщение #1





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



Помогите с алгоритмом, либо любой другой информацией по реализации цифрового фильтра на AVR микроконтроллере. Есть программатор STK500 и микроконтроллеры ATMega16 и ATTiny26.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ATMEL_AVR
сообщение Jun 1 2006, 19:04
Сообщение #2





Группа: Новичок
Сообщений: 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

Сообщений в этой теме
- ATMEL_AVR   Помогите сделать цифровой фильтр на AVR микроконтроллере   Apr 18 2006, 19:22
- - Petka   Цитата(ATMEL_AVR @ Apr 18 2006, 23:22) По...   Apr 18 2006, 20:28
- - Proton   Если тебе нужен неважно какой, лишь бы цифровой фи...   Apr 19 2006, 03:51
|- - kanzler   Цитата(Proton @ Apr 19 2006, 09:51) Если ...   Apr 19 2006, 04:49
- - ATMEL_AVR   Спасибо за помощь, попробую разобраться с AVR222. ...   Apr 19 2006, 17:59
|- - Andy Mozzhevilov   Цитата(ATMEL_AVR @ Apr 19 2006, 23:59) Сп...   Apr 20 2006, 02:48
|- - defunct   Цитата(ATMEL_AVR @ Apr 19 2006, 20:59) Мн...   Apr 20 2006, 14:18
- - ATMEL_AVR   Спасибо за ответы. Мне нужен КИХ фильтр, число коэ...   Apr 21 2006, 18:37
|- - Petka   Цитата(ATMEL_AVR @ Apr 21 2006, 22:37) Сп...   Apr 21 2006, 21:06
- - ATMEL_AVR   Мне нужен полосовой фильтр, полосы пропускания fн=...   Apr 22 2006, 18:02
|- - Petka   Цитата(ATMEL_AVR @ Apr 22 2006, 22:02) Мн...   Apr 23 2006, 20:53
|- - Andy Mozzhevilov   Цитата(ATMEL_AVR @ Apr 23 2006, 00:02) Мн...   Apr 24 2006, 04:06
|- - SasaVitebsk   Честно говоря несколько раз просматривал эту тему...   Apr 24 2006, 19:44
- - Laksus   http://www.caxapa.ru/mcu/wwwboard.html?id=...07512...   Apr 23 2006, 23:02
- - ATMEL_AVR   Спасибоза помощь, за советы, я действительно раньш...   Apr 25 2006, 18:51
|- - Petka   Цитата(ATMEL_AVR @ Apr 25 2006, 22:51) Сп...   Apr 25 2006, 21:13
- - Дмитрий Анатольевич   Кстати, эта ссылка может быть полезной: http://lor...   Apr 26 2006, 19:20
- - ATMEL_AVR   Здраствуйте. хотел попросить у кого-нибудь програм...   May 2 2006, 17:51
|- - Petka   Цитата(ATMEL_AVR @ May 2 2006, 21:51) Здр...   May 2 2006, 19:05
|- - kanzler   Столкнулся с проблемой того что фильр не работает....   May 4 2006, 10:29
- - ATMEL_AVR   Делаю фильтр на Mega16, 23 коеффициента, подскажит...   May 22 2006, 17:22
|- - kanzler   Цитата(ATMEL_AVR @ May 22 2006, 23:22) Де...   May 23 2006, 04:43
- - ATMEL_AVR   Вроде сделал цифровой фильтр полоса 300-8000 Гц, F...   May 30 2006, 18:08
- - GetSmart   ATMEL_AVR Покажите пожалуйста исходники из Вашего:...   May 30 2006, 18:45
- - GetSmart   А какой тип фильтра? НЧ?   Jun 1 2006, 19:31
- - Sergiy   да шож там того программирования - какая разница н...   Jun 4 2006, 12:20
|- - SvetaM   Цитата(Sergiy @ Jun 4 2006, 16:20) да шож...   Jun 5 2006, 10:52
- - Proton   ЦитатаSvetaM Привет! Не знаю у кого спросить, ...   Jun 5 2006, 17:19
- - SvetaM   Цитата(Proton @ Jun 5 2006, 21:19) Цитата...   Jun 6 2006, 07:08


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

 


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


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