Подключение кнопки
- Войдите на сайт для отправки комментариев
Вс, 10/04/2011 - 12:03
Не пинайте сильно, но возник новичковый вопрос. Я посмотрел схему подключения кнопки. А обязательно ли подключать выход помимо того, что через кнопку к +5В, еще и через резистор к земле? Я просто не очень понимаю в электронике, но проводя аналогии с подключение света в квартире, возникает вопрос зачем еще земля? Я понимаю, что это какой-то очень базовый вопрос, но я на него не смог найти внятного ответа.
Термин "подтягивающий резистор" обычно используются в каких либо входных цепях, например, во входных цепях микроконтроллеров или жесткой логике. Их смысл использования прямо вытекает из определения логических уровней. Известно, что логический уровень характеризуется определенным диапазоном напряжений. Между логическими уровнями находится зона неопределенности. Свободный вход микросхемы, особенно высокоомный, может, под воздействием помех, в процессе работы устройства, оказазываться в различных состояниях. Так напряжение помехи может интерпретироваться как лог.1, лог.0, или попасть в зону неопределенности. Часто это приводит к сбоям в работе схемы. Этот факт обязывает подключать неиспользуемые входы м/сх с помощью сопротивлений к плюсу или минусу источника питания, или "подтягивать" их.
Выбор номиналов этих сопротивлений задача не столь тривиальная, как это может показаться. Но в любом случае, номинал сопротивления должен быть существенно меньше входного сопротивления м/сх, если осуществляется подтягивание свободных входов м/сх. Однако часто подтягивающие резисторы служат для задания тока во внешних, по отношению ко входу м/сх, цепях. В этом случае следует выбирать такое сопротивление, чтобы ток во внешней цепи, существенно превышал входной ток микросхемы, а также все возможные токи создаваемые помехами.
Часто указанный термин применяют не совсем корректно. Так, например, если выход м/сх выполнен по схеме с открытым коллектором (ОК), то само по себе подключение выхода через сопротивление к источнику питания не будет являтся "подтягиванием" как таковым. Здесь более уместен термин нагрузочное сопротивление, поскольку он точнее определяет физическую сущность явления, ведь именно с этого сопротивления снимается полезный сигнал. Однако, если таким образом реализована какая либо линия связи (объединены несколько выходов выполненные по схеме с ОК и подключены к одному сопротивлению), то можно говорить о том, что линия связи в пассивном (активном) состоянии подтянута к напряжению питания.
Таким образом с помощью резистора в этой схеме, на входе дуины мы обеспечиваем жесткое положение 0, избегая таким образом помехи от всяких наводок и т.д.
вопрос по кнопкам...весь извелся уже
собрал примерно вот такую схему
Отличие моей схемы от этой в том, что у меня 3и кнопки и номиналы всех сопротивлений (4шт) - 2,7кОм
код
вывод идет набор цифр
55
90
97
104
111
113
123
131
136
153
156
не могу выловить нажатие кнопок...никакой системы не обнаруживаю...что нажал, что не нажалд ничего не меняется...
ранее использовал analogRead на фоторезисторе - там система четкая закрпыл/открыл фоторезистор - идет изменение показаний
На схеме вход A5, в коде A4
простите....схему привел как есть с робокрафта, как пример, читаю как в коде с А4
Ну то что читаете вы в коде с A4, это и так видно. Подключенно-то куда, в реальности? На A4 или A5?
Какие данные идут если никаких кнопок не нажимать?
подключено на А4
данные идут
55
90
97
104
111
113
123
131
136
153
156
я же постарался максимально подробно в своем посте описать
З.Ы. весь вывод данных не привожу, ибо валится много...
Постарались, но не вышло. :) Данные в первом своем посте вы указали, но не сказали какие кнопки при этом нажаты :)
Если это данные которые идут именно при не нажатых кнопках, то у вас либо порт угорел, либо резистор R7 потерялся/отвалился/плохой контакт.
Проверить порт - просто. Откключаем все. Берем проводок. Одним концом в A4 другим в землю - в сериале должно быть "близко к нулю", потом одним концом в A4, а другим в 5v PIN - в сериале должено быть "близко к 1024"
Признаком что резистор R7 "нашелся" будет то, что в сериале, при не нажатых кнопках будут бежать цифры близкие к 1024
в первом посте указанны данные без нажатых кнопок, даже если бы нажимал кнопки и удерживал, то никакой системы в изменении данных не обнаружил...
порт проверил - все как вы говорите А4-gnd = 0, А4-5V = 1024
R7 - поменял проводки, проверил контакты (но не исключаю плохой контакт)
в первом посте указанны данные без нажатых кнопок, даже если бы нажимал кнопки и удерживал, то никакой системы в изменении данных не обнаружил...
Вначале нужно добится четкой ловли "кнопки не нажаты", потом уже "нажимать" (они все производны от состояние "не нажато"). Пока не будет 1024 при отпущенных кнопках - можно даже не пытатся нажимать.
порт проверил - все как вы говорите А4-gnd = 0, А4-5V = 1024
Ну значит порт и АЦП - живы и бодры. Это хорошо.
R7 - поменял проводки, проверил контакты (но не исключаю плохой контакт)
Возмите вольтметр и промерте что после него получается. Должно быть что-то в районе 4.8V
Ну в крайнем случае можно вообще его выкинуть нафиг и заменить просто проводком (то есть взять R7=0 ом).
Его предназначение - снижать потребляемый ток при нажатых кнопках (и даже при нулевом значении этот ток будет в допустимых пределах благодаря резисторам на 2.7K) плюс "защита от дурака" (если вы случайно где-то подключите кнопку напрямую на землю, без резистора в 2.7K).
Вообщем если у вас питание не от батареек (не нужно экономить ток) и вы уверены на 100% что все остальные кнопки подключены "точно как на картинке" (не нужно делать "страховку") - можно R7 заменить на простой проводок.
Э... кажись прогнал я с "заменить проводком". Тогда нажатие кнопок отличить не получится. Делить напряжения расчитать не возможно будет. Дробь 0 поделить на что-то (нажатая кнопка) - всегда будет возвращать ноль. То есть какая кнопка нажата - фиг поймешь.
Вообщем сейчас, ваши цифры "при отпущенных кнопках" говорят о том что номинал R7 соразмерим с сотнями килоом (бракованный резистор, плохой контакт и т.п.) Вам нужно "понизить" его на порядок, два. Сделать соразмеримым с остальными резисторами.
в общем методом "научного" тыка удалось выяснить причину проблем...отвратная макетка.
вернее не так...не размечено, что шина питания на 2е части делится на макетке
З.Ы. резюмирую смысл схемы из первого поста....при нажатие на кнопку выдается значение - соответственно можно вылавливать нажатие кнопок в зависимости от значения...(извините если уже было на форуме)
>вернее не так...не размечено, что шина питания на 2е части делится на макетке
Это скорее всего было нарисованно на коробке-упаковке макетки. Хитрые люди вырезают эту схему и клеят на обратную сторону макетки. Прежде чем выбросить упаковку.
А разделенное питание - бывает очень нужно (так что макетка вполне правильная). например когда в схеме есть блоки и с 5v питанием и 3.3v
По поводу "смысл схемы из первого поста" - оно конечно "дешево и сердито", но "не надежно".
Цифры означающие "какая кнопка нажата" - будут "плавать". Соберете не на макетке, а на вытравленной плате - опять цифры подбирай. Чуть контакты окислились - уплыли значения. Да даже банальное "внешняя температура поменялась" - уже может привести к необходимости "подстраивать" значения (резисторы тоже меняют свое сопротивление от температуры).
Да и с детектирование "одновременных нажатий" - проблема.
Так что я бы лучше делал на каком-то сдвиговом регистре. Пусть и ноги "чуть менее экономно", зато надежней, одновременонсть ловить можно, да и "увеличивать количество кнопок" - менее проблемно.
вы как всегда правы уважаемый...про не стабильность моего варианта, но мне пока для "баловства", в серьезном проекте конечно же побоялся бы использовать, НО у меня и проектов нет серьезных :)
вы как всегда правы уважаемый...про не стабильность моего варианта, но мне пока для "баловства", в серьезном проекте конечно же побоялся бы использовать, НО у меня и проектов нет серьезных :)
Ну ваш вариант не менее "правильный". Задача инженера именно и подобрать наиболее оптимальное для каждой ситуации. Если ваша задача решается такой схемой, на более дешовой рассыпухе. И ее "минусы" - не важны, то ваше решение будет "более подходящим". Я просто упомянул что может быть и альтернативный подход (и расписал минусы вашего). У которого есть свои плюсы, но тоже есть и минусы (больше ног займет, сложней скетч, микруху хоть за копейки но нужно найти-купить).
А для "баловства" - можно попробовать и так и этак ;) А если еще и "на деньги плевать" - попробовать расширители портов на I2C :)
В какой-то ветке я приводил схему такую, только не помню где... Вставлю еще раз. Она проще тем, что все номиналы одинаковые. Если кнопок не более 5, то надежность обработки очень высока, потому что ловить нужно не значения, а попадание значения в интервал. Одновременно нажатые кнопки не катят, верхняя всегда имеет приоритет над нижней, поэтому они друг другу не мешают. Если нужно отслеживать параллельные нажатия, то можно поставить на каждую кнопку по резистору, но номиналы нужно будет подбирать так, чтобы параллельные значения не совпадали с отдельными резисторами.
схема преотличная - отражает именно то, что по крайней мере мне необходимо для проекта..
вот мой код
как бы в коде все ровно, но нажатия кнопок в мониторе производятся не однозначно (нажал, а вывода нет, приходится или несколкьо раз нажимать или нажать и удерживать)
ПОдскажите, что не так с кодом?
Слишком много читаете аналоговый вход. Попробуйте:
Эти схемы принципиально ничем не отличаются, хотите одинаковые номиналы, ставьте одинаковые. Схемы отличаются только тем, что по умолчанию в одной подтяжка к земле, а в другой к +5в. В коде только поменятся знаки сравнения на противоположные. И при использовании любой аналоговой клавиатуры всегда нужно указывать диапазон значений, а не ловить конкретное.
Если в схеме выше убрать подтягивающий резистор к +5в и включить внутреннию подтяжку, а номиналы резисторов взять около 5 кОм, то схема еще больше упростится:
Слишком много читаете аналоговый вход. Попробуйте:
с вашим кодом стало почетче отрабатывать, но все равно наблюдаются "недосрабатывания" :(
Что значит "недосрабатывания" ?
Что значит "недосрабатывания" ?
но нажатия кнопок в мониторе производятся не однозначно (нажал, а вывода нет, приходится или несколкьо раз нажимать или нажать и удерживать)
Это или что то с кнопками или опять с макеткой...
ну кнопки тестором звонятся нормально - нажатия точно уверенно отлавливают
будем считать, что макетка...