Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/74: Рейтинг темы: голосов - 74, средняя оценка - 4.70
jokushmo

Опрос кнопок и индикация.

23.11.2010, 05:27. Показов 13953. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожайлуста. Пишу на Си. Пытаюсь на порт (не важно какой) повесить кнопку и динамическую индикацию. Делаю так включаю порт на ввод, опрашиваю кнопку. Переключаю на вывод , вывожу. Чего-то получается, но как-то "сыро". Кто-то страдал таким, и вообще как грамотно это сделать?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2010, 05:27
Ответы с готовыми решениями:

Опрос сенсорных кнопок
Всем здравия. Имеется Таймер встраиваемого духового шкафа Hansa. По воле периодического отключения света перестал работать от слова совсем....

опрос 96 кнопок
Добрый день! Не могу определиться с реализацией задачи: Необходимо опрашивать 96 кнопок, которые рассредоточены по помещению. расстояние...

Опрос кнопок (PIC16F877)
Здравствуйте, недавно начал заниматься программированием платы PIC16F877. Написал программу по выбору одной из двух кнопок, одна - включает...

18
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 05:40
В файле - схема подключения на один порт индикатора и кнопок. Там же - пример кода. Реализованы часы, но думаю, что в качестве толчка к правильным действиям - то, что доктор прописал. ;)


