Форум по микроконтроллерам: Вариант Создания Клавиатуры Без Прерываний - Форум по микроконтроллерам

Перейти к содержимому

  • 3 Страниц +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Вариант Создания Клавиатуры Без Прерываний

#1 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 21 Февраль 2011 - 00:42

тема здесhttp://chipmk.ru/ind...18-47&Itemid=61
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#2 Пользователь офлайн   kovalgg 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 18 Август 12

Отправлено 22 Сентябрь 2012 - 23:28

Уважаемый MAZ!Я занялся PIC-ками не так давно,может чего не понимаю.По Вашей программе обработке клавиатуры,есть вопрос-как программа узнает,что я нажал кнопку,если
flag_klav все биты равны 0 при влете в программу
======================================================================
 
           org         0x0004        ; вектор прерывания
           movwf       W_Temp        ; Стандартная процедура 
           swapf       STATUS,W      ; сохранения содержимого
           clrf        STATUS
           movwf       Stat_Temp     ; регистров W и Status.
           movf        PCLATH,W
           movwf       PCLATH_temp
           clrf        PCLATH
           btfsc       INTCON,T0IF   ; было прерывание от TMR0
           call        obrab_TMR0 
           movf        PCLATH_temp,W
           movwf       PCLATH
           swapf       Stat_Temp,W   ; сохранения содержимого
           movwf       STATUS
           swapf       W_Temp        ; Стандартная процедура 
           swapf       W_Temp,W 
           retfie



obrab_TMR0 
           movlw       .6            ; предустановка на 1мс
           movwf       TMR0
           bcf         INTCON,T0IF   ; Сбрасывается флаг прерывания  TMR1
           btfsc       flag_klav,1   ; флаг, кнопка была нажата  
           goto        rab_klav      ; считаем антидребезговую задержку
rz         btfss       flag_klav,2   ; звук включен?
           return 
=====================================================================================  

Я так понимаю,что после опроса flag_klav,1 при нулевом значении этого бита,следующей командой будет- btfss flag_klav,2,а если и там 0,то выход из программы по стэку.
Поправьте меня ,если я не прав.Или ,все таки, программа использует прерывания для определения факта нажатия кнопки?

Сообщение отредактировал kovalgg: 23 Сентябрь 2012 - 11:12

0

#3 Пользователь офлайн   kovalgg 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 18 Август 12

Отправлено 23 Сентябрь 2012 - 11:37

Извините,не тому человеку вопрос задал.Хотя может и Вы мне ответите на заданный вопрос.Просто не совсем понятно,в каком месте ,данного кусочка программы, поднимается flag_klav,1.,чтобы продолжить сканирование клавиатуры
0

#4 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 23 Сентябрь 2012 - 13:38

да тому. А вы все посмотрели? Вы смотрите только прерывание.
еще надо и опросить клавиатуру.
Я может не понял вопрос. Нет клавиатуру. т.е. состояние кнопок надо опрашивать в программе, через удобные промежутки времени. Опрос быстрый и отвечает за него подпрограмма klav.
А в прерывание идет отсчет временных задержек.
. После опроса кнопок в регистре reg_key должно быть какое-то число. в соответствие с номером кнопки. Если там 0, то значит кнопка не нажималась.
вот этот кусочек:
;----------------------------------------------------------------------
;опрос кнопок закончен теперь анализ их текущего состояния

btfsc flag_klav,0 ; счетчик клавы счет окончил?
goto klav_1 ; проверим состояние нажатой кнопки
movf reg_key,W ; проверим регистр опроса
btfsc STATUS,Z
goto no_klav ; кнопка не нажата
bsf flag_klav,1 ; кнопка была нажата
movlw .40 ; загрузим счетчик задержки
movwf ch_klav
return
;----------------------------------------------------------------------
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#5 Пользователь офлайн   kovalgg 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 18 Август 12

Отправлено 23 Сентябрь 2012 - 15:31

Здравствуйте,уважаемый MAZ!Вы меня простите,я только начинаю изучать PIC-и,но мне все же не понятно,как попасть на ПП klav,если двигаясь,наверное уже в 30-й раз,с верху вниз по программе,я не вижу обращения к ней??? Поясните пожалуйста.
0

