Как вы относитесь к легализации курения мануалов? |
Вопрос на собеседовании. |
Господа и дамы, френды и френдессы, я знаю, среди вас достаточно много умных людей, которые понимают в электронике, электротехнике, схемотехнике и программировании микроконтроллеров с помощью Visual FoxPro! Не дайте пропасть начинающему погромисту, объясните, почему нижеприведённая схема не будет работать?

Это всё ещё для моего проекта по индикации всего-всего. По сравнению с предыдущим разом схема переработана и дополнена.
Пояснения в двух словах, с начала к концу:
- Демультиплексор (в верхнем левом углу) получает на вход три бита, после чего подаёт 5 вольт на одну из своих ножек вывода. При некотором удачном стечении обстоятельств, номер этой ножки будет соответствовать числу, полученному на вход в бинарном виде: при 100 включится четвёртая ножка, при 010 — вторая, и так далее. На остальных ножках при этом остаётся ноль. Всего ножек восемь.
- К каждому выводу демультиплексора через килоомный резистор подключена база NPN-транзистора. (На схеме показан только один транзистор, потому что схема подключения остальных абсолютно такая же). NPN-транзистор позволит течь через себя току, если на его базу подано напряжение. Таким образом, в каждый момент времени только один транзистор будет открыт, остальные семь будут закрыты.
- На коллектор каждого из этих восьми транзисторов постоянно подаётся 5 вольт.
- Эмиттер каждого из этих восьми транзисторов подключён к 13-му пину одного из восьми коннекторов (на схеме, по тем же причинам, показан только один коннектор). Таким образом, когда транзистор открыт, пять вольт напряжения проходят к 13-му пину соответствующего коннектора.
- Каждый такой коннектор 14-жильным проводом подключается к модулю LED`ов, выполненному в формате выносной линейки из 12 LED`ов. Аноды каждого LED`а подключены к этому тринадцатому пину (там ещё 220-омные резисторы воткнуты, чтобы LED`ы не сдохли раньше срока).
- Катод каждого из этих LED`ов подключён к своему собственному пину коннектора.
- Каждый из 12-ти пинов, подключённых к катодам LED`ов, подключён к коллектору своего собственного транзистора, база которого подключена (посредством ещё одного килоомного резистора) к ножке микроконтроллера.
- Эмиттеры всех этих 12 транзисторов соединены и связаны с землёй.
- 12 из 13 используемых пинов всех 8 коннекторов подключены параллельно. Ток подаётся по 13-му, который через транзистор контролируется демультиплексором.
- Катоды всех LED`ов с номером N во всех восьми линейках подключены к одному и тому же транзистору. Но ток будет в каждый момент времени течь только через один из этих LED`ов, согласно тому, на какой коннектор был подан ток демультиплексором.
- В качестве средства ввода у меня предусмотрены три кнопки, на которые я повешу прерывания. И будет ещё термометр.
Как максимум, в каждый момент времени будут гореть 12 LED`ов. Потребляемый каждым LED`ом ток — 20 миллиампер; значит, вся линейка LED`ов будет потреблять как максимум 240 миллиампер. Микроконтроллер Atmel AT90USB162 потребляет 12 миллиампер. Демультиплексор 74HC238 потребляет 50 миллиампер. При том, что я могу брать из порта USB до 500 миллиампер, — мне кажется, запас ещё есть. Правда, в будущем я планирую подключить ещё два символьных экрана (16 символов × 2 строки), которые должны будут работать постоянно, но каждый из них потребляет всего 4 миллиампера, так что это не страшно.
Жду реакций, рекомендаций и рацпредложений.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Например, я не знаю, надо ли вешать сопротивления на кнопки и на провода, идущие от микроконтроллера к демультиплексору. То есть на ножки — здравый смысл подсказывает, что да, надо. Но вот с демультиплексором я просто не знаю.
И, кажется, никто не спешит с ответами... :(
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Ну бывают схемы на 80-100 страниц - это уже на целый день.
Эту схему собирают, и через пару недель приходит продукт. Разумеется много чего не работает. Эту же группу собирают в этой же комнате. И моментально в схеме все видят массу проблем, но после того как им сказали что конкретно не работает. Причем примерно такой сценарий я наблюдал не один раз и не в одной компании.
no subject
no subject
no subject
Основной вопрос в необходимости килоомных резисторов между ножками микроконтроллера и входами демультиплексора.
no subject
И пару вопросов по уровню владения цифровой схемотехникой. Знаете ли, что такое динамическая индикация? И что такое триггеры/регистры?
no subject
Задача-миди: до 6 линеек по 12 светодиодов + 2 символьных экрана 16×2 + термометр. Светодиоды отображают что-то своё, экраны отображают что-то своё: текущую температуру с термометра, курс акций, время, расписание встреч, количество новых писем, обновления Твиттера или ЖЖ.
Задача-максимум: до 6 линеек по 12 светодиодов + 2 экрана + термометр + 3 кнопки. Всё предыдущее, только кнопки умеют менять громкость на компе и отключать звук совсем, а также включать его из состояния "Выкл" (контроллер будет подключён с отдельным питанием, через powered USB hub). Экраны должны отображать какую-то значимую информацию (время, температура) и пока комп выключен.
Требование: используется микроконтроллер AT90USB162, пустой или в рамках платы для разработки. У него всего 22 ноги для ввода-вывода, отсюда нужда в демультиплексоре.
Требование: линейки светодиодов не закреплены жёстко и могут быть разнесены довольно далеко друг от друга (и от микроконтроллера). Значит, где-то рядом с микроконтроллером будут 6 или 8 14-пиновых гнёзд, промаркированных от 0 до 7, а линейки светодиодов будут подключаться к гнёздам 14-жильными кабелями произвольной длины. (У меня сейчас 5 метров этого кабеля). Какая информация будет выдаваться на какое гнездо — настраивается в драйвере на компе.
Раньше я хотел подключать символьные экраны к любому из этих гнёзд, но, вижу, это будет ошибкой: их надо питать всё время. Поэтому, скорее всего, для экранов будет два отдельных гнезда. Но, поскольку выводов на микроконтроллере у меня не так много, мне придётся делить командные жилы для управления экранами с выводами, зажигающими светодиоды на других линейках.
Уровень владения цифровой схемотехникой — начальный. Что такое регистры, знаю, — благо, я системщик, и основная моя работа заключается в управлении непосредственно процессором. Триггеры — лично знаком только с флип-флопами. Динамическая индикация — судя по всему, это именно то, что мне нужно знать, но я не.
no subject
В динамической индикации ничего сложного нет, в этой статье есть анимация, которая все обьясняет: http://radiokot.ru/start/mcu_fpga/avr/15/ Небольшая проблема в том, что для классической реализации динамической индикации в нашем случае надо будет 8+12 ног, что уже впритык. Потому слегка извернемся с регистрами.
Уверен, что ты в курсе, что такое последовательный и параллельный код, а также сдвиговый регистр. Есть замечательная микросхема 74HC595, которая предназначена именно для задачи, которую тебе нужно реализовать. Микросхема представляет собой преобразователь последовательного кода в параллельный (тот самый сдвиговый регистр) с функцией "защелки". Как это работает - описано в даташите https://www.sparkfun.com/datasheets/IC/SN74HC595.pdf. В двух словах - используются всего два провода, "сигнальный" + "строб". На сигнальном проводе выставляется нужное значение, по импульсу на входе "строб" оно попадает в младший значащий бит регистра, значения всех остальных бит сдвигаются вправо. После передачи всех восьми бит подается импульс на третий вход (RCLK) и значение из регистра сдвига "защелкивается" на выходе. Значение будет удерживаться до нового импульса на RCLK, вне зависимости от того, что загружается в регистр сдвига.
Как это практически использовать в твоем случае. Сигналы "строб" и "защелка" будут одинаковые для всех регистров - их можно просто запараллелить. Три регистра дадут нам возможность использовать матрицу в (8+8)х8 светодиодов, задействовав всего 5 ног (общий "строб", общая "защелка" и по одной ноге последовательных данных на каждый регистр). Ну ладно, 6 - у регистров еще reset имеется. А ведь регистры можно тоже каскадировать... В результате можно максимум по четырем ногам управлять каким угодно количеством светодиодов.
В плане конкретных сопротивлений в цепях транзисторов - см. например схему http://randomstar.org/uploads/posts/2011-02/1297619266_13-19-47.gif
Что есть ШИМ (широтно-импульсная модуляция) - в курсе? Если нет, почитай - с ее помощью можно будет управлять и яркостью светодиодов.
no subject
Я всё-таки больше склоняюсь к демультиплексору. Это будет 74HC238 (линк на датаshit), потому что у него на выбранной ноге будет 5 вольт, а на остальных нули, что позволит легко и просто управлять имеющимися NPN-транзисторами, на роль которых я выбрал BС937 или BC338. Они легко пропустят ток в 240 миллиампер, который будет идти в случае включения всех 12 LED`ов одновременно. Таким образом, я воспользуюсь 12 ногами для LED`ов + 3 ногами для выбора канала с помощью демультиплексора.
Преимущество демультиплексора в том, что я могу выбирать запитанную линейку со светодиодами одной командой, вне зависимости от того, какая линейка была выбрана до этого. Кроме того, демультиплексор у меня уже есть :)
Что такое ШИМ, я знаю, но, боюсь, игрища с таймерами сильно утяжелят код и заберут ценные ресурсы. Таймеров у меня всего два, один из них будет использован для обработки нажатий кнопок. В нынешней тестовой версии устройства только библиотека Display (для экрана) и OneWire (для термометра) используют 91% всего места для кода в микроконтроллере, а мне туда ещё парсер USB-данных запихивать. Понятно, что я потом повыкидываю из этих библиотек всё ненужное, но всё-таки... Скажем так, ШИМ — это полезно, но на данном этапе не необходимо.
no subject
no subject
no subject
no subject
Я сейчас думаю о питании. При использовании TLC5940NT все леды подключены к питанию всегда, а, исходя из условий, они все могут зажечься одновременно. Но одна линейка с 12 LED`ами жрёт до 240 миллиампер. 6 линеек будут жрать полтора ампера. Тут уже придётся либо с внешним питанием корячиться, причём с блоком питания типа Apple`овского, чтобы выдавал два ампера с пятью вольтами, либо изобретать какой-нибудь внешний распределитель питания, как я поначалу с демультиплексором хотел поступить.
no subject
no subject
Может, даже получится настроить питание LED`ов отдельным транзистором, чтобы уж точно подавать питание на LED`ы только тогда, когда подано напряжение на драйвер. Но это должен быть очень крутой транзистор, чтобы 2.4 ампера через себя пропускать. Или, может, реле взять?..
no subject
no subject
no subject
Из преимуществ реле - очень низкое сопротивление во включенном состоянии и абсолютная гальваническая развязка.
no subject
no subject
no subject
no subject
Рекомендую поставить 74HC595 на каждой линейке и подводить к ней всего 6 хвостов: "данные", "строб", "сброс", "защелка", землю и питание. Заодно и длину линейки можно будет увеличить до 16 светодиодов (4х4).
no subject
Полез читать про схемы с 74HC595.