Напряжение на контакте в INPUT режиме
- Войдите на сайт для отправки комментариев
Ср, 06/01/2016 - 20:19
Добрый день!
У меня мега 2560. Делаю светодиодную матрицу по методу Чарли. Столкнулся с тем, что горят светодиоды, которые не должны гореть. Оказалось, что иногда на контактах, которые установлены в режим INPUT есть незначительное напряжение порядка 0,1В, из-за чего и загораются лишние светодиоды.
Кто-нибудь с таким сталкивался? Это нормально?
Как с этим бороться? С помощью триггера Шмитта (SN74AC14N)?
Как с этим бороться? С помощью триггера Шмитта (SN74AC14N)?
Я предлагаю бороться с этим хирургическим путем. С помощью сдвиговых регистров 74HC595 нарастить количество выходов и пользоваться ими классическим способом безо всяких проблем.
Так не интересно ) У меня сейчас 12 светодиодов работают от 4 контактов.
В итоге я заменю мегу на attiny85 и получится очень компактное устройство. А вы предлагаете добавить два 74HC595 (если я правильно понимаю), каждый из которых в два раза больше, чем attiny. + ещё количество резисторов увеличится в 3 раза.
Интересно в принципе с чем связано это напряжение на INPUT-контакте. Это 1) особенность arduino, 2) особенность микроконтроллера или 3) у меня что-то не так...
На сколько я понимаю, если контакт в режиме INPUT, то на нём не должно быть никаких напряжений
На сколько я понимаю, если контакт в режиме INPUT, то на нём не должно быть никаких напряжений
Никакого - не бывает. А Ваш пин куда притянут? К земле? К питанию? Или никуда? Сдаётся мне, что никуда. И что Вам нужно на пине - землю или 5В? Если землю, так поставьте резистор килоом на 10 между ним и землёй.
Так не интересно )
В стране Самоделии (DIY) это не наказуемо. :)) Я метод Чарли понимаю, но не люблю, обсуждать это сейчас не буду. Раз он Вам подходит под конкретную задачу - пусть так и будет. Светодиод зажигается током, а входное сопротивление цифрового входа (если нет программно включенной подтяжки входа) минимум десятки МОм. Там тока нет. ("Там рыбы нет." :)) ) Попробуйте пройти все состояния светодиодов по очереди в статике. Не зажигать последовательно, используя динамический программный драйвер, а чисто в статике. Если результат будет не очевиден, то придется выкладывать схему с точным описанием, что и как "не так" и разбираться детально. Светодиоды у Вас все по цвету и типу одинаковые? А то может быть, что прямое падение на двух в сумме меньше чем на одном другого цвета или близко к нему.
Вот, панель на видео: https://www.youtube.com/watch?v=uiaE7snxT3U
Одновременно загараются светодиоды с общим катодом. Хотя там сложно понять где катод, где анод. Светящаяся штука почему-то на аноде, а не катоде. Ну короче одновременно загораются те, которые с общей землёй.
Например 1-ый и 9-ый:
Чтобы загорелся 1-ый светодиод, на 1-ом контакте должен быть HIGH, а на 4-ом - LOW.
Чтобы загорелся 9-ый светодиод, на 3-ем контакте должен быть HIGH, а на 4-ом - LOW.
9-ый загорается вместе с 1-ым, потому что на 3-ем контакте появляется небольшое напряжение, хотя его там быть не должно, потому что этот контакт в режиме INPUT.
Если подключать к напряжению и земле отдельно 1 и 4 контакты, или отдельно 3 и 4 контакты, то ничего лишнего не горит. Т.е. в схеме должно быть всё нормально. Немного позже выложу фотки.
Если подключать по отдельности, то ничего лишнего не горит:
Немного ада:
Между 1 и 4 контактами есть напряжение, это нормально:
Между 3 и 4 тоже есть, хотя и меньше. Но его там вообще не должно быть, потому что 3-ий контакт в режиме INPUT:
Вот, скетч:
Вы не ответиле на мой пост №3. Куда притянуты INPUT пины? Судя по фото - никуда. Ну, а если никуда, то чему удивляться?
Кажется помогло! Спасибо! Пока проверил на одном светодиоде. Я вспомнил, это стягивающий резистор ) Только я думал, что он защищает входы ардуино от шумов, возникающих во внешней схеме. А оказывается, что он ещё защищает и внешнюю схему от шумов ардуино.
А оказывается, что он ещё защищает и внешнюю схему от шумов ардуино.
Не совсем так. Он просто задаёт некое значение на ПИНе. Если ПИН никуда не присоединён - болтается в воздухе, он "работает антенной" и собирает все помехи, какие "видит" и значение на нём вообще непредсказуемо.
Интересно, что в xmega есть встроенные стягивающие резисторы: http://www.atmel.com/images/atmel-8331-8-and-16-bit-avr-microcontroller-xmega-au_manual.pdf (стр. 141). И ещё какие-то режимы (сохранение уровня, и, или).
Интересно, что в xmega есть встроенные стягивающие резисторы
Они везде есть, просто Вы ими не пользуетесь. Скажите в pinMode вместо INPUT - INPUT_PULLUP и притянется к питанию.
Не, это только pull-up. А pull-down только в xmega
Я проанализировал видео, фото, описание неисправности и у меня возникло следующее предположение: паразитная засветка светодиодов происходит из-за того, что при работе программы выводы Ардуино переводятся не в состояние "вход", а в состояние "вход, подтянутый вверх". Поскольку на практике сейчас полностью проверить это предполжение мне затруднительно, то я предлагаю для анализа цепь следующих умозаключений.
При работе программы (видео) паразитная засветка видна явно, т.е. на нее идет вполне ощутимиая мощность. В статике светодиоды работают нормально, т.е. ошибки монтажа и перетекания тока по неотмытому флюсу можно исключить.
Паразитной засветке подвергаются светодиоды, на анод которых подается некоторое положительное напряжение со стороны выводов, находящихся в высокоимпедансном состоянии. Пичем через вывод должен протекать ток в сотни микроампер, иначе свечения не увидеть. Я на Меге проверил мультиметром токи утечки с нескольких входов на "общий" и на "+5 В". Никакого тока зафиксировать не удалось. Т.е. "протечек" ключей в исправном состоянии "вход" нет.
Учитывая, что pull-up резисторы имеют сопротивления порядка 20 кОм и падение напряжения на открытом светодиоде, получаем ток засветки через светодиод порядка 200 мкА, что примерно соответствует уровню паразитной засветки на видео.
Если подключить к "подтянутому входу" стягивающий резистор в 10 кОм, то за счет образовавшегося делителя напряжение на светодиоде падает ниже уровня его открытия и засветка пропадает.
ИТОГО: проверить правильность установки режимов входов в программе. Предполагаю (тут я не силен), что это строки 49, 50 и/или данные для них.
Я кажется начинаю подозревать в чём проблема. Взял отдельный светодиод (не в панели). И через резистор подключал его к разным контактам и земле.
Паразитные напряжения нашел только на 20-ом и 21-ом контактах! А это по совместительству SCA и SCL. Видимо на плате arduino всё так соединено, что на этих пинах возникает напряжение.
Пробовал переводить разные контакты в режим INPUT_PULLUP. На 20-ый это никак не влияет. А на других контактах появляется незначиетльное напряжение. Меньше чем на 20-ом, но достаточное, чтобы светодиод чуть-чуть горел. Что странно... По идее в pull-up режиме он должен гореть ярко.
Паразитные напряжения нашел только на 20-ом и 21-ом контактах! А это по совместительству SCA и SCL. Видимо на плате arduino всё так соединено, что на этих пинах возникает напряжение.
Пробовал переводить разные контакты в режим INPUT_PULLUP. На 20-ый это никак не влияет. А на других контактах появляется незначиетльное напряжение. Меньше чем на 20-ом, но достаточное, чтобы светодиод чуть-чуть горел. Что странно... По идее в pull-up режиме он должен гореть ярко.
Наличие схемы реального устройства могло бы существенно облегчить поиск неисправности.
От резистора pull-up старые светодиоды вообще бы видно не было, а современные, особенно красные, видно. На красном светодиоде падает пусть 1,7 В. На ключах (выходы и ключи подтяжки), пусть в сумме еще 0,3 В. Резистор подтяжки в Ардуино номиналом в 20 кОм. Тогда ток в цепи (5-1,7-0,3)/20=0,15 мА На вид для примененных светодиодов максимальный ток 20 мА. Т.е. идет ток примерно в 100 раз меньше максимального. С учетом люкс/амперной характеристики светодиода как раз и получаем слабое, но заметное свечение.