реклама на сайте
подробности

 
 
> Ошибочное срабатывание матричной клавиатуры на STM32
MaxiMuz
сообщение Jun 26 2014, 13:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Организовал матричную клавиатуру 3х4. На столбцы PB5,PB6,PB7 подаю бегущую "1". Строки РА12...РА9 настроенные как вход с внутренней подтяжкой к нулю.

...........Р.Р.Р
...........В.В.В
...........5.6.7
РА12--1-2-3
РА11--4-5-6
РА10--7-8-9
РА9 --*-0-#

Читаю:
Код
    // вкл. pin1 - на вывод
    /* Настраиваем KEYCOL1 - на вых.двухтактный f=50MHz     */
    GPIOB->CRL&= ~(GPIO_CRL_CNF5);
    GPIOB->CRL|=GPIO_CRL_MODE5;
    ON_PIN(KEYCOL1);// вкл. стобец столбец
    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
    tmp=RD_PORT(inPort);
    KeyMat[i++]=(u16)tmp;//=tmp<<4;
    OFF_PIN(KEYCOL1);
    // вкл. pin3 - Z-состояние
    /* Настраиваем KEYCOL1 - на вход в третьем сост     */
    GPIOB->CRL&= ~(GPIO_CRL_MODE5|GPIO_CRL_CNF5);
    GPIOB->CRL|=GPIO_CRL_CNF5_0;

    // вкл. pin2 - на вывод
    /* Настраиваем KEYCOL2 - на вых.двухтактный f=50MHz     */
    GPIOB->CRL&= ~(GPIO_CRL_CNF6);
    GPIOB->CRL|=GPIO_CRL_MODE6;
    ON_PIN(KEYCOL2);// вкл. второй столбец
    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
    tmp=RD_PORT(inPort);
    KeyMat[i++]=(u16)tmp;//=tmp<<4;
    OFF_PIN(KEYCOL2);
    // вкл. pin2 - Z-состояние
    /* Настраиваем KEYCOL2 - на вход в третьем сост     */
    GPIOB->CRL&= ~(GPIO_CRL_MODE6|GPIO_CRL_CNF6);
    GPIOB->CRL|=GPIO_CRL_CNF6_0;    

    // вкл. pin3 - на вывод
    /* Настраиваем KEYCOL3 - на вых.двухтактный f=50MHz     */
    GPIOB->CRL&= ~(GPIO_CRL_CNF7);
    GPIOB->CRL|=GPIO_CRL_MODE7;
    ON_PIN(KEYCOL3); // вкл. первый столбец
    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
//    __NOP();
    tmp=RD_PORT(inPort);
    KeyMat[i++]=(u16)tmp;//=tmp<<4;
    OFF_PIN(KEYCOL3);// выкл. первый столбец
    // вкл. pin1 - Z-состояние
    /* Настраиваем KEYCOL3 - на вход в третьем сост     */
    GPIOB->CRL&= ~(GPIO_CRL_MODE7|GPIO_CRL_CNF7);
    GPIOB->CRL|=GPIO_CRL_CNF7_0;


При подаче 1 на РВ5 и замыкании кнопки (кн.4) на РА11 срабатывает соседний пин РА10.
При замыкании кнопки7 на РА10 срабатывают соседние РА11, РА9.
При замыкании кнопки * на РА9 иногда срабатывает соседний РА10.
Если после включения 1 на столбце и считывания строк ввести задержку __NOP(); помехи пропадают.
Есть ли другие способы борьбы с такими помехами ?

Сообщение отредактировал MaxiMuz - Jun 26 2014, 13:35
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016