25.08.2017, 14:14
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оцените алгоритм опроса матричной клавы
Сообщение от mike-y-k
|
supercelt, может посмотрите это решение на досуге?
В МК останется только код для инициализации, обработки прерывания и считывания результата. И ног гораздо меньше отнимет - всего 4.
А там уже и защита от дребезга, и все остальные плюшки .
Просто время, уже потраченное на изобретение велосипеда, явно гораздо дороже стоит чем комплект разработчика с мешочком чипов по ссылке…
|
Спасибо за ссылку, но у меня схем уже спаяна. И что либо менять уже нельзя. Только шаманить с кодом
|
|
|
|
25.08.2017, 14:32
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,058
Сказал спасибо: 2,563
Сказали Спасибо 11,890 раз(а) в 5,964 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
Сообщение от supercelt
|
Только шаманить с кодом
|
И такой вариант есть.
Столбцы - исходно все нули. Строки - прерывания. По прерыванию короткий опрос состояния клавы. Дребезг? Танивапрос. Повторный опрос, скажем, через 50 мс.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
25.08.2017, 15:21
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оцените алгоритм опроса матричной клавы
понизил частоту камня до 24 мгц, как у прошлого чипа. Все-равно не пашет. Код такой же, частота уже такая же.... в чём же разница...
|
|
|
|
25.08.2017, 15:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 17.05.2005
Адрес: Украина
Сообщений: 1,964
Сказал спасибо: 296
Сказали Спасибо 498 раз(а) в 362 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
supercelt, правильный вариант уже был назван
Сообщение от 6ap6oc
|
В вашем случае:
Считывайте значение по установленному в предыдущем такте таймера ряду, а затем меняйте его. Задержка будет не нужна
|
|
|
|
|
25.08.2017, 16:09
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оцените алгоритм опроса матричной клавы
Сообщение от estet
|
supercelt, правильный вариант уже был назван
|
То есть я правильно понял что это будет выглядеть так:
for(прогон строк){
-устанавливаем 0 на 1 строке
-это первый прогон, поэтому не сканим колонки (выход из цикла)
for(скан колонок){
считываем биты с порта для первой строки, хотя по циклу прогона строк это уже вторая строка
}
}
П.С. Мне все-таки интересно, как такое может быть что условия одинаковые, просто разные чипы. И на одном пашет, на другом нет(
Последний раз редактировалось supercelt; 25.08.2017 в 16:17.
|
|
|
|
25.08.2017, 21:50
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
supercelt, рогатый в мелочах кроется Тут уже только проверять весь полученный код в машинных командах в двух Ваших вариантах. Тут и интеллект компилятора, и умолчания, и разница в опциях,…
Кстати для 4x4 проще 4 раза вызвать функцию с параметром индекс порта и возвратом 4 бит состояния кнопок.
Отказ от гарантированного решения из-за копеечной по сути экономии на переделке - путь к будущим проблемам с клавиатурой.
У Вас наверняка пункт с нормальным тестированием отсутствует…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 25.08.2017 в 22:01.
|
|
|
|
26.08.2017, 02:57
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
supercelt, как-то сложно всё это... прерывания можно использовать, только если из спящего режима надо выходить, а так лучше без них обойтись и проще заодно будет и надёжнее (кстати, с прерыванием от таймера работало с выключенной оптимизацией? почему-то никто не сказал, что очень не хватает volatile у флага start_scan, или не только я устал об этом говорить...)
А почему бы как тут описано не сделать? Лично мне это кажется более понятным и универсальным.
|
|
|
|
26.08.2017, 23:29
|
|
Прописка
Регистрация: 29.03.2007
Сообщений: 185
Сказал спасибо: 11
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оцените алгоритм опроса матричной клавы
H4LF, да работало! Спасибо, прочитаю документ
|
|
|
|
27.08.2017, 03:04
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
supercelt, Извиняюсь, не так спросил. Я не сомневаюсь, что работало, я хотел узнать - оптимизация была выключена при этом? Потому что со включенной не должно бы работать. Ну и так, на будущее...
|
|
|
|
27.08.2017, 11:42
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Оцените алгоритм опроса матричной клавы
Сообщение от H4LF
|
как-то сложно всё это...
|
Я того же мнения. У меня есть вопрос. А может ли быть дребезг, если не трогать кнопки на клаве? Я думаю, что нет. Значит дребезг можно воспринимать как нажатую/отпущенную (в зависимости от того, что делает кнопка при замыкании контактов) кнопку. Если контакт замыкается, то сразу устанавливается нужный уровень, а если размыкается - проводим интегрирование до противоположного уровня.
Я так обычно и поступаю и никаких циклических прогонов не делаю. Интегрирование заменяет задержку, разве-что не тормозит программу.
Этот алгоритм работает хорошо в приборных энкодерах, в которых используется скользящий контакт. Там шум присутствует во всем диапазоне замкнутого контакта и интегрированием в верх и вниз от него так просто не избавится. А в случае этого алгоритма - просто время замкнутого контакта увеличивается на величину дребезга с двух сторон и величину интегрирования в момент размыкания.
Последний раз редактировалось МВА; 27.08.2017 в 12:08.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:44.
|
|