Спаял я все платы, кроме левой клавиатуры. Левую, думаю, можно пока отложить, она для работы некритична. Там всего-то в двух местах нужно кое-что закомментировать в коде, чтобы отсутствие данных из левой клавиатуры не мешало отлаживать остальное.
Как я и говорил в предыдущей заметке, с первого раза всё это хозяйство не завелось.
Выглядит это так: при включении не загорается экран. Светодиоды нормально сбрасываются в «ноль», но экран остается пустым. Пришлось отлаживать.
Сначала я решил убедиться, что каскад светодиодов работает, как запланировано. Сделал пару прошивок со вспомогательным кодом, чтобы посмотреть, все ли светодиоды загораются, и правильный ли у них в результате порядок. Оказалось, что один светодиод какой-то странный — плохой контакт где-то внутри; оживает при шевелении. Пришлось заменить на исправный.
С порядком оказалось чуть веселее. Там же у меня каскад из двух регистров. И данные из буфера в каскад я загружаю из цикла. А цикл, чисто на автомате, я начал с первого элемента массива. Забыл, что младший байт должен грузиться последним, т.к. загрузка этого каскада идёт «снизу вверх». В результате данные младшего регистра попадали в старший, и наоборот. Поправил.
В результате убедился, что как минимум управление светодиодами работает как надо. (Ну, помимо того, что всё хозяйство успешно питается от внешнего БП через спец-разъём, а не через USB на ардуинке.)
Затем с помощью очередной отладочной прошивки убедился в том, что до основного цикла дело не доходит. Т.е. выполнение кода останавливается где-то в блоке инициализации.
Раз у меня есть светодиоды, значит на них можно выводить «отладочную печать». 🙂 Добавил метод showDebugCode()
, который выводит 9-битовое число на светодиоды. В двоичном коде, естественно. И расставил в блоке инициализации контрольные точки. Которые показали, что управление передаётся в метод init()
библиотеки дисплея и оттуда не возвращается. Ну то есть надо копать в направлении «что не так с подключением дисплея». Простейшие моменты типа «нет ли обрыва дорожки» и «нет ли замыканий» я уже проверил (и один разрыв в дорожке я-таки нашёл; зачистил маску и спаял дорожку тоненьким проводком). Так что с основными проверками всё норм. Видимо, неисправность хитрее. Возможно, один сигнальный проводник (или оба) замыкают на что-то по дороге. (Т.е. возможно где-то при пайке повешена сопля, невидимая глазом.) Та же самая ардуинка, пересаженная на макетку с таким же точно дисплеем, нормально инициализируется и начинает «работать». То есть проблема именно где-то в платах.
В общем, надо копать. Продолжение следует.