Кода мне не жалко, да вот только толку с него? Эта штука реализована была в
этих часах и там во всю используются аппаратные возможности микроконтроллера 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 - подключить что-нибудь аппаратное, что будет шустро выполнять глобальные команды.
- Вложения
-
- nixie_display.zip
- Отображение. Transition type 1 - перебор цифр, 2 - плавная смена цифр. 0 и 3 - просто отображение без эффектов.
- (2.69 KiB) Скачиваний: 190