ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 апреля
613018 Топик полностью
MBedder, терминатор (08.08.2015 11:07, просмотров: 507) ответил misyachniy на sin считать на ходу не принято.
А вот я не знал, что "не принято", и сделал рекурсивный генератор синуса, требующий аж целых 8 тактов на отсчет :)) Подробное описание алгоритма - по ссылке --> http://www.gaw.ru/html.cgi/txt/doc/micros/maxq/priv/max2000_5.htm
; Recursive 16-bit sinewave sample generator (256 samples per sine period) ; Outputs: w5, DACPORT ; 8 clocks per sample (19 kHz sinewawe can be generated with dsPIC33F @40 MIPS) ; ; (C) 2011 MBedder sin1 = 806 ; 2^15*sin(2*pi/256) cos1 = 32758 ; 2^15*cos(2*pi/256) dacport = LATB ; External DAC connected to this port clr w12 ; sin 0 mov #sin1,w5 ; 2^15*sin(2*pi/256) mov w5,w13 ; 2-tap 16-bit delay 1st stage mov #cos1,w4 ; 2^15*cos(2*pi/256) 1: mpy w4*w5,A ; AH = 0.5*sin(2*pi*N/256) sac.r A,#-2,w5 ; w5 =~ 2*sin(2*pi*N/256) sub w5,w12,w5 ; w5 = 2*sin(2*pi*N/256)-sin(2*pi*(N-2)/256) mov w13,w12 ; w12 = sin(2*pi*(N-1)/256) (previous sample) mov w5,w13 ; w13 = w5 (current sample) mov w5,dacport ; Write a next sinewave sample to a DAC port bra 1b ; Loop forever