Co do tej tabelki tonów, to chyba lepiej umieścić ja w EEPROM procesora, wtedy będzie można ja modyfikować, bez konieczności wgrywania całego programu do Flash, a jak rozbudujesz program to nawet przez RS232.
Ogólnie wieczorem spróbuję coś z tym jeszcze poknieić, bo zrobiłeś parę błędów w programie.
PS. ogólnie z maty nigdy nie byłem dobry, a z DSP to już wcale, więc trochę się pogubiłem.
Z tego wynika że:Kod:
#define TONES 11
const double freqs[TONES] = { 1124,1197,1275,1358,1446,1540,1640,1747,1860,1981,2110 }; //NASZE TONY
static signed int16 y0;
static signed int16 y1[TONES];
static signed int16 y2[TONES];
Potem w przerwaniu od Timera miałem w pętli FOR zmianę od 0 do zmiennej TONES czyli
Kod:
For ZMIENNA = 0 to TONES
//OBLICZANIE COEFF
NEXT
TONES to stała nie zmienna określajaca wielkość tabeli fregs w której zapisane są poszukiwane tony ? Nie wiem czemu ta tablica Fregs ma typ Duble skoro zapisujesz w niej wartości stałoprzecinkowe, chyba że potrzebne to potem do obliczeń, i kompilator by się buntował ?
y0 - jest zmienną typu integer o rozmiarze 16 bitów. Nie bardzo kojarzę słówko static, ale to szczegół w BASCOM i tak chyba nie ma odpowiednika.
y1 oraz y2 to tablice typu int16 (jak wyżej) o rozmiarze równym stałej TONES.
Potem liczysz jakieś współczynniki wg. tego:
Kod:
for ( i = 0; i < TONES; i++ )
{
Y0 = *coeffS * y1 - y2 + adc_data;
y2 = y1;
y1 = Y0;
}
Tylko po co ci one skoro nigdzie potem ich nie wykorzystujesz ? Przynajmniej nie zauważyłem.
Ogólnie problem w tym że nie wiem co ma być w jakiej kolejności robione ? Bo przetłumaczenie tego z C na BASCOM jakaś wielką tragedią nie powinno być