roboforum.ru

Технический форум по робототехнике.

программа для диплома (help me)

программа для диплома (help me)

в_фокусе » 22 май 2009, 03:50

доброго времени суток, всем читающим эту тему.
Я пишу диплом и перед мной поставлена задача запрограммировать МК,этим я раньше не занимался.
поэтому возникает множество вопросов, надеюсь здесь получить на них ответы и умные советы.


а вот и сама Задача:

1. Написать программу для микроконтроллера ATmega128L-8AU, принимающую и передающую данные по интерфейсу RS422.
Прием данных по стандарту NMEA 0183: $HEHDT, X.X,T*hh<CR><LF> // стандарт для морской навигации ,скорость передачи 4800 бод, формат передачи 8 бит +1 стоп бит. f = 1МГц. Асинхронно.


Здесь я настраиваю USART0 использую CodeWizardAVR. Проблем вроде нет.(картинка настройки во вложении,внизу)
здесь я сомневаюсь: Прием сигнала идет на одну ножку,я программирую DDRn=...(делаю ее входм),PORTn=....(подтяжку на нее) правильно, или надо еще какие нибудь настройки, чтобы прием данных шел только с одной ножки на USART0???

2. Преобразование входных данных о курсе в соответствующее значение sin α, cos α.
То есть если на входе α=45.5(курс ), то на выходе sin α= 0,7132; cos α= 0,7009;

Вопрос: - как получить данные из USART0, что бы записать их в переменную kurs???
- в то ли место :) я вставляю нижеследующий код???

Код: Выделить всёРазвернуть
while (1)
{

float kurs,sin_k,cos_k;

if(1) //проверка условия на корректность сигнала, пока не сделано
{
if ((kurs>=0)&&(kurs<1))
{sin_k=0, cos_k=1};// преобразование курса в sin и cos
if ((kurs>=1)&&(kurs<2))
{sin_k=0.84,cos_k=0.54 };

...//и так далее проверка всего диапазона значений курса от 0 до 90.

if ((kurs>=89)&&(kurs<=90))
{sin_k=,cos_k=0.8939 };
}
else {};//если будет ошибка корректности,пока не сделано

};


Оптимальную ли я выбрал конструкцию сравнения?
И как далее передать значение sin и cos в буфер обмена???


3. Передача в формате 16 бит, причем последовательно!!! то есть сначала sin α на 16 ножек, потом cos α на эти же 16 ножек. И так каждый раз когда изменяется курс.(выходные сигналы поступают на 2 ЦАПа, так же в схеме используется демодулятор ,помоему, как раз для чередования выходных сигналов,но точно не уверен)
собственно, Как настроить такую передачу???

заранее спасибо. :friends:
____________________________________________________________
Вложения
USART0_nastroika.jpg
как я настраиваю USART
USART0_nastroika.jpg (27.86 КиБ) Просмотров: 2321
Последний раз редактировалось в_фокусе 24 май 2009, 14:54, всего редактировалось 1 раз.

Re: программа для диплома (help me)

Vooon » 22 май 2009, 09:44

1. куча if'ов — это неправильное решение, думаю деад все же подскажет формулу.
2. а где парсинг NMEA?
3. ни что не мешает использовать Rx отдельно от Tx, разве что скорость для одного юсарта будет одна..

Re: программа для диплома (help me)

=DeaD= » 22 май 2009, 09:55

Vooon писал(а):1. куча if'ов — это неправильное решение, думаю деад все же подскажет формулу.

Я в морской навигации не силён - если мне скажут что это за курс - и с чего ему соответствуют именно такие, то может быть мне даже отвечать не потребуется :lol:

Re: программа для диплома (help me)

blindman » 22 май 2009, 10:15

1. Вычислить по 90 значений синуса и косинуса, записать в таблицы, угол преобразовать в целое, выбрать значения из таблицы

или

2. Использовать математические функции sin(), cos().

1 - лучше, как по быстродействию, так и по объему памяти.

Re: программа для диплома (help me)

=DeaD= » 22 май 2009, 10:30

Учитывая, что:
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 значений, это еще лучше по объему памяти ;)

Re: программа для диплома (help me)

MiBBiM » 22 май 2009, 19:30

писать лучше на бейсике, меньше проблем возникнет. ну эт канеш если нужно не шашечки.
  1. настройка уарта на бэйсике есть в вики робофорумной("минибот уроки" - ключевик); в ветке форума "авр-дос" можно подсмотреть парсинг строки
  2. используй функцию синус, косинус (подробнее справка в бейсике). конструкция попахивает унылостью :)
  3. уверен что последовательно, а не параллельно :wink: ? порт-то параллельный используется (это вопрос на засыпку :) )
    просто задвинуть байты в порт. что за демодулятор, может ему нужен особый формат передачи(клоки, например)

Добавлено спустя 1 минуту 22 секунды:
P.S> ну и дипломы нонче пошли :)

Re: программа для диплома (help me)

DarkSilence » 22 май 2009, 21:16

в_фокусе писал(а): по интерфейсу RS422.



А вот, если я все правильно понимаю, то в Атмелевских Атмегах организован интерфейс RS-232. А это разные вещи. RS422 и RS232 отличаются!


И зачем человеку, который в Си вроде бы что-то понимает, писать на бейсике? От чего жто лучше?
Последний раз редактировалось DarkSilence 22 май 2009, 22:51, всего редактировалось 1 раз.

Re: программа для диплома (help me)

MiBBiM » 22 май 2009, 21:36

DarkSilence писал(а):А это разные вещи

а вот не совсем. доказательство:
Изображение
так что на софтовой стороне - один фиг.
DarkSilence писал(а):Си вроде бы что-то понимает

ты уверен в этом? напоминаю, человек решил не использовать библиотеки или табличный метод, а просто на условных операторах (даже не case) реализовал вывод синуса. это говорит о высоких познаниях? бейсик можно выучить максимум за один день, а периферию использовать гораздо проще.
Последний раз редактировалось MiBBiM 22 май 2009, 22:57, всего редактировалось 2 раз(а).

Re: программа для диплома (help me)

=DeaD= » 22 май 2009, 21:41

DarkSilence писал(а):RS422 и RS422 отличаются!

Вы так считаете? :P

Re: программа для диплома (help me)

DarkSilence » 22 май 2009, 22:52

Опечатался малец.

Re: программа для диплома (help me)

slavaslx » 23 май 2009, 01:38

Писали: стандарт для морской навигации?
Не уж то там у них 422-й используется.? Хотя зная наших, может и используется.
Просто щас немного интерфейсами занялся. Было бы интересно узнать какие интерфейсы на больших военных судах используются, да и вообще в военных машинах (самолеты, и пр.)?

Re: программа для диплома (help me)

Сергей » 23 май 2009, 01:47

CAN

Re: программа для диплома (help me)

Vooon » 23 май 2009, 03:18

Серега, что с тобой?
Тебе везде кан мерещится, у тебя что Can ГМ развился? :)

Re: программа для диплома (help me)

Сергей » 23 май 2009, 13:59

Почему мерещится? Поверь, в ракетостроении он используется, да еще их там по три канала. На платах используются гигабитные интерфейсы.

Re: программа для диплома (help me)

DarkSilence » 23 май 2009, 20:16

Сергей прав. Очень часто CAN интерфей используется в системах управления боротвиками самолетов.
К сожалению отдал лекции по Вычислительным машинам и микропроцессорам другу. Там как раз было где какой интерфейс используется и почему именно ...


Rambler\'s Top100 Mail.ru counter