Например TDA7294

Форум РадиоКот • Просмотр темы - 8051. Прерывание на кнопке, жесть.
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт мар 09, 2021 14:21:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Ср янв 20, 2021 21:47:17 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
Что нибудь можно сделать, чтоб избавится от дребезга? Пытаюсь сбрасывать бит IE0 в регистре PCON, на 12-тактовых это более-менее работает, на 1-тактовом (STC11F04E) это не работает никак, видимо слишком шустрый. Пытался внедрять задержки в подпрограмме, тоже не катит совсем. Кнопка на #INT0 работает кошмарно. Что в таких случаях обычно делается?
Код:
 
ledpin   bit   P3.7

   org   0000h
   jmp   main

   org   0003h
   jmp   ledchange

   org   000Bh

main:
   setb   EX0
   setb   IT0
   setb   EA
loop:
   mov   PCON, #00000001B
   jmp   loop

ledchange:
   clr   EA
   clr   IE0
   cpl   ledpin
   setb   EA
   reti

   end


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Ср янв 20, 2021 22:13:37 
Друг Кота
Аватар пользователя

Карма: 73
Рейтинг сообщений: 546
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3405
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
В сети куча информации по борьбе с дребезгом. См, например, здесь: https://radioprog.ru/post/251


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 00:05:00 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
В сети куча информации по борьбе с дребезгом. См, например, здесь: https://radioprog.ru/post/251

Не спорю, но про то как это сделать в прерывании у 8051-го - чё-то небогато.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 00:31:30 
Модератор
Аватар пользователя

Карма: 76
Рейтинг сообщений: 884
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4189
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Потому что никто так не делает. Разве что, из всяких слипов выходить.
К чему такая молниеносная реакция на нажатие кнопки ?


Вернуться наверх
 
Как сделать ИП с ультрашироким диапазоном?

Ключевыми особенностями высоковольтных SiC MOSFET Wolfspeed являются малое сопротивление канала в открытом состоянии и минимальное значение паразитных емкостей, что позволяет максимально снизить статические и динамические потери, и, соответственно, увеличить рабочую частоту преобразователей.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 00:33:44 
Друг Кота
Аватар пользователя

Карма: 73
Рейтинг сообщений: 546
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3405
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Вот мой старый проект часов на асме для С8051. Анти-дребезг реализован в соответствии с алгоритмом в листинге 1 на стр. 20 в приложенной PDF.
Вложение:
Clock.zip [526.75 KiB]
Скачиваний: 23


Вернуться наверх
 
STM32L5 – первое семейство ST на ядре Cortex-M33 с ультранизким потреблением

Первое семейство STM32L5 на базе ядра ARM Cortex-M33, флагман семейств ST с низким потреблением. Область применения IoT, расходомеры, умные часы, промышленные датчики и многое другое. Опубликованы материалы двух практических вебинаров по расчету энергопотребления и работой с TrustZone. Рассмотрены особенности и примеры практической реализации CAN FD на STM32L5.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 00:53:33 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
Потому что никто так не делает. Разве что, из всяких слипов выходить.
К чему такая молниеносная реакция на нажатие кнопки ?

молниеносная реакция мне не нужна. На самом деле пока не смог придумать как сделать кнопки на МК по-другому.
Хочется читать штук 8, сразу. Захожу в прерывание, читаю порт с кнопками, кладу в регистр, выхожу из прерывания (МК при этом снимается с IDLE), Прерывание по нажатию любой кнопки, через диодное лог. "ИЛИ" на вход инта. Вроде все классно.
Но пока решил попробовать с одной, и получается не очень.


Вложения:
buttonz.png [10.11 KiB]
Скачиваний: 36
Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 07:47:33 
Прорезались зубы

Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 231
Рейтинг сообщения: 0
Сканировать по таймеру каждые 20-50мс не пробовал?

Так-то классика жанра, которую ТС не знает. Ха-ха... С IDLE можешь выходить по прерыванию таймера, что, обычно, позволяли все МК на ядре MCS-51, с которыми я когда-то работал. И не нужно ни каких "монтажных И". Для считывания 8 кнопок хватит 6 ног МК. Если ног не хватает, то добавляется сдвиговый регистр, который уменьшит число потребных ног до трёх.


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 09:12:03 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 150
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1191
Откуда: Баку
Рейтинг сообщения: 0
https://m.radiokot.ru/forum/viewtopic.php?f=61&t=79801

Там буквально на первых страницах описан принцип, Alex даже приводил пример на Си. По тому же принципу и действуйте на асме.

Для начала заведите таймер на 1 мс. На него и заведите все процессы: чтение кнопок, отображение информации, считайте датчики и пр.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 10:15:14 
Друг Кота

Карма: 27
Рейтинг сообщений: 1206
Зарегистрирован: Ср фев 11, 2009 20:35:58
Сообщений: 7284
Рейтинг сообщения: 0
В схеме диоды нужно переставить в цепь R1,R3.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 10:37:00 
Друг Кота
Аватар пользователя

Карма: 87
Рейтинг сообщений: 1039
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 11586
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Изображение
Px.0-Px.2 настроены как входы с подтягивающим резистором.
Собственно там больше мороки с режимом прерывания - вход в обработчик по прерыванию, затем в теле обработчика запрет прерывания по INT, замена адреса возврата на адрес подпрограммы антидребезгового анализатора (при резервировании адреса возврата в точку вызова INT) и reti.
Далее выполняем антидребезг, захват комбинации и по завершении ret в точку вызова INT с последующим разрешением самого INT.
Это на случай, если в системе критичны прерывания более низкого уровня.
Собственно сам антидребезг классика - последовательное чтение комбинации ЛВК при сравнении с предыдущим прочитанным.
старт
читать данные с Px.n - Px.m
совпали с буфером?
если совпало - установить флаг "данные готовы" и выход
если нет - перезапись значения буфера текущим считанным, задержка в N интервал и повторять от старт
8)
Ну и ессно смотрим чтобы выход на исполнение был не ранее "полного отпускания" ВСЕХ кнопок (или смены стабильной комбинации, если таковое возможно для программы). Иначе сразу по выходу снова в прерывание вскочим.
Там вариаций море - все зависит от фантазии автора.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 12:52:53 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
Вот только как все это сделать, блин. Примеры на "С" (а других в общем, нет) мне непонятны, я его почти не знаю, в больших программах на асме тоже сложно разобраться.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 14:05:47 
Друг Кота
Аватар пользователя

Карма: 87
Рейтинг сообщений: 1039
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 11586
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Вечерком чегось поднашкрябаю для примера...
Именно под вариант прерывания - но только для базовой классики (AT89C51 за основу).
Для STC там надо "привести в соответствие" - влазить в доки чуток влом.
:write:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 14:20:09 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 150
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1191
Откуда: Баку
Рейтинг сообщения: 0
Таймер с прерыванием в 1 мс настроить сможете?
Заведите переменную, скажем counter = 20.
В прерывании по таймеру делаете декремент counter, затем проверяете на 0.
Если counter == 0, выставляете какой-то флаг, read_keys = 1.

В основном цикле программы постоянно сканируете этот флаг на равенство 1.
Как только поймали, делаете read_keys = 0, counter = 20, call scan_keys.
В scan_keys считываете весь порт в переменную keys в инверсном виде (вам же 8 кнопок нужно было?)
Если keys не равен 0 проверяете его на равнство keys_old (предыдущее значение). Если не равны, то keys_old = keys и на выход.
Если равны, значит в текущее значение равно считанному 20 мс назад - это ваш антидребезг. По значению переменной keys оперируете кнопками. При выходе обнуляете keys_old = keys = 0, но и тут возможны варианты, если планируете обрабатывать длительные нажатия.

Все это на ассемблере.
А вообще, переходите на Си. Чтобы начать писать на нем, совсем необязательно знать все возможности.
Начните с базовых операций, а остальное изучите по ходу дела.

Добавлено after 6 minutes 11 seconds:
... для базовой классики (AT89C51 за основу)

STC11F04E, кстати, имеет совместимую с AT89C2051 цоколевку.
Отличаться может только вторым режимом таймера.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 14:47:17 
Друг Кота
Аватар пользователя

