Есть такая микросхема Max 7219, которая представляет собой контроллер семисегментных индикаторов. Она не только позволяет управлять восемью такими индикаторами, но и допускает каскадное соединение с такими же контроллерами, что позволяет произвольно увеличивать разрядность.
Эта микросхема казалась подходящим кандидатом для моего проекта ``Горилла’’, но у неё обнаружились некоторые особенности, в частности она имеет напряжение питания 5V и соответственно TTL логические уровни.
Выходы соединяются с LED и следующей такой же микросхемой, так что они нас не интересуют. Остаются три входа: CLK, LOAD и DIN. Поскольку выходы GPIO Raspberry Pi являются CMOS, то для представления логического нуля используется напряжение , а для представления логической единицы .
Казалось бы всё хорошо и мы попадаем в нужный диапазон TTL логики, однако документация на микросхему указывает, что минимально допустимое напряжение для логической единицы равно 3.5V, что полностью исключает возможность управления от Raspberry Pi1.
Итак нам нужен преобразователь логических уровней.
Рассмотрим следующую простую схему:
Два pull-up резистора обеспечивают логическую единицу с обеих сторон преобразователя. Так что, если на выходе GPIO установлена логическая единица, то падение напряжения на резисторе , транзистор закрыт и на входе 7219 установлен высокий уровень благодаря pull-up резистору .
Если же на выходе GPIO установлен логический ноль, тона падает 3.3V, транзистор открывается и на входе 7219 получает нулевой потенциал.
Наш преобразователь работает.
Но самое замечательное то, что благодаря встроенному диоду этот преобразователь работает и в обратном направлении!
С логической единицей всё понятно и неинтересно, посмотрим что будет, если 7219 это выход, на котором установлен логический ноль. Тогда начинает течь ток через встроенный диод, на нём падает что-то около , следовательно на резисторе образуется падение напряжения , транзистор окрывается после чего на падает уже все 3.3V эффективно образуя на входе GPIO логический ноль.
Транзисторы BSN20 оказались очень маленькими:
Попробуем припаять на макетную плату один транзистор:
И ещё два для оставшихся линий:
Добавляем резисторы:
Всё в сборе:
Ну заодно и 7219:)
Конвертер работает просто замечательно, а вот 7219 мертва.
Следует заметить, что в сети полно описаний успешного подключения этой микросхемы к Raspberry Pi. Не знаю как это выходит, возможно разброс параметров у отдельных экземпляров позволяет им работать при более низком уровне логической единицы. ↩