Формирование SIN и COS.

Dec 06, 2003 7 Replies

добрый вечер



■ Message posted by Dmitry Sokolov to All ■ Subject: Формирование SIN и COS.



DS> Kак программно (на asm или с++) сформировать сигнал SIN и СОS, выводя DS> их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ?



А как вообще посчитать синус/косинус знаешь? Есть два варианта:


  1. Использовать таблицу - много места, но зато высокая скорость работы
  2. Разложить эти функции в ряды и посчитать. - медленно (деление и возведение в степень не очень-то шустрые операции), но зато мало места код занимает.


...

formatting link


Hello, Sasha! You wrote to Dmitry Sokolov on Sat, 06 Dec 2003 15:12:36 +0300:

DS>> Kак программно (на asm или с++) сформировать сигнал SIN и СОS, DS>> выводя их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ?

SL> А как вообще посчитать синус/косинус знаешь? SL> Есть два варианта:

SL> 1. Использовать таблицу - много места, но зато высокая скорость SL> работы SL> 2. Разложить эти функции в ряды и посчитать. - медленно (деление и SL> возведение в степень не очень-то шустрые операции), но зато мало SL> места код занимает.

Есть третий и четвёртый :-). sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b), для cos аналогично. Используются две таблицы - "грубо" и "плавно" :-)). Например, одна на 90 значений с шагом в один градус и вторая, покрывающая этот самый градус с ещё более мелким шагом. Четвёртый способ - вариация вышеописанного, но вместо второй таблицы значения вычисляются через ряды - для малых углов достаточно одного-двух членов.

With best regards, Alexander Derazhne.

Hello, Anatoly! You wrote to Alexander Derazhne on Sun, 07 Dec 2003 22:17:22 +0300:

DS>>>> выводя их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ? SL>>> А как вообще посчитать синус/косинус знаешь? AD>> Четвёртый способ - вариация вышеописанного, но вместо второй AM> Процессор EMU10K1 aka Soundblaster Live вычисляет синус и косинус, AM> генерируя на выходе тон, всего лишь двумя операторами ассемблера AM> этого процессора. Беда только - этот процессор умеет a=b*c+d в AM> 32-битовых значениях. А умеют ли это эмбеднутые дивайсы - бабушка AM> надвое.

Это ведь рекуррентная формула? Т.е. генерируется именно тон, а не функция произвольного вргумента?.

With best regards, Alexander Derazhne.

Hello, Alexander Derazhne !

Да какое там грубо и плавно, если нужно всего 2 разряда? Маленькой таблицей все решается.

С уважением, Дима Орлов.

Dear Sasha,

06 Dec 03 15:12, Sasha Leshinsky wrote to Dmitry Sokolov:

DS>> Kак программно (на asm или с++) сформировать сигнал SIN и СОS, выводя DS>> их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ?

SL> А как вообще посчитать синус/косинус знаешь? SL> 1. Использовать таблицу SL> 2. Разложить эти функции в ряды и посчитать

... и сейчас все начнут рассказывать, как синусы считаются.

Читайте исходное письмо. Товарищ хочет на ногу P1.0 вывести синус, а на вторую ногу - косинус. Сигналы то есть такие. Аналоговые, если не вру :-)

Sincerely yours, Old Greaser.

Hello Alexander!

07 Dec 03 15:57, you wrote to Sasha Leshinsky:

DS>>> выводя их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ? SL>> А как вообще посчитать синус/косинус знаешь? AD> Четвёртый способ - вариация вышеописанного, но вместо второй Процессор EMU10K1 aka Soundblaster Live вычисляет синус и косинус, генерируя на выходе тон, всего лишь двумя операторами ассемблера этого процессора. Беда только - этот процессор умеет a=b*c+d в 32-битовых значениях. А умеют ли это эмбеднутые дивайсы - бабушка надвое.

Anatoly

Hello, Dima! You wrote to Alexander Derazhne on Sun, 07 Dec 2003 19:12:00 +0300:

DO> Hello, Alexander Derazhne !

DS>>>> Kак программно (на asm или с++) сформировать сигнал SIN и СОS, DS>>>> выводя их на порт P1 (на линии P1.0 и P1.1) контроллера С164СI ? DO> ~~~~~~~~~~~~~~~~~~~~~~~~~

DO> Да какое там грубо и плавно, если нужно всего 2 разряда? Маленькой DO> таблицей все решается.

Откуда я знаю, что там будет выводиться? ШИМ, последовательный канал, дельта-модуляция? Человек написал синус-косинус - он-то знает чего ему надо.

With best regards, Alexander Derazhne.

Greetings, Alexander!

Посмотрел я мессагу, посланную Alexander Derazhne к Sasha Leshinsky, и решил ответить:

AD> Есть третий и четвёртый :-). AD> sin(a+b)=sin(a)*cos(b)+cos(a)*sin(b), для cos аналогично. AD> Используются две таблицы - "грубо" и "плавно" :-)). Hапример, одна на

Есть еще ваpиант, годится если необходим последовательный пеpебоp значений. Задаются начальные условия: SIN(0)=0, COS(0)=1, затем для пеpебоpа с шагом угла dFi используются фоpмулы: COS(Fi) = SIN'(Fi) SIN(Fi) = -COS'(Fi), ==>

Sin = Sin + Sin'(Fi) * dFi/(2*PI) = Sin + Cos*dFi/(2*PI) Cos = Cos + Cos'(Fi) * dFi/(2*PI) = Cos - Sin*dFi/(2*PI) ,где Sin и Cos - пеpеменные, содеpжащие текущие отсчеты (Fi).

C наилучшими пожеланиями Ilja aka ИЛ-2 (ilja_vlaskin$mail.ru)

... В Греческом зале, в Греческом зале...

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required