Например TDA7294

Форум РадиоКот :: Просмотр темы - концепция программы системы управления
Форум РадиоКот
https://radiokot.ru/forum/

концепция программы системы управления
https://radiokot.ru/forum/viewtopic.php?f=57&t=103083
Страница 1 из 1

Автор:  jazz393 [ Пт апр 18, 2014 19:16:33 ]
Заголовок сообщения:  концепция программы системы управления

здравствуйте, вообщем я человек молодой, неопытный, самоучка, если кто подкинет мне статью и подскажет как и что буду очень благодарен, интересует след концепция:
у меня есть дисплей, есть клавиатура, и есть некое устройство с n кол-вом плат. Мне надо написать систему управления данным устройством ( CAN интерфейс ), скажем так, на данном этапе я освоил сам интерфейс (уже связал 2 платы, разобрался с идентификаторами, данными), написал свой API для работы с дисплеем, с CAN шиной, с клавиатуров. Интересует следующее -
у меня есть функция, которая возвращает в глобальную переменную код символа нажатой клавиши, или код отсутсвия нажатия.
У меня есть таймер, который каждую 1мс генерирует прерывание, в теле этого прекрывания я вызываю эту функцию т.е. каждую 1 мс я переписываю содержимое кода клавиши. Какой вид всё это будет иметь?

я вижу это примерно так:
Код:
unsigned char key=0xff; // глобальная переменная с кодом клавишы 0xff - отсутсвие нажатия клавишы
interrup timer
{
code_keys();   // здесь я вызываю функцию сканирования клавиатуры
}

int main()
{
initialization(); // допусти тут инициализация всякой перефирии итп
// отсюда я начинаю выводить на дисплей меню и соответвенно обрабатывать нажатия клавиш
// как я это представляю себе
 while(1)
{
switch(key)
{
case 1:
// вызов менюшки 1 - графика + новые реакции на нажатия клавиш - т.е.  аналогичная данной конструкции, т.е. while содержит // такой же switch итж
break
case 2:
// вызов менюшки 2
break;
key=0xff;  // по идее я должен обнулять здесь нажатие клавиши и точно так же должен его обнулять при каждом вызове функции // сканирвоания клавишы...
}
}
}


просто уже споткнуля несколько раз на то, что приходится переписывать всё почти заного, вот поэтому хотелось бы по возможности на чужих граблях подучиться

Автор:  ARV [ Пт апр 18, 2014 19:21:06 ]
Заголовок сообщения:  Re: концепция программы системы управления

уточните: на кой ляд раз миллион раз в секунду определять код клавиши, если клавишу по определению нажимать может человек, который даже если он Брюс Ли и Джеки Чан в одном флаконе не сумеет нажать кнопку чаще, чем 100 раз в секунду?!

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

Автор:  jazz393 [ Пт апр 18, 2014 19:28:57 ]
Заголовок сообщения:  Re: концепция программы системы управления

ARV писал(а):
уточните: на кой ляд раз миллион раз в секунду определять код клавиши, если клавишу по определению нажимать может человек, который даже если он Брюс Ли и Джеки Чан в одном флаконе не сумеет нажать кнопку чаще, чем 100 раз в секунду?!

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

вот об этом я и говорю, я не знаю как лучше делать)

допустим буду я это делать каждые 200мс, а в обработчике буду просто counter++ какой-нибудь считать до 200 - нормально?

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

Автор:  ARV [ Пт апр 18, 2014 19:33:16 ]
Заголовок сообщения:  Re: концепция программы системы управления

чтобы мои ответы не были пустословием, мне недостаточно информации о том, какую конечную цель вы хотите достичь - это раз.
неизвестно, как и на какой элементной базе вы построили схемотехнику: что за клава, сколько кнопок, как она подключена к МК и т.п. - это два

это минимум вопросов, без ответов на которые все советы будут пустым звуком.

Автор:  ИС-пытатель [ Пт апр 18, 2014 19:35:18 ]
Заголовок сообщения:  Re: концепция программы системы управления

ARV, #define NULL 57

;)

Автор:  jazz393 [ Пт апр 18, 2014 19:45:27 ]
Заголовок сообщения:  Re: концепция программы системы управления

ARV писал(а):
чтобы мои ответы не были пустословием, мне недостаточно информации о том, какую конечную цель вы хотите достичь - это раз.
неизвестно, как и на какой элементной базе вы построили схемотехнику: что за клава, сколько кнопок, как она подключена к МК и т.п. - это два
это минимум вопросов, без ответов на которые все советы будут пустым звуком.

а зачем эта инфа? у меня есть рабочий опрос клавиш, который выдает мне код , опрос сделан как-то хитро - код клавишы обязательно содержит 6 единиц, что собственно я и проверяю.
Какая там клава - беспонятия, работает и слава богу. Мк - at90can128 16MHz - врядли вам это что-то даст..
..

Автор:  ARV [ Пт апр 18, 2014 19:52:00 ]
Заголовок сообщения:  Re: концепция программы системы управления

