|
Разнесение задач из одного МК на два МК - выносной пульт ДУ. Связь двух МК. |
|
|
|
Dec 24 2008, 04:44
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата(arttab @ Dec 24 2008, 08:22)  а сдвиговый регистр не на жк? на кнопки и индикацию можно применить. 595 микруха не дорогая. или нужно именно дисплей выносить? Выносится дисплей и клавиши. Думаю программные модули управления ЖКИ не переносить в отдельный проц, а передавать по UART только сигналы управления ЖКИ. Иначе слишком большой объём данных придётся передавать.
|
|
|
|
|
Dec 24 2008, 07:14
|

Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 20-06-07
Из: Россия, Тула.
Пользователь №: 28 569

|
Цитата(SZ0 @ Dec 23 2008, 22:18)  Основной проц ATmega640. Задействованы почти все ножки. Управление - 10 клавиш, индикация - ЖКИ WH2004. Заказчику понадобились ещё ножки у 640 для работы. Он предложил перенести клавиши и ЖКИ на отдельный пульт управления. А МК связать. Связать два мк в любом случае сложнее и дольше по времени чем что-то сделать на основе уже имеющегося мк. Две единицы требующие программирования/отладки на плате в любом случае хуже чем одна. При всех равных. Кроме того SPI или UART`ов много не бывает.  Клавиатуру можно включить в матрицу, используя ноги ЖКИ, при 4-битном интерфейсе без поллинга будут доступны для клавиатуры 5 ног, к ним добавить еще 2 и 10 кнопок уже можно повесить. Это решение без всяких регистров сдвига, чисто софтверное. Итого 8 ног + несколько резисторов для развязки на все про все. Сколько задействовано ног сейчас, и сколько нужно свободных ?
--------------------
vodaspb.ru
|
|
|
|
|
Dec 24 2008, 07:28
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата(Andrey_B @ Dec 24 2008, 12:14)  Клавиатуру можно включить в матрицу, используя ноги ЖКИ Слышал про такое. А где бы поподробнее про это посмотреть?
|
|
|
|
|
Dec 24 2008, 07:35
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(defunct @ Dec 24 2008, 03:37)  получаем затраты на проектирование и изготовление железа, тестирование железа, написание нового софта, комплексное тестирование, замену обородования у заказчика (старое придется просто забрать и выбросить)... в итоге затраты "от ~10k$" против, "до 1$ за вторую AVRку и 20-ти часов работы"? Предполагантся, что вторая AVR будет по приезду к заказчику на толлейбусе припяна на соплях к порезанной в лапшу имеющейся плате и все это займет 20 часов БЕЗ "проектирования, изготовления, тестирования, нового софта", причем экземпляр один и других не будет.... Если речь идет о таком стиле, то предупреждать надо  при постановке задачи. Цитата(rezident @ Dec 24 2008, 03:20)  Если устройство не крупносерийное или стоимость электроники мала в общей стоимости всего устройства, то цена еще одной AVRки никак не сравнима со стоимостью времени освоения нового кристалла. Тогода сам Бог велел забыть об AVR навсегда и осваивать новое, ибо когда какрты лягут так, что нужно будет сделать РАЗРАБОТКУ и сложнее, и быстрее и дешевле (а случится это всенепременнейше), то будет облом. Цитата Тем более, что тут похоже сам заказчик диктует условия применения.  Где тут про "условиях применения"? требующих конкретно 640?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 24 2008, 07:55
|

Местный
  
Группа: Свой
Сообщений: 221
Регистрация: 20-06-07
Из: Россия, Тула.
Пользователь №: 28 569

|
Цитата(SZ0 @ Dec 24 2008, 10:28)  Слышал про такое. А где бы поподробнее про это посмотреть? Так на вскидку не скажу. Если в двух словах, то ноги идущие на ЖКИ являются строками в матричной клавиатуре. Раз в 5 - 50 мС они переводятся на вход (можно использовать все, кроме строба записи), затем по очереди активируются линии столбцов матрицы, строки опрашиваются, анализируются нажатые кнопки. По нескольким отсчетам (антидребезг) делаем вывод о факте нажатия. В остальное время, переведя ноги столбцов на вход, работаем с ЖКИ. Нужно только предусмотреть, чтобы эти два события не пересекались во времени, например кнопки в прерывании, а ЖКИ в основном цикле. Ну и кнопки развязать резисторами, чтобы в случае удержания нескольких сразу, не коротились линии к ЖКИ. Ну и подтяжки. Можно и по другому, например на строки подавать уровень по очереди, а читать строки, так вообще направлением ног не нужно будет голову забивать. Вобщем алгоритм может быть разным.
--------------------
vodaspb.ru
|
|
|
|
|
Dec 24 2008, 09:24
|
Гуру
     
Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588

|
Цитата(SZ0 @ Dec 23 2008, 19:18)  Задействованы почти все ножки. Если просто не хватает ножек, поставьте дополнительный регистр, на вход или на выход. Можно через SPI. Цитата(SZ0 @ Dec 23 2008, 19:18)  1. Связать по UART или SPI. UART и отдельный контроллер для клавиатуры/индикации гораздо лучше, только времени займет больше, чем простое расширение "ножек". Если нужно сделать очень быстро - не связывайтесь, за "пять минут" связать два МК и переделать прогу не успеете.
|
|
|
|
|
Dec 24 2008, 10:25
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата(Dog Pawlowa @ Dec 24 2008, 14:32) 
И обмен можно сделать беспротокольный, закодировав команды установки позиции вывода на экран неотображаемыми символами. Символы просто уходят в другое устройство без всяких подтверждений. Естественно, размер циклического буфера и скорости передачи и обработки должны быть выбраны соответствующе. Сбоев, при такой связи без подтверждения, с МК управляющим ЖКИ небыло? Можно поподробнее, как вы кодировали информацию?
|
|
|
|
|
Dec 24 2008, 10:45
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SZ0 @ Dec 24 2008, 14:25)  Сбоев... небыло? Чего же не было? На испытаниях по ESD были. Но экран обновлялся каждую секунду, такой сбой допускается. Цитата(SZ0 @ Dec 24 2008, 14:25)  как вы кодировали информацию? // 0XXX XXXX character to display 0x00 - 0x7f // 10YX XXXX set position XXXXX Y (X и Y минус 1 - счет с нуля) // 1100 0xxx clear screen // 1100 1xxx init LCD // 1101 0mmm set backlight mode // 1101 1mmm set LED mode // 1110 0mmm set sound mode // 1110 1mmm show firmware version on position X=6, Y=2 // 1111 0mmm clear Line // 1111 1000 stop RTC correction mode inside KBD: // 1111 1001 start RTC correction mode inside KBD;
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 24 2008, 11:48
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(zltigo @ Dec 24 2008, 09:35)  Предполагается, что вторая AVR будет по приезду к заказчику на толлейбусе припяна на соплях к порезанной в лапшу имеющейся плате и все это займет 20 часов БЕЗ "проектирования, изготовления, тестирования, нового софта", причем экземпляр один и других не будет.... Если речь идет о таком стиле, то предупреждать надо  при постановке задачи. В этом случае предполагается __доработка__ существующего железа и софта, а не полная его замена. А уж как именно она будет выполнена - это другой вопрос. Положим пришел к Вам заказчик с предложением, добавить в ваш роутер еще 100 светодиодов (утрирую конечно) за n денег. Вы же не броситесь ставить ARM9 с +100 выводами, вместо Вами любимого NXP 144, ради этого. Логичнее нарисовать еще одну простецкую платку с этими светодиодами и подключить к уже имеющемуся и разведенному любому интерфейсу готовой платы. А с позиции софта - наваять еще один модуль без изменения логики основной программы, для управления этими светодиодами. Риск и затраты при таком подходе - минимальны.
|
|
|
|
|
Dec 24 2008, 12:46
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Andrey_B @ Dec 24 2008, 09:14)  Связать два мк в любом случае сложнее и дольше по времени чем что-то сделать на основе уже имеющегося мк. Две единицы требующие программирования/отладки на плате в любом случае хуже чем одна. При всех равных. Кроме того SPI или UART`ов много не бывает.  Ну лет эдак ... назад я бы сам так сказал. Сейчас добавка atmega48 практически не добавляет ни сложности, ни цены. Зато даёт некоторую свободу. (кстати, такой "терминал", кажется, от SasaVitebsk, где-от по форуму пробегал). Причём я бы рекомендовал для такого "терминальчика" взять минимально необходимое/оправданное подмножество команд VT100 - команды очистки экрана, строки, позиционирования курсора. Что касается "дефицитности UART" - ЖКИ 4*20 = 80 символов. На скорости 2400 - *полная* перерисовка экрана = треть секунды. Замена 1/4 части - меньше 0,1секунды. На 9600 - всё в 4 раза быстрее. А это небольшие скорости для программной реализации. Полагаю, что даже если у меги640 уже не осталось свободных UART - один модуль IC и один OC на каком-то из таймеров свободными остались и софт-UART мало займёт ресурсов - не намного больше, чем сканирование клавиатуры. VT100 даст возможность отлаживать "терминал" отдельно, основную плату отдельно - на терминалке на PC. Т.е. основная плата будет себе посылать что-то в комп подмножеством VT100 команд и терминалка в углочке на поле 4*20 будет всё рисовать.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jan 7 2009, 17:08
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(SZ0 @ Jan 7 2009, 21:39)  Проблема только с частотой обновления экрана возникла, т.к. в некоторых местах программы экран обновлятеся очень часто. Поэтому пришлось поднять скорость обмена. Довольно странное решение. Обновление всего экрана делать чаще, чем 1-3 раза в секунду нет смысла. Человеческий мозг, который обрабатывает визуальную информацию, довольно быстро "устает" от бОльшей частоты изменения этой информации. Так что период регенерации 0,3с...1с самый оптимальный и комфортный для пользователя. Поэтому нужно не скорость обмена поднимать, а снижать скорость регенерации или смены информации на дисплее. Возможно для этого придется ввести промежуточную буферизацию данных, отображаемых на LCD-модуле, в самом терминале. Но 80 байт на буфер экрана ИМХО не такие уж и большие накладные расходы.
|
|
|
|
|
Jan 7 2009, 19:47
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(SZ0 @ Jan 7 2009, 23:18)  Часть параметров необходимо отображать в реальном времени, поэтому так сделано. А c максимальной задержкой между получением данных и отображением в 0,3c это не реальное время по-вашему?  Даже если пользователь сидит, внимательно следит за показаниями на индикаторе и держит руку на рубильнике, то быстрее, чем за 0,2-0,3с он ну никак не сможет среагировать. Так зачем ему чаще события показывать? Это же лишь мельтешение символов на экране создает. Либо я не понимаю, что такое "в реальном времени" по-вашему? Предсказанные события?  Цитата(SZ0 @ Jan 7 2009, 23:18)  Ещё обновляется не весь экран, а лишь та часть, что меняется часто. А это собственно без разницы где обновлять эту часть - в буфере или непосредственно на экране.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|