Pull to refresh

Comments 79

Если вы использовали Li-ion аккумулятор 3,7 В, то зачем повышать напряжение до 5 В?
Рабочая частота ATmega8 не превышала ведь 8 МГц. Только номиналы резисторов при светодиодах нужно уменьшить.
Подозреваю, что ТС просто планировал использовать от какого-то блока питания.
Верно, изначально предполагалось питание и от внешнего блока.
Имхо транзисторы на светодиодах лишние, т.к. атмега имеет достаточный выходной ток на пинах.
Зато, если что, можно их поменять и коммутировать что-то помощнее, какое-ниудь световое табло…
Транзисторы поставил именно для запаса по мощности — была мысль сделать большие и заметные внешние светодиодные блоки для индикации.
Более того, резисторы идущие на базу имеют слишком маленький номинал, в итоге с МК идёт почти такой же ток, как и через светодиод, а общее потребление системы удваивается.
Подтягивающие резисторы тоже лишние, у контроллера свои есть. Светодиоды можно подключать без балластного резистора, при условии питания их импульсным током — об этом прямо заявлено в даташите на странице 51. Импульсное питание светодиодов сбережет энергию.

Для сбережения энергии можно также усыплять контроллер на время ожидания нажатий на кнопки и поставить диоды Шоттки.
Спасибо, про импульсное питания светодиодов подумаю при проектировании следующей, универсальной системы.
Не нашел на 51 странице, что можно не ставить токоограничительные резисторы.
Или вы про это?:
The pin driver is strong enough to drive LED displays directly.

я это понял так: у выхода достаточный ток для питания светодиода
LED дисплей — устройство, работающее в импульсном режиме. Нетрудно расчитать параметры импульсов так, чтобы средний ток через светодиод не превышал его законные 20ma. Светодиод портится от перегрева кристалла, на перегрев влияет только ток (напряжение на переходе — константа), так что если средний ток не превышать, то и перегрева не будет.
Про расчет импульсного режима я понимаю, хотя тут есть свои хитрости например частота импульсов — она должна зависеть от теплоемкости кристалла.
Мне как раз было интересно почитать про это в даташите, вы говорите, что это есть на странице 51. Там есть только о том, что выход может питать LED, что и так очевидно, а про импульсный режим без резистора ничего не вижу.
>LED дисплей — устройство, работающее в импульсном режиме

И вот это не совсем понял, разве LED дисплей — это не просто матрица LED? en.wikipedia.org/wiki/LED_display
Из чего следует, что он в импульсном режиме должен работать?
В руководстве написано, что Атмел понимает под Direct drive и матричным дисплеем. Без импульсного переключения строк и столбцов такой дисплей неинформативен.

Так как светодиодные дисплеи сильно разняться по характеристикам, вряд ли удастся найти аналогичный документ на них.

Тем не менее, идея для расчета параметров дана, параметры работы для светодиода в импульсном режиме надо искать в его даташите.
>В руководстве написано, что Атмел понимает под Direct drive

Да, там написано, что это управление дисплеем без специального промежуточного хардварного драйвера. И?

>Без импульсного переключения строк и столбцов такой дисплей неинформативен.
>Тем не менее, идея для расчета параметров дана

Импульсное переключение, о котором идет речь в этом даташите, нужно чтобы снизить деградацию LCD от электрофореза, из-за постоянного напряжения. К информативности дисплея это никакого отношения не имеет.

И там нет идеи для LED — там ничего нет про управление действующим током путем ШИМ.
А главное ничего нет про отсутствие резистора у светодиода, с чего и возник вопрос.
>параметры работы для светодиода в импульсном режиме надо искать в его даташите

Кстати и в даташитах светодиодов такого не встречал, вольт-амперная характеристика в даташите дается только в узком диапазоне, 5 вольт там и близко нет. Поэтому даже непонятно какой ток будет течь в пике и как это рассчитывать.
Кстати сжечь можно не только светодиод но и вывод у микросхемы, там тоже нужно как-то рассчитать выделенное тепло.
Расставляю точки над Ё — в заблуждение меня ввела схема:
Скрытый текст


Как видите, резисторов нет.
Однако в тексте и про резисторы написано, и фото платы с резисторами приводится: eldigi.ru/articles/termometr_na_attiny2313_ds18b20

Тем не менее, теория для питания светодиодов импульсами имеется www.electrosad.ru/Electronics/SPower.htm

И вопрос о питании светодиодов прямо от выводов AVR периодически всплывает:
electronics.stackexchange.com/questions/1342/is-it-ok-to-attach-an-led-directly-to-a-5v-attiny
www.avrfreaks.net/forum/5v-avr-lower-voltage-leds-without-resistors?page=1

В обсуждениях выделяется три стороны:
-Этого делать нельзя — сгорит и дисплей, и контроллер
-Это делать можно: www.swharden.com/blog/2014-02-27-directly-driving-7-segment-display-with-avr-io-pins/
-Нужны надежные расчеты и эксперименты. Я отнесу себя сюда.

Вот статья с подробностями: tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/
В конце вывод
After all this computing and datasheet staring I think it is safe to let out the current limiting resistor in some cases. You have to take a closer look at specs to get an idea on how it will work out.

После всех этих подсчетов и пристального чтения даташитов, я делаю вывод, что выбрасывание балластного резистора безопасно в некоторых случаях. Вам следует подробно изучить спецификации, чтобы получить представление о том, как это будет работать.
>Вот статья с подробностями: tinkerlog.com/2009/04/05/driving-an-led-with-or-without-a-resistor/

И он там пишет
Most of the times there is no voltage given for IF(peak), so we can not be sure at what voltage we will reach the 160 mA in the example. Looking at the graph, I would assume that you could go up to 3 V, maybe 3.2 V, but I haven’t tested it out.

То есть то же самое, о чем я писал выше — в даташитах не указывается вольт-амперметр характеристика за пределами рабочих значений. Поэтому непонятно как рассчитать ток на 5 вольтах.
Он попробовал на удачу и только на 3 вольтах (и он сам пишет, что при выше 3 вольт он скорее-всего бы превысил ток), у него заработало, — но это не метод для продакшена. Никто не дает гарантии, что вы не превысите макс импульсный ток на другом типе LED или том же типе, но из другой партии. Данных в даташите, чтобы это рассчитать нету, только на удачу.
А нет атм 5 вольт на счетодиодах, выходной тарнзистор драйвера порта контроллера не является идеальным, и он начинает играть роль этого резистора. И чем меньше напряжение питания тем выше номинал.
Из даташита при токе 20ма будет напряжение 4.2В, при более высоком токе график не нарисован.
Я предлагаю сменить вектор поиска с «выбросим долой резистор» на «сделаем такой драйвер для светодиода от пина контроллера, чтобы не обогревать атмосферу».
Можно посчитать сколько там реально тепла выделяется.
Пусть будет красный светодиод, 2.4В падение напряжения при 20мА.
Пусть у микроконтроллера питание 5В. При токе 20мА напряжение на ноге будет 4.1В.
Итого у нас на резисторе падает 1.7В при токе 20мА. Это всего 34 милливатта мощности. Я думаю этим можно пренебречь. Кроны из статьи хватит на неделю, чтобы непрерывно греть этот резистор.

Кстати, если питать от 3 вольт, то резистор можно не ставить — на ноге будет всего 1,5 вольта при 20мА, это больше падения напряжения на светодиоде.
опечатка: это больше меньше падения напряжения на светодиоде
>И вопрос о питании светодиодов прямо от выводов AVR периодически всплывает:

По первой ссылке спрашивают «почему у меня сгорел микроконтроллер?» :)

>Это делать можно: www.swharden.com/blog/2014-02-27-directly-driving-7-segment-display-with-avr-io-pins/

А если точнее, то там пишут, что так делать нельзя и что если бы он делал для продакшена, то он бы так тоже делать не стал:
I don’t use current limiting resistors. I’m not making a consumer product. It works fine, especially multiplexed. Yeah I could use transistors and CLRs to drive the segments to have them bright and within current specifications, but I’m not building an airplane or designing a pacemaker, I’m making a test device at minimum cost!


Понятно, что в теории через ШИМ можно управлять действующим значением тока.
Но на практике даже у однотипных светодиодов есть разброс падения напряжения, которое еще зависит и от температуры воздуха.
Поэтому если импульсно питать, то параметры ШИМ надо будет подбирать под конкретный экземпляр светодиода, в чем нет практического смысла. Если стоит задача снизить потребление, то надо использовать 3,3 V схему, там выделяемая мощность на резисторе будет минимальной. Ну или добавлять отдельный драйвер для LED.
Резисторами становятся в таких случаях транзисторы выходного драйвера контроллера, у них имеется какое-то сопротивление которое не даёт бесконтрольно расти току.
Но блин, какие при этом на шине возникают импульсные токи! Помехи в эфир, помехи самим себе же…
Но этого сопротивления не хватит, чтобы при постоянном токе не сжечь светодиод и выходной транзистор. ШИМ все равно нужен, но тут проблема в его расчете, так как режим не стандартный и данных в даташите не достаточно для полного расчета.
Про помехи согласен, будет ад, в общем такой подход в проектировании не верный, надо драйвер ставить или резистор.
Будем очень рады также ссылкам на такие корпуса…
А вообще неплохие кнопки KD-2 без фиксации — очень четкий клик…
Корпуса, которые я использовал для системы: BOX-FB04 и BOX-KA15. На тот момент они стоили 50.91 грн и 14.29 грн соответственно. Их можно найти и в других магазинах. Например, BOX-FB04 на мастерките
это же кастомизированный аналог корпуса интернета

image
В целом, очень приятно видеть такую самоделку — на самостоятельно изготовленных платах, с самостоятельно разведенной схемой. Гораздо целостнее выглядит по сравнению с ардуиной и бредбордом в обувной коробке.

Для работы над схемой и разводкой очень рекомендую интегрированный пакет, например KiCad.
Спасибо за рекомендацию, обязательно попробую этот пакет.
Начинающим электронщикам стоит выносить свои первые схемы устройств на любой радиотехнический форум, там сразу покажут ошибки и избыточность. А потом — готовое и отлаженное устройство можно и сюда ))
У нас в клубе (Рига) есть две системы от Друзя, стоят что-то порядка 150 евро.

Из плюсов:
— отдельный большой выносной индикатор ответа игрока (для каждой кнопки), очень зрелищно на соревнованиях
— световой индикатор обратного отсчета, переключения режимов, тонкая настройка (от режима игры до громкости писка) и т.п.
две нефикирующиеся кнопки на пульте управления (старт и сброс), что дает больше контроля за игрой ведущему. Например, в вашей схеме нет ключевого для Брейна и СИ понятия «фальстарт», если я правильно понял. Имхо, это единственная серьезная проблема вашей схемы.
— очень, очень приятные металлические кнопки-концевики

В вашей системе понравилось:
— аккумулятор (это даже не «понравилось», а просто великолепно)
— разъемы
— большие диоды на коробке
— аккумулятор (нет, это гениально)
— марш
— возможность перепрошивки

Еще у нас в клубе есть «самопальная» система, завязанная на компьютер. Плюс использования ноутбука (сегодня он есть у каждого) — бесконечно гибкая настройка игроков и режимов. Система сделана на сетевом хабе, все включается через RJ45, поддерживается 8 (а теоретически — куда больше) кнопок. Но мне лично (я регулярно веду СИ) на ноуте неудобно. Две физические кнопки на блоке питания куда удобнее жать вслепую, да и мороки с сетапом поменьше, да и ноутбук, хоть и есть у каждого, не каждый хочет таскать.

Еще вот для интереса прочих читающих, «полупромышленная» система за 23000 рублей (или 31000, если на 8 кнопок). Фактически, улучшенный клон системы Друзя, а цена — просто шок.

Вообще, я давно хотел написать мобильный софт, чтобы использовать смартфоны как для ведущего, так и для игроков вместо кнопок. Если соединить все в ad hoc wi fi или по bluetooth, лагать не должно.

Игрокам стоит дать «конкретные» большие и тактильно отзывчивые кнопки, по которым не страшно лупить.
Смартфон такому ТЗ увы не отвечает.
Большой вопрос по времени отклика и синхронизации. Нужно < 10ms, иначе для игры они не подойдут.
Я протестировал связку Arduino + NRF24L01+, лаг не более 3мс.
Я не говорил, что это блютуз-устройство, разумеется :) Но и не совсем обыкновенная. Обыкновенная — это типа 433МГц, гараж открывать. А тут умная и надежная штука, многие хвалят. Вот доедет до меня мешок этих модулей, буду тестировать на конфликты при одновременной передаче данных, расскажу.

Блютуз я тоже протестирую, кстати, спасибо за напоминание. Осложняет только мое неумение писать программы под телефон, а двух bt-модулей для Ардуино у меня нет. Впрочем, если с Андроида можно через терминал что-то послать… В общем, поглядим.
Не пугай людей. В самопальной системе только корпус от сетевого хаба, в внутре у него ардуина (и неонка).

А в целом это классическая дилемма Универсальной Громоздкой Системы против Штуки, Которая Делает Только Одно, Зато Хорошо (Unix-way).

П.С. Зато на самопальной был забавный мод для развлекательной чгк-афтер-парти- нажатие на кнопку засчитывается только тогда, когда участник орет ответ достаточно громко. Do not try this at home.
Я был уверен, что ты придешь и все разъяснишь. Про Ардуину не знал, думал, правда, все сетевое :)
Да, система Друзя — хорошая вещь. Но они, как Вы и сказали, стоят порядка 150 евро. Полная стоимость моей системы (без учета работы, конечно), на тот момент обошлась мне в 300-400 грн (около 30-40 евро на тот момент). Плюс, конечно, удовольствие от того, что это сделано собственными силами.

Про режимы — эта система позиционировалась как система исключительно для «Своей игры» и «Эрудит-квартета», потому никаких других режимов у нее нет. У нас (Украина) «Своя игра» в 99% случаев играется без фальстартов, чемпионаты всех уровней (заканчивая чемпионатом Украины) играются по таким правилам.

Но у меня давно уже зреет в голове план сделать универсальную систему. Чтобы в ней уже был и режим «Что? Где? Когда?» (у нас в городе ведущий до сих пор держит на столе позаимствованные у кого-нибудь из присутствующих наручные часы с секундной стрелкой), и режим «Брейн-ринга» (с фальстартами, случайной задержкой перед стартовым сигналов, подсчетом очков, etc.). Но также хочется, чтобы такая система по прежнему оставалась компактной (многие элементы, обеспечивающие дополнительную зрелищность, должны быть подключающимися внешне, но и без них система не должна терять функционал — для тех же игр на природе или в автобусе).

Еще вот для интереса прочих читающих, «полупромышленная» система за 23000 рублей (или 31000, если на 8 кнопок).

Действительно, шокирующая стоимость. Во многом из-за таких цен самоделки будут лидировать по количеству.
Лагать, к сожалению, будет. Средние кнопочники без труда выжимают 10мс, а то и меньше. Как вариант я думал использовать что-то вроде Precision Time Protocol для синхронизации отсчета, а потом сравнивать время, но готовой реализации под Android не было.
Согласен, даже есть устоявшаяся фраза — «выйти из десятки». Человеку, который не выходит из десятки, делать на кнопке, по-моему, нечего.
Я вот попробовал понажимать кнопку с помощью веб-теста:
www.humanbenchmark.com/tests/reactiontime
или вот faculty.washington.edu/chudler/java/redgreen.html

Попробуйте сами, поделитесь результатом.

Я как-то даже не представляю, как можно выжать 10мс. У меня получается около 240мс, я попросил еще нескольких игроков попробовать — у них порядка 180мс. Расскажите (это и к Serezha_zp просьба) подробнее, как именно можно «выжать 10мс» среднему (или даже хорошему) кнопочнику? Варианты «следите за лицом/пальцем ведущего» не предлагать.
Задумался над этим вопросом. Появилось предположение, что это «выйти из десятки» на самом деле является искаженным «выйти из десятых». Т.е. значения, меньшие 0.1 с (100 мс) — мне это кажется более правдоподобным. Сам я в кнопочники определенно не гожусь, по этим тестам у меня в среднем 200-220 мс :) В нашем городском клубе интеллектуальных игр есть люди с отличной реакцией (в частности, победитель прошлогодней «Суперкнопки» на МолЧУБР). Так вот у него средний результат действительно на порядок (двоичный) лучше, чем у среднестатистического человека. По крайней мере, «обжать» его получается только случайно, когда жмешь наугад на грани фальстарта.
В «меньше 100мс» я еще готов поверить (но хотел бы увидеть своими глазами). В общем, я тут потестировал радиоверсию своячной кнопки. По документам время передачи и подтверждения приема меньше 500 микросекунд, на практике в зашумленной десятком вайфаев квартире через толстую стенку получается 1-3мс задержка, т.к. требуется 4-5 «выстрелов», чтобы надежно пробиться до приемника. Это, впрочем, на случайном канале — менее или более шумный я не искал.

На фоне реакции в 100-250мс задержка в 1-3мс (она еще и с большой вероятностью консистентна для всех кнопок) не представляет угрозы справедливой игре.

Вот видео, если интересно

Вообще, я давно хотел написать мобильный софт, чтобы использовать смартфоны как для ведущего, так и для игроков вместо кнопок. Если соединить все в ad hoc wi fi или по bluetooth, лагать не должно.

SIGram поищите в Google play
Где-то классе в 6-7 делал нечто подобное. Транзисторы видел только в журнале «В помощь радиолюбителю» (в мечтах собрать настоящую рацию), микроконтроллеров тогда ещё в помине не было, компьютеры типа «Агат» или «Электроника 60» стоили как автомобиль.
Зато у меня был конструктор «Электротехника в 200 опытах»
В общем, система была следующая: две катушки друг напротив друга, между ними свободно болтающийся якорь на ламельке, который коммутировал напряжение либо на одну лампочку, либо на другую. Катушки были подключены к обычным бытовым выключателям, разнесенным на противоположные столы, обычным сетевым проводом (продавщица в магазине очень удивилась, когда пацан 12 лет деловито выбирал провода и выключатели). Вот так организовал в классе «брейн ринг». Было ещё «поле чудес» с барабаном (картонным диском), который вращался от моторчика со скоростью вентилятора :)
UFO just landed and posted this here
Вообще-то контроллер нормально может работать от 2.7В(на 1Мгц, что установлено по умолчанию на новом контроллере) так что повышать напряжение вобщем-то и не надо можно запитать напрямую от аккумулятора или через стабилизатор на 3.3В от 6В блока питания или 5-вольтовой телефонной зарядки(mini-USB). На вход внешнего питания подключить еще контроллер заряда литиевой батареи, тогда разбирать ничего не надо чтобы заряжать аккумулятор.
Кстати, можно было использовать не 18650 а какой-нибудь телефонный — они плоские и удобны для помещения в такие корпуса.
Светодиоды, правда, некоторые не смогут работать в полную яркость на посаженном аккумуляторе.

Емкость для кроны в 600ма*ч — это только дорогущая энержайзер и т.п. а типичная емкость у кроны — 100ма*ч и 250ма*ч у более дорогих щелочных.
Спасибо, идея с зарядкой устройства без разборки мне нравится — внесу как обязательный пункт в ТЗ следующей системы

Кстати, можно было использовать не 18650 а какой-нибудь телефонный
Пока что места внутри с головой хватает и для 18650, да и соотношение емкость/цена на данный момент радует. Если встанет вопрос об еще большей миниатюризации — тогда буду думать в сторону телефонных аккумуляторов.

типичная емкость у кроны — 100ма*ч и 250ма*ч у более дорогих щелочных
Благодарю за пояснение. Действительно, не может у системы быть насколько больше потребление, чтобы 600 мА*ч хватило всего на один час.
Диод D1 не пускает ток от батарейки к внешнему блоку питания.
Это уже делает диодный мост. D1 лишний.
Согласен, его можно было безболезненно исключить из схемы.
UFO just landed and posted this here
Про фальстарты писал выше. Повторюсь:
Про режимы — эта система позиционировалась как система исключительно для «Своей игры» и «Эрудит-квартета», потому никаких других режимов у нее нет. У нас (Украина) «Своя игра» в 99% случаев играется без фальстартов, чемпионаты всех уровней (заканчивая чемпионатом Украины) играются по таким правилам.

По поводу окончательного варианта схемы — согласен. Все модификации, сделанные после первого варианта (который и изображен на принципиальной схеме), не документировались, так как по сути являлись довольно простыми, не вносившими принципиальных изменений в схемотехнику. Так получилось, что на этом варианте системы я получил какой-то опыт, в некоторых местах «набил шишки». Надеюсь, это поможет избежать их в следующих проектах.
UFO just landed and posted this here
UFO just landed and posted this here
Как программисту мне эта идея пришла сразу, но требования к задержке очень высокие (как уже писал выше — она просто обязана быть меньше 10мс, а лучше около 1мс.). Такой точности, в принципе, можно достичь, но проблема в том что она непредсказуема (нельзя угадать какой был лаг на момент нажатия). Как вариант — можно было бы синхронизировать часы по GPS, но GPS есть далеко не во всех телефонах (в среде гиков их, конечно, большинство, но в нашем клубе их не так уж много). Плюс тактильные ощущения от кнопки тоже важны. В общем, идея не лишена смысла, но ИМХО, физические кнопки на данный момент выходят практичнее :)
UFO just landed and posted this here
Лобовые решения отпадают, да… проблему точной синхронизации времени у клиентов человечество вообще-то решило(нет, не GPS а технология проще и вообще до GPS-ной эры) и даже не нужно изобретать. Есть такая штука как NTP. необходимости в точном времени нет, поэтому можно реализовать протокол для закрытых внутресетевых часов, и если сама сеть позволяет(нет огромных потерь пакетов и стабильная задержка) то синхронизировать время на клиентах относительно опорного можно с точностью до 1мс.
Я думаю, GPS не нужен, достаточно локального NTP-подобного сервера точного времени, там алгоритмы синхронизации отработаны с учетом задержки сигнала до сервера и обратно. Но вот… клиент тогда должен быть черным ящиком и защищен от подмены сигналов игроком. А что если у игрока будет патченый клиент который выдаёт время нажатия на +100мс раньше?
Тут еще вопрос с точностью часов на клиенте, выставить-то выставим, а куда они потом убегут — не ясно.
Остается только регулярно слать udp пакеты с серийным номером и состоянием кнопки, а на сервере уже время считать, с шагом 10ms.
Хотя это все автоматически начинает зависеть от чистоты эфира — много работающих устройств (а их будет много, на таком-то сборище) и плакали идеальные 1.5ms вайфаевского пинга.
за одну секунду они не успеют убежать. Да и сколько там, даже за минуту отклонение будет небольшое — типичная точность бытовых часов — 30 секунд в месяц, это даёт точность хода 1 секунды в сутки или 0.1мс ухода за одну секунду.
тем более что скорость ухода можно зафиксировать программно и компенсировать его если недостаточно будет принудительной ежесекундной синхронизации(на самом деле даже интервала в 10 сек хватит).
Но… даже и этих извращений не нужно — пусть клиенты постоянно передают на сервер текущее время по команде с сервера(это даст общую точку отсчета), дополнительно к этому времени сервер будет знать величину задержки с каждого клиента, которую может сам же и компенсировать.
Отличная работа. Очень нравится Ваш подход как к разработке так и к наполнению статьи. Так держать, товарищ! =)
Спасибо, приятно, что оценили.
UFO just landed and posted this here
Начал проектировать свой велосипед свою систему, зашел посмотреть на код. Насколько я вижу, все нажатия, произошедшие с разницей менее 5 мсек, считаются «одновременными», т.е. подают сигнал. А дальше приоритет у той кнопки, условие которой проверяется первым. Т.е. теоретически игрок, сидящий на кнопке с меньшим номером, имеет фору в пять миллисекунд. Обогнал его на 6 мс? Ок. Обогнал только на 4? Сработает все равно его кнопка.

Это кажется несправедливым, хоть и маловероятным.
Это банальная защита от дребезга контактов. Исходный код открыт, в своем устройстве можете можете убрать это, но я бы не рекомендовал :)
Внезапно увидел статью перенесенной на Geektimes O_o. Но ведь программирование микроконтроллеров, код на C и прочее… Странное решение, в общем.
Потому что конкретная конструкция воплощенная в железе. Малейший признак DIY — место теперь на гиктаймсе…
Sign up to leave a comment.

Articles