Семисегментный индикатор и динамическая индикация на AVR микроконтроллере ATmega8

В разных конструкциях бывает оправдано использовать семисегментные светодиодные индикаторы, дешево и сердито по сравнению с символьными ЖКИ. Светодиодный индикатор представляет собой восемь светодиодов (7 для представления цифры и 1 для точки) расположенные в виде слегка наклоненной цифры:
В разных конструкциях бывает оправдано использовать семисегментные светодиодные индикаторы, дешево и сердито по сравнению с символьными ЖКИ. Светодиодный индикатор представляет собой восемь светодиодов (7 для представления цифры и 1 для точки) расположенные в виде слегка наклоненной цифры:
семисегментный светодиодный индикатор
Светодиоды внутри имеют общий анод (ОА) или общий катод (ОК). То есть, для управления одной цифрой нужно 8 выводов микроконтроллера. А что же делать, когда нужно управлять, например, четырьмя цифрами? Использовать микроконтроллер с 4*8=32 выводами? Не экономично.

Для такого случая придумали динамическую индикацию. Для этого соединяем выводы, которые отвечают за включение сегментов в общую шину, а общими анодами (катодами) будем управлять через транзисторы. В отдельный момент времени горит только одна цифра. Таким образом быстро перебирая цифры на дисплее (как кадры в фильме) мы получим эффект постоянно горящего изображения. В замедленном варианте, как это происходит, можно посмотреть на картинке:
анимация динамической индикации
А вот ускоренная в 25 раз картинка, уже начинают вырисовываться контуры «12.34»:
анимация динамической индикации
Используя принцип динамической индикации мы сможем управлять четырьмя цифрами при помощи 8+4=12 выводов. Использование же 2-х сдвиговых регистров HC595 может сократить это число до 4. Рассмотрим схему подключения к микроконтроллеру:

Управлять же индикатором будем с помощью микроконтроллера ATmega8. Резисторы R5-R13 – ограничительные на 470 Ом. R1-R4 – по 1кОм. Транзисторы Q1-Q4 – любые PNP типа, я использовал BC807 в планарном исполнении. Конденсаторы С5,С7 – электролиты по 100 и 200мкф соответственно, С4,С6 – керамика по 0,1мкф. Так как индикатор с общим анодом, то соответственно включение разряда/сегмента производиться низким уровнем.

Для индикаторов с общим катодом схема аналогична, только транзисторы следует взять NPN структуры, и управляться индикатор будет высоким уровнем.
Продемонстрируем сказанное, напишем программу, которая будет перебирать числа от 0 до 9999 и выводить их на семисегментный индикатор.

  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3. // 0 1 2 3 4 5 6 7 8 9
  4. const unsigned char codes[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  5.  
  6. unsigned char data[4]={0x00,0x00,0x00,0x00};
  7. unsigned char counter=0;
  8.  
  9. void pause (unsigned int a)
  10. { unsigned int i; for (i=a;i>0;i--); }
  11.  
  12. void init_timer (void)
  13. { TIMSK=(1<<TOIE0); //Enable timer overflow interrupt
  14. TCCR0=(0<<CS00)|(1<<CS01)|(0<<CS02); //Prescaller = /1
  15. }
  16.  
  17. void convert_data (unsigned int x)
  18. {unsigned int temp,res;
  19. temp=x;
  20. res=temp/1000; //Calculate 1000-s
  21. data[3]=codes[res];
  22. temp=temp-res*1000;
  23.  
  24. res=temp/100; //Calculate 100-s
  25. data[2]=codes[res];
  26. temp=temp-res*100;
  27.  
  28. res=temp/10; //Calculaate 10-s
  29. data[1]=codes[res];
  30. temp=temp-res*10;
  31.  
  32. data[0]=codes[temp]; //Calculate 1-s
  33. }
  34.  
  35. ISR (TIMER0_OVF_vect)
  36. {PORTD=0xff;
  37. PORTB=~_BV(counter); //Enable digit
  38. PORTD=~data[counter]; //Write code
  39. counter=(counter+1)%4; //Increment digit counter
  40.  
  41. TCNT0=0x00; //Clear timer
  42. }
  43.  
  44. int main(void)
  45. { unsigned int x=0;
  46. DDRD=0xff;
  47. PORTD=0x00;
  48. DDRB=0x0f;
  49. PORTB=0x0f;
  50.  
  51. pause(1000); //Settle pause
  52. init_timer(); //Init timer
  53. sei(); //Interrupt enable
  54. while(1)
  55. {convert_data(x); //Conver data to codes
  56. if (x<9999) x=x+1; //Increment data
  57. else x=0;
  58. pause(30000);
  59. }
  60. return 1;
  61. }

Код очень простой. В массиве codes находятся коды, которые следует выводить на порт, чтобы получить желаемую цифру. Смена активной цифры производиться по прерыванию от переполнения таймера 0. А функция convert_data(int x) раскладывает число х по разрядам, и записывает соответствующие коды в массив data, данные из которого выводятся непосредственно на индикатор, при срабатывание прерывания.
Что из этого вышло, можно глянуть на рисунках:
фото динамической индикации
фото динамической индикации

Исходный код можно скачать в виде проекта под AVR Studio 4
Также, может кому пригодиться, платка для моего табло в формате .lay для программы Sprint Layout 5

Поставь конденсатор на выход

Поставь конденсатор на выход блока питания на 100мкФ примерно, это не повредит. У меня как-то наблюдались необъяснимые глюки, пока не поставил.

От использования БП от дир320 думаю ниче страшного не будет. Главное наставь конденсаторов по питанию для подстраховки.

У чувака MAC OS на компе,

У чувака MAC OS на компе, вряд ли он поставить AVR Studio.

В природе существует vmware

В природе существует vmware fusion

а куда цепляются свободные

а куда цепляются свободные ножки микросхемы (не очень понял обозначения на схеме)

Свободные ноги так и остаются

Свободные ноги так и остаются свободными. Никуда не надо припаивать.

Обратите внимание на такой

Обратите внимание на такой программер, дешевле врядли что-то найдете USB AVR910. Я аналогичным пользуюсь, только самодельным.
kosmodrom.com.ua/product.php?page=0&name=avr910&okbutton=%CF%EE%E8%F1%EA

обозначение индикаторов на

обозначение индикаторов на схеме CA - это общий катод? если да, то в почему в тексте говорится об общем аноде?

CA - common anode, CC -

CA - common anode,
CC - common cathode

проблема...

детали приехали, но я,оказывается, забыл заказать самое главное - программатор :-(((

на виндовом ноуте ни COM, ни LPT порта нет.

руки чешутся - похоже, завтра поеду в город за ним, но не за тем, который от мастеркита, а вот за этим, на молодежку:
voltmaster.ru/cgi-bin/qwery.pl?id=981749931&group=50236

похоже, единственный доступный в оффлайне :-)
с заказом в инет-магазинах связываться не хочу - иначе придется ждать еще неделю...
что скажете про него хорошего/плохого? ведь он подойдет для attiny2313?
интересно, будет ли совместим этот программатор с моим avrdude?

и еще, пока что у меня нет ни паяльника, ни припоя - просто беспаечная макетная плата. что еще по случаю можно/нужно купить в магазине?

хотелось бы подобрать датчик холла - для экспериментов - что-то типа велокомпьютера смастерить, считать прохождения магнита. какой посоветуете из этого магазина?

наверное, сопротивления понадобятся - какие самые востребованные номиналы? и разъем длы подключения источника питания какой-то...

Ходовые резисторы: 47Ом,

Ходовые резисторы:
47Ом, 470Ом, 1кОм, 4,7кОм, 10кОм.

Конденсаторы:
27пФ, 0,1 мкФ, 220мкФ/16Вольт, 470мкФ/16Вольт.

Кварцы:
4МГц, 7,3728МГц, 8МГц, 16МГц.

По разъемам дешевле и удобней технологии соединения кроме описанной в статье не видел.

что-то я забыл о

что-то я забыл о существовании этой технологии... :-)
за ходовые номиналы-отдельное спасибо!

Я как бы не буду отговаривать

Я как бы не буду отговаривать тебя от покупки, скажу просто по стоимости мой программатор (5 проводков) стоит максимум в самых хреновый день - 30Грн (106 рублей). Тот что ты бросил стоит за 2760 рублей.
Ты сын миллиардера???

Есть в интернете схемы программатора на базе FT232RL интерфейс у микросхемы USB, подрубаешь к ноуту и у тебя в "Диспетчере устройств" появляется виртуальный COM порт. Через него и шьется все. Микра стоит порядка 50-70 грн(177-248 рублей). Правда для неопытного по части пайки будут проблемы с её пайкой. Так же надо освоить технологию изготовления печатных плат. Должно выйти типа такого: Виртуальный COM порт на FT232RL

:-) меня уже жаба начала

:-)
меня уже жаба начала давить, когда я посмотрел цену на это устройство в Европе.
нашел сайт Михаила С. из Москвы на народе.ру - он вроде бы предлагает недорогой USB программатор, 24 часа в сутки, почти без выходных, отписал ему - пока жду ответ, четыре часа прошло)
посмотрим, что завтра победит - трезвый расчет и банальная лень или шило в попе)))

просто хочется здесь и сейчас, и просто микросхему же тоже надо покупать.. был бы для нее переходник на макетную плату - была бы красота, конечно. а так - еще и паяльник)))

кстати, опять, вот тут
voltmaster.ru/cgi-bin/qwery.pl?id=12298960&group=101
voltmaster.ru/cgi-bin/qwery.pl?id=201330607&group=101
чем они отличаются? кроме цены и наличия?
а вообще были же где-то у меня в загашнике шнурки и на ft232, и на pl2303... ыыы...

что-то я разуверился

fairchildsemi.com/ds/2N/2N3906.pdf
мой называется 2N3906BU - что означает этот суффикс?
подойдет ли такой транзистор, и на какие строчки в даташите смотреть, чтобы подобрать сопротивление? еще смущают минусы в характеристиках.

Про суфиксы - читать каталог

Про суфиксы - читать каталог или даташит.
Минусы - потому что PNP типа.
Подойдет, на базу 1кОм, на светодиоды по 330-560 Ом.

ступил в одном из предыдущих комментов про сборки

а здесь уточнение
330-560Ом на светодиоды - в смысле между коллектором транзистора и общим анодом светодиода?

про ножки

в даташите транзистора про буквы не было ни слова, иначе бы не спрашивал)

у меня тут внезапно следующий затык: судя по даташиту attiny2313 у меня в регистре D всего семь бит (во всяком случае ножек всего семь).
что будет, если я не буду менять код (менять регистры местами), а оставлю эту программу? последний восьмой бит там доступен только для чтения - как будет выполняться в этом случае команда
PORTD=~data[counter]
запишутся первые биты, а последний проигнорируется, или микроконтроллер каждый раз будет зависать на этой операции (попытка записи в бит только для чтения?)

потом, у меня нет вывода avcc, есть только vcc. я так понял, avcc - это питание аналоговой логики, что ли, в даташите есть только одна строчка - типа ограничения на avcc, а что это такое - не сказано. но я так понял, что запитывается микроонтроллер именно по этой ножке?

кнопка a1 - при замыкании сбрасывает микроконтроллер? в принципе можно без нее?

Значит буквы означают модель

Значит буквы означают модель транзистора.

Ниче страшного, просто PD7 не существует, запись в него игнорируется, а читается как 0.

avcc - питания для встроенного АЦП в mega8. Используется питание отдельное питание для аналоговой части, чтобы снизить влияние помех.

Можно и без ресета. Но этой кнопкой можно перегружать контроллер и выводить из зависания, если что.

работа с программатором

собираюсь использовать BM9010 - недорогой USB программатор от МастерКита. я так понял, это что-то типа копии avr910.
прошивать собираюсь с помощью avrdude (кстати, какой baud rate выставлять? на что он будет влиять?)

настройка фьюзов зависит от модели программатора? можно ли их вообще не трогать и оставить заводскими? или при прошивке программатор все равно зашивает значения по умолчанию, установленные в программаторе? боюсь накосячить.

какие вообще меры предосторожности соблюдать при работе? в какой последовательности все подключения делать? микроконтроллер в компьютер - в последнюю очередь?
боятся ли микроконтроллеры статики?

Хз, дудкой никогда не шил, не

Хз, дудкой никогда не шил, не подскажу.

Нет, фьюзы в микроконтроллере, программатор может их только выставлять. Лучше не трогай заводские, если не знаешь - можно сломать МК.

Не путать полярность и давать адекватное питание не менее 2,7 до 5В. в каком порядке соединять - в принципе не важно. Я сперва подаю питание на макетку, подключаю программатор к компу, а потом уже соединяю программатор с мк. АВР-ки можно руками трогать, статикой еще не одной не спалил, но все-таки стоит перед пайкой трогать водопровод, если в шерстяном свитере и т.д.

зачем в 54 строчке задавать

зачем в 54 строчке задавать PORTD, если все равно меняем его в 43?
у меня в даташите сказано что sei -это команда на ассемблере. в си используется код __enable_interrupt();
зачем в принципе нужна пауза в 58 строчке?
когда мы вообще попадаем в загадочное место ISR?

"зачем в 54 строчке задавать

"зачем в 54 строчке задавать PORTD, если все равно меняем его в 43?"
Начальная инициализация порта, можешь не делать если не нравиться. Мне легче, когда один взгляд на начало програмы дает информацию по начальной конфигурации портов.

Да, sei - асмовая команда. WinAvr позволяет писать С код со вставками асмы, что я и делаю.

В строке 58 написано, что это settle pause для устранения всяких переходных процессов

Загадочное место ISR - обработчик прерывания по переполнению таймера.

пробую модифицировать

пробую модифицировать код
теперь перестал понимать следующее место:

43 строчка в обработчике прерывания делает на катодах единицу - сегменты гасятся
44 строчка зажигает через транзистор нужный разряд (хотя почему отрицание?)
45 записывает в порт D инвертированный символ из массива - нужные сегменты загораются (там где 0 - горит, там где 1 - не горит)

а где гашение разряда? (отмена 44 строчки?) получается, теоретически, можно вне прерывания зажечь сразу все разряды - суть от этого не поменяется?
и еще, как быстро происходит переполнение таймера? он восьмибитный? считает до 255 с прискейлером? и что происходит при переполнении (кроме прерывания) - разве он не начинает считать с начала (то есть действительно ли нужна 48 строчка?)

далее, мне нужно освободить пины pd2 и pd3 для прерываний. если я переконфигурирую DDRD, сделаю pd2 и pd3 на вход (ведь для внешних прерываний мне их надо на вход конфигурировать, так?), то мне придется еще и в обработчике прерывания извращаться?
к примеру, ножки pd7 у меня в attiny2313 не было, программа пыталась туда записать ноль (да и 1 в 43 строке) но ошибки не возникало (значение уходило в несуществующую ячейку памяти, или как это выглядит на низком уровне?)

тьфу, наверное, разбивать PORTD и переносить два бита из него в PORTB глупая затея. проще поменять их местами (мне для зажигания разрядов и надо-то всего четыре пина максимум (или если мои рассуждения здесь выше верны - то все четыре ключа можно просто держать все время включенными - напрямую к 5В?) - тогде еще три ноги будут свободны (из них 2 - как раз на прерывания), да и точка (8 бит в PORTB) заработает?

НО! Если мне все же придется управлять транзисторами через PORTD - то он будет с разрывом (DDRD=0x33, так как pd2 и pd3 (int0 и int1) должны быть на чтение? и как в таком случае будет выполняться прерывание? если будет команда записать в третий бит порта D ноль - программа будет пытаться записать ноль в pd3, или учтет значение DDRD и запишет со сдвигом в pd5? (не уверен, что совсем понятно выразился)

Нафига гасить полностью

Нафига гасить полностью разряд, если в следующем прерывании зажжется место него новый?? Т.е. включенные разряды сменяют друг друга, в любой момент времени горит только один разряд.

Вне прерывания можно делать что хочешь.

Переполнение 8-ми битного таймера, это 2^8 тиков с учетом прескаллера.

Если хочешь разносить ножки - придется переделать прерывание, повставляв туда всяких if'ов.

вот и я не пойму, нафига там

вот и я не пойму, нафига там строчка 44, если можно было в теле программы включить сразу все четыре разряда (анода), а катодами управлять в прерывании... но тогда по идее должна была получиться каша...
просто я себе представлял, что мы в каждый новый момент времени конфигурируем катод в 45 строчке, а в 44 - меняем разряды.
видимо, я плохо понял как работает 44 строка.
что будет в PORTB при последовательном выполнении
PORTB=~_BV(0), PORTB=~_BV(1), PORTB=~_BV(2) и PORTB=~_BV(3)?
в интернетах сказано что _BV записывает единицу в указанный бит. ~_BV по моему разумению должен записать 0. то есть после первых четырех прерываний первые четыре бита PORTB станут нулями, разве нет?

не совсем понятно с этими

не совсем понятно с этими прерываниями - почему нельзя было просто паузой воспользоваться?
попробовал скомпилировать - компилятор поругался на TCCR0 - похоже, в attiny2313 нет такого регистра. зато поменял на TCNT0 -и вроде бы скомпилировалось без ошибок. (правда, опять же смысл пока не понял, нарыл статью, попробую завтра разобраться)
интересно, в природе существуют эмуляторы attiny - чтобы отлаживать код на компьютере?

:))) Так бездумно менять

:))) Так бездумно менять регистры не стоит, с большой вероятностью не заработает.

Задержку было бы неудобно использовать, прерывание в данном случае отсчитывается в фоновом режиме, не тратятся ресурсы МК и основная программа может параллельно выполняться.

Мой совет: скачай установи WinAVR, потом AVR Studio 4 и попробуй поотлаживать пописать, в AVR Studio есть довольно неплохой отладчик-эмулятор (видно в таблице состояние ножек, регистров и т.д.)

Есть хочется красоты - скачай VMLAB там можно смотреть на пины в виде осциллограм, очень помогает с задержками.

Также можно заюзать Proteus, тот вообще все устройство может эмулировать, только сам им пользоваться не пробовал.

да, на одном из форумов

да, на одном из форумов вычитал, что там его просто нету. вместо него есть

TCCR0A=0x00; // timer mode - Normal
TCCR0B=0x02; // timer on, CLK/8

все же, что значат эти строки в init_timer?

"да, на одном из форумов

"да, на одном из форумов вычитал, что там его просто нету. вместо него есть

TCCR0A=0x00; // timer mode - Normal
TCCR0B=0x02; // timer on, CLK/8"

А каждого МК есть свои таймеры и регистры его настроек, подробнее - в даташите конкретного МК, разделы Timer*. В общем они похожи, но в разных моделях МК разное количество таймеров, разные доступные фичи. То есть не всегда можно портировать код с tiny2313 на mega8 простым копипастом.

Приведенные строки значат настройки таймера, в каком режиме работает, с каким делителем, какие прерывания настроены и условия их срабатывания. Данные регистры отвечают за настройку таймера 0.

уже выудил даташит - 224

уже выудил даташит - 224 страницы, не считая приложений))
TCCR0 в моем даташите встречается лишь один раз - на 58 странице, и толком не рассказано что это и зачем. все остальные 13 раз - оно либо с литерой А, либо с литерой В. похоже, что у меня два таких регистра?

регистр - это байт или лишь несколько бит? про синтаксис бы почитать (<<) и |

вообще, похоже, нужна расшифровка всей программы :-)

что есть "разрешить прерывание переполнения таймера"
и что есть "prescaller"? (похоже, некий делитель, но что именно делим?)
вообще, что делается в процедуре init_timer?

CS0,CS1иCS2- уже нашел в даташите, биты выбора тиков, причем они есть только в TCCR0B
у меня если все три выключены - таймер выключен.
потом- режим без прескейлера
есть режимы с clkio кратные 8,64,256 и 1024 (что в данном случае clkio?)
и потом еще две комбинации - внешний таймер с пина T0 (Clock on falling edge/Clock on rising edge - что бы это могло означать?)
правильно ли я понял, что если установить эти три бита в один из двух последних режимов и подавать и снимать изменения сигнала (логическую единицу-логический ноль) на T0 (восьмую ножку в прямоугольном корпусе) - счетчик будет увеличиваться? и так можно посчитать,например, нажатия кнопки? (счетчик импульсов в бытовых счетчиках расхода воды не может послужить внешним таймером?)

что происходит с 40 по 50 строку - вообще не ясно :-((( (опять непонятные значки, ыыы)

pause (30000) заставляет программу сосчитать с 30000 до 0 - сколько времени на это уходит у attiny2313?

сорри за сумбур...

Шаг 1 - идем на сайт

Шаг 1 - идем на сайт atmel.com
Шаг 2 - качаем даташит на выбранный микроконтроллер
Шаг 3 - открываем раздел Timer/Counter* и читаем, там все регистры описаны.

Регистр в 8-ми битках AVR - это 1 байт. По поводу синтаксиса - глянь битовые операции в языке С. r1=(1<

init_timer - инициализирует таймер
prescaller - делитель таймера

"Разрешить прерывания" - разрешить заходить в непонятное место ISR по переполнению таймера, в котором загорается одна цифра на индикаторе. При следующем заходе - зажигается следующая - смотри гифку выше.

"внешний таймер с пина T0"
таймер умеет за базовые считать внешние тики на пине Т0. В теории можно считать кнопки, но на практике мешает дребезг контактов. Тики от счетчика воды можно считать.

"(Clock on falling edge/Clock on rising edge - что бы это могло означать?)" - гугл.транслейт в помощь, дословно в перевод тик по падению/тик по фронту.

"pause (30000)" занимает 30000 операций инкремента. Операция декремента int помойму занимает 4 такта МК, здесь точно не уверен. Тогда 30000*4 тактов МК.

clkio кажись сигналы от тактового генератора, которые подаются на периферию МК. Большего с даташита почерпнуть не удалось

Мой совет - скачай AVR Studio, установи на виндовую виртуалку, прогони программу в отладчике, поколупай регистры, практически все подобные вопросы отпадут.

просто воткнул не так давно

просто воткнул не так давно на рабочий ноут ссд накопитель - а он мало того что первого поколения, еще и маленький.
когда виртуалка работала - ноут был горяченным и постоянно шуршал винчестером. с ссд - места лишнего нет, да и умрет еще, опасаюсь.. ))
подумываю уже, не оккупировать ли второй компьютер - там и экран поздоровее))
интересно, как работает этот счетчик воды, как его включать - там прост замыкание цепи идет (импульс) или что-то другое?

Читай документацию на

Читай документацию на счетчик, хз как он работает.

мы снобы

не хотим с виндою связываться, и вообще, легких путей не ищем :-)
впрочем, то, что эмулятор существует в природе - уже хорошая новость.

есть еще виртуалки :)

есть еще виртуалки :)

куча ламерских вопросов конкретно по этой схеме

нужно проговорить, чтобы было понятно.
1. правильно ли я понимаю, что семисегментный индикатор - это блок из семи светодиодов (всего восемь пинов, семь на каждый сегмент, один - общий) которые светятся при создании разности потенциалов (если на общем 0,5В, а на отдельных сегментах по 5В - эти сегменты загораются, если на общем пине и на остальных одинаковые - ну там 0,5В или 5В, – то сегменты не горят)?
2. правильно ли я понимаю, что PB и PD выступают у нас в роли output и в каждый момент времени мы играем этими значениями (либо 0,5В, либо 5В, создавая тем самым разность потенциалов в цепи?)
3. правильно ли я понимаю, что если бы у нас был лишь один сегмент - можно было бы обойтись в принципе без транзисторов (замкнув общий пин индикатора на "-")? - типа индикатор всегда включен?
4. какую функцию выполняют транзисторы? почему нельзя было напрямую замкнуть ножки индикаторов на соответствующие пины микроконтролллера?
5. хорошо, когда все номиналы подобраны заранее. а вот как, имея на руках даташит, подобрать номинал тех же самых ограничительных сопротивлений, подбирать правильным образом транзисторы? к примеру, вот в этой схеме:
ex-minds.ru/diy/radio/8-2313thermometr.html
не указана модель индикатора.
допустим, я приобрел вот такую четырехсимвольную сборку
mitracon.ru/pdf/KGB/KGB-CX04.pdf
на какую строчку в даташите я должен обратить внимание при подборе ограничительного сопротивления? (ведь оно ограничительное, я правильно понимаю замысел автора? кстати, в вашей схеме сопротивления R1-R4 - тоже ограничительные?)
какую максимальную нагрузку можно подключать к ногам attiny2313?
зачем здесь используется конденсатор и как был выбран его номинал? из каких соображений выбираются электролитические или керамические конденсаторы в вашей схеме?

еще отдельный блок вопросов по процедуре SPI прошивки - существуют ли какие-либо ограничения, когда в силу особенностей схемы SPI прошивку использовать нельзя (ну там происходит замыкание ног микроконтроллера или нехорошее напряжение появится на других элементах платы и может вывести их из строя). вообще про порядок подачи питания при SPI перепрошивки... но эти все вопросы сформулирую чуть позже, когда до этого дойдет дело.
спасибо!

1)Да.2)Да.3)Да (уточнение

1)Да.
2)Да.
3)Да (уточнение не сегмент,а одна цифра, сегмент в данном случае - часть цифры).
4)Транзисторы выполняют роль ключа. Если напрямую к МК - не хватит мощности, есть риск спалить порты МК или светодиоды.
5)Номинал ограничительных подбирать следует так, чтобы ток, протекающий через светодиод был не более номинального. На каждый сегмент в даташите KGB-CX04 указано что номинальный ток для каждого сегмента 20мА, напряжение питания у нас 5В. Значит нужные сопротивление не менее 250Ом.

Транзисторы - любые маломощные, способные выдержать суммарный ток всех сегментов. NPN, PNP структура играет только на тип включения и потенциал на базе, при которое транзистор открывается.

R1-R4 - в каком-то смысле ограничительные, обычно по 1-10кОм

Нагрузна на порт целиком 100мА, нагрузка на отдельную ножку помойму 20мА, точно не помню, надо даташит глянуть.

Конденсаторы сглаживают пульсации питания и всяких помехи. Електролитические - НЧ помехи, керамические - ВЧ.

Про номиналы электролитов - сколько есть, каких-то четких рекомендаций нету, но жлобиться менее 10мкФ смысла нет. Про керамику - обычно 0,01-0,1мкФ, по количеству жалеть не стоит и лепить их желательно поближе к ножкам МК.

Да, важно чтобы на линиях SPI при прошивке не было посторонних сигналов (т.е. чтобы ножки не были намертво посажены на землю).

первые проблемы

сделал не подумав)
на attiny2313 всего 20 пинов, из которых в качестве портов может использоваться наверное 18 (не помню точно).
а на этом KGB - тоже 20 пинов - по сути это две двухзнаковые дуры в одном корпусе, так что похоже, эта сборка мне пока не светит? :-)
хорошо, что взял еще и 3 знаковую и несколько однознаковых. про подбор сопротивления кажется нашел материал в статье на этом сайте о включении мощного светодиода в фонарике..

еще одно проблема заключается в том, что некуда подключить шлейф от гипотетического программатора. то есть я взял розетку 2х5, но на моей беспаечной макетной плате, насколько я уловил смысл этих breadboard из ютюба, не получается установить эту розетку без замыкания контактов - слишком близко расположены эти два ряда ножек. похоже, придется паять проводки к ней, и уже проводки втыкать в макетку...

ой, еще вопрос

а зачем здесь из 12 вольт делается 5 - почему не взять три алкалиновых элемента или три аккумулятора АА (в даташите 2313 работает от 2,7 до 5,5В) или зарядку от сотового? Порт УСБ тоже дает такое напряжение...

В данном случае

В данном случае микроконтроллеру нужно 5 вольт постоянного стабильного напряжения питания, как ты его получиш - твое дело, хоть белочку в колесо посади и подключи к генератору и выпрямителю

ну вот и смущает слово

ну вот и смущает слово "стабильное".
есть подозрение, что обычная зарядка от телефона мне не поможет. правильно ли я понимаю, что если посмотреть на напряжение от зарядки в осциллографе и на напряжение от элементов питания - оно будет разным?

и почему 5 вольт, если в даташите сказано от 2,7?

Я пользовался некоторое время

Я пользовался некоторое время зарядкой от телефона Sony Erricsson. Вроде все работало хорошо, правда ток маленький, если светодиодами помигать то подойдет а вот уже двигатель покрутить не выйдет.

я целюсь на зарядку от дир320

я целюсь на зарядку от дир320 - она помощнее немного.
на нокиевской зярядке напряжение чуть больше указано (5,4В), да и слабосильная она.
думаю, на первое время сойдет.
завтра обещают привезти детальки :-) жду-не дождусь

Смотря какая зарядка, обычно

Смотря какая зарядка, обычно они импульсные и в случае некачественного исполнения вносят пульсации. Если нет прецезионных аналоговых цепей то подойдет. Но все же лучше использовать лабораторный блок питания или питание от батарей.

"и почему 5 вольт, если в даташите сказано от 2,7?"
Читай даташит внимательней.

в своем даташите ничего

в своем даташите ничего криминального не нашел. даже для SPI программирования...
я так понял, частота будет ниже, но для пробного баловства меня это не смущает.

спасибо большое за

спасибо большое за разъяснения!!!
сорри за дотошность, но мне это необходимо:

про KGB-CX04 - где именно это указано? там есть некий обратный ток 10мкА (кстати, а что это?)
есть прямой ток (у меня зелененький- 25мА)
есть пиковый прямой ток (я так понял, на короткий момент - максимум, при котором не сгорит) - 140мА
некое прямое напряжение 2,2В типовое и 2,5 - пиковое
и некое обратное напряжение - 5В.
где сказано, что все эти значения - для отдельных сегментов, а не для всей сборки сразу?
кстати, на схеме термометра по приведенной мною ссылке, получается, нельзя определить, используетсяли сборка с общим катодом, или с общим анодом? и что там означает вывод dp? точка?
про количество конденсаторов и поближе к ножкам МК - не понял.
про SPI - видимо, гарантированно будет если отдельную планку сделать для SPI программирования, а потом перетыкать микроконтроллер с этой приспособы в саму схему?

DC forward current -

DC forward current - номинальный ток, для зеленого 25мА.
Обратный ток - это параметр диода, в данном случае его не учитывают.

"где сказано, что все эти значения - для отдельных сегментов, а не для всей сборки сразу?"

Здесь надо включить здравый смысл, как конечный разработчик будет включать сборку, всю сразу?? Или он будет выбирать сегменты по отдельности. Какой параметр ему важнее, общий ток всех сегментов или ток каждого сегмента по отдельности.

сегмент dp - точка.

Электролит можно ставить один-два. А керамические рекомендуют располагать на плате как можно ближе к микроконтроллеру. Т.е. чтобы расстояние дорожек от кондера до МК было минимальным.

Когда юзал МК в дипе, то так и делал, у меня были платы на подобие http://avrlab.com/node/25 где прошивался микроконтроллер, отлаживался, а потом уже тулился в конечное устройство.

ОК || ОА?

В данном случае применена схема с общим Анодом?
В чем разница в _подключении_ индикаторов с ОК и ОА? (какие сигналы должны подаваться на входи индикатора)

вопрос не в тему: зачем иногда ножки МК пускают на землю через резистор 10кОм?

Да, в данном варианте

Да, в данном варианте используется индикатор с общим анодом.
Принципиальной разницы никакой. В ОА плюс всех светодиодов общий, в ОК - общий минус. Управляющие сигналы для ОК будут противоположны управляющим сигналам для ОА. Т.е. программу модифицируем в местах вывода данных на порты оператором унарного минус ~. Еще меняется подключение управляющих транзисторов.

Среднее арифметическое не

Среднее арифметическое не поможет... как оно избавит от скачкообразности показаний на индикаторе??? из 2 разных чисел сделает одно среднее...