Карма: 87
Рейтинг сообщений: 1039
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 11586
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Для корректной прожки с использованием моего c51asm надо набросать *.inc с базовым описанием...
Мне его готовить влом... имеется в наличии для STCшек только под stc15f204ea...
:(
Да так пока и лежит без дела (несмотря что есть подопытный МК).
:sleep:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 14:49:48 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 150
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1191
Откуда: Баку
Рейтинг сообщения: 0
Таймер с прерыванием в 1 мс настроить сможете?

Вспомнил, что в программе для прошивки встроены различные полезные утилиты для генерации готового кода, например, настройка таймера, а также множество демо-кодов (правда, описание на китайском, да еще и шрифт левый). Причем все это и на Си, и на асме. В даташите на семейство тоже хватает примеров использования.

Добавлено after 2 minutes 11 seconds:
Для корректной прожки с использованием моего c51asm надо набросать *.inc с базовым описанием...

В прошивальщике все это есть:

Сравнить регистры и поправить.
15F204 от 11F04E практически не отличается.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Последний раз редактировалось Zhuk72 Чт янв 21, 2021 14:55:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 14:54:35 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
Zhuk72 писал(а):
Если keys не равен 0 проверяете его на равнство keys_old (предыдущее значение). Если не равны, то keys_old = keys и на выход.

меня вот тут ступор случилсся, чтоб сравнить с keys_old, его надо сначала где-то и как-то установить. А все проходы одинаковые, непонятно, где old, а где не old/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 15:01:42 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 150
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1191
Откуда: Баку
Рейтинг сообщения: 0
Изначально и старый и текущий - нулевые.
Если при считывании текущий не ноль, тогда только сравниваете со старым. Если не равны, то keys_old = keys и на выход.
В следующем проходе, если нажатие все-такие существуют, они будут равны, тогда и обрабатываете значение keys. При выходе опять обнуляете оба регистра (или нет, зависит от хотелок).
keys (если через инверсию читаете) может быть равен 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40 или 0x80.
Ну это если одновременно 2 и более кнопок не нажмете.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 15:04:01 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 89
Рейтинг сообщения: 0
Для корректной прожки с использованием моего c51asm надо набросать *.inc с базовым описанием...

Я вообще не парюсь. Например, нужен регистр какого нет в классике, например, SPI в МК STC12C5A60S2 (успешно разобрался с MAX7219), я посмотрел его адрес в даташите, и сделал SPDAT equ (адрес регистра).
Единственное что - замороченные STC8 и STC15, там надо внимательно читать все, даже некоторые стандартные 8051 регистры там могут быть не на своем месте, а на выводах портов включены альтернативные функции по умолчанию.


Последний раз редактировалось Shuspano Чт янв 21, 2021 15:12:40, всего редактировалось 1 раз.

Вернуться наверх
 
В сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 15:08:45 
Друг Кота
Аватар пользователя

Карма: 87
Рейтинг сообщений: 1039
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 11586
Откуда: ДОНЕЦК (ЮГО-ВОСТОК ua/DPR)
Рейтинг сообщения: 0
Там простой буфер-регистр под временное хранение (inp_dat) и буфер для чтения (tmp_lvk) (у STC правда можно непосредственно с выводами сравнивать, но уж лучше таки прочитать значение).
При первом вызове в него (inp_dat) записывается нейтральное состояние, статус tmp_lvk безразличен - он все равно свеженькое значение получит.
Далее
читаем порт в tmp_lvk
сравниваем с inp_dat
по результату
или
inp_dat = tmp_lvk - это случай подтверждения предыдущих считанных данных
или в случае неравенства
mov inp_dat,tmp_lvk ; и после интервала повторяем заново
Только вот надо отслеживать комбинацию "все отпущены" как основу выхода по фальстарту или по завершении исполнения.
А это уже дополнительная обработка считанных из порта данных.
Можно дополнить еще одним регистром - счетчиком для стабилизации количества верно считанных и/или ошибочных комбинаций.
Тогда тайминги автоматом уходят - просто используется контроль в течении N циклов подтверждения совпадения (та же программная задержка).
:roll:

Насчет *.inc - лучше таки нашкарябать...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: 8051. Прерывание на кнопке, жесть.
СообщениеДобавлено: Чт янв 21, 2021 15:46:17 
Сверлит текстолит когтями
Аватар пользователя

Карма: 25
Рейтинг сообщений: 150
Зарегистрирован: Ср янв 29, 2014 08:41:31
Сообщений: 1191
Откуда: Баку
Рейтинг сообщения: 0
Главное неудобство STC - документация, написанная через пень-колоду.
В этом плане МК с ядром 8051 от Силабс, конечно, вне конкуренции.

_________________
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y