#6 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 23 Сентябрь 2012 - 21:40

Вы по проще. А то многоуважаемый, я начинаю теряться. :D
Понимаете, это все принцип описан работы с клавиатурой. Чтобы опросить клаву сделайте
call klav в удобном по смыслу месту Вашей программы.
Будет произведен опрос состояния кнопок и если нажата, то в прерываниях включится счетчик задержки. После окончания его счета, если кнопка все еще нажата (подтверждено) происходит выбор функции кнопки. Ну что Вы хотели, чтобы произошло при нажатие той или иной кнопки.
Если кнопка нажата и это подтверждено, То попадете на выбор функции нажатой кнопки.

;------------------------------------------------------------------------------------------------------

;после опроса кнопки значение нажатой заносится в reg_key, переходим на выполнение функции нужной кнопки

key_an clrf PCLATH
movf reg_key,W
addwf PCL,F
retlw 0
goto S1
goto S2
goto S3
goto S4
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#7 Пользователь офлайн   kovalgg 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 14
  • Регистрация: 18 Август 12

Отправлено 24 Сентябрь 2012 - 14:15

Спасибо,я примерно так и думал.Повторюсь,я не так давно занялся PIC-ами,поэтому и возникают вопросы.Еще сто раз СПАСИБО!!!!
0

#8 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 24 Сентябрь 2012 - 21:49

На здоровье. Чем можем.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#9 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 30 Август 2013 - 00:50

Клава работает отменно

Побороть звук не смог - прошу помощи!!
для включения звука раскомментировать строку 293
в строке 293 поднял флаг включения звука - может не в том месте??????
Почему какой то рваный писк?
Почему после писка какой то треск в динамике который со временем пропадает?

Логика работы клавы
S1,S3,S5 зажигают три красных светодиода, при длительном удержании - зажигают зеленый светодиод
S2,S4,S6 гасят три красных светодиода, при длительном удержании - гасят зеленый светодиод

Хочу обратить внимание на то, что в этом проекте реакция на кнопки находится внутри подпрограммы KLAV,
а для внешней программы наверное следует использовать установку флагов в подпрограмме key_an
Кто что посоветует?

А это просто интересно
При запрете прерываний наблюдаем за выходами PORTB 5,6,7.строка 293 закомментированная (звук выключен). Почему на них импульсы разной длительности?
При разрешенных прерываниях наблюдаем за выходами PORTB 5,6,7.строка 293 раскомментированная (звук включен). В момент нажатия кнопки на PORTB 7 сигнал какой то побитый.
стр.189 ; !!!!!!!!!!! если кнопка не нажата то почему здесь нельзя выйти по return, а не идти в key_an, что бы выйти через retlw 0.
Весь проект в прицепе.

Прикрепленные файлы


0

#10 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 30 Август 2013 - 21:06

Цитата

При запрете прерываний наблюдаем за выходами PORTB 5,6,7.строка 293 закомментированная (звук выключен). Почему на них импульсы разной длительности?

Ну мы же опрашиваем клавиатуру
bsf PORTB,5
bsf PORTB,6
bcf PORTB,7
последовательно устанавливая эти выводы в низкий уровень

Цитата

При разрешенных прерываниях наблюдаем за выходами PORTB 5,6,7.строка 293 раскомментированная (звук включен). В момент нажатия кнопки на PORTB 7 сигнал какой то побитый.

Это я не понял. Причем здесь звук и PORTB7. Какой смысл смотреть, что творится на выводах PORTB 5,6,7?
Там всего лишь опрашиваются нулем кнопки. Подготавливаются условия и происходит проверка состояния кнопок.
Прерывания по сути только тактируют весь процесс и импульсы звука. Если клава работает нормально, зачем смотреть эти выводы? Импульсы звука надо смотреть на PORTA,0.

Цитата

стр.189 ; !!!!!!!!!!! если кнопка не нажата то почему здесь нельзя выйти по return, а не идти в key_an, что бы выйти через retlw 0.

Можно. Но по смыслу, заканчивать опрос клавиатуры лучше в одном месте.
Можно схемку посмотреть. Протеус у меня установлен
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#11 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 31 Август 2013 - 10:43

