Автополивалка. Часть 2. Впихнуть невпихуемое.
Продолжаем разговор, начатый в прошлый раз.
Дано:
- надо обеспечить
- дискретные выходы — 25 шт
- управление датчиками влажности — 10 шт.
- управление клапанами — 10 шт
- управление датчиками расстояния — 2 шт.
- управление насосом — 1 шт.
- управление индикатором — 2 шт.
- дискретные входы — 3 шт
- датчики расстояния — 2 шт
- кнопка — 1 шт
- аналоговый вход — 1 шт
- дискретные выходы — 25 шт
- имеется на контроллере
- GPIO — 11 шт.
- аналоговый вход — 1 шт.
Итого наблюдается явная недостача дискретных входов/выходов.
Вопрос коллеги «А чего ты контроллер побольше не возьмёшь?» - был отметён, как неконструктивный. :)
Первая мысль, организовать 4-х битовую адресную шину, уткнулась в наличие двоичных дешифраторов исключительно с инверсными выходами, т.е. в необходимость дополнительных инверторов там, где рассчитывал обойтись без них.
Раз с параллельностью нам облом, придётся переходить на последовательную передачу. То есть на сдвиговые регистры. Группируем сигналы по назначению и считаем.
Статические выходные сигналы не критичные по времени - 21 шт (управление клапанами, датчиками влажности и насосом). Эти выведем в сдвиговый регистр - 3GPIO.
Сигналы, критичные ко времени - 7GPIO (датчики расстояния, кнопка, индикатор).
Итого требуется всего 10GPIO и сдвиговый регистр на 3 байта. Считаем, что задача решена.
20 февраля 2017
Оставить комментарий