I2C расширитель портов PCF8574

PCF8574 на макетной платеРасширители портов на сдвиговых регистрах — решение известное, простое в понимании и использовании, дешевое и многократно описанное (например вот, вот и вот).

Но есть у него и определенные недостатки.

Во-первых, как и все SPI-устройства, сдвиговый регистр требует для себя отдельной линии «chip select» (CS), и это при том, что шина как таковая и так занимает три свободных порта ввода/вывода (MOSI, MISO, SCK).

Во-вторых, сдвиговый регистр может увеличивать либо входы, либо выходы, но не то и другое стразу. А если нужны и входы, и выходы — то нужно ставить два регистра и выделять два пина CS. Обидно.

Ну и в-третьих, при разработке тянуть четыре дорожки через всю плату несколько достает. И их еще и перекручивать всегда приходится каким-нибудь странным образом.

А тут мне на глаза попался расширитель портов PCF8574 (даташит TI, даташит NXP) на базе шины I2C.

Для работы этого расширителя требуются всего два пина (причем вне зависимости от количества устройств на шине!). Устройство, с которым осуществляется обмен данными, цивилизованно определяется адресом, а не прижатием к нулю физической линии. Порты могут работать как порты ввода, так и порты вывода (правда весьма своеобразно, о чем ниже).

Ну и стоимость одной микросхемки при покупке десяти штук на ebay составляет порядка 15-ти рублей, что сопоставимо со стоимостью сдвигового регистра SN74HC595D в «Чип и Дип»-е (17 руб).

Адрес устройства формируется из неизменного для всех чипов префикса и 3-битной переменной части, которую можно задать подтягивая три специально выделенные ноги микросхемы (A0, A1, A2) к земле («0» в соответствующей позиции адреса) или к питанию («1»).
Подтягивать адресные ноги и к земле, и к питанию можно без какого бы то ни было дополнительного обвеса.

Что забавно, существует две модификации этой микросхемы — собственно PCF8574 и PCF8574A, которые отличаются друг от друга только значением адресного префикса.
У PCF8574 он равен 0100, а у PCF8574A — 0111. Сделано это для того, чтобы к одной шине можно было подключить до 16-ти расширителей с разными адресами — максимум 8 штук PCF8574 и 8 штук PCF8574A.
Так как у каждой такой микросхемы по 8 портов, получаем аж 128 портов ввода-вывода.

В даташитах несколько невнятно описано использование младшего бита адреса (бита R/W). Возможно, для человека работающего с I2C постоянно это является очевидным моментом, но начинающего может сильно сбить с толку.

Дело в том, что по страндарту I2C адреса у устройств не 8-ми, а 7-ми битные. То есть всего на шине I2C может быть до 127 устройств.
Младший же бит адреса используется для указания направления передачи данных. «0» в этом бите соответствует передачи данных в устройство («записи»), «1» — чтению.
Так вот если организовывать обмен по I2C не шине не самому, а использовать какую-нибудь библиотеку, то все эти особенности протокола библиотека уже учитывает и про значение последнего бита адреса можно не думать. Библиотека сама выставит его правильно, в зависимости от того, какую функцию — чтения или записи в шину — вы вызвали.
Таким образом, адрес PCF8574 для библиотеки и при чтении, и при записи будет один и тот же — 0100<A2><A1><A0> (где <A1>, <A2> и <A3> — настраевыемые биты адреса, выставленные путем подтяжки адресных ног).

Вот соответствующая картинка из даташита NXP, только там еще и опечатка в скобке, показывающей адрес для PCF8574A — в адрес включен R/W бит и адрес получился 8-ми битным, чего быть вообще не может.

Адресация PCF8574 и PCF8574A

Теперь о грустном.
Порты у PCF8574 назваются «квази-двунаправленными» (Quasi-bidirectional I/Os). И это «квази» — оно неспроста.
Смотрим на схему порта:

Порт ввода/вывода

Фактически, при операции записи одного байта в PCF8574 происходит выставление подтяжек портов ввода/вывода исходя из значения соответствующего порту бита данных.
Причем, если в бит установлен в ноль, происходит «честная» подтяжка порта к земле (2).
А вот если бит установлен в единицу, порт будет подтянут к питанию — но как! — с ограничением тока в жалкие 100 uA (1)! То есть логический уровень есть, но светодиод с такой подтяжкой не зажжешь.

