Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
1

Задержка для нефиксирующей кнопки (PIC нонэйм)

17.12.2014, 23:25. Показов 3145. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. задача: сделать задержку перед нажатием кнопки с помощью таймера.
Микроконтроллер PIC. Частота 20МГЦ.
Кнопка используется без фиксатора. Сколько времени для нее нужно, чтобы нормально реагировало?
Если 50 мкс, то код будет выглядеть так:
PR2=50 //и PR2 это видимо регистр какой-то и не надо вводить ее в переменные
T2CON=0b00000100
И вставить этот код как я понял надо в те места. где будет задержка (вместо __delay_ms())
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2014, 23:25
Ответы с готовыми решениями:

Программирование PIC мк, задержка - Что означает точка перед числом?
Здравствуйте, есть программа рассчёта задержек для мк (PICdelay-1.8) Выдаёт такой код ...

PYQT5 Задержка при зажатии кнопки
Создаю объект, который можно двигать WASD, объект двигается, но когда я зажимаю кнопку он он...

Задержка включения после нажатия кнопки
Помогите решить проблему. После нажатия кнопки включения на системном блоке вентилятор включается...

Задержка между действиями при нажатии кнопки
Есть круг под именем "player" и кнопка под именем "bat1". Нужно чтобы player повернулся на 90...

18
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
18.12.2014, 00:23 2
Чтобы нормально реагировало, нужен антидребезг и подтяжка к земле или питанию входа (в зависимости от того куда подключена кнопа).
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 00:25  [ТС] 3
антидребегом называют как раз __delay_ms()?
подключена на вывод МК.
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
18.12.2014, 00:30 4
Можно через задержки. Считываем в цикле (лучше в таймере) состояние входа за заданный минимальный интервал, если не изменилось - считаем верным.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 00:42  [ТС] 5
брр.... если честно - не понял.
так я и хотел вместо задержек использовать таймер.
вот и спрашиваю.
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
18.12.2014, 07:41 6
Чито именно из русским по белому было непонятно?
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 09:59  [ТС] 7
Напишите если не сложно это в программном виде
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
18.12.2014, 12:16 8
http://labkit.ru/html/Assembler_for_PIC?id=365
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 13:05  [ТС] 9
я на Си пишу
0
10231 / 6609 / 498
Регистрация: 28.12.2010
Сообщений: 21,156
Записей в блоге: 1
18.12.2014, 14:16 10
...ага ...а следующим комментарием будет "а у меня в этом компиляторе не компилирует"
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
18.12.2014, 15:20 11
Цитата Сообщение от user437 Посмотреть сообщение
я на Си пишу
Я пишу на хрен знает на чём, но у меня получилось вот так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(основной цикл)
{
   Проверить нажата ли кнопка
   (если нажата)
   {
      подождать 20 мс;
      Проверить нажата ли кнопка
      (если таки еще нажата)
      {
         Сказать программе "В натуре кнопка нажата"
      }
 
   }
}
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 19:47  [ТС] 12
и что это?
вы наверное не поняли, что я хочу....
к примеру делают так:
C
1
2
3
4
5
6
while(1){
RA0=1;
__delay_ms(50);
RA0=0;
__delay_ms(50);
}
Чтобы светодиод мигал через 50мкс.
А мне хотелось бы сделать задержку с помощью таймера.
Ну вместо __delay_ms()
Так как я пробовал -- у меня не получилось (из первого поста)
Вот и прошу внести правки.
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
18.12.2014, 20:13 13
Цитата Сообщение от user437 Посмотреть сообщение
Чтобы светодиод мигал через 50мкс.
Вы киборг или супермен что на глаз видите мерцание в 50мкс?

Для начала:
Вот анти дребезг на таймере, код имеет недостаток не анализирует отпускание кнопки, но для понимания как нужно делать думаю достаточно.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
unsigned char key_on;
 
void TimerInterrupt()
{
  static unsigned char key_count = 0;
 
  if(key_port == 0)
   {
    key_count++;
      if(key_count == 4)
      {
        key_on = 1;
        key_count = 0;
      }
   } else
      {
        key_count = 0;
      }
}
 
void main()
{
  key_on = 0;
 
  while(1)
  {
    if(key_on == 1)
    {
      key_on = 0;
      //кнопка нажата делаем что то
    }
  }
}
Есть вопросы, спрашивайте.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 20:40  [ТС] 14
еще бы не было) тут ведь компилятор не понятно какой задан и какой выбран таймер)
я использую mplab.
и вроде же не надо проверять нажата кнопка или нет. А просто ставится задержка перед нажатием кнопки.
Мне просто надо чтобы было как в примере моем с светодиодом, только вместо __delay_ms был таймер (как я понял надо через TMR2)
Ошибся. 50мс (мили) Ито лучше брать вообще 300
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
18.12.2014, 20:47 15
Цитата Сообщение от user437 Посмотреть сообщение
еще бы не было) тут ведь компилятор не понятно какой задан и какой выбран таймер)
я использую mplab.
Вот с этого и надо было начинать первый пост, а также публиковать свои наработки.
Цитата Сообщение от user437 Посмотреть сообщение
и вроде же не надо проверять нажата кнопка или нет
А у меня сферическая кнопка в вакууме подтянутая к "1" и замыкающее пин на землю "key_port == 0", а у Вас где кнопка?
Цитата Сообщение от user437 Посмотреть сообщение
Ито лучше брать вообще 300
Как говорится не нам, а Вам.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
18.12.2014, 23:24  [ТС] 16
мне хотябы просто без кнопки.... как я пример написал со светодиодом. только вместо задержек использовать таймер....
как код поправить? как я планировал (в первом посте) не сработало.
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
18.12.2014, 23:50 17
Цитата Сообщение от user437 Посмотреть сообщение
как код поправить?
Я или слепой или тупой или одно из двух, какой код подправить, в теме не одного Вашего кода нет.
Цитата Сообщение от user437 Посмотреть сообщение
как я планировал (в первом посте) не сработало
И не телепат не разу. Извините что таким уродился.
P.S. Выкладывайте код и задавайте по нему вопросы, да и за одно выберите какой конкретно будет ПИК.
0
1 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 100
19.12.2014, 01:48  [ТС] 18
А это что?
C
1
2
3
4
5
6
while(1){
RA0=1;
__delay_ms(50);
RA0=0;
__delay_ms(50);
}
пробовал
C
1
2
3
4
5
6
7
8
while(1){
RA0=1;
PR2=50 
T2CON=0b00000100
RA0=0;
PR2=50 
T2CON=0b00000100
}
0
1280 / 1185 / 175
Регистрация: 02.12.2013
Сообщений: 4,883
19.12.2014, 07:43 19
Использование таймера TMR0 для переключения RA0
Напишем обработчик прерывания таймера TMR0
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void interrupt isr(void)
{
  if(T0IF)        //  при переполнение TMR0
   {
     T0IF=0;     //  сбрасываем флаг о его переполнение
      if(RA0==1)
        {
          RA0=0;
        }else
          {
            RA0=1;
          }
    }
}
Код программы:
C
1
2
3
4
5
6
7
8
9
10
void main()
{
INTCON=0b11100000;  //  Настройка прерываний
OPTION=0b00101000;  //  Настройка TMR0
while(1)
{
 
}
 
}
0
19.12.2014, 07:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2014, 07:43
Помогаю со студенческими работами здесь

Интересный проект для автоматчиков LDMicro для AVR и PIC
На просторах тырнета наткнулся на забавный открытый проект LDMicro, програмулька позволяет писать...

Програматоры для PIC
Хочу полностю понять, как работает програматор, методи програмирования(ICSP и тд). Киньте...

Компилятор Си для PIC
Всем доброго времени суток. Хочу задать пару вопросов для самоопределения. 1) Какой компилятор...

Программатор для PIC
Доброго времени суток. Требуется программатор для устройства на PIC18F4550. Схему привожу ниже....

Сортировка для PIC 16C52
Данные поступают в 8-разрядном параллельном коде на один из портов.Запись производится по...

Субмодуль PIC для PinboardII
Пиками не занимался никогда. Попалась в руки битая платка на PIC16C72A. Битые интерфейсы...

MicroPascal Pro для PIC
MicroPascal Pro для PIC В общем что бы на АСМ не писать код, решил прибегнуть к микропаскалю. А...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru