[an error occurred while processing this directive]
|
я ведь вам пример написал, ну неужели трудно просто проверить.
в моем примере таблица считается автоматически:
// start
sinx = 0x10; cosx = 0x18;
// tabbles XOR coparator output AND 0x10
(unsigned char)sinx^comp)&0x10
...
++sinx; //
++cosx; //как это выглядит в bin
0x10 == 0x00010000 tabble sin == 1
0x11 == 0x00010001 tabble sin == 1
0x12 == 0x00010010 tabble sin == 1
...
0x1f == 0x00011111 tabble sin == 1
0x20 == 0x00100000 tabble sin == 0
0x21 == 0x00100001 tabble sin == 0
и т.д.
с косинусом то же самое, но сдвинутое на 1/4 периодатеперь в вашей программе
// Таблица значений знака синуса для частоты 1000 Герц
// с частотой дискретизации 4096 Гц
static u08 code sinTable[11] = {
0x0ee, 0x0e6, 0x066, 0x066, 0x077, 0x077, 0x077, 0x033, 0x033, 0x03b, 0x0bb
};
// calculate
(sinTable[countSig/8] << сountSig%8) & 0x080)countSig == 0; countSig/8 == 0; сountSig%8 == 0; не сдвигаем.
countSig == 1; countSig/8 == 0; сountSig%8 == 1; сдвигаем на 1
countSig == 2; countSig/8 == 0; сountSig%8 == 2; сдвигаем на 2
и т.д. до 7запишем эквивалент
countSig == 0; 0xee&0x80 == 1
countSig == 1; 0xdc&0x80 == 1
countSig == 2; 0xb8&0x80 == 1
countSig == 3; 0x70&0x80 == 0
countSig == 4; 0xe0&0x80 == 1
countSig == 5; 0xc0&0x80 == 1
countSig == 6; 0x80&0x80 == 1
countSig == 7; 0x00&0x80 == 0
но ведь это не синус!В итоге вы пытаетесь отловить синусоидальный сигнал используя в качестве эталона не синусоидальную функцию
Составить ответ ||| Конференция ||| Архив
Ответы
E-mail: info@telesys.ru