Еще на схеме порта виден транзистор (3), который как раз может подтянуть порт к питанию напрямую. Но увы, он включается только на короткое время, чтобы обеспечить быстрое переключение порта в логическую единицу. И управлять поведением этого транзистора мы не можем.

Чтение из PCF8574 — операция более простая для понимания. Какие уровни установлены на портах с учетом текущей подтяжки и того, что подключено к портам извне — то и будет отправлено микроконтроллеру.

Не то, чтобы такое построение порта сильно ограничивало возможности, но оказаться неприятным сюрпризом оно вполне может.
Так, светодиоды к PCF8574 надо подключать так, чтобы к порту подключался катод (минус) светодиода. Светодиод, подключенный анодом (плюсом) убогая подтяжка порта просто не потянет.

Вот, для примера я подключил два светодиода к соседним портам PCF8574. Левый подключен к порту катодом, правый — анодом.



Разница, что называется, видна невооруженным глазом.

Определенные ухищрения придется предпринимать и при подключении семисегментных индикаторов. Индикаторы с общим катодом лучше вообще не использовать (у него 8 анодов — и чего с ними делать?), а вот с общим анодом можно и прикрутить. Катоды сегментов можно напрямую подключить к PCF8574, а аноды знаков запитать, скажем, через полевые транзисторы P-типа, затворы которых будут управляться 100 uA подтяжкой PCF8574.
Использование каких-нибудь транзисторов на питании общих анодов вполне оправдано, так как с каждого из них кормятся восемь сегментов.

Очевидно, что для управления 2х и более значным семисегментным индикатором понадобится не менее двух PCF8574 — одна для 8ми катодов сегментов, а вторая — для управления транзисторами питания знаков.

Особенности подтяжки надо учитывать и при работе портов на ввод.

Смотрите, если мы подключаем к порту PCF8574 тактовую кнопку, которая при нажатии подсоединяет этот порт к земле, то все будет работать — операцией записи в PCF8574 мы заранее подтянем этот порт к питанию и, как только кнопка будет нажата и порт окажется соединен с землей, слабую подтяжку сорвет и при очередном опросе в бите, соответствующем порту кнопки мы увидим «0» вместо «1».

А что будет, если кнопка при нажатии будет соединять порт с питанием? А ничего хорошего.
Если подтянуть порт к питанию — его состояние не будет меняться при нажатии кнопки.
А если подтянуть его к земле, то при нажатии кнопки питание через кнопку и порт окажется напрямую подключенным к земле. Будет короткое замыкание.
Кстати, даташит в явном виде требует перед использованием порта в качестве порта ввода предварительно записать в него единицу. Вот именно поэтому.

Ну и чтобы не забыть, из вкусностей PCF8574 поддерживает генерацию сигнала прерывания, прижимая к земле ногу INT при изменении уровня на одном из портов. INT возвращается к высокому уровню при следующей же операции чтения из PCF8574.
Использование этой возможности занимает дополнительный порт микроконтроллера, но иногда она просто бесценна — например, если контроллер нужно будить по нажатию кнопки.

Вот простенькая макетная платка, с которой я и экспериментировал (кликабельно, по клику — архив с платой в формате SprintLayout).
С платой я слегка накосячил — сделал подтяжку кнопок к питанию. Ага, а как вы думаете, почему я теперь такой умный… По счастью, я сразу сделал все «рюшечки» вроде светодиодов и кнопок отключаемыми при помощи джамперов, чтобы можно было использовать макетку для каких-нибудь более сложных проектов «в чистом виде», и поэтому кнопки оказалось возможно подтянуть к земле проводком, надетым на пин джампера.
Кстати, резистор подтяжки для кнопок тоже не нужен, т.к. подтяжка к питанию реализована внутри PCF8574, а если случайно записать нолик в ногу, которая соединена с кнопкой, то получится подключение земли к земле, то есть тоже ничего страшного.
(В том файле, который в архиве — два варианта платы, с ошибкой и с исправленной подтяжкой кнопок).

Макетная плата для PCF8574

А вот то, ради чего это все затевалось — подключение ЖКИ дисплея с контроллером HD44780 по I2C шине. Это пока макетирование, а будет полноценный шильдик для Arduino. Доделаю — опишу.

Подключение-HD44780-ЖКИ-дисплея

P.S. Оказывыется в сообществе уже есть статья о PCF8574. Не догадался поискать сразу :-(

Комментарии (77)

RSS свернуть / развернуть
Добавлю, что есть еще PCF8575, в которой 16 линий ввода-вывода.
0
Она в несколько раз дороже, чем ДВЕ PCF8574… Что крайне обидно, конечно.
0
Есть ещё MCP23017.
На ебее стоит 1 доллар за штуку.
ХЗ, на сколько это дорого для расширителя, но вроде дешевле, чем PCF8575.
0
Поглядел сейчас — на ebay 80 руб, в Чип и Дипе — 150 руб. Ешкин кот.
0
Смотреть цены в ЧиД — лишний раз расстраиваться.
0
Не, цены интернет-магазина у них как раз обычно вполне адекватные.
0
Порты у PCF8574 назваются «квази-двунаправленными» (Quasi-bidirectional I/Os).
Это старая фишка, как минимум времен 8051, где все GPIO такими были. Из плюсов — всего один регистр на порт, из минусов — определенные ограничения. Собсна, именно из-за таких портов олдскульные разработчики предпочитают включать светодиоды и прочее нулем, и кнопки ставить тянущие вниз.
а аноды знаков запитать, скажем, через полевые транзисторы P-типа, затворы которых будут управляться 100 uA подтяжкой PCF8574.
Зачем полевики? Обычные PNP. Самое то — как раз нулем открываются.
ЖКИ дисплея с контроллером HD55780
44780)
Вот, для примера я подключил два светодиода к соседним портам PCF8574.
Ну, это-то понятно… Но выдаваемые после просмотра ютубом остальные видео с твоего канала вызывают закономерный вопрос — OH SHI--, что это?
0
  • avatar
  • Vga
  • 17 июня 2015, 20:12
и кнопки ставить тянущие вниз
Не столько поэтому
Но выдаваемые после просмотра ютубом остальные видео с твоего канала вызывают закономерный вопрос — OH SHI--, что это?
А у тебя дети есть?
0
Не столько поэтому
Ну, тому много причин. Но и эта в том числе.
А у тебя дети есть?
Нет.
0
Зачем полевики? Обычные PNP. Самое то — как раз нулем открываются.

Ну да, и обычне PNP конечно можно… Я кстати, никак не догонюсь, почему в качестве ключа считается более правильным ставить обычные транзисторы, а не полевые? Мне с полевиками легче работать, я их понимаю лучше. Ну это ладно, понятно что субъективно. Но полевики же в мелких SMD-корпусах идут, это же удобно, компактно, сверлить не надо, не торчат…
Неужели только из-за цены?

Ну, это-то понятно… Но выдаваемые после просмотра ютубом остальные видео с твоего канала вызывают закономерный вопрос — OH SHI--, что это?

Это про мультики что ли? Ну да, дочка смотрит :-)
0
Я кстати, никак не догонюсь, почему в качестве ключа считается более правильным ставить обычные транзисторы, а не полевые?
Обычно — просто нет нужды в полевиках, а биполяры дешевле и не хуже для данных задач (и они открываются током, не будут требовать разряда затвора мизерным током подтяжки, как полевик).
Но полевики же в мелких SMD-корпусах идут
Как будто биполярники в этом плане чем-то отличаются. Скажем, BC807, BC817, BC847, BC848, BC857, BC858 (не помню какие из них какой полярности).
Это про мультики что ли? Ну да, дочка смотрит :-)
Нет, VTS 01 *. Съемка с какого-то эндоскопа, по видимому.
0
А, ну точно, это оно и есть, гастроскопия — несколько лет назад закачал, чтобы отослать ссылку доктору, да забыл потом убрать…
0
Как будто биполярники в этом плане чем-то отличаются. Скажем, BC807, BC817, BC847, BC848, BC857, BC858 (не помню какие из них какой полярности).

Прикольно… У меня все биполярники о трех ногах, я даже и не думал что их в таких корпусах тоже делают…
0
У меня все биполярники о трех ногах, я даже и не думал что их в таких корпусах тоже делают…
Делают практически во всех типах SMD корпусов, часто спаренные и комбинашки PNP+NPN. Другой вопрос, что биполяры в аналогичных корпусах куда хуже по току, который они могут коммутировать, да и с обычными биполярами нужна дополнительная обвязка (хотя бы резистор в базу). На этот случай есть «цифровые» биполяры, со встроенными резисторами. Правда, с токами у них все так же плохо.

P.S. на мой взгляд, у биполяров в цифровой и импульсной технике есть только одна существенная ниша — ключевые транзисторы для низковольтных DC-DC (способных стартовать с напряжения меньше ~вольта на входе).
0
С полевиком тоже желательно иметь затворный резистор, хотя китайцы их и не ставят. Что до тока — для коммутации разряда семисегментника или обычной релюшки биполярного транзистора более чем достаточно. Для чего помощнее, или если критично падение напряжения — там конечно мосфеты вне конкуренции.
0
С полевиком тоже желательно иметь затворный резистор
Если обычный push-pull выход (не такой как в чипе из топика) поцепить на затвор, то резистор не нужен — выход работает как драйвер, где все, что нужно (затвор) заряжается-разряжается в штатном режиме. И китайцы вполне правильно ничего не ставят.

P.S. затворный резистор нужен только при а) большой емкости затвора (точнее — большом необходимом заряде затвора) + б) значительная индуктивность линии от выхода до затвора. типичное место, где такое встречается — выводные полевики в блоках питания. в подавляющем большинстве остальных ситуаций резистор в затворе вреден — он замедляет процесс переключения и увеличивает мощность рассеиваемую полевиком.
0
Резистор нужен для ограничения тока затвора, не все МК способны прожевать такую нагрузку или ограничить ток самостоятельно, а о быстром переключении при управлении прямо с МК можно забыть — у них допустимый ток 20-40мА. Ну и если линия к затвору длинная — без резистора есть риск латча. А она запросто может быть длинной — я видал платы, где кварц и МК находились в разных углах платы (ИЧСХ, видел я их в топике «почему не работает?»). Емкость затвора у логических MOSFET'ов (а другими с МК управлять затруднительно) тоже немаленькая.
На резисторы китайцы забивают в дешевых бездрайверных ESC'ах — и она охотно горят. Плюс, насколько я помню, затворные резисторы указаны даже в даташитах на драйверы — например, IR4428.
0
Резистор нужен для ограничения тока затвора, не все МК способны прожевать такую нагрузку или ограничить ток самостоятельно, а о быстром переключении при управлении прямо с МК можно забыть — у них допустимый ток 20-40мА.
Большинство, все-таки, способны ограничить ток. Кроме того, ток, в данном случае, импульсный, а нагрузочная способность МК указывается для постоянной нагрузки, импульскная значительно больше. Наконец, если мы говорим о мелких транзисторах в SOT-23 и мельче, то там заряд затвора мизерный и существенной нагрузки на мк они не создают. Если же речь о более мощных транзисторах, то там явно нужен драйвер, а у драйвера совсем другая нагрузочная способность. Там и 3-4 (а то и 5-7) ампер не редкость.
А она запросто может быть длинной
Это вопрос к тому, кто проектировал схему и плату. Сдуру можно много чего сломать.
На резисторы китайцы забивают в дешевых бездрайверных ESC'ах — и она охотно горят.
Не исследовал конкретно эту проблему, но что-то мне подсказывает, что горят они вовсе не из-за этих резисторов (точнее, их отсутствия).
Плюс, насколько я помню, затворные резисторы указаны даже в даташитах на драйверы — например, IR4428.
Да, они нарисованы на схеме. Это еще не значит, что сопротивление не может быть нулевым.

P.S. темой управления полевиками я очень и очень плотно занимался когда делал источник тока. мои выводы я написал выше. все исследованные мной примеры практической реализации подобных ключей, включая референс-дизайны, не использовали резистор в цепи затвора.
0
Большинство, все-таки, способны ограничить ток.
Из-за высокого сопротивления их выходных ключей, да. Но такое ограничение обычно не вписывается в AMR.
Наконец, если мы говорим о мелких транзисторах в SOT-23 и мельче, то там заряд затвора мизерный и существенной нагрузки на мк они не создают.
Смотря какие. У IRLML6402 заряд не так уж мал. Хотя, конечно, это довольно мощный (для такого корпуса) транзистор.
Это вопрос к тому, кто проектировал схему и плату. Сдуру можно много чего сломать.
Не обязательно сдуру. Вполне может быть нужно утянуть нагрузку в другой конец платы.
все исследованные мной примеры практической реализации подобных ключей, включая референс-дизайны, не использовали резистор в цепи затвора.
Специализированные драйверы — возможно, но выходы МК к ним не относятся. И в тех схемах на рассыпухе, что я видел — резисторы для ограничения тока затвора на допустимом для драйвера уровне тоже используются.
0
P.S. Алсо, где-то встречал жалобы на МК, которые не любят емкостной нагрузки и выгорают при прямом подключении к полевикам. Не помню правда подробностей, включая семейство МК.
0
Смотря какие. У IRLML6402 заряд не так уж мал.
Единицы нанокулона это очень мало.
Вполне может быть нужно утянуть нагрузку в другой конец платы.
Я потому и написал, что это вопрос к тому, кто проектировал схему и плату. Если проектировал без учета разводки, то кто ж ему доктор?
0
Единицы нанокулона это очень мало.
Гм, странно. Когда я заменял им SI2301 я сравнивал параметры и отметил, что у IRLML6402 намного больше заряд. А сейчас сравниваю — одинаковый, около 12нКл. Возможно, спутал 6402 с каким-то другим аналогичным.
0
все исследованные мной примеры практической реализации подобных ключей, включая референс-дизайны, не использовали резистор в цепи затвора.
Среди них есть документы, описывающие подключение мосфета напрямую к МК и драйверы на рассыпухе? Если да — дай линки.
0
Среди них есть документы, описывающие подключение мосфета напрямую к МК и драйверы на рассыпухе? Если да — дай линки.
На вскидку не помню. Да и я смотрел почти исключительно силовуху, а там на полевики работают драйвера.
0
а там на полевики работают драйвера
Вот именно. А с МК надо резистор ставить, так что деталек получается столько же, сколько с обычным биполярником.
0
А с МК надо резистор ставить
Я, все-таки, останусь при своем мнении — маломощные полевики можно подключать напрямую. Слишком там маленькие заряды затвора, что бы это создало какие-либо проблемы.
так что деталек получается столько же
Гарантированный минимум деталей получается только с «цифровыми» биполярами.

Кстати, вот тут применительно к STM32 написано, что резистор не нужен.
0
А какая приятная книжечка… и не только для тех, кто занимается STM32 полезная…
0
Кстати, вот тут применительно к STM32 написано, что резистор не нужен.
Действительно. Правда, там маломощный мосфет с совсем уж мизерной емкостью (впрочем, и такие мосфеты вполне способны заменить маломощные GP биполяры).
0
без резистора есть риск латча
Шо это?
0
Защелкивание. Неприятное явление, когда образованный элементами ESD-защиты паразитный тиристор открывается. Поскольку включен он между землей и питанием, это приводит к КЗ по питанию и сильному нагреву микры, от которого она может сгореть, если вовремя питание не выключить. Провоцируется подачей на пин напряжения, выходящего за пределы питания (ниже земли или выше питания, примерно на 0.5-0.7В). Звон на линии затвора, вызванный ее индуктивностью, может давать достаточные для защелкивания пина МК выбросы.
+1
А не мог бы ты поподробнее это описать или указать ссылку на статью? И что с TVS-диодами (супрессорами), которые и используются обычно для защиты входов чипов от перенапряжений и ESD?
0
Оно даже на вики есть.
0
Неприятное явление, когда образованный элементами ESD-защиты паразитный тиристор открывается.
Но в вики пишут о таком эффекте именно в CMOS(КМОП) паре (N-MOS+P-MOS) транзисторов (имеется паразитная n-p-n-p тиристорная структура), но не в паре защитных диодов(ESD/input_overvoltag protection diodes) на входе CMOS, подтянутых к земле и питанию или один TVS, подтянутый к земле, которые то как раз и режут выбросы напряжения(которые и являются причиной тиристорного эффекта) снизу и сверху на входе.


0
Ну, значит, перепутал. Помнится мне, у Семенова писалось про то, что латч образован диодами. Но, возможно, там говорилось не про защитные диоды, а про паразитные диоды MOSFET'ов. Алсо, как можно заметить из вики, если уж пользоваться англицизмами, то это латч-ап, а не латч.
0
Во-первых, как и все SPI-устройства, сдвиговый регистр требует для себя отдельной линии «chip select» (CS), и это при том, что шина как таковая и так занимает три свободных порта ввода/вывода (MOSI, MISO, SCK).

Во-вторых, сдвиговый регистр может увеличивать либо входы, либо выходы, но не то и другое стразу. А если нужны и входы, и выходы — то нужно ставить два регистра и выделять два пина CS. Обидно.
Ну CS — нет, а защелку — да. С другой стороны, поставь каскадировано кучу регистров и защелкивай их после вывода из SPI.
Входные же сдвиговые регистры посадить на MISO и считывать. И защелку им отдельно не надо — той же, что и на выводные.
Алгоритм примерно таков: выводим все значения, защелкиваем (при этом входа запишутся во входные регистры) и считываем входы.
В итоге три линии SPI плюс одна «защелка» = 4 порта ВВ против двух IIC.

В конце концов каждый сам решает, что выгоднее :)
0
Рискну предложить такой вариант реализации данной приблуды — готовая платка на 8574, msp430 и hd44780.
0
Так готовое не интересно. Интересно свое сделать.
0
ru.aliexpress.com/item/1602-16x2-HD44780-Character-LCD-w-IIC-I2C-Serial-Interface-Adapter-Module/2028071847.html
тоже самое с индикатором в комплекте занедорого
а за описание микрухи спасибо…
+1
Что забавно, существует две модификации этой микросхемы — собственно PCF8574 и PCF8574A, которые отличаются друг от друга только значением адресного префикса.
У PCF8574 он равен 0100, а у PCF8574A — 0111.
Базовый адрес зависит от последней буковки в маркировке чипа, например для PCF8574T это 0х20, а для PCF8574P это 0х40. — Your text to link...
0
Не вводите людей в заблуждение. Буква P — это корпус DIP, буква T — это корпус SOIC. Адрес у микросхем в разных корпусах одинаковый. Без буквы A это 0100xxx, а если к названию микросхемы добавляется буква A, то адрес становится 0111xxx.
+1
О, Леонид Иванович.
Приветствую вас.
+1
Леонид Иванович? Ридико? Добро пожаловать!
+1
Спасибо. Добрые люди мне прислали код, теперь я могу сюда постить.
+3
все вроде бы хорошо, но размеры и цена… взять например ту же stm8s003f3u6. из минусов только то что шить нужно.
0
  • avatar
  • xar
  • 18 июня 2015, 10:16
В смысле вместо расширителя ее использовать? Ну да :-)
Чтобы начать рассматривать микроконтроллер в качестве замены стандартной логики мне надо сделать над собой определенное усилие :-)
0
А вы рассматривайте как замену нестандартной логики, ибо полноченные пушпулы, индивидуальные дергания выводов, возможность выдавать ШИМ. Кроме I2C можно и по UART воткнуть, и по тому же SPI. Универсальный монстр за цену стандартной логики. Только в плане универсальности лучше 051 серию, там есть полноченные 8битные порты = синхронное защелкивание, в отличие от 003.
Но для вашего конкретного случая 003 очень даже подходит: синхронность не требуется, зато есть возможность управлять яркостью и контрастом дисплея через ШИМ. В минусах только необходимость программировать.
0
Только в плане универсальности лучше 051 серию, там есть полноченные 8битные порты = синхронное защелкивание, в отличие от 003.
Расскажи подробнее про этот момент.
+1
Так, это я с серией прогнал. У меня в наличие в корпусе LQFP32 только 152 серия (то же что 151 только с lcd контроллером, низковольтовые), вот и клинануло на 1->0. На самом деле есть STM8S003K3 с 2 полными 8битными портами (правда на одном из них uart, а на другом I2C, так что прийдется выбирать или использовать софтовый уарт). Естественно коли все 8 пинов порта есть, все они защелкиваются одной командой — синхронно. В STM8S003F3 же полных портов нет, надо собирать 8 бит с разных портов. Записать в несколько портов одной командой не получиться — ни какой синхронности.
В случае с рассматриваемым дисплеем синхронность не требуется, так что из K3 можно вытянуть все 3 интерфейса одновременно. Что бы проводов поменьше — можно запарраллелить miso-tx и mosi-rx и пином конфигурации выбирать кого инициализировать. Параллелить ещё и i2c не стоит, ибо там true-od — зачем терять такой бонус?
Разница в цене копеечная даже при копеечной стоимости самих мк. В локалсторе F3 — 25р, K3 — 30р. Ну и для мажоров в 005 и 007 побольше корпуса и памяти, но по сути то же самое.
0
А, то есть у 003F3 нет полных портов и приходится бить байт по разным портам (Ди называл это «виртуальный порт»). Теперь понятно. Но в данном случае — врядли существенно (все равно ног так мало, что дисплей придется подключать 4-битной шиной).
0
более того никаких плюсов этой синхронности я в данном случае не вижу.
0
В локалсторе F3 — 25р, K3 — 30р.

А это где?
0
у меня по 14.7р вышли в последний раз при сотне штук.
0
Подберите где удобнее. Себе я брал, когда они ещё 13р стоили. Запасов хватит.
+1
меня размер f3u6 доставляет
0
А прикольный может получить шильдик… Это я все про дисплей думаю.

Его же наверное можно универсальным сделать — хоть SPI, хоть I2C, хоть UART. И шину джамперами или дипами выбирать…
Какая шина не используется — те ноги ставить в Hi-Z, они и мешаться не будут…

И ШИМ регулировка яркости конечно. Со спецэффектами — плавное загарание подсветки, плавное гашение...
И раз АЦП есть, то кнопки тоже сделать можно, все на одну ногу.
И можно даже какую-нибудь команду динамической индикации заложить — типа загрузил в шилд длинную строку, а он ее по
экрану прокручивает.
И ручную регулировку яркости с отображением на дисплее тоже сразу зашить…

На все памяти у stm8s003f3u6 наверное не хватит :-(… Подумал еще — и ног тоже… Если все шины использовать…
0
А, круче же можно сделать. Чтобы шину можно было на самом же дисплее и выбирать в сервисном режиме.
Экран есть, кнопки есть, мозги есть.
Питание подал, вышел в сервисное меню, выбрал по какой шине работать.
Подключил МК — оно и работает. Красота…
0
только незачем, как правило.
+1
даже не то что незачем. наверняка придется переписывать прогу под каждый девайс, где такой дисплей будет использоваться. то бегущую строку добавить, то ее в другую сторону повернуть, а в следующем девайсе понадобится пара новых символов. в общем если и выбирать интерфейс, то аппаратно.
0
Ну для продвинутого использования можно предусмотреть перепрошивку дисплея, это да, но вот по моему опыту — удобно иметь простые и понятные в работе кирпичики, из которых можно что-нибудь быстро смакетировать.

Я ужи и макетки свои, типа той, что описана в статье, сразу делаю так, чтобы ее можно было бы куда-нибудь еще подцепить и она бы сразу заработала.

А для Ардуиновских шилдов весьма актуальна возможность гибко настраивать пины, на которых они сидят. Потому что кто его знает, какие пины окажутся занятыми.

I2C в этом смысле практически панацея, потому что устройство на ней не мешает другим I2С-устройствам, но вдруг потребуется занять все аналоговые ноги…

В принципе я даже одну такую конфигурацию знаю — стандартный Ethernet Shield (скажем в качестве SD-накопителя) (он, тварь, подтягивет к 5 Вольт A0 и A1, причем, кажется без резисторов и абсолютно бессмысленно — это было рассчитано на слот для полноразмерной SD карты, на сигналы наличия карты и положение движка ReadOnly на ней — а когда распаян slot мини-SD эта подтяжка просто есть ВСГДА. Поубивав бы.) + аналоговый гироскоп (три аналоговые оси) — уже пять аналогвых ног занято. Так что I2C отпало.
0
делая что то разовое и условно не ограниченное по размерам и бюджету можно поставить более жирный контроллер и реализовать все интерфейсы сразу. Не вижу смысла изголяться на мелкопузом контроллере в данном случае
0
003 уже имеет больше пинов чем в сабжевом девайсе и размер 3х3мм. и цена как раз такие
порядка 15-ти рублей, что сопоставимо со стоимостью сдвигового регистра SN74HC595D в «Чип и Дип»-е (17 руб)
c stm8l051 не все так радужно (
0
Не, если сравнивать с PCF8574 то да, ног сразу больше.
Но если уж мутить «мультишинный» дисплей, то наверное даже 8маи свободных ног уже не останется.
0
20 ног всего. 3 — питание, 1 — ресет, 1 — свим, 2 — i2c. 13 — ног не хватит?
0
Еще 4 на SPI и 2 на UART (он же говорит про мультишинный). Остается 7 ног — хотя этого как раз достаточно для минимального подключения 44780.
Нинай, можно ли сэкономить, сконфигурировав интерфейсы на одни и те же пины. Насколько вижу по даташиту — на STM8S003F3P этого сделать не удастся.
0
Угу — и еще хотя бы одна нога — шим на подсветку…
0
Ну, необходимый минимум (если отказаться от чтения из дисплея) — 6 ног. Хватит и на подсветку.
Ну и можно какой-то из интерфейсов реализовать программно на занятых другим интерфейсом пинах.
0
Меньшей кровью — использовать свимовскую ногу. Ну и интерфейсы можно сделать программные. Ну а так то бред все это.
0
Когда-то тоже была идея слепить интерфейс ЖК на регистрах, хо эту идею я быстро послал куда подальше) Сделал нормальный интерфейс на МК (т.е. отдельный мк управлял ЖКИ + клавиатура).
+1
За статью спасибо! Но все же некорректно называть пин портом, так как порт ассоциируется с восьми-битной шиной.
0
Так в даташите на PCF8574 везде написано I/O port…
0
пин не обязательно порт -_^
0
А, ну в этом смысле, да…
0
Хе-хе, тоже был интерес к расширителю i2c (slave) расширитель на ATMega . Получается дешевле, бонусом есть ADC, но скорость меньше из-за программной реализации. За основательность(дотошность) материала плюс.
0
Можно (нужно) добавить, что по умолчанию на выходе логическая «1», в отличие от AVR :(
Неудобно получилось (с)
Я считаю хорошим тоном делать устройства, которые не проклацивают реле при включении.
Если взять «стандартные» «ардуиновские» реле с оптопарой на борту, то входной сигнал нужно подтягивать к земле, но питание берется такое же как и у самого реле (зачем?). Поэтому в логическом «1» (выключено) там напряжение питания.
А реле я взял на 12 вольт :(
Если взять контроллер и ULN2008, то все четко. Никаких проблем. Все шикарно работает. По умолчанию реле выключены. Включаются логическим «1» на контроллере.
Если дополнительно взять PCF8574, то напрямую я не могу его использовать т.к. у меня реле на 12В, а если оставить как есть Ардуино-PCF8574-ULN2008-Опто, Реле — пока не загрузится ардуинка, реле включены.
Извинитезамногослофф.
0
Можно (нужно) добавить, что по умолчанию на выходе логическая «1», в отличие от AVR :(
Там даже не единица, а подтяжка. Тем, кто работал с 8051 это привычно. Не совсем понимаю, правда, зачем в 21-м веке делать такие порты. Видимо, для упрощения программного интерфейса чипа (оригинальное решение было обусловлено не только упрощением железа, о и тем, что в NMOS сделать верхний ключ не так-то просто).
Я считаю хорошим тоном делать устройства, которые не проклацивают реле при включении.
При работе с такими портами обвязку делают включающейся по нулю. Как по указанной тобой причине, так и потому, что единичка там слабая, с полсотни микроампер.
0
Мой первый контроллер был как раз 8051 — и «1» по умолчанию этот как раз то, на чем я учился. А учился я этому в 1999ом году. ой… 17 лет назад, блин, какой я старый…
В конкретно моем применении я вижу решение такое: ставлю PCF8574, выбрасываю ULN2008, лезу в «стандартную плату ардуино-реле», выпаиваю резисторы опто-пары-светодиод, рассчитанные на 12в и впаиваю резисторы, рассчитанные на 5в. В программе меняю логику включения реле.
Далее идут мысли вслух: Зачем делать/продавать ардуино-реле-с-опто-развязкой, если у входа и реле общая земля и общее питание 12В?!? Такое ардуино-реле-12В нельзя зацепить на 5В логику без ULN2008, а с ULN2008 нельзя кошерно зацепить за расширитель портов с логической «1» на выходе…
0
А зачем связываться со «стандартной платой ардуино-реле»? Ну или хотя бы почему не взять нормальную плату, где тупо выведены два конца светодиода?
В гугле, кстати, на схеме такой релюшки питание реле и СИДа раздельное, что логично — иначе нахрена вообще опторазвязка?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.