Оказывается возможно сделать 7-сегментный дисплей, который будет менять цвет индикации. Это делается на основе разноцветных светодиодов WS2812B, специальной печатной платы и корпуса. Такой дисплей работает с Arduino и область его применения достаточно широкая.
Дисплей основан на специальных цветных светодиодах WS2812B, большим количеством которых можно управлять с помощью одного контакта. То есть это интеллектуальный светодиодный драйвер, подключенный к диоду RGB. Он позволяет управлять большим количеством светодиодов с помощью только одного вывода. Для этих LED требуется только источник питания (5 В) и один сигнал, они соединены в схеме так:
В случае длинных кабелей перед подключением к микроконтроллеру стоит добавить резистор на линии передачи данных. Конечно, для управления ими требуется использование соответствующего протокола.
Все управление осуществляется с помощью одного цифрового сигнала, который подается на вывод DIN первого светодиода. Отправляем сигнал по одному цветным битам (правильно закодированным). На каждый светодиод приходится 24 бита (3 байта — красный байт, зеленый байт, синий байт). Это означает, что можем отображать широкий диапазон цветов, теоретически до 16 777 216 различных оттенков! Данные биты передаются, пока не зафиксируем низкий уровень выходного сигнала минимум на 50 мкс. Сами биты кодируются путем указания высокого и низкого уровня на выводе в течение соответствующего времени. В итоге это выглядит как показано на картинке:
если хотим отправить бит 0, то устанавливаем контакт связи в высокое состояние на время T0H, а затем в низкое состояние на время T0L.
если хотим отправить бит 1, мы устанавливаем контакт связи в высокое состояние на время T1H, а затем в низкое состояние на Время T1L.
если хотим объявить, что завершаем передачу данных (то есть после этой паузы можем управлять светодиодами с самого начала), установить контакт в низкое состояние хотя бы на время.
Для проекта использовалась плата PIC18F45K50 (PIC18F4550 также подошла бы сюда, поскольку оба этих микроконтроллера почти идентичны). На этой плате установлен кварцевый генератор на 20 МГц. Кроме того, она содержит довольно простые элементы, такие как резистор сброса, конденсаторы, разъем USB (используется только для питания).
Но вернёмся к индикатору. Плата представляет собой одну цифру. Цифры можно комбинировать друг с другом и получать в итоге больше цифр (управляемых одним контактом) благодаря использованию WS2812B.
Сделано все это размером не более 5 на 5 см.
Но пайка это еще не всё, ведь нужно сделать фильтр, который немного рассеет свет и даст эффект освещения целых сегментов (а не отдельных светодиодов). Использовался для этого один из слоев из старой ЖК-матрицы. Выбран слой, который дает лучший эффект, бело-молочный:
Наклеим на элемент с помощью суперклея, так как больше менять не планируется.
Панели спроектированы так, чтобы их можно было соединять вместе. В конечном итоге будем использовать прототипы в качестве индикатора температуры, поэтому соединим вместе три модуля:
Вот LED модуль в действии (максимально возможная яркость):
Пример кода для Arduino
А это короткий тестовый код для Arduino. Код поддерживает оцифровку, и вы можете легко добавлять к нему дополнительные цифры. Он основан на библиотеке Adafruit_NeoPixel.h
#define LED_PIN 6
#define DIGITS 3 #define LED_COUNT DIGITS*7
// Declare our NeoPixel strip object: Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); void setup() < // These lines are specifically to support the Adafruit Trinket 5V 16 MHz. // Any other board, you can remove this part (but no harm leaving it): #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // END of Trinket-specific code.
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show(); // Turn OFF all pixels ASAP strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255) > int masks[10] = < 119, 68, 62, 110, 77, 107, 251, 70, 0xFF, 239 >; void displayDigit(int d, int pos, uint32_t color) < int ofs = pos * 7; for(int i=0; i
Форум по обсуждению материала 7-СЕГМЕНТНЫЙ RGB ИНДИКАТОР
Обзор возможностей комплекта бесконтактного модуля считывателя карт RFID RDM6300. Подключение схемы и тесты.
Самодельный 8-канальный PWM MOSFET LED Chaser на микроконтроллере 16F628A.
Инструкция новичкам как научиться паять паяльником — различные провода, платы, микросхемы и другие детали.
Источник
Светодиодные семисегментные индикаторы своими руками
Переделка семисегментного индикатора.
Автор: Валерий Афанасьев Опубликовано 11.02.2008
Я думаю, что не ошибусь, когда скажу, что многие самодельщики используют в своих конструкциях семисегментные светодиодные индикаторы. Да, это очень удобная в применении штука, только вот беда — выбор цветов невелик, да и по яркости они порой оставляют желать лучшего. А крупные по размеру индикаторы не хотят светиться от низкого напряжения. Знакомая ситуация? Но всё, как говориться, в ваших руках. Предлагаю свой способ переделки индикаторов в любой цвет свечения, любой яркости и даже многоцветного сегмента. Для переделки годятся даже горелые индикаторы.
Берём индикатор и аккуратно зажимаем его в тиски фрезерного станка.
И потом не торопясь, слой за слоем снимаем заливку вместе с платой. Нам, в дальнейшем, понадобиться только сама пластмассовая матрица.
Не торопитесь и не старайтесь снять весь слой пластика за один проход, индикатор — вещь довольно хрупкая.
Срезаем до того момента, когда от платы ничего не останется. Потом надо проверить на просвет — не осталось ли чего лишнего, все сегменты должны равномерно просвечивать.
Потом при помощи клея «Поксипол-прозрачный» надо приклеить напротив каждого сегмента свои светодиоды. Для этого я применяю светодиоды «Пиранья», у них плоская верхушка и отсутствие линзы, то что нам и надо. Есть правда «Пиранья» и с линзами, но этот «недостаток» легко устраняется напильником. Можно применять и круглые диоды 3-5 миллиметров, только тогда придётся спилить у них линзу. На фото у меня стоят по два диода на сегмент, что обеспечивает равномерное освещение. Но можно ставить и больше, всё зависит от схемы включения и вашего желания. Диоды тоже можно соединять в сегменте как последовательно, так и параллельно. При параллельном включении ставьте на каждый диод свой балластный резистор. И желательно диоды из одной партии, что обеспечит равномерность освещения и чистоту цвета. Можно поставить и два разных по цвету диода, тогда на сегменте получится плавный переход цвета от одного к другому. Или в центре одного цвета, а по краям другого. Как видите вариантов много.
После приклейки распаяйте диоды по вашей схеме.
И проверьте каждый сегмент.
Вот на этом модернизацию можно завершить. А так выглядит готовый индикатор после переделки.
Ещё несколько рекомендаций. После распайки покрасьте обратную сторону чёрной нитроэмалью или залейте чёрным термоклеем из клеящего пистолета, это не позволит проникать свету из одного сегмента в другой и поможет избежать паразитной засветки не горящих сегментов. Снять пластик можно и без фрезерного станка, только в этом случае понадобиться усердно, поработать напильником. И последнее. При пайке пользуйтесь заземлённым паяльником. Как показала практика, диоды очень чувствительны к наведённому напряжению, а на паяльнике почти всегда присутствует, хоть и очень слабая, фаза. Особенно чувствительны к этому зелёные диоды и изумрудным цветом свечения. Даже просто при прикосновении жала незаземлённого паяльника, кристалл этого диода начинает светиться. Но такой «засветившийся» диод проработает крайне мало. Начнёт мерцать и быстро погаснет. Заземлите паяльник и вы избежите многих проблем, связанных с заменой горелых диодов. Удачи вам!
Семисегментный светодиодный индикатор — устройство отображения цифровой информации. Это — наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.
Семисегментный светодиодный индикатор , как говорит его название, состоит из семи элементов индикации (сегментов), включающихся и выключающихся по отдельности. Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр. Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimal point, DP), предназначенная для отображения дробных чисел. Изредка на семисегментном индикаторе отображают буквы.
Семисегментные светодиодные индикаторы бывают разных цветов, обычно это белый, красный, зеленый, желтый и голубой цвета. Кроме того, они могут быть разных размеров.
Также, светодиодный индикатор может быть одноразрядным (как на рисунке выше) и многоразрядным. В основном в практике используются одно-, двух-, трех- и четырехразрядные светодиодные индикаторы:
Кроме десяти цифр, семисегментные индикаторы способны отображать буквы. Но лишь немногие из букв имеют интуитивно понятное семисегментное представление. В латинице : заглавные A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, строчные a, b, c, d, e, g, h, i, n, o, q, r, t, u. В кириллице : А, Б, В, Г, г, Е, и, Н, О, о, П, п, Р, С, с, У, Ч, Ы (два разряда), Ь, Э/З. Поэтому семисегментные индикаторы используют только для отображения простейших сообщений.
Всего семисегментный светодиодный индикатор может отобразить 128 символов:
В обычном светодиодном индикаторе девять выводов: один идёт к катодам всех сегментов, а остальные восемь — к аноду каждого из сегментов. Эта схема называется «схема с общим катодом», существуют также схемы с общим анодом (тогда все наоборот). Часто делают не один, а два общих вывода на разных концах цоколя — это упрощает разводку, не увеличивая габаритов. Есть еще, так называемые «универсальные», но я лично с такими не сталкивался. Кроме того существуют индикаторы со встроенным сдвиговым регистром, благодаря чему намного уменьшается количество задействованных выводов портов микроконтроллера, но они намного дороже и в практике применяются редко. А так как необъятное не объять, то такие индикаторы мы пока рассматривать не будем (а ведь есть еще индикаторы с гораздо большим количеством сегментов, матричные).
Многоразрядные светодиодные индикаторы часто работают по динамическому принципу: выводы одноимённых сегментов всех разрядов соединены вместе. Чтобы выводить информацию на такой индикатор, управляющая микросхема должна циклически подавать ток на общие выводы всех разрядов, в то время как на выводы сегментов ток подаётся в зависимости от того, зажжён ли данный сегмент в данном разряде.
Подключение одноразрядного семисегментного индикатора к микроконтроллеру
На схеме ниже, показано как подключается одноразрядный семисегментный индикатор к микроконтроллеру. При этом следует учитывать, что если индикатор с ОБЩИМ КАТОДОМ, то его общий вывод подключается к «земле», а зажигание сегментов происходит подачей логической единицы на вывод порта. Если индикатор с ОБЩИМ АНОДОМ, то на его общий провод подают «плюс» напряжения, а зажигание сегментов происходит переводом вывода порта в состояние логического нуля .
Осуществление индикации в одноразрядном светодиодном индикаторе осуществляется подачей на выводы порта микроконтроллера двоичного кода соответствующей цифры соответствующего логического уровня (для индикаторов с ОК — логические единицы, для индикаторов с ОА — логические нули).
Токоограничительные резисторы могут присутствовать в схеме, а могут и не присутствовать. Все зависит от напряжения питания, которое подается на индикатор и технических характеристик индикаторов. Если, к примеру, напряжение подаваемое на сегменты равно 5 вольтам, а они рассчитаны на рабочее напряжение 2 вольта, то токоограничительные резисторы ставить необходимо (чтобы ограничить ток через них для повышенного напряжении питания и не сжечь не только индикатор, но и порт микроконтроллера). Рассчитать номинал токоограничительных резисторов очень легко, по формуле дедушки Ома. К примеру, характеристики индикатора следующие (берем из даташита): — рабочее напряжение — 2 вольта — рабочий ток — 10 мА (=0,01 А) — напряжение питания 5 вольт Формула для расчета: R= U/I (все значения в этой формуле должны быть в Омах, Вольтах и Амперах) R= (напряжение питания — рабочее напряжение)/рабочий ток R= (5-2)/0.01 = 300 Ом
Подключение многоразрядного семисегментного индикатора к микроконтроллеру
Схема подключения многоразрядного семисегментного светодиодного индикатора в основном та-же, что и при подключении одноразрядного индикатора. Единственное, добавляются управляющие транзисторы в катодах (анодах) индикаторов:
На схеме не показано, но между базами транзисторов и выводами порта микроконтроллера необходимо включать резисторы, сопротивление которых зависит от типа транзистора (номиналы резисторов рассчитываются, но можно и попробовать применить резисторы номиналом 5-10 кОм).
Осуществление индикации разрядами осуществляется динамическим путем: — выставляется двоичный код соответствующей цифры на выходах порта РВ для 1 разряда, затем подается логический уровень на управляющий транзистор первого разряда — выставляется двоичный код соответствующей цифры на выходах порта РВ для 2 разряда, затем подается логический уровень на управляющий транзистор второго разряда — выставляется двоичный код соответствующей цифры на выходах порта РВ для 3 разряда, затем подается логический уровень на управляющий транзистор третьего разряда — итак по кругу При этом надо учитывать: — для индикаторов с ОК применяется управляющий транзистор структуры NPN (управляется логической единицей) — для индикатора с ОА — транзистор структуры PNP (управляется логическим нулем)
При низковольтном питании микроконтроллера и маломощных светодиодных индикаторах, в принципе, можно отказаться от использования в схеме и токоограничительных резисторов, и управляющих транзисторах — подключать выводы индикатора непосредственно к выводам портов микроконтроллера, так как при динамической индикации ток потребления сегментами уменьшается. При этом следует учитывать, что разряды при применении индикаторов с ОК управляются логическим нулем, а индикаторы с ОА — логической единицей.