jazz393 писал(а):
а зачем эта инфа?

да хотя бы затем, что лично мне обращаться к функции опроса клавиатуры в прерывнии по таймеру, да еще миллион раз в секунду, никогда бы и в голову не пришло даже с перепою! но вы почему-то так сделали - я хочу знать вашу мотивацию. я ведь не исключаю, что теоретически такое может быть необходимо... ща я начну вам рассказывать, как надо работать с клавой и заведу вас в тупик...
мне хотелось бы, чтобы вы мне спасибо сказали за советы, а не послали куда-то...

и вообще, все решения зависят от условия задачи.

с вашим МК я работал, кстати. и с клавой тоже :)

Автор:  jazz393 [ Пт апр 18, 2014 20:12:55 ]
Заголовок сообщения:  Re: концепция программы системы управления

ARV писал(а):
да хотя бы затем, что лично мне обращаться к функции опроса клавиатуры в прерывнии по таймеру, да еще миллион раз в секунду, никогда бы и в голову не пришло даже с перепою! но вы почему-то так сделали - я хочу знать вашу мотивацию. я ведь не исключаю, что теоретически такое может быть необходимо... ща я начну вам рассказывать, как надо работать с клавой и заведу вас в тупик...

я не знаю как лучше и почему, с этой целью я и создал данную тему...
и источников которые бы адекватно описывали данную информацию я тоже не имею

Автор:  ИС-пытатель [ Пт апр 18, 2014 20:14:36 ]
Заголовок сообщения:  Re: концепция программы системы управления

Прям как у меня на работе: Сделайте мне что-нибудь, не знаю что...

Автор:  jazz393 [ Пт апр 18, 2014 21:02:39 ]
Заголовок сообщения:  Re: концепция программы системы управления

ИС-пытатель писал(а):
Прям как у меня на работе: Сделайте мне что-нибудь, не знаю что...

ну простите что я пытаюсь разобраться, чтобы не быть быдлокодером)

Автор:  ARV [ Пт апр 18, 2014 22:31:34 ]
Заголовок сообщения:  Re: концепция программы системы управления

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

если ваша функция опроса возвращает код нажатых кнопок - почему бы вым не использовать ее именно для опроса? почему хотите сунуть ее в прерывания?
Код:
static uint8_t get_key(void);

int main(void){
   initialization();
   while(1){
      switch(get_key()){
      case K_NONE: break;
      case K_ENTER : // что-то там
      }
   }
}
чем плох этот подход в вашем случае?

далее, пусть ваша функция возвращает 0xFF, если кнопки не нажаты. могу ли я предположить, что если нажать какую-то кнпку, придет один или несколько нулевых битов в возвращаемом значении? т.е. у вас как бы инверсное кодирование кодов. ну и скажите, где логика: не нажато (т.е. ничего нет) - НЕ НОЛЬ, нажато (т.е. что-то есть) - выдаем НУЛИ... разве человек привык про пустой карман говорить - в нем лежит много пустоты, а про полный - в нем лежит не много пустоты? это ведь не по-человечески! кто мешает вам в вашей функции вместо return keykode; сделать return ~keykode; и получить коды кнопок в соответствии с логикой человека: 0 если не нажато, не ноль - если нажато?

далее, обработка меню (заметил в вашем коде). меню - это не совсем основной режим, поэтому обработку перемещений по меню я никогда не делаю в основном цикле - выношу это в отдельную функцию:
Код:
static uint8_t get_key(void);
static uint8_t do_menu(void);

int main(void){
   initialization();
   while(1){
      switch(get_key()){
      case K_NONE: break;
      case K_ENTER : // что-то там
                            break;
      case K_MENU: switch(do_menu()){
                                case MNU_HELP: do_help(); break;
                                case MNU_MODE1: set_mode(1); break;
                                case MNU_PWR_OFF: sleep();
                            }
                            break;
      }
   }
}
как-то так для начала...

Автор:  uni [ Сб апр 19, 2014 23:51:43 ]
Заголовок сообщения:  Re: концепция программы системы управления

Ну, если действительно серьёзно и на долго хотите освоить комплексный подход к проектированию программной части такой системы, то нужно двигаться в сторону работы с сообщениями. Пример организации меню, основанного на сообщениях можно посмотреть тут: Организация древовидного меню. Также автор недавно выложил исходники в этой теме: PinBoard и древовидное меню.

Смысл в том, что при объединении многих частей в систему, нужно как-то единообразно и одновременно со всем этим хозяйством общаться. Для этих целей используются операционные системы, но их трудно применить, когда точно сам не знаешь что нужно или нет большого опыта в этой части. Поэтому можно сделать упрощённую модель ОС, основанную на сообщениях и менеджере сообщений, который доставляет их куда нужно.

Чтобы понять концепцию, нужно загрузить исходник в Proteus, поставить везде точки останова и изучать работу алгоритма. Скажу ещё, что я лично этот код не пробовал, я просто на него взглянул по-диагонали. Для себя я написал похожий код, но он выглядит куда сложнее и на C++.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/