Просмотр сообщенияMAZ (30 Август 2013 - 21:06) писал:

Можно схемку посмотреть. Протеус у меня установлен

Клавиатура работает, вопросы снимаются.
Остается вопрос по звуку.
Может это только у меня так пищит или пробовать в железе?
А там ли я включаю пищик?
В проекте есть файлик для протеуса BEE.DSN
0

#12 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 31 Август 2013 - 17:49

Протеус у меня не установлен. Забыл не дописать. В железе конечно интересней.
Я в программе исправил, верней посоветовал немного константу предустановки таймера изменить, для красивого звука.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#13 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 31 Август 2013 - 23:24

Просмотр сообщенияMAZ (31 Август 2013 - 17:49) писал:

Я в программе исправил, верней посоветовал немного константу предустановки таймера изменить, для красивого звука.

По расчету: Константа 194, 0,496,мсек, 2016,129032 Гц Да, красивей звук. Но хрип остался. Не знаю куда копать.

Может у кого есть макетка подсобит с проверкой в железе?
0

#14 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 31 Август 2013 - 23:30

У меня макеток много безпаечных. Но мк не дает подключить отладчик. Гадать на кофейной гуще я как то отвык. Проще все посмотреть сразу в деле. Схему?
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#15 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 31 Август 2013 - 23:56

Прошу тайм-аут пока нарисую.
Хотя может вот так?
Прикрепленное изображение: BEE.png
А для проверки звука достаточно одной кнопки и пищалки, даже без светодиодов.

Сообщение отредактировал strannik: 01 Сентябрь 2013 - 00:33

0

#16 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 886
  • Регистрация: 15 Февраль 11

Отправлено 01 Сентябрь 2013 - 12:49

Цитата

Но хрип остался
Проверяйте на железе, не стОит на столько доверять протеусу. Если он во время звучания будет тормозить (а он скорее всего и будет тормозить), то этот звук может измениться до безобразия, т.к. ему (протеусу) нужно в реальном времени выдавать сигнал на звуковую карту.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#17 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 01 Сентябрь 2013 - 12:52

И ключик на транзисторе к излучателю прицепить не плохо
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#18 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 06 Сентябрь 2013 - 00:27

Нарисовалась такая непонятка:
- подтягивающие резисторы подключены, кнопки не нажаты
- при переводе RB0 и RB1 на вход подтягивающие на них по идее дадут единицу

При первом же проходе в MPLABSIM команда в строке 242 btfss PORTB,0
не видит эту единицу и считается что кнопка S1 нажата.
Затем кнопка S3 и кнопка S5. Кнопки S2, S4, S6 не проверяются
После опроса кнопок в reg_key остается код кнопки S5,и на PORTA3 выставляется единица.
И так по кругу. Что сие означает?

В протеусе команда в строке 242 btfss PORTB,0 и все остальное все работает правильно.

Кто знает подскажите:
- как в протеусе посмотреть пользовательские регистры
- как в MPLABSIM нажать кнопку на плюс или на минус, а в нашем случае замкнуть два пина порта

Программа выложена ранее.

Ага, прочитал, что MPLABSIM по барабану, что там делают подтягивающие резисторы.
Ну и как теперь жить?

Сообщение отредактировал strannik: 06 Сентябрь 2013 - 12:51

0

#19 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 385
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 06 Сентябрь 2013 - 15:16

Цитата

Ну и как теперь жить?

Симулятор лаба это всего лишь калькулятор программ.
Ну а как жить? Я бы посоветовал, чисто субъективно, купить безпаечную макетку, простой отладчик типа Пик кит2. И спокойно разбираться со своими идеями, не ломая голову с Протеусом. Лишняя трата времени на мой взгляд. Чисто, что-то проверить, какой нибудь кусочек, типа математики или еще чего-то, можно переключиться на симулятор.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#20 Пользователь офлайн   strannik 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 124
  • Регистрация: 02 Февраль 12
  • ГородКиев

Отправлено 06 Сентябрь 2013 - 23:30

Как при помощи Stopwatch определить время работы call klav при нажатии кнопки
0

Поделиться темой:


  • 3 Страниц +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей