Помогите новичку подключить лед матрицу

error911
Offline
Зарегистрирован: 06.10.2012

я просто хочу понять. как подключают светодиодные матрицы нарямую к МК? у светодиода есть катод и анод. один нужно подключить к плюсу, другой к минусу, тогда он засветится. но выводу у адруино логические, или +5в или 0. как их подключают?

maksim
Offline
Зарегистрирован: 12.02.2012

 Гугл конечно же предательски молчит на запрос "подключение светодиодной матрицы к микроконтроллеру"

Вот взял первую попавшуюся картинку, убрал регистры (там были сдвиговые регитры) и вуаля:

вместо 8 транзисторов VT1 - VT8 и 8 резисторов R9 - R16 можно поставить транзисторную сборку ULN2803.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Я тоже планирую поработать с матрицей. Я думаю использовать регистр + транзисторную сборку. хотя… надо уточнить. Возможно регистра будет достаточно. 

maksim
Offline
Зарегистрирован: 12.02.2012

Не будет, если не ошибаюсь то регистр (74HC595) дает максимальный ток 70 мА на вывод, а 8 светодиодов кушают примерно 120 - 160 мА, следовательно без транзисторной сборки без потери яркости на одном катоде могут одновременно гореть только 3 - 4 светодиода. Ну если вас устраивает неравномерное свечение светодиодов, то можно и обойтись без сборки. А вот как выглядит схема с uln2803:

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

 Гугл конечно же предательски молчит на запрос "подключение светодиодной матрицы к микроконтроллеру".

Да. И на форуме это не разу не обсуждалось :) Даже в последние недели. Но, видимо раз "Новичок" (это такая редкость, обязательно нужно это всем сообщить, так важно что аж в название темы попало), то искать-читать не обязательно. Новичкам все сразу с удовольствием раскажут по десятому разу. 

error911
Offline
Зарегистрирован: 06.10.2012

Не ругайте так уж сразу. И гугл смотрел и форум. Большинство подключений идет напрямую, без транзисторов. Вот по этому я в ступор впал.. Ну например вот http://robocraft.ru/blog/arduino/782.html

 

maksim
Offline
Зарегистрирован: 12.02.2012

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

error911
Offline
Зарегистрирован: 06.10.2012

 Немного не поняли вопрос. На выходах Ардуино везде плюсы, как светодиод засветится?

maksim
Offline
Зарегистрирован: 12.02.2012

Это с чего вы взяли, что везде плюсы?

Выводы дуины могут принимать 4 состояния - это:
1. Логическая 1, напряжение питания, +5v;
2. Логический 0, земля, GND, 0v;
3. Z-состояние, высокоомное состояние, вывод ни к чему не подключен;
4. PULL-UP, подтяжка к +5v, вывод подключен через резистор ~20кОм к напряжению питания.

Вам для управления матрицей подключенной напрямую к дуине понадобится 3 состояния: 1, 0, Z.

error911
Offline
Зарегистрирован: 06.10.2012

maksim пишет:

Это с чего вы взяли, что везде плюсы?

Выводы дуины могут принимать 4 состояния - это:
1. Логическая 1, напряжение питания, +5v;
2. Логический 0, земля, GND, 0v;
3. Z-состояние, высокоомное состояние, вывод ни к чему не подключен;
4. PULL-UP, подтяжка к +5v, вывод подключен через резистор ~20кОм к напряжению питания.

Вам для управления матрицей подключенной напрямую к дуине понадобится 3 состояния: 1, 0, Z.

 

Во, достойный и прямой ответ. Я это и подозревал, но разобрав скетчи, не убедился в этом. Буду смотреть доки, о состояниях выводов. Спасибо.

Еще не подскажете, как сделать матрицу 11*11 и чтоб можно было контроллировать яркость любой точки?  (Mega2560)

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

maksim пишет:

Это с чего вы взяли, что везде плюсы?

Выводы дуины могут принимать 4 состояния - это:
1. Логическая 1, напряжение питания, +5v;
2. Логический 0, земля, GND, 0v;
3. Z-состояние, высокоомное состояние, вывод ни к чему не подключен;
4. PULL-UP, подтяжка к +5v, вывод подключен через резистор ~20кОм к напряжению питания.

Вам для управления матрицей подключенной напрямую к дуине понадобится 3 состояния: 1, 0, Z.

Пожалуйста поясните 3 и 4 состояние. Не очень понятно как они работают. Я обычно включал так: один пин подавал логическую 1 (+5вольт) а на другой пин логический 0. И всё работало.
1---|10к|----|led|---0
По поводу регистр (74HC595). Соглашусь что транзисторная сборка нужна НО для того чтобы вывести информацию необходимо применять динамический принцип вывода. А это значит что максимум 8 (матрица 8х8) светодиодов будет гореть в один момент времени.
 

leshak
Offline
Зарегистрирован: 29.09.2011

 

LEVV2006 пишет:

 

Пожалуйста поясните 3 и 4 состояние. Не очень понятно как они работают.

http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-v...

Если в двух словах (ага. с моей-то многословностью :) :

Z-состояние.
Для испуга окружающих можно пользоватся словом "высокоимпендансное" (только потренироватся выговаривать :)
При все своей загадочности означает банальное "порт включен на вход". То есть нога контроллера работает как измеритель-вольтметр.
В идеале, что-бы не вносить помехи в измеряемую схему, этот вольтметр должен иметь бесконечное сопротивление. Ток через него не должен идти. Вспоминаем что вольтметр подключается паралельно нагрузке, следовательно любой ток идущий через него - вносит искажения. Мы его отняли у нагрузки. В реальности, что-бы что-то замерить, вольтметру (или микроконтроллеру) нужно что-бы через него, все-таки, хотя-бы пару электронов пробежало. Что-бы он мог понять какое напряжение есть на входе. Поэтому в реальности вместо "бесконечного сопротивления" вход, все-таки, имеет связь с землей. Но сопротивление этой связи "очень велико" (от ста килоом, до мегаом, в даташите можно посмотреть сколько именно). Ток идущий через него - микроскопический. В обычных цифровых схемах, для простоты, им просто пренебрегают.

Вообщем когмы мы сделали pinMode(PIN,INPUT); - мы всключили ногу в это самое "высокоимедасное". И дальше делаем замеры через digitalRead/analogRead. Можно pinMode и не трогать. По умолчанию (когда контроллер только включился) все ноги уже находятся в этом состоянии. Поэтому pinMode, как правило пишут просто что-бы более явно, по коду, видеть кого мы будем позже читать. Для легсти чтения кода. Обязательным он становится только если где-то раньше было pinMode(PIN,OUTPUT);

Далее. Если этот вход у нас "никуда не подключен", "болтается в воздухе" - то он будет ловить "помехи из эфира". Любая наводка, поднесенная рука и т.п. будут менять его состояние случайным образом. И мы будем "читать мусор". Типичный случай когда подключаем кнопку по схеме PIN->кнпока->земля. Когда кнопка нажата - на пине есть "100% ноль". А вот когда она разомкнута - получается что пин никуда не подключен и ведет себя как приемная "антена". И читая его мы будем постоянно ошибатся. Не сможем отличить когда там ноль "потому что кнопку нажали", а когда там ноль потому-что "помеху поймали".

Что-бы этого избежать. Берут резистор большого номинала и "подтягивают" пин к питанию (pin<->10K<->5v). Когда кнопка разомкнута, через этот 10K на пин поступает небольшой ток и его хватает что-бы держать пин в "гарантированной единице". Когда кнопка нажата. Мы получаем что пин у нас подключен одновременно и к питанию и к земле. Но. К питанию он подключен через 10K, а к земле через 0K (кнопка в замкнутом состоянии - это нулевое сопротивление). Истесвенно 0K пересилит и, в итоге, на пине будет "логический ноль".
То есть мы, теперь, можем четко отличать нажатую кнопку от не нажатой.
Что-бы "сбить на столку" помеха должна быть такой сильной что-бы пересилить ток идущий через 10K резистор. То есть "быть весьма существеной".

Так как эта задача "сделать подтяжку ноги" настолько типична и часта, то производители чипа решили вот этот "подтягивающий резистор" встроить прямо в микроконтроллер. И дать возможность его "подсоединять" програмно (правда они взяли не 10K, а 20K, но сути это не меняет).
Включить его "програмно"" очень просто. Достаточно сделать digitalWrite(PIN,HIGH) ноге которая ВКЛЮЧЕНА НА ВХОД. То есть. digitalWrite(PIN,HIGH) имеет две функции. Если порты включен на выход, то он установит у него лоигческую единицу (сделает там 5v), а если он включен на вход - соеденит его, через резистор 20K с питанием.

Итого:
1. Логическая единица - pinMode(PIN,OUTPUT); digitalWrite(PIN,HIGH);
2. Логический ноль - pinMode(PIN,OUTPUT); digitalWrite(PIN,LOW);
3. Z-состояние - pinMode(PIN,INPUT);
4. PULL-UP - pinMode(PIM,INPUT);digitalWrite(PIN,HIGH);

 

maksim
Offline
Зарегистрирован: 12.02.2012

LEVV2006 пишет:

По поводу регистр (74HC595). Соглашусь что транзисторная сборка нужна НО для того чтобы вывести информацию необходимо применять динамический принцип вывода. А это значит что максимум 8 (матрица 8х8) светодиодов будет гореть в один момент времени.
То что индикация динамическая это само собой, с такой матрицей по другому и не получится. Именно о том я и пишу, что без сборки одновременно из светодиодов с общим катодом будут гореть ярко 3-4 светодиода , а когда все восемь, они горят тускло.

По поводу состояний выводов вам ответили выше.

maksim
Offline
Зарегистрирован: 12.02.2012

error911 пишет:
Еще не подскажете, как сделать матрицу 11*11 и чтоб можно было контроллировать яркость любой точки?  (Mega2560)
Как сделать не знаю, спаять самому, собрать из нескольких или купить готовую. А управлять можно, аноды нужно подключать к ШИМ выводам дуины, а катоды так же через транзистоы (сборку) к цифровым выводам.

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

leshak пишет:

 

LEVV2006 пишет:

 

Пожалуйста поясните 3 и 4 состояние. Не очень понятно как они работают.


 

Итого:
1. Логическая единица - pinMode(PIN,OUTPUT); digitalWrite(PIN,HIGH);
2. Логический ноль - pinMode(PIN,OUTPUT); digitalWrite(PIN,LOW);
3. Z-состояние - pinMode(PIN,INPUT);
4. PULL-UP - pinMode(PIM,INPUT);digitalWrite(PIN,HIGH);
 

ДАААА. Знатная простыня))) всё стало ясно. Спасибо! На ebay заказал матрицы. Как приедут буду пробовать.

leshak
Offline
Зарегистрирован: 29.09.2011

Еще замечу, что начиная с ардуино 1.0.1 у функции pinMode появился еще один вариант второго параметра,  кроме INPUT/OUTPUT

Включить порт на вход и подключить подтягивающий можно сразу, без использования digitalWrite

pinMode(PIN,INPUT_PULLUP); сделает то же самое что pinMode(PIN,INPUT);digitalWrite(PIN,HIGH);

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

maksim пишет:

error911 пишет:
Еще не подскажете, как сделать матрицу 11*11 и чтоб можно было контроллировать яркость любой точки?  (Mega2560)
Как сделать не знаю, спаять самому, собрать из нескольких или купить готовую. А управлять можно, аноды нужно подключать к ШИМ выводам дуины, а катоды так же через транзистоы (сборку) к цифровым выводам.

С Шимом не получится. Потому что даже на меге нет 121 выхода с ШИМом :) Если индикация динамическая, то этот самый ШИМ нужно реализовывать ручками (причем, 11-канальный). Есть специальные микросхемы, которые зовутся "драйвер светодиодов", они имеют последовательный вход (кажись, SPI) и там каждый выход программируется своим ШИМом. 1 микруха имеет 40 выходов.

Еще замечу про динамическую индикацию. Если для светодиода для нормального свечения нужно 10 мА, то в режиме динамической индикации СРЕДНИЙ ток через диод должен быть 10мА. Если мы "динамичим" 8 рядов, то каждая колонка потребляет 8х10=80мА (все светодиоды включены), так что без транзисторных ключей - никак.

maksim
Offline
Зарегистрирован: 12.02.2012

AlexFisher пишет:
С Шимом не получится. Потому что даже на меге нет 121 выхода с ШИМом :) Если индикация динамическая, то этот самый ШИМ нужно реализовывать ручками (причем, 11-канальный). Есть специальные микросхемы, которые зовутся "драйвер светодиодов", они имеют последовательный вход (кажись, SPI) и там каждый выход программируется своим ШИМом. 1 микруха имеет 40 выходов.

Какая статика? Какие 121 ШИМ? (риторика)

И речи ни шло ни о какой статике - только динамика и не как иначе. Зачем мудрить 11-канальный ШИМ и использовать драйвера, если на Меге есть 11 ШИМ выводов?  

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

 

maksim
Offline
Зарегистрирован: 12.02.2012

AlexFisher пишет:
Еще замечу про динамическую индикацию. Если для светодиода для нормального свечения нужно 10 мА, то в режиме динамической индикации СРЕДНИЙ ток через диод должен быть 10мА. Если мы "динамичим" 8 рядов, то каждая колонка потребляет 8х10=80мА (все светодиоды включены), так что без транзисторных ключей - никак.
Прям уж вообще никак? Вообще работать не будет?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

maksim пишет:

Прям уж вообще никак? Вообще работать не будет?

Будет. Но недолго. Если проц в панельке, то быть смелым относительно безопасно :)

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

maksim пишет:

 

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

 

Тут я был не прав, получится, но нужно учитывать, что частота ШИМов должна быть больше частоты мутиплексирования или на много, или кратной, иначе возникнут "биения" и все будет незапланировано мерцать.

maksim
Offline
Зарегистрирован: 12.02.2012

Да, это обязательно.

maksim
Offline
Зарегистрирован: 12.02.2012

  И вот тут уже я могу быть не правым. Как известно частота ШИМов, если пользоваться analogWrite() 490 Гц. Время подсветки одного катода можно сделать например 3 миллисекунды, тогда на кадр получается 33 мс и частота "кадров" получается ~30 Гц, для человеческого глаза этого достатчно. И получается, что частота мутиплексирования 330 Гц, так что нужно как-то синхронизировать частоту мутиплексирования с частотой ШИМа.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Вот это как раз я и имел в виду. Лучше поднять частоту ШИМа. Посмотрите потроха библиотеки AFMotor - там как раз есть это. Выдрать отттуда кусочек (или в даташите взять) - уменьшить предделитель таймеров. Частота ШИМов получается 16 кГц - можете поднять частоту кадров до 50-100 Гц смело. 

error911
Offline
Зарегистрирован: 06.10.2012

Ребята, привет еще раз! Я тут нарыл в просторах интернета вот такую микруху - MAX7219.

Почему все мутят схемы сложные (строки на регистрах сдвига, столбцы на транзисторах, плюс еще по мелочи резисторов пачка) если есть такая прекрасная микросхема? Может камень подводный какой в ней? Всего 3 порта на ардуине займет. Каскадное наращивание поддерживает (пин - dout), 16 градаций яркости... Одним резистором выставляешь ток на матрице и все! Пишут что дорогая, из за этого не очень популярна. Посмотрел на ebay, 15 рублей всего. Вроде бы кайф - или нет? подскажите пожалуйста.

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Нормальная микруха - драйвер светодиодов. Я купил себе такую (у нас она в DIPе стоит 320р, в SO-шном корпусе - 170р) , но пока не юзал. 

leshak
Offline
Зарегистрирован: 29.09.2011

error911 пишет:

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

Цена. Легкость достать (не факт что ее купить будет очень просто).

Человеку свойственно использовать "то что привычно". А, особенно новичкам и самодельщикам - на что есть статьи-примеры и готовые либы. Могут "банально не знать". Всяких микрух такое море и постоянно "что-то новое появляется", далеко не все имеют возможность следить "за новинками рынка". Так что не всегда можно логически понять популярность какого-то решения/микрухи.

Patriot
Offline
Зарегистрирован: 25.06.2015

С MAX7219 везде примеры как подключить матрицу 8x8, а можно ли подключить с ее помощью 4x12 или для этого надо две таких микросхемы использовать?

 

Patriot
Offline
Зарегистрирован: 25.06.2015

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

 

vk007
Offline
Зарегистрирован: 16.06.2015

Почему бы и нет. 8х8 - это 64 светодиода, а у вас их всего 48 (4х12). Их главное правильно "электрически" подключить в матрицу, в вашем случае 6х8 (две линии испоьзоваться не будут). А в пространстве вы можете расположить светодиоды как хотите, хоть в одну линию.

Patriot
Offline
Зарегистрирован: 25.06.2015

Что-то да, не подумал, что можно просто по разному в пространстве разместить:)

 

Еще попробовал через сдвиговые регистры, но если зачешь все 8 диодов, то превышает допустимый ток для микросхемы 74HC595

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Patriot пишет:

Еще попробовал через сдвиговые регистры, но если зачешь все 8 диодов, то превышает допустимый ток для микросхемы 74HC595

В таких случаях после сдвигового регистра 74HC595 обычно ставят транзисторную сборку ULN2803. Только там выход инверсный получится.

P.S. Домашний кокпит строите? :)

Patriot
Offline
Зарегистрирован: 25.06.2015

О, это то что нужно! Попробую сегодня уместить этов плату. И наверное попробую сразу два варианта сделать: 74HC595 + ULN2803 и второй варинт с помощью MAX7219. Оставлю в итоге то, что проще реализуется и лучше выглядит. Думаю, если с помощью MAX7219 не будет видно мерцания - то это лучший вариант.

Во, что еще подумалось: если MAX7219 работает с помощью динамической индикации, то получается ток на светодиод надо чуть больше, что бы за счет полученного ШИМа он не горел тускло?

 

Кокпит A-10C строю, пока несколько панелей собрал и несколько сложных на макетках ( CDU дисплей, контрмеры). И иногда обращаюсь сюда на форум по вопросам схемотехники, т.к. да этого даже паяльник не знал как держать :-D Но за полгода довльно уже не плохо ориентируюсь в этом мире)))

Пара фото:

 

 

 

Видео с CDU. Arduino Due + display не помню уже какой, кучу уже перепробовал))

https://youtu.be/sxuf3jZS07g

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Patriot пишет:

Во, что еще подумалось: если MAX7219 работает с помощью динамической индикации, то получается ток на светодиод надо чуть больше, что бы за счет полученного ШИМа он не горел тускло?

Я не работал с MAX7219, но пишут, что яркость можно регулировать:

"Настройка яркости в MAX7219 может быть выполнена программно, путем задания времени (ширины импульса) включения индикатора. Для этого достаточно записать  число от 00h до 0Fh в регистр микросхемы 0Ah. Всего имеется 16 градаций яркости. Минимальная яркость достигается при значении 0, максимальная, при значении 0Fh. Дополнительно изменить яркость можно путем подбора внешнего сопротивления Rset, с помощью которого производится ограничение тока через индикаторы.http://mcucpu.ru/index.php/pdevices/41-indicators/85-workmax7219

