Большое спасибо за статью! Я как раз уже давно хотел написать софтрендерер, но с матчастью были проблемы (осилил пока только простой Wireframe-рендеринг без корректного отсечения), жду следующих частей статьи.
Хм, интересно. Спасибо, буду знать. Видимо, это распространённое заблуждение, т.к. я в нескольких местах читал, что резистор на кнопку вешается именно для этого. Правда, тогда остаётся непонятным, почему у меня дребезг никак не проявляется. Программного подавления нет и опрос кнопок идёт напрямую из loop, который выполняется довольно быстро (если не срабатывает таймер с тяжёлым телом).
Да, я знаю, что они не для подавления дребезга предназначены. Просто в данном случаи их можно было использовать в этих целях. Мне очень не хотелось добавлять ещё 6 внешних (не подтягивающих) резистора для кнопок на плату, и так 25 резисторов вышло на плате.
Ну, в том-то и дело, что я не был уверен, что я не буду перепрограммировать. Последние изменения в код я внёс уже после того, как припаял всё (нашёл один небольшой косяк в коде). Постоянно перепаивать не будешь, да и к тому же я не исключал добавление новых фич.
Хм, интересно, не знал. Пока ещё ни разу не наступал. Я сначала тоже думал переделать синхронизацию с RTC, например, на 1 раз в час, а в остальное время тикать родным резонатором, но это было бы чревато другими багами, т.к. код был изначально написан в расчёте на то, что время изменяется с разрешением в 1 секунду, а здесь бы появилась возможность отката на несколько секунд назад/вперёд в момент синхронизации, которую нужно было бы корректно обрабатывать. Поэтому я выбрал наиболее простой вариант решения проблемы. В принципе, раз в полсекунды вполне хватило бы, но для этого нужно было бы отдельный таймер писать. На платке RTC-модуля, который у меня выведены только питание с землёй и два пина I2C, так что прицепиться к пину 1 Гц достаточно сложно.
Ну, на самом деле я долго думал, делать переключение, или нет. Я его сделал в первую очередь потому, что я равнялся на обычные цифровые часы, у которых оно есть. Светодиод старшего разряда я не стал использовать потому, что было бы неочевидно, в каком формате выводится время, если не знать заранее. К тому же светодиоды AM/PM имеют дополнительную функцию в режиме таймера (AM — таймер остановлен, PM — таймер идёт, AM+PM — таймер на паузе).
Ну, насколько я понял, MAX7219 и 7221 — это драйверы для матричных светодиодных дисплеев? Мне они не нравятся, таких часов на матричных дисплеях у китайцев хватает.
Насчёт Ардуины не спорю, вполне можно было собрать на голой атмеге, я думал насчёт этого. Но с Ардуиной проще править код, можно легко добавить фичи или вообще задействовать плату для какой-нибудь другой задачи. Постоянно перетыкать атмегу между Ардуино и платой как-то неудобно. А основной плюс отдельного RTC в том, что он благодаря батарейке сохраняет время при выключенной ардуине.
Да, я знаю, я сознательно развёл плату именно таким образом :) Я сначала хотел как раз диагональными дорожками соединить, но потом решил, что дорожки лесенкой будут смотреться интереснее, чем просто набор диагональных дорожек.
Насчёт Ардуины не спорю, вполне можно было собрать на голой атмеге, я думал насчёт этого. Но с Ардуиной проще править код, можно легко добавить фичи или вообще задействовать плату для какой-нибудь другой задачи. Постоянно перетыкать атмегу между Ардуино и платой как-то неудобно. А основной плюс отдельного RTC в том, что он благодаря батарейке сохраняет время при выключенной ардуине.