Часто для разработки бюджетных электронных устройств, в которых требуется отображать числа или ограниченный набор букв, радиолюбители используют бюджетный ATTiny2313 и семисегментный светодиодный индикатор. Это как правило различные термометры, термостаты, часы, таймеры и многое другое. Устройства получаются простыми, содержащими небольшое количество деталей, однако разработать и изготовить миниатюрную плату по готовой схеме - задача не из легких.
Можно пойти другим путем, зная элементную базу устройства, сначала разработать удобную плату, а затем по ней отрисовать схему и под нее написать или подправить программу. Итак начнем. Что мы имеем:
Если предполагается сборка уже обкатанного проекта, панельки можно не использовать, а сразу впаять запрограммированный микроконтроллер и индикатор в плату. Для разработки прототипа панели лучше поставить.
Плата разработана в программе Sprint Layout.
Фото платы сверху и снизу.
На сборку платы у меня уходит примерно около часа.
Схема отрисованная по плате в SPlan, плата в формате Sprint Layout лежит здесь.
Исходник программного кода с динамической индикацией для индикатора с общим катодом для Codevision, а также файл эмуляции в Proteus, лежит здесь. Прошивка здесь. При прошивке напротив фьюз битов CKSEL0, CKSEL2, CKSEL3, SUT0 не забываем поставить галочки.
Кратко о программе:
Массив digits[] - это знакогенератор, в него в шестнадцатеричном формате сохраняем образы символов.
unsigned char digits[] =
{
0xEB, // 0 -
0x88, // 1 -
0xD3, // 2 -
0xDA, // 3 -
0xB8, // 4 -
0x7A, // 5 -
0x7B, // 6 -
0xC8, // 7 -
0xFB, // 8 -
0xFA, // 9 -
0x20, // 10 - знак минус
0xF0, // 11 - символ градус цельсия
0x00, // 12 - пусто
0xB9, // 13 - H
0x73, // 14 - E
0x23, // 15 - L
};
В массиве stroka[] можно набрать любой текст из символов знакогенератора, которые будут выводится на индикатор в виде бегущей строки.
unsigned char stroka[] = {12,12,12,13,14,15,15,0,12,12,12,12}; - надпись " HELLO ".
Часть программы для вывода бегущей строки. В массив digit_out[n] ( n - номер разряда индикатора, начиная с 0) помещаем символы для вывода.
{
for (n=0;n<4;)
{ digit_out[n]=stroka[n+m]; n++; };
m++;
delay_ms (500);
}
В следующей статье, я расскажу как из данного шаблона легко и быстро сделать несколько полезных устройств.
Многоканальный термометр здесь.