Кода мне не жалко, да вот только толку с него? Эта штука реализована была в
этих часах и там во всю используются аппаратные возможности микроконтроллера stm32f103, который налеплен на "синей таблетке". Да и что там исходник - надо выкладывать тогда уж весь проект, так как часть сделана в CubeMX (для USB интерфейса - я сам с нуля такое написать еще/уже не могу). Но он не закончен. Я как застрял с командным интерфейсом так меня там и заклинило. Хотя сейчас у меня есть сделан (для роботов) командный интерфейс по типу
Форт-интерпретатора и я мог бы его быстро приспособить, завершить этот проект и опубликовать. Но, надо еще продумать словарь фортовских слов, чтобы с часами было удобно работать. На роботах я уже добавил кучу команда, которые я почувствовал, что они мне пригодятся.
Кхе... начал искать исходники и мне показалось, что я их потерял. Но нет - нашел на нетбуке. Вот только выложить... проект занимает 93 мегабайта.
Поэтому, попробую объяснить просто словами.
Формально у меня делается отображение не 4 знаков, а 64. Просто у каждой группы из 16 знаков сигнал выбора анода лампы одинаковый. И если сигнал выбора катода в этой группе тоже одинаковый, получается, что всё это время горит одна цифра, как в простой обычной динамике. Если же в одном знаке (из тех 16) я меняю сигнал выбора катода, то получится, что 1/16 времени у меня будет гореть одна цифра, а 15/16 - другая. Ясно что яркость второй цифры будет больше, чем первой. Через некоторе время будет подменена вторая из тех 16 и пропорция изменится до тех пор, пока новая цифра не вытеснит из массива старую и не займёт все 16 ячеек. Тогда будет гореть только новая цифра.
Код: Выделить всё
2222222222222222 0000000000000000 5555555555555555 9999999999999999
2222222222222222 1000000000000000 0555555555555555 0999999999999999
2222222222222222 1100000000000000 0055555555555555 0099999999999999
2222222222222222 1110000000000000 0005555555555555 0009999999999999
...
2222222222222222 1111111111111110 0000000000000005 0000000000000009
2222222222222222 1111111111111111 0000000000000000 0000000000000000
Теоретически, этот фокус можно провернуть и в обычной системе, где динамика делается через прерывания, но, боюсь, что накладные расходы на обслуживание прерывания (вход, сохранение контекста .. восстановление контекста и выход) могут не позволить так часто делать прерывания. При прямом доступе к памяти, конечно, процессор тоже подтормаживается, но только на время занятости шины чтобы передать одно 32-х битное значение в регистр и всё. Т.е. можно считать, что практически временных ресурсов не ест.
Можно ли на Raspberri это сделать - я не знаю. Я максимум, что сумел поставить распбиан на него, глянуть на этот типа линукс и всё. А, еще был поставивши андроид - ну и тормозила! Но, если вы пытаетесь сделать на питоне под распбианом - думаю у вас ничего не получится. Надо лезть более глубоко в аппаратные дела процессора. Но под линуксом - линукс юзерлэнду это не позволит. Так что работать нужно будет на уровне драйверов... Или используя какой из стандартных интерфейсов, например, i2c - подключить что-нибудь аппаратное, что будет шустро выполнять глобальные команды.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."