Помогите новичку подключить лед матрицу
- Войдите на сайт для отправки комментариев
Сб, 06/10/2012 - 18:20
я просто хочу понять. как подключают светодиодные матрицы нарямую к МК? у светодиода есть катод и анод. один нужно подключить к плюсу, другой к минусу, тогда он засветится. но выводу у адруино логические, или +5в или 0. как их подключают?
Гугл конечно же предательски молчит на запрос "подключение светодиодной матрицы к микроконтроллеру"
Вот взял первую попавшуюся картинку, убрал регистры (там были сдвиговые регитры) и вуаля:
вместо 8 транзисторов VT1 - VT8 и 8 резисторов R9 - R16 можно поставить транзисторную сборку ULN2803.
Я тоже планирую поработать с матрицей. Я думаю использовать регистр + транзисторную сборку. хотя… надо уточнить. Возможно регистра будет достаточно.
Не будет, если не ошибаюсь то регистр (74HC595) дает максимальный ток 70 мА на вывод, а 8 светодиодов кушают примерно 120 - 160 мА, следовательно без транзисторной сборки без потери яркости на одном катоде могут одновременно гореть только 3 - 4 светодиода. Ну если вас устраивает неравномерное свечение светодиодов, то можно и обойтись без сборки. А вот как выглядит схема с uln2803:
Гугл конечно же предательски молчит на запрос "подключение светодиодной матрицы к микроконтроллеру".
Да. И на форуме это не разу не обсуждалось :) Даже в последние недели. Но, видимо раз "Новичок" (это такая редкость, обязательно нужно это всем сообщить, так важно что аж в название темы попало), то искать-читать не обязательно. Новичкам все сразу с удовольствием раскажут по десятому разу.
Не ругайте так уж сразу. И гугл смотрел и форум. Большинство подключений идет напрямую, без транзисторов. Вот по этому я в ступор впал.. Ну например вот http://robocraft.ru/blog/arduino/782.html
Напрямую работать будет, но опять же повторюсь, что свечение светодиодов будет не равномерным, если просто поиграться, то подключайте напрямую.
Немного не поняли вопрос. На выходах Ардуино везде плюсы, как светодиод засветится?
Это с чего вы взяли, что везде плюсы?
Выводы дуины могут принимать 4 состояния - это:
1. Логическая 1, напряжение питания, +5v;
2. Логический 0, земля, GND, 0v;
3. Z-состояние, высокоомное состояние, вывод ни к чему не подключен;
4. PULL-UP, подтяжка к +5v, вывод подключен через резистор ~20кОм к напряжению питания.
Вам для управления матрицей подключенной напрямую к дуине понадобится 3 состояния: 1, 0, Z.
Это с чего вы взяли, что везде плюсы?
Выводы дуины могут принимать 4 состояния - это:
1. Логическая 1, напряжение питания, +5v;
2. Логический 0, земля, GND, 0v;
3. Z-состояние, высокоомное состояние, вывод ни к чему не подключен;
4. PULL-UP, подтяжка к +5v, вывод подключен через резистор ~20кОм к напряжению питания.
Вам для управления матрицей подключенной напрямую к дуине понадобится 3 состояния: 1, 0, Z.
Во, достойный и прямой ответ. Я это и подозревал, но разобрав скетчи, не убедился в этом. Буду смотреть доки, о состояниях выводов. Спасибо.
Еще не подскажете, как сделать матрицу 11*11 и чтоб можно было контроллировать яркость любой точки? (Mega2560)
Это с чего вы взяли, что везде плюсы?
Выводы дуины могут принимать 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) светодиодов будет гореть в один момент времени.
Пожалуйста поясните 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);
По поводу регистр (74HC595). Соглашусь что транзисторная сборка нужна НО для того чтобы вывести информацию необходимо применять динамический принцип вывода. А это значит что максимум 8 (матрица 8х8) светодиодов будет гореть в один момент времени.
По поводу состояний выводов вам ответили выше.
Пожалуйста поясните 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 заказал матрицы. Как приедут буду пробовать.
Еще замечу, что начиная с ардуино 1.0.1 у функции pinMode появился еще один вариант второго параметра, кроме INPUT/OUTPUT
Включить порт на вход и подключить подтягивающий можно сразу, без использования digitalWrite
pinMode(PIN,INPUT_PULLUP); сделает то же самое что pinMode(PIN,INPUT);digitalWrite(PIN,HIGH);
С Шимом не получится. Потому что даже на меге нет 121 выхода с ШИМом :) Если индикация динамическая, то этот самый ШИМ нужно реализовывать ручками (причем, 11-канальный). Есть специальные микросхемы, которые зовутся "драйвер светодиодов", они имеют последовательный вход (кажись, SPI) и там каждый выход программируется своим ШИМом. 1 микруха имеет 40 выходов.
Еще замечу про динамическую индикацию. Если для светодиода для нормального свечения нужно 10 мА, то в режиме динамической индикации СРЕДНИЙ ток через диод должен быть 10мА. Если мы "динамичим" 8 рядов, то каждая колонка потребляет 8х10=80мА (все светодиоды включены), так что без транзисторных ключей - никак.
Какая статика? Какие 121 ШИМ? (риторика)
И речи ни шло ни о какой статике - только динамика и не как иначе. Зачем мудрить 11-канальный ШИМ и использовать драйвера, если на Меге есть 11 ШИМ выводов?
Еще как получится или хотите сказать что если аноды матрицы подключить к ШИМ выводам дуины, а катоды матрицы через транзисторную сборку к цифровым выводам, то незьзя будет управлять яркостью любой точки в отдельности??? И естественно матрица по типу такая же как и выше на схеме.
Прям уж вообще никак? Вообще работать не будет?
Еще как получится или хотите сказать что если аноды матрицы подключить к ШИМ выводам дуины, а катоды матрицы через транзисторную сборку к цифровым выводам, то незьзя будет управлять яркостью любой точки в отдельности??? И естественно матрица по типу такая же как и выше на схеме.
Тут я был не прав, получится, но нужно учитывать, что частота ШИМов должна быть больше частоты мутиплексирования или на много, или кратной, иначе возникнут "биения" и все будет незапланировано мерцать.
Да, это обязательно.
И вот тут уже я могу быть не правым. Как известно частота ШИМов, если пользоваться analogWrite() 490 Гц. Время подсветки одного катода можно сделать например 3 миллисекунды, тогда на кадр получается 33 мс и частота "кадров" получается ~30 Гц, для человеческого глаза этого достатчно. И получается, что частота мутиплексирования 330 Гц, так что нужно как-то синхронизировать частоту мутиплексирования с частотой ШИМа.
Вот это как раз я и имел в виду. Лучше поднять частоту ШИМа. Посмотрите потроха библиотеки AFMotor - там как раз есть это. Выдрать отттуда кусочек (или в даташите взять) - уменьшить предделитель таймеров. Частота ШИМов получается 16 кГц - можете поднять частоту кадров до 50-100 Гц смело.
Ребята, привет еще раз! Я тут нарыл в просторах интернета вот такую микруху - MAX7219.
Почему все мутят схемы сложные (строки на регистрах сдвига, столбцы на транзисторах, плюс еще по мелочи резисторов пачка) если есть такая прекрасная микросхема? Может камень подводный какой в ней? Всего 3 порта на ардуине займет. Каскадное наращивание поддерживает (пин - dout), 16 градаций яркости... Одним резистором выставляешь ток на матрице и все! Пишут что дорогая, из за этого не очень популярна. Посмотрел на ebay, 15 рублей всего. Вроде бы кайф - или нет? подскажите пожалуйста.
Нормальная микруха - драйвер светодиодов. Я купил себе такую (у нас она в DIPе стоит 320р, в SO-шном корпусе - 170р) , но пока не юзал.
Почему все мутят схемы сложные (строки на регистрах сдвига, столбцы на транзисторах, плюс еще по мелочи резисторов пачка) если есть такая прекрасная микросхема?
Цена. Легкость достать (не факт что ее купить будет очень просто).
Человеку свойственно использовать "то что привычно". А, особенно новичкам и самодельщикам - на что есть статьи-примеры и готовые либы. Могут "банально не знать". Всяких микрух такое море и постоянно "что-то новое появляется", далеко не все имеют возможность следить "за новинками рынка". Так что не всегда можно логически понять популярность какого-то решения/микрухи.
С MAX7219 везде примеры как подключить матрицу 8x8, а можно ли подключить с ее помощью 4x12 или для этого надо две таких микросхемы использовать?
Надо сделать управление такой панелью, но не слабо представляю каким образом. Если бы все через пины напрямую работало, то было бы проще)) Но ведь сила тока превысит допустимое.
Почему бы и нет. 8х8 - это 64 светодиода, а у вас их всего 48 (4х12). Их главное правильно "электрически" подключить в матрицу, в вашем случае 6х8 (две линии испоьзоваться не будут). А в пространстве вы можете расположить светодиоды как хотите, хоть в одну линию.
Что-то да, не подумал, что можно просто по разному в пространстве разместить:)
Еще попробовал через сдвиговые регистры, но если зачешь все 8 диодов, то превышает допустимый ток для микросхемы 74HC595
Еще попробовал через сдвиговые регистры, но если зачешь все 8 диодов, то превышает допустимый ток для микросхемы 74HC595
В таких случаях после сдвигового регистра 74HC595 обычно ставят транзисторную сборку ULN2803. Только там выход инверсный получится.
P.S. Домашний кокпит строите? :)
О, это то что нужно! Попробую сегодня уместить этов плату. И наверное попробую сразу два варианта сделать: 74HC595 + ULN2803 и второй варинт с помощью MAX7219. Оставлю в итоге то, что проще реализуется и лучше выглядит. Думаю, если с помощью MAX7219 не будет видно мерцания - то это лучший вариант.
Во, что еще подумалось: если MAX7219 работает с помощью динамической индикации, то получается ток на светодиод надо чуть больше, что бы за счет полученного ШИМа он не горел тускло?
Кокпит A-10C строю, пока несколько панелей собрал и несколько сложных на макетках ( CDU дисплей, контрмеры). И иногда обращаюсь сюда на форум по вопросам схемотехники, т.к. да этого даже паяльник не знал как держать :-D Но за полгода довльно уже не плохо ориентируюсь в этом мире)))
Пара фото:
Видео с CDU. Arduino Due + display не помню уже какой, кучу уже перепробовал))
https://youtu.be/sxuf3jZS07g
Во, что еще подумалось: если 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
Кокпит A-10C строю
Симулятор DCS?
пока несколько панелей собрал и несколько сложных на макетках ( CDU дисплей, контрмеры). И иногда обращаюсь сюда на форум по вопросам схемотехники, т.к. да этого даже паяльник не знал как держать :-D Но за полгода довльно уже не плохо ориентируюсь в этом мире)))
Хорошо получается, шрифты на CDU понравились. У Вас отдельной темы на avsim.su случайно нет? :)
Я не работал с MAX7219, но пишут, что яркость можно регулировать:
"Настройка яркости в MAX7219 может быть выполнена программно, путем задания времени (ширины импульса) ...
Хорошо получается, шрифты на 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/
Где-нить в апреле думаю дело пойдет быстрее, сейчас загружен проектом на работе.
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кОм нужно ?
sn74hc595, uln2803a, TA07-11, shiftOut
спасибо maksim
микросхема с транзисторами оказалась очень полезной