Технический форум по робототехнике.
в_фокусе » 24 май 2009, 15:59
Vooon писал(а):...
2. а где парсинг NMEA?
...
$HEHDT, X.X,T*hh<CR><LF>
$- начало предложения.
HEHDT - служебная инфа говорящая об отправителе и его режиме.
X.X- КУРС! это что нам надо ...
дальше служебн инфа...
blindman писал(а):1. Вычислить по 90 значений синуса и косинуса, записать в таблицы, угол преобразовать в целое, выбрать значения из таблицы
как это сделать? как записать в таблица? какой используется оператор? поясните пожалуйста.=DeaD= писал(а):Учитывая, что:
1) sin(Pi/2-t)=sin(Pi/2)*cos(-t)+cos(Pi/2)*sin(-t)=cos(t);
2) cos(Pi/2-t)=cos(Pi/2)*cos(-t)-sin(Pi/2)*sin(-t)=sin(t);
Я бы хранил только по 45 значений, это еще лучше по объему памяти
спасибо за совет, я подумаю над этим.
MiBBiM писал(а):писать лучше на бейсике,
к сожалению(или счастью), мне надо написать на С.
slavaslx писал(а):Не уж то там у них 422-й используется.? Хотя зная наших, может и используется.
это международный стандарт.
blindman » 24 май 2009, 16:39
в_фокусе писал(а):как это сделать? как записать в таблица? какой используется оператор? поясните пожалуйста.
таблица - это массив. записать его лучше в память программ, чтобы не тратить ОЗУ. Как поместить массив в память программ и читать данные оттуда - зависит от компилятора. Как это делается в Codevision - не знаю.
slavaslx » 24 май 2009, 23:24
В КВ массив память (ПЗУ память програм) загоняется просто:
надо указать тип флэш и дальше тип и имя массива (инициализация), (бо если прога запустится а массив в ПЗУ, не задан должен выдасть ошибку, по идее.)
flash int Massiv=[инициализация];
Из хелпа на КВ:
flash int integer_array1[]={1,2,3};
flash char string_constant1[]="This is a string constant located in FLASH";
Считаешь там синусы (косинусы или че там надо из тригонометрий) углов каких надо (никогда не любил тригонометрию), а потом зная что "какойто" син 93рад лежит в какойто ячейке Массив[допустим 91], берешь оттуда значение x=A[91].
Как то так.
executer » 25 май 2009, 13:19
Интересно, это после реформы образования дипломы стали писать по незатронутым во время обучения областям?
Нам остается только радоватся - чем меньше они будут знать - тем выше у нас будет зарлата.
в_фокусе » 26 май 2009, 22:31
blindman писал(а):таблица - это массив. записать его лучше в память программ, чтобы не тратить ОЗУ. Как поместить массив в память программ и читать данные оттуда - зависит от компилятора. Как это делается в Codevision - не знаю.
slavaslx писал(а):...
в VC++ у меня так получилось(еще сыро)
- Код: Выделить всё • Развернуть
#include <iostream.h>
#include <math.h> /*float sin(float x)- returns the sine of the floating point number x,
where the angle is expressed in radians. float cos(float x)*/
void main(void)
{
float array_cos[89];// угол от 0 до 90
float array_sin[89];
char i;
for(i=0;i<90;i++)//0-89
{
array_cos[i]=float cos(i);
array_sin[i]=float sin(i);
cout<<"array_cos["<<i<<"]"<<array_cos[i];
cout<<"array_sin["<<i<<"]"<<array_sin[i];
}
}
но! в Codevision нет библиотеки <math.h> где есть cos и sin, и циклу for тоже надо библиотеку по ходу!?
executer писал(а):Интересно, это после реформы образования дипломы стали писать по незатронутым во время обучения областям?
Нам остается только радоватся - чем меньше они будут знать - тем выше у нас будет зарлата.
я пишу диплом по "затронутой области", а программирование МК это одна из сопутствующих задач модернизации устройства(Гирокурсоуказатель),в которой я пока не силен.
Чтож, а мне остаться только радоваться за вас, что вы радуетесь.
Последний раз редактировалось
в_фокусе 26 май 2009, 22:37, всего редактировалось 1 раз.
galex1981 » 26 май 2009, 22:34
Функции Синус и Косинус делай сам (лучше таблиным способом)
Snable » 26 май 2009, 22:47
При объявлении массивов надо указывать количество элементов, то есть вместо "[89]" - "[90]".
На МК надо вот эти получившиеся значения заносить в массив констант явно. То есть тупо скопировать вывод этой проги, только написать вместо того что имеется:
- Код: Выделить всё • Развернуть
array_cos[i]=float cos(i);
cout << array_cos[i] << ", ";
Потом скопировать вывод такой же проги, только для синусов и вставить в свою прогу.
Это табличный способ.
MiBBiM » 27 май 2009, 08:34
math.h в cvavr'e есть (во второй версии точно).
DarkSilence » 27 май 2009, 12:01
И в первой он кажется был.. спорить не буду, но щас специально залез и посмотрел, во второй он есть, и функции косинуса и синуса нормально выполняет.
Под цикл for не нужно никаких дополнительных библиотек.
в_фокусе » 28 май 2009, 10:53
galex1981 писал(а):Функции Синус и Косинус делай сам (лучше таблиным способом)
почему табличным? разве нельзя получить курс, и от него сразу взять c и к в программе, во время работы???
blindman » 28 май 2009, 11:04
Можно что угодно. Но делать надо правильно. Из того кода что ты написал, можно сделать вывод что угол у тебя - целое от 0 до 90. Зачем делать каждый раз вычисления, преобразовывая градусы в радианы и вычисляя синус/косинус, тратя время процессора, если можно очень быстро получить значения из заранее составленной таблицы? Это сэкономит как время, так и память.
galex1981 » 28 май 2009, 12:45
Blindman верно сказал, все зависит от поставленной задачи
в_фокусе » 28 май 2009, 22:09
MiBBiM писал(а):math.h в cvavr'e есть (во второй версии точно).
да че то, я намудил, он там есть...
blindman писал(а):Можно что угодно. Но делать надо правильно. Из того кода что ты написал, можно сделать вывод что угол у тебя - целое от 0 до 90. Зачем делать каждый раз вычисления, преобразовывая градусы в радианы и вычисляя синус/косинус, тратя время процессора, если можно очень быстро получить значения из заранее составленной таблицы? Это сэкономит как время, так и память.
Это понятно,Но данные будет не целые а например 45.4, то есть float. выше я писал int, для упрощения выражения своей мысли, прошу прошения если сбил с толку.
В этом случае разве, то же будет разумнее пользоваться табличным способом?
=DeaD= » 28 май 2009, 22:24
Помня, что производная косинуса - синус и наоборот можно из таблицы нереально быстро нереально точно считать и промежуточные значения
MiBBiM » 29 май 2009, 13:33
да ему ж всего два значения за 30мсек посчитать надо, уж времени завались