|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
||||||||||||||||
Сканирование матричной клавиатуры25.08.2017, 17:08. Показов 7365. Ответов 11
Метки нет (Все метки)
Здравствуйте! Помогите пожалуйста разобраться. Я пишу опросник матричной клавы 3х4 на СИ в Keil под мк stm32f4.
Сразу скажу вот что, код ниже отлично работал у меня на stm32f100. файл С Кликните здесь для просмотра всего текста
Файл h Кликните здесь для просмотра всего текста
Принцип работы у меня такой: строки делались на выход открытый коллектор с подтяжкой к 0. Колонки - вход с подтяжкой к 1. Так же на колонки вешаю внешнее прерывание по спаду. Как только нажали любую кнопку, сработало прерывание, после этого все строки поднимаем в 1. Далее запускаем таймер, который раз в 10 милисекунд вызывает ф-ию сканирования клавы. Даллее там идут 2 цикла один в другом. Внешний - это проход по строкам, внутренний - проход по колонкам. Итак, первая итерация внешнего цикла. Установили 0 на 1й строке, далее в цикле сканятся колонки, ищется ноль. Если нашли, то записываем кнопку. Потом поднимаем это строку снова в 1. Далее 2 итерация, 2 строку в 0, сканим колонки....и так далее. прогнали всю клаву по строкам и колонкам один раз, пауза 10 мс, снова прогнали. И так 5 раз. Если в течении всех 5 раз обнаружено нажатие одной и той же кнопки, то нажатие считаем засчитанным. В коде есть ещё часть, которая засчитывает удержание кнопки и ее отпускание, но это уже не так важно здесь. Как я уже говорил на f100 это работало. Но я перешёл на f4 и немного подправив код... обнаружил что он не работает. Че я только не делал.... Вобщем в итоге что бы было понятней. Я сделал одинаковые условия. То есть код уменьшен до самой сути, частота камня выставлена такая же как на f100 то биш 24 мгц. Ну и все остальные параметры такие же. Теперь вот код Кликните здесь для просмотра всего текста
Немного пояснения: эта функция теперь не вызывается по таймеру, она постоянно крутится в майне. Это сделано для проверки. Потому что нерабочий момент кроется именно в сканах в циклах. При нажатии допустим кнопки 1. В отладчике я должен получить вот такой массив ke = {1,1,1,1}. Но вместо этого я получаю ke = {1,4,5,*}. то есть все что в первой колонке. В оригинальном коде, где переменная key все время перезаписывается, там соответственно получаем - *. В итоге: если я нажимаю на кнопки последнего ряда: *,0,# то все ок. Но если я нажму 2. то получу 0. Если 3, то #. то есть последнюю кнопку из колонки. Поэтому я и уменьшил код, что бы посмотреть что набивается при каждой итерации. Картина гласит, что почему-то когда я гоняю 0 по рядам, на столбе всегда 0. Если подумать, что порт не успевает устанавливаться, то наверное это не так. Ведь на сотке эти циклы работали, то есть они прыгали на 24 мгц. И на f4 тоже 24. И конфигурацию OSPEEDR я пробовал менять на выходах.... вот такая у меня проблема(
0
|
||||||||||||||||
| 25.08.2017, 17:08 | |
|
Ответы с готовыми решениями:
11
Опрос матричной клавиатуры Опрос матричной клавиатуры 3х3 Опрос матричной клавиатуры. Подтверждение отправки |
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 25.08.2017, 21:13 | |
|
supercelt, покажи инициализацию портов
0
|
|
|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
|||||||||||||||||||||
| 25.08.2017, 22:34 [ТС] | |||||||||||||||||||||
0
|
|||||||||||||||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|||||||
| 25.08.2017, 23:05 | |||||||
|
ведь вот тут
0
|
|||||||
|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
|||||||||||
| 25.08.2017, 23:45 [ТС] | |||||||||||
|
Смотрите, вот именно что строки надо не в пуш пулл, а в открытый коллектор, иначе бы пришлось ставить в цепь строк диоды, дабы не спалить мк при одновременном нажатии 2 кнопок. Схемотехника проще некуда. Клава просто напрямую подключена на порты. Допустим нажали кнопку во 2 строке и 2 колонке. Так вот когда на 2 ряд мы подадим 0, то есть установим низкоомное сопротивление на этом пине, то подтянутый к питанию вход сольётся в этот открытый коллектор. И вот тогда-то на входе упадет потенциал и мы его пофиксим как 0.
Есть ещё один ньюанс! В коде, который в первом посте, если после строки, опускания ряда в 0
0
|
|||||||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 25.08.2017, 23:51 | |
|
supercelt, все, на счет схемы в голове вообразил. Картинки больше люблю) в голову лезет только дребезг, хотя какой тут дребезг..
0
|
|
|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
|
| 26.08.2017, 00:03 [ТС] | |
|
_SayHello, не дребезг это уже при обработке. Здесь такое ощущение что проблема в инерции)
Добавлено через 1 минуту locm, на f100 их не было. Они и не нужны, подтяжка была внутренними резисторами. И все работало раньше.
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 26.08.2017, 00:38 | |
|
supercelt, попробуйте убрать подтяжку по выходу вообще, насколько я помню в stm32f100 в режиме открытого коллектора подтяжку поставить было нельзя. Возможно из за этого у вас емкость входная не успевает поспевать
0
|
|
|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
|
| 26.08.2017, 00:51 [ТС] | |
|
_SayHello, пробовал и с подтяжкой к 1 и к 0 и без вообще.
0
|
|
|
|
|
| 26.08.2017, 08:17 | |
|
supercelt, можно попроще сделать, раз таймер всё равно задействован. STM32f100ret6b и матричная клава
0
|
|
|
1 / 1 / 0
Регистрация: 14.12.2010
Сообщений: 101
|
|
| 26.08.2017, 22:21 [ТС] | |
|
Rius, так это же моя тема) Я тогда пробовал так, ничего не получилось(
0
|
|
| 26.08.2017, 22:21 | |
|
Помогаю со студенческими работами здесь
12
Как организовать опрос матричной клавиатуры + DS18B20? Помогите найти либу для матричной клавиатуры ATtiny2313. ASM. Динамический опрос матричной клавиатуры Программа для матричной клавиатуры стенда SDK-1.1 MSP430 Подключение матричной клавиатуры к цифровому светодиоду Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|