там как минимум timer должен быть индивидуален для каждой кнопки. И длинное/короткое нажатие в коде OKF тоже не предусмотрено, так что не передергивайте.
Допустим ShortThreshold у нас 30ms. Нажимаем первую кнопку, таймер видит изменение и начинает считать. Через 5 ms нажимается вторая кнопка, таймер сбрасывается и начинает считать с 0(если считает вверх), через 30ms детектим нажатие двух кнопок, но их может быть и 32. Недостаток в том, что счет идет от последнего изменения, однако на практике это совершенно не заметно.
Just_Fluffy писал(а):
Опять же, вырвано из контекста. Я всего лишь говорила про экономию памяти. А как автоповтор будет реализовывать автор вертикальных счетчиков - вопрос алгоритма)))
В случае вертикальных счетчиков автоповтор и длинные нажатия будут реализованы при помощи дополнительных счетчиков, но даже без этого экономии памяти то никакой нет, в обоих случаях потратили 3 байта на 8 кнопок. Правда у нас же тема не про ассм или AVR, потому я бы сделал счетчик минимум 16-ти битным.
Ну и апетиты... ("До 255кнопок") Тогда просто берём готовую микруху и не морочим мозг... От 155ИВ1/ИВ3 до 580вв79(Intel8279), а результат обрабатываем программно.
аппетиты ту ни при чем. например, для комфортного ввода значений требуется минимум 13 кнопок, что уже больше, чем 8. и, пожалуйста, не нужно вот это вот 155ИВ1/ИВ3 до 580вв79(Intel8279) - в любительских конструкциях на микроконтроллерах этому места нет от слова совсем.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Почему это нет места? Всё хорошо в зависимости от требуемых задач и возможностей. Периферийные расширители никто не отменял, китайские контроллеры дисплея/клавиатуры весьма распространённое явление. Вв79 это конечно монстр (персоналки сегодня мало кто задумает "с нуля" разрабатывать да ещё и на антиквариате, но вот для какой экзотики музыкальной там можно извлечь пользу. А вот про ИВ1//ИВ3 (и их забугорные аналоги) зря подзабыли. Дополнительно никто не ограничивает создание собственных периферийных контроллеров из отдельных МК. Другое дело до пяти кноп с интераетивными пиктограммами их функционала на дисплее (при динамической смене функционала в зависимости от текущей задачи).
Музикальную школу нельзя обмануть)) У пианины 88 кнопок (иногда 85)...
Мне что то подсказывает, что у каждого программиста-эмбеддера в чулане есть готовые библиотеки/заготовки. У кого то кругина суперАсме, у кого то блокирующие функции, у кого то событийная модель на прерываниях...
У меня базовая функция антидребезга использует 1 байт на кнопку, режим "гистерезисный счетчик" - тут ранее писала. Событийное расширение использует: - 1 байт на индивидуальный конфиг либо идет общий конфиг на все кнопки одним дефайном - 1 или 2 байта на счетчик для автоповтора/длинного нажатия (зависит от времени длинного нажатия/повтора и от частоты опроса, настраивается typedef-ом). Это все дергается по таймеру (обычно по железному, который сисклок еще делает) В основную программу "торчит" какой то getEvent, который отдает события (в зависимости от конфига) нажатие, отпускание, длинное нажатие, повтор нажатия, поворот энкодера. Для энкодера там отдельный обработчик, опрашивает стразу три физических сигнала - 2 фазы и кнопку энкодера. И отдельная переменная - число щелчков энкодера и направление.
ну как нету... как некое ретро-хобби, пожалуй, можно применить, но для практических целей, т.е. для устройств, сделанных самостоятельно и приносящих какую-то пользу, место для этих монстров отсутствует. хотя бы по той причине, что одна микросхема серии К155 (не говоря про что-то более "мощное") потребляет столько же, сколько целый микроконтролер, работающий на максимуме производительности. еще и с учетом периферии, возможно. я, конечно, не могу похватстаться слоновьей памятью, но вроде как 580-я серия требовала аж 3 питания: +5, -5 и +12 вольт!!! возможно, это только ЦПУ такое извращение требовал, но осадочек остался навсегда. 580-серия фтопку!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
я, конечно, не могу похватстаться слоновьей памятью, но вроде как 580-я серия требовала аж 3 питания: +5, -5 и +12 вольт!!! возможно, это только ЦПУ такое извращение требовал, но осадочек остался навсегда. 580-серия фтопку!
Да, только процессор. Но были варианты и с одним +5. Но, как ни крути, никуда сейчас её не приткнуть, потому что МК перекрывают и по габаритам, и по потреблению, и по удобству программирования. Только музей.)
580-я серия требовала аж 3 питания: +5, -5 и +12 вольт!!! возможно, это только ЦПУ
Только ЦПУ. но подача питания еще и в определенной последовательности должна была быть. И снятие питания - в обратной последовательности. Либо одновременно (с разницей в сколько то там миллисекунд). А с учетом разного тока потребления и наличи фильтрующих емкостей по питанию - одновременность была не всегда тривиальной задачей.
И я себе представляю - к атмеге8 в TQFP прикрутить 580ВВ55 в DIP-40 )) И электростанцию рядом.
...но подача питания еще и в определенной последовательности должна была быть.
Та не, с последовательностью никто не заморачивался - лишь бы было. Некоторые ЦПУ допускали отсутствие -5, но всё равно, тоска. Люди ставили (и ставят!) "компактные" DC/DC - на что только не пойдёшь заради первой любви.)
OKF, может быть и не заморачивались... Я столкнулась с ВМ80 только в составе КУВТ Корвет в школе. И на страничках журнала Радио. Там даже релейные схемы приводились вроде как, для правильно подачи и снятия питания.
Я столкнулась с ВМ80 только в составе КУВТ Корвет в школе.
Ну, так вы ж ещё молоды.) А мне приходилось на этих 580 лепить с 0-ля. И тогда небыло ни ПК, ни ассемблера, ни даже программатора ПЗУ - только голые микросхемы.)
Периферия 580х пятивольтовая. Насчёт прожорливости - у всех 155х есть много аналогов как наших, так и забугорных. Те же 1565, 1533 и много чего ещё. Так что иногда и посмотреть на рассыпуху жисть облегчающу вполне можно. Да и периферия расширителей 580й не ограничивается -были и 1810 и те же импортные. Для стационарного питания не столь уж и проблема.
BOB51, если честно, то колхозинг расширителей портов для большой клавиатуры - это сродни юному пионеру - придумать себе трудности, а потом героически хи преодолевать. Из серии - ради спортивного интересу реализуем на тине13 убер-пианину, к которому придется по i2c подключить клавиатуру на 88 клавиш через расширители портов. Коих надо, что б набрать матрицу 8*11. А если не спортивный интерес, а нормальная постановка задачи - то можно взять ту же мегу8 в tqfp32 - там 20 GPIO как раз на кнопки хватит, и на ШИМ-выход. А если без кварца - то еще 2 GPIO останется. Цена меги - может даже меньше, чем тиня + расширители портов. В +/- те же деньги можно вообще взять какой то СТМ об 48 или 64 ногах - тогда кнопок можно втулить - на три рояля хватит. И на светомузыку останется. В СТМках еще и памяти слегка больше, нежели в тине13 )) Дребезгом можно обдребезжаться будет)
OKF, ох, давайте не будем об возрасте.... Его уже достаточно много ))) "- Мадам, сколько вам лет? - Ну я приближаюсь к 50... - С какой стороны, мадам?"
А если не спортивный интерес, а нормальная постановка задачи - то можно взять ту же мегу8 в tqfp32 - там 20 GPIO как раз на кнопки хватит, и на ШИМ-выход. А если без кварца - то еще 2 GPIO останется.
А если взять китайскую мегу, то при том же qfp32, будем иметь 30(!) GPIO и 1% intrc на 32мгц. И, которая дешевле меги8! А ещё её невозможно испортить - у неё нет фьюзов.)
Так уже не раз говорилось - вести речь об каких либо наиболее удачных алгоритмах можно только относительно конкретного схемотехнического решения. Остальное будет только перебором всех возможных решений, которые только можно придумать. При том, что всё эти решения будут верными.
не просто с той же, а гораздо шире. там несколько префиксов расширения. и за счет этих префиксов команды расширяются до двух, трех и, помнится, четырехбайтовых команд. я на "спектруме" очень много программировал на ассемблере.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
11x8 - элементарнейше сводится к 4x8 или к 4x6 1м корпусом 2ичного дешифратора (например симметричного коммутатора, мультиплексора - демультиплексора 16x1, вроде 74vlc150 ) ровно 1 корпус и ничего более, ни одного резистора, это совсем несложно, ни для пионеров ни для скаутов ни для каубоев
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения