roboforum.ru

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

 

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

программа для диплома (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 КиБ) Просмотров: 1054
Последний раз редактировалось в_фокусе 24 май 2009, 14:54, всего редактировалось 1 раз.
в_фокусе
 
Сообщения: 7
Зарегистрирован: 22 май 2009, 01:24
Откуда: penza

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

Сообщение Vooon » 22 май 2009, 09:44

1. куча if'ов — это неправильное решение, думаю деад все же подскажет формулу.
2. а где парсинг NMEA?
3. ни что не мешает использовать Rx отдельно от Tx, разве что скорость для одного юсарта будет одна..
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3324
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

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

Сообщение =DeaD= » 22 май 2009, 09:55

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

Я в морской навигации не силён - если мне скажут что это за курс - и с чего ему соответствуют именно такие, то может быть мне даже отвечать не потребуется :lol:
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение blindman » 22 май 2009, 10:15

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

или

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

1 - лучше, как по быстродействию, так и по объему памяти.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4128
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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 значений, это еще лучше по объему памяти ;)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение MiBBiM » 22 май 2009, 19:30

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

Добавлено спустя 1 минуту 22 секунды:
P.S> ну и дипломы нонче пошли :)
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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

Сообщение DarkSilence » 22 май 2009, 21:16

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



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


И зачем человеку, который в Си вроде бы что-то понимает, писать на бейсике? От чего жто лучше?
Последний раз редактировалось DarkSilence 22 май 2009, 22:51, всего редактировалось 1 раз.
Аватара пользователя
DarkSilence
 
Сообщения: 25
Зарегистрирован: 18 сен 2008, 22:02
Откуда: Самара
прог. языки: C/C++, Pascal

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

Сообщение MiBBiM » 22 май 2009, 21:36

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

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

ты уверен в этом? напоминаю, человек решил не использовать библиотеки или табличный метод, а просто на условных операторах (даже не case) реализовал вывод синуса. это говорит о высоких познаниях? бейсик можно выучить максимум за один день, а периферию использовать гораздо проще.
Последний раз редактировалось MiBBiM 22 май 2009, 22:57, всего редактировалось 2 раз(а).
Tomorrow will be. Better
Аватара пользователя
MiBBiM
 
Сообщения: 1866
Зарегистрирован: 29 окт 2007, 18:11
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript

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

Сообщение =DeaD= » 22 май 2009, 21:41

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

Вы так считаете? :P
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24053
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: Pascal / C++ / PHP / 1C
ФИО: Антон Ботов

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

Сообщение DarkSilence » 22 май 2009, 22:52

Опечатался малец.
Аватара пользователя
DarkSilence
 
Сообщения: 25
Зарегистрирован: 18 сен 2008, 22:02
Откуда: Самара
прог. языки: C/C++, Pascal

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

Сообщение slavaslx » 23 май 2009, 01:38

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

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

Сообщение Сергей » 23 май 2009, 01:47

CAN
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение Vooon » 23 май 2009, 03:18

Серега, что с тобой?
Тебе везде кан мерещится, у тебя что Can ГМ развился? :)
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3324
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

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

Сообщение Сергей » 23 май 2009, 13:59

Почему мерещится? Поверь, в ракетостроении он используется, да еще их там по три канала. На платах используются гигабитные интерфейсы.
Сергей
 
Сообщения: 3741
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение DarkSilence » 23 май 2009, 20:16

Сергей прав. Очень часто CAN интерфей используется в системах управления боротвиками самолетов.
К сожалению отдал лекции по Вычислительным машинам и микропроцессорам другу. Там как раз было где какой интерфейс используется и почему именно ...
Аватара пользователя
DarkSilence
 
Сообщения: 25
Зарегистрирован: 18 сен 2008, 22:02
Откуда: Самара
прог. языки: C/C++, Pascal

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Mail.ru counter