./styles/iosyitistromyss/imageset/icon_topys_attach.gif" width="14" height="18
[147.49 Кб]
0
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 05:42
А на будущее - хотя бы код выложили, чтобы не пальцем в небо тыкать в попытках задействовать свою телепатию... ;)
0
jokushmo
23.11.2010, 06:05
Да мне идея важна.
У меня так, что в принципе как и в Вашем вложении
out DDRB,temp ;riymitiotyze port B as all Outputs
out PORTB,temp ;omd clear LEDs
Code
1
2
3
4
5
6
7
8
9
10
11
12
void read_key(void)
{
DDRD=0;                         //переключаю на ввод
PORTD=0;
#asm                             //без этого воообще не успевает переключится на
nop                              //ввод,вычитал в даташите вообщем
#endasm
if (PIND.0==1)
{
.............
}
DDRD=0x01;                    //обратно на вывод
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 06:12
Да, для переключения ддр нужно хотя бы одну команду выполнить. Не важно какую.

А что означает выражение
получается, но как-то "сыро"
А вообще, оптимально не всегда значит грамотно. Грамотно - это как предусмотрено производителем. Но это не всегда оптимально. Что предлагает производитель - я прислал. А дальше уже додумывать если хочется как-то не так, как предложено производителем.
0
jokushmo
23.11.2010, 06:22
Я в железе не проверял, по-пробовал в глючном протеусе у него ложные срабатывания кнопки, на порту висит 1 после DDRD=0; PORTD=0;
Дальше я опрашиваю if (PIND.0==1) и у меня ложно срабатывает кнопка.
Т.е. все правильно и все будет работать?
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 06:52
А кнопка верно подключена? Такое ощущение, что она неверно подключена... Имхо, проще подключить кнопку чтобы она замыкала на корпус с подтяжкой к + питания (около 10К). И проверять, соответсвенно, не на 1, а на 0.
Такая мысль связана с тем, что как раз для того, чтобы данные из вывода появились на вводе нужно сделать пустую команду. А для опроса данных такая команда не нужна. Такое ощущение, что вы сами управляете входом (типа кнопкой), т.е. кнопка ничего не меняет, т.е. она подключена неверно.
0
jokushmo
23.11.2010, 07:14
Ну, разницу куда подвязывать кнопку не вижу, у меня она подвязана на питание, а светодиод на землю.Кому интересно вот в протеусе. Не я придумал,но мне надо управлять.
И я не говорю, что вообще не работает. Роботает, но невсегда.

0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 08:26
В данной схеме при опросе кнопок надо чтобы транзисторы 4 и 5 были закрыты. Т.е. принудительно подавать 0 на ноги, куда подключены базы этих транзисторов.
0
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 09:28
Кстати,
1. эмитер транзистора 5 не подключен на землю....
2. резисторы 14 и 9 я бы поставил правее, за кнопками... Т.е. точка соединения резистора от кнопки и одного из этих подключена к мк, как это сделано для третьей кнопки
0
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
23.11.2010, 10:19
У вас не схема, а черте-што.
Кнопки опрашивать с интервалом 10-50 мс, чтоб от дребезга избавиться. Есть куча программных способов подавления дребезга контактов, погуглите на тему.
0
jokushmo
23.11.2010, 14:54
Землю Вам исправил(набрасал быстро-пропустил) . А на летели-то, схема не моя, ею надо управлять. Так видит производитель холодильников.
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.11.2010, 16:41
А что за марка? Как раз присматриваю холодильник, буду знать чего не стоит брать.
0
0 / 0 / 0
Регистрация: 23.05.2007
Сообщений: 792
23.11.2010, 16:51
Цитата Сообщение от jokushmo
...на порту висит 1 после DDRD=0; PORTD=0;
Дальше я опрашиваю if (PIND.0==1) и у меня ложно срабатывает кнопка.
Подтяни выводы портов к земле резисторами 3к...10к и будет тебе счастье...
0
0 / 0 / 0
Регистрация: 28.09.2010
Сообщений: 4,283
23.11.2010, 17:09

https://www.cyberforum.ru/savedimages/2010/11/23/sj9favphmnubknhtrd.jpg

Когда хотим зажечь сегмент - подаём ноль (DDR=1, PORT=0), когда хотим потушить - отпускаем или вешаем на подтяжку (DDR=0, PORT= 1 или 0). Если прибить пин к питанию (DDR=1, PORT=1), то, при нажатии кнопки, порт сгорит.

Чтобы прочитать кнопку - вешаем пин на подтяжку. И читаем. 1 - не нажата, 0 - нажата.

Вообще идея мне не нравится, ибо при нажатой кнопке, соответствующий сегмент будет постоянно гореть. А это не есть гуд.
0
jokushmo
23.11.2010, 23:26
Холодильник Whirpoot(из серии, что плачет).
Резики на землю кидать нельзя,ибо смотрите схему(в базе транзюка 10к,он не откроется нефига)
И так могу(как ниже схема, даже работает норм),буду наверное пробовать в железе,только времени сейчас нет к концу недели только проверю.


<Изображение удалено>
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
24.11.2010, 05:10
Цитата Сообщение от jokushmo
Холодильник Whirpoot(из серии, что плачет).
Резики на землю кидать нельзя,ибо смотрите схему(в базе транзюка 10к,он не откроется нефига)
И так могу(как ниже схема, даже работает норм),буду наверное пробовать в железе,только времени сейчас нет к концу недели только проверю.
При нажатии кнопки светик будет светиться... Но если это не актуально, тогда можно и так.
0
jokushmo
24.11.2010, 06:07
Нашел таки глюк, когда нажимаю кнопку на PORTD.1 в протеусе через светодиоды на PORTD.2 тоже поступает 1. Это что ж за светодиоды в протеусе с утечкой такой что МК срабатывает?

З.С. тему можно закрывать еще раз убеждаюсь протеусу верить нельзя.
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
24.11.2010, 07:22
Цитата Сообщение от jokushmo
З.С. тему можно закрывать еще раз убеждаюсь протеусу верить нельзя.
Самая лучшая отладка - в железе. 100% верный результат. А симуляторы разные - это от Лукавого...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2010, 07:22
Помогаю со студенческими работами здесь

Периодический опрос кнопок на MCS-51
Если ДД1=1 и ДД2=1, то ДСИ=0 и ДСИ2=0, если ДД1=0 и ДД2=0, то ДСИ1=1, ДСИ2=1, если ДД1 ≠ДД2, то ДСИ1=1, ДСИ2=0;организовать периодический...

опрос кнопок, как исправить?
Привет, прошу в помощи в написании функции опроса кнопок. функция периодически запускается по таймеру и должна изменять значения...

PIC16С84/F84. Индикация логического произведения кода нажатых кнопок и 0Ch
Будьте так любезны помочь с задачей на ассемблере: Обеспечить выдачу на светодиоды инверсного значения логического произведения кода...

FreeRTOS и опрос кнопок и передача в таск
Не могу придумать в голове как передать состояние кнопок из одной задачи в другую. Задачу ставлю так: есть таск который опрашивает 6...

Опрос клавиатуры (несколько нажатых кнопок сразу)
Подскажите как лучше сделать опрос клавиатуры, чтобы можно было отслеживать несколько одновременно нажатых клавиш. Пробовал по int...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru