74hc165, вменяемо пашет только единственный на линии, кто сталкивался?
- Войдите на сайт для отправки комментариев
Ситуация. 40 обычных (механических) кнопок, от мышки, подтяжка входа через 10k к плюсу, кнопкой коротится на минус. В общем, если подключить это к цифровым портам ардуины, то работает даже без резистора.
Эксперимент номер раз.
Цепляем единственный регистр на вход, на аппаратный SPI. подключены провода: мисо, тактовый, защёлка. Clock inhibit, он же chip enable, он же slave select (burjui с робокрафта, падла, почему пишешь статьи неочевидным языком с двусмысленностями? мне нехер делать было вывести, теперь на всех платах посажен на минус под микросхемами... но мы отвлеклись) - в общем 15й вывод микры соединён с землёй, тактирование всегда включено.
Короче, всё читается.
Читается хадварным SPI, софтварным с битбангом digitalWrite(), прямым выводом в порт с паузой delayMicroseconds(), с паузой NOPами - короче по всякому, работает. Вход DS (serial in) очевидно на землю.
Ползём дальше. эксперимент 2.
Делаем такой же. Вот прям ваще 1 в 1. клон платы. Скетч такой же, только длина массива другая, ну и т. п. Никаких серьёзных отличий. Бл█дь, не работает! даже более того, на первом регистре могут отлетать некоторые из кнопок. То есть на плате которая заведомо была 100% исправна, начинаются фокусы.
Эксперимент 3 - присоединение каскадом следующих, с надлежащими правками массивов и циклов - симптомы уже печально-предсказуемые, на 2м и следующих замирает всякая движуха, плюс бонусом глюки первого. Глюк одной конкретной кнопки как правило постоянен. Например с 1 жили все, вешаю 2й - падает 4я, 3-4-5 регистров так же 4 следующих мертвы на 1м все кнопки кроме 4й.
Эксперимент 4 - битбанг медленными функциями, штатной функцией shiftIn() либо самопал на основе этой функции, в которую дописаны паузы, длина изменена с 8 до 16, до 40 и т. п. Симптомы те же - картина на следующих неясна, на первом в цепочке могут наблюдаться выверты.
Эксперимент 5 - параллельный опрос. Расцепляю DS у цепи и вешаю на землю, Q7 на несколько цифровых портов, служащих MISO1, MISO2, MISO3 и т. п. Симптомы - либо полная тишина (все нули), либо так же первый чё-то шевелится остальные тухло. SCK и защёлка всех регистров всегда соединены.
Эксперимент 6 (полностью независимое подключение, пять SCK, пять защёлок и пять MISO) не проводился, в силу тотального долбое█изма его сути.
Эксперимент 7 - замена регистра, т. к. они уже снимались и было подозрение на перегрев. Ничего не дало. Или весь затар регистров косячный? Расклад такой, они были куплены вместе с 595, у одного продавана. 595 ST, 165 NXP. Маркировка сделана одинаковым способом (скорее всего окрашено). Ацетоном не смывается. Цвет букв одинаковый. Углублений в месте надписи не видно, то есть это не выжжено лазером и не выфрезеровано. Чё за ахинею я ща пытаюсь сказать? Если детали левые, то и регистры ST - тоже подделка. Но за полтора года проектов с регистрами на вывод (595) не было ни единого глюка.
Пример брался из статьи http://robocraft.ru/blog/arduino/520.html так что скетч там же, приводить его не вижу смысла т. к. он уже столько раз переделывался что мама не горюй.
Эксперимент 8 - менять платы местами. Не повлияло, то есть возможные выверты первого и полная тишина на последующих сохраняются. Что даёт основания предполагать, что проблема всё равно программная, хотя регистры так упорно пытаюстя доказать что косяк именно в них.
Эксперимент 9 - замена ардуины. Не повлияло.
Алгоритм опроса регистров в точности такой как у буржуя, то есть держу 2 массива длиной во всю цепь, сейчас и прошлый, читаю сейчас, хором разницу, если сейчас не равно прошлому то читаю по новой, в цикле ищу в разнице единицу, говорю в сериал. Только регистров не 1 а от 2 до 5.
Делитель выбирался от 4 до 128, плюс даже с паузами в миллисекунды, так что это точно не упирание в частотный потолок.
Длина проводов по плате 30 см плюс монтаж не более 35 см. Монтаж МГТФом. Длина проводов между платами не более 7 см. Керамика 0.1 мкФ стоит не дальше 1.5 см от корпуса регистра. Электролиты по питанию ставились в количестве от 1 до 4 штук в ходе эксперимента 10, сотни-тысячи мкФ. Электролиты на дуине. Питание от USB.
Центральный - atmega8. Если надо 328 то это тупо, IMHO.
Дискасс, all, что ещё Кукла Вуду не учла?
Фотографию монтажа покажите, желательно с пояснениями как земля и питание разведены.
Фотографировать уже нечего, разобрано. Есть это:
Зелёное слева - от Q7 предыдущего, справа - в SER следующего или MISO, teal - SCK, розовый защёлка. Плюс питания подводится от одной из перемычек сверху с другой стороны платы, там он посередине платы и разветвляется к кнопкам вверх/вниз. Минусы с этой стороны платы, полупрозрачная серая линия сверху и снизу, более толстая чем основные дорожки. Чёрным соединяются минусы сверху и снизу, это сделано чтобы не тупило если забыть какую-то перемычку между платами. Тонкие линии от руки - перемычки. С минусом понимаю что петли и всё такое, но блин не на таких частотах же? Народ радиостанции на 27 МГц делал где диапазоны контура тумблерами переключались, и ничего - всё работало. Или прям вот вообще обязательно, одна единственная шина и от неё всё отводится?
Наверняка косяк в коде или же в подключении. Вот такая борода работает стабильно, по крайней мере у меня.
С минусом понимаю что петли и всё такое, но блин не на таких частотах же? Народ радиостанции на 27 МГц делал где диапазоны контура тумблерами переключались, и ничего - всё работало.
Серия 74НС довольно шустрая, короткие помешки, пробегающие по земле, поймает только так. А земля у вас не очень-то хорошая. Попробуйте проводом соединить земляные пины напрямую.
И желательно резисторы добавить 1k последовательно со входами.
Или прям вот вообще обязательно, одна единственная шина и от неё всё отводится?
Наоборот. Если всю плату нельзя залить земляным полигоном, то надо хотя бы землянyю сетку из проводников сделать, которая накроет максимум площади платы. Чем меньше ячейки сетки - тем лучше. Проводники питания тоже считаются земляными, поскольку развязывающие кондеры по ВЧ сшивают их с землей.
triac, полигонов земли я могу сделать в достатке, но у меня несколько иной принцип. Я раскидываю компоненты по местам, потом соединяю с ещё чем понадобится максимально компактно, а потом лишнее место соединяю с землёй. Так что у меня постоянно получается половина платы сплошняком с землёй, а на другой куча всего. Может надо сначала землёй заниматься, а потом уже остальное делать.
Я раскидываю компоненты по местам, потом соединяю с ещё чем понадобится максимально компактно, а потом лишнее место соединяю с землёй. Так что у меня постоянно получается половина платы сплошняком с землёй, а на другой куча всего. Может надо сначала землёй заниматься, а потом уже остальное делать.
Я делаю похожим образом. Однако в начале прокладываю землю по всему периметру платы, переходя с нижнего на верхний слой через каждые 5-10 мм. После того как плата разведена, кладу с двух сторон полигоны земли и позволяю залить все, что зальется. После этого по периметру нижний и верхний земляные полигоны намертво сшиваются переходными отверстиями, они заодно на корню убивают паразитную щелевую антенну, которая иначе могла бы ненароком образоваться.
А потом смотрю, где еще можно прокинуть земляной проводничок и поставить переходное отверстие, чтобы еще прочнее сшить верхний и нижний земляные полигоны, чтобы образовалась сетка с по возможности мелкими ячейками. Если надо, двигаю детали и редактирую разводку, чтобы в конечном счете получить как можно большее покрытие всей платы земляными полигонами, сшитыми во многих точках в середине платы. Получается ненамного хуже сплошного земляного полигона на внутреннем слое 4-слойной платы.
У меня такая же проблема! работает внятно только 1й регистр, и только если написано number_of_shift_chips 1
подключение 4 проводами без 7 ножки 1 регистр работает, каскад ни в какую. в коде менял различные значения здесь: #define NUMBER_OF_SHIFT_CHIPS 4 //количество регистров и здесь:
на землю подтянуты выходы 10к 4 регистра, из 4х работает 1