|
Меню для управления через UART, на СИ |
|
|
|
Jan 23 2012, 22:10
|
Частый гость
 
Группа: Участник
Сообщений: 87
Регистрация: 23-06-08
Пользователь №: 38 503

|
Цитата Лирическое отступление Поиском пользовался, фак читал. Нашел пару похожих топиков, но не то. И все же... День добрый, есть AVR-ка, хотелось бы управлять через UART внутренним АЦП (on/off), ШИМ (менять значения), on/off некоторых пинов контроллера. Как лучше всего организовать/построить подобное меню? Опыт программирования у меня не большой, посему и спрашиваю. Подскажите в какую сторону копать, или простой примерчик для начинающих. ЗЫ Планирую использовать прерывание для АЦП. ЗЗЫ Подойдет ли для этого обычное case ветвление?
Сообщение отредактировал V000va - Jan 23 2012, 22:15
|
|
|
|
|
 |
Ответов
|
Jan 24 2012, 16:00
|
Частый гость
 
Группа: Участник
Сообщений: 87
Регистрация: 23-06-08
Пользователь №: 38 503

|
Видимо я не очень ясно изложил чего хотел. Да в общем-то не так уж и много, хочу управлять ШИМ-ом через UART и считывать данные с АЦП. Нужно какое-то меню, чтоб этим всем управлять. Вот я и советуюсь, какое направление выбрать. Планирую делать меню через case. С АЦП понятно - дал команду- пошло преобразование, отбразилось в терминале. Но не знаю как вводить данные в OCR0 для управления ШИМ, а точнее как осуществить загрузку в OCR0. Загрузить не какую-то предустановленную величину из меню, а любую из доступного диапазона. На счет case я не уверен в общем-то, возможны варианты, покритикуйте если что. PS Ну а тем кому лениво/уныло читать, могут и не читать, дело-то добровольное, они либо родились уже с программированием на СИ в голове и круче Денниса Ритчи, либо забыли как сами разбирались и учились. Код while (1) { x=getchar(); delay_ms(200); switch (x) { case 'a': printf("\rRun ADC \r"); break; case 'b': printf("\rSetup PWM \r"); break; default: printf("\rError \r"); break; }; };
Сообщение отредактировал V000va - Jan 24 2012, 16:31
|
|
|
|
|
Jan 24 2012, 17:05
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Как правило, для одного пункта меню нужно передать несколько байт, например, для шим надо передать пакет-сообщение, содержащее команду ШИМ и один-два байта заполнения шим.
Но как определить начало сообщения? Надо разработать структуру пакета. Лучше начать с пакета фиксированной длины. Итак, пакет должен состоять из заголовка, команды, данных и контрольной суммы. Предлагаю такой формат: 0x0B,0x77,CMD, data1,data2, CRC.
Здесь первые два байта - заголовок, CMD - байт команды, обычно одного байта достаточно, затем data1,data2 - два байта данных, затем два байта контрольной суммы.
Пакет пишется в циклический буфер по прерыванию уарт, разбирается в фоне. Если первые два байта, контрольная сумма и команда не соответствуют ожиданиям, то пакет игнорируется.
А то, что вы написали, вполне подойдёт для разбора принятой команды.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
V000va Меню для управления через UART Jan 23 2012, 22:10 _Артём_ Цитата(V000va @ Jan 24 2012, 00:10) ЗЫ Пл... Jan 23 2012, 22:49 _Ivana В зависимости от того, на чем вы пишете (С или asm... Jan 24 2012, 09:19 _Pasha "Сферические" задачи даются студентам дл... Jan 24 2012, 13:05 _Ivana Непонятно, что именно вам непонятно в данных ответ... Jan 24 2012, 17:03 V000va _Ivana и =GM= Спасибо, вот это уже что-то! Воз... Jan 24 2012, 18:01 demiurg_spb Если есть желание развивать свой проект, то совету... Jan 24 2012, 18:50  _Pasha Цитата(demiurg_spb @ Jan 24 2012, 22:50) ... Jan 25 2012, 08:12 XVR Вопрос к ТС: вы своим устройством собираетесь упра... Jan 25 2012, 07:51 V000va Цитата(XVR @ Jan 25 2012, 10:51) Вопрос к... Jan 25 2012, 14:58  _Артём_ Цитата(V000va @ Jan 25 2012, 16:58) Пясни... Jan 25 2012, 15:24  XVR Цитата(V000va @ Jan 25 2012, 18:58) Управ... Jan 25 2012, 18:34 Dog Pawlowa Цитата(V000va @ Jan 24 2012, 02:10) ЗЗЫ П... Jan 25 2012, 08:16 birden ТС, Вам правильно сказали: делайте все поэтапно. С... Jan 26 2012, 01:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|