"При помощи резистора на pin 18 задается ток Iset, которым устанавливается ток через светодиоды, что позволяет регулировать свечение сегментов индикатора «аналоговым» способом. В MAX7219/VAX7221 предусмотрена регулировка яркости сегментов с помощью ШИМа.http://pro-diod.ru/electronica/max7219-max7221-drajver-dlya-svetodiodnoj-indikacii.html

"18 - ISET. К этому выводу подключается резистор (вторая нога резистора - к плюсу), позволяющий задавать пиковый ток сегмента и таким образом устанавливать яркость свечения сегментов. Минимальное сопротивление этого резистора должно быть 9,53 кОм, что примерно соответствует току сегмента 40мА. Ток, текущий через ISET номинально в 100 раз меньше пикового тока сегмента. Из даташита совершенно непонятно, одинаково ли падение напряжения на этом резисторе, но если считать, что оно одинаково, то это даст такую формулу для расчёта резистора: R=9,53*40/Ipk, где Ipk - требуемый пиковый ток сегмента. Подключив к этой ноге переменный резистор - можно регулировать яркость свечения сегментов.http://radiohlam.ru/raznoe/max7219_7221.htm

Patriot пишет:

Кокпит A-10C строю

Симулятор DCS? 

Patriot пишет:

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

Хорошо получается, шрифты на CDU понравились. У Вас отдельной темы на avsim.su случайно нет? :)

Patriot
Offline
Зарегистрирован: 25.06.2015

Jeka_M пишет:

Я не работал с MAX7219, но пишут, что яркость можно регулировать:

"Настройка яркости в MAX7219 может быть выполнена программно, путем задания времени (ширины импульса) ...

 

Благодарю! Очень интересная информация!

Jeka_M пишет:

Симулятор DCS? 
 
Ага, он самый. 

<span style="line-height:1.5em;">Jeka_M</span><span style="line-height:1.5em;"> пишет:

Хорошо получается, шрифты на CDU понравились. У Вас отдельной темы на avsim.su случайно нет? :)

Шрифт целую ночь срисовывал попиксельно из игры)) Так что все буквы в точности сходятся как в игре:) Даже их размерность) Только сам дисплей к сожалению несколько не такой. По размеру близок к оригиналу (3.95") а вот по разрешению нет. Но это если совсем придераться. На авсиме тема есть: http://www.avsim.su/forum/topic/138913-%D0%BA%D0%BE%D0%BA%D0%BF%D0%B8%D1%82-%D0%B3%D0%B0%D0%B4%D0%BA%D0%BE%D0%B3%D0%BE-%D1%83%D1%82%D0%B5%D0%BD%D0%BA%D0%B0-a-10c/

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

 

 

kaktus
Offline
Зарегистрирован: 31.12.2014

leshak Спасибо! сам бы не догодался, а прочел и залез на сайт

3 Z - pinMode(PIN, INPUT); digitalWrite(PIN, HIGHT);

4 PULLUP - pinMode(PIN, INPUT); digitalWrite(PIN, LOW);

https://www.arduino.cc/en/Reference/Constants

"A pin may also be configured as an INPUT with pinMode(), and subsequently made HIGH with digitalWrite(). This will enable the internal 20K pullup resistors, which will pull up the input pin to a HIGH reading unless it is pulled LOW by external circuitry. This is how INPUT_PULLUP works and is described below in more detail."

заземлять пины 5кОм нужно ?

kaktus
Offline
Зарегистрирован: 31.12.2014

sn74hc595, uln2803a, TA07-11, shiftOut

int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
 
void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
func1(14,1);
func1(17,2);
func1(17,4);
func1(31,8);
func1(17,16);
func1(17,32);
func1(17,64);
}

void func1 (int numberToDisplay1,int numberToDisplay2){
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay2); 
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay1);
    digitalWrite(latchPin, HIGH);
    delay(5);  
  }

спасибо maksim
микросхема с транзисторами оказалась очень полезной