Оглавление:

Использование точечно-матричного светодиода с Arduino и регистром сдвига: 5 шагов
Использование точечно-матричного светодиода с Arduino и регистром сдвига: 5 шагов

Видео: Использование точечно-матричного светодиода с Arduino и регистром сдвига: 5 шагов

Видео: Использование точечно-матричного светодиода с Arduino и регистром сдвига: 5 шагов
Видео: Управление светодиодным матричный индикатором через регистр 74HC595.matrixLED shift 2024, Ноябрь
Anonim
Использование точечно-матричного светодиода с Arduino и регистром сдвига
Использование точечно-матричного светодиода с Arduino и регистром сдвига
Использование точечно-матричного светодиода с Arduino и регистром сдвига
Использование точечно-матричного светодиода с Arduino и регистром сдвига
Использование точечно-матричного светодиода с Arduino и регистром сдвига
Использование точечно-матричного светодиода с Arduino и регистром сдвига

Матричный светодиод Siemens DLO7135 - это удивительный образец оптоэлектроники. Он заявлен как матричный интеллектуальный дисплей 5x7 (r) с памятью / декодером / драйвером. Наряду с этой памятью у него есть 96-символьный дисплей ASCII с символами верхнего и нижнего регистра, встроенный генератор символов и мультиплексор, четыре уровня интенсивности света, и все это работает от 5 В. Это много, чтобы соответствовать, и по цене 16 долларов за штуку, это определенно должно быть. Проведя полдня в моем любимом местном магазине электроники, я обнаружил целую корзину этих вещей по цене 1,50 доллара за штуку. Я вышел из магазина с несколькими. Это руководство покажет вам, как подключаться к этим светодиодам точечной матрицы и отображать символы с помощью Arduino на базе AVR. Если вы читали какое-либо из моих предыдущих руководств, вы можете подумать, что я часто выступаю за наиболее экономное решение, и вы не ошибетесь, даже если я время от времени не достигну цели.. Поэтому я также сделаю еще один шаг в этом руководстве и покажу вам, как можно уменьшить количество портов ввода-вывода, необходимых для управления этими большими светодиодами с точечной матрицей.

Шаг 1. Получите товары…

Получить товар…
Получить товар…

Для этого небольшого проекта вам понадобятся:

  • микроконтроллер на основе AVR, такой как Arduino или что-то подобное. Эти инструкции, вероятно, могут быть адаптированы к выбранному вами MCU.
  • матричный светодиод DLO7135 или другой из того же семейства
  • 8-битный регистр сдвига, такой как 74LS164, 74C299 или 74HC594
  • макет
  • соединительный провод, кусачки и т. д.

Паяльник не нужен, хотя позже воспользуюсь им; вы можете обойтись без него.

Шаг 2. Прямое подключение к светодиодному дисплею

Прямое подключение к светодиодному дисплею
Прямое подключение к светодиодному дисплею
Прямое подключение к светодиодному дисплею
Прямое подключение к светодиодному дисплею
Прямое подключение к светодиодному дисплею
Прямое подключение к светодиодному дисплею

Разложите свой небольшой список деталей и возьмите светодиод. Поместите его на макетную плату по центру, по обе стороны от канавки по средней линии. Первая часть подключения происходит с левой стороны светодиода. Контакт №1 расположен в верхнем левом углу, как показано треугольником / стрелкой. Я поместил функции контактов на картинку для справки, пока вы читаете или подключаете свой светодиод.

Левая сторона

Положительный и отрицательный Начиная с верхнего левого угла, подключите Vcc к 5V. Возможно, неплохо было бы отключить доску до тех пор, пока вы не завершите всю левую часть; светодиод может быть ярким, если вы пытаетесь увидеть маленькие дырочки, чтобы проткнуть провода. Подключите нижний левый GND к земле. Lamp Test, Chip Enable и Write 2-я и 3-я сверху слева - это Lamp Test и Chip Enable. Это обе отрицательные логики, то есть они активируются, когда они находятся на логическом 0 вместо 1. На моем изображении ниже должны быть полосы над ними, но я не аннотировал это ни для одного из них. Контакт LT при включении подсвечивает каждую точку точечной матрицы с яркостью 1/7. Это скорее пиксельный тест, но интересная особенность вывода LT заключается в том, что он не перезаписывает какой-либо символ, который находится в памяти, поэтому вы, если у вас есть несколько из них, соединенных вместе (у них есть расстояние обзора 20 футов), стробируете LT может сделать его похожим на курсор. Чтобы убедиться, что он отключен, подключите его к 5 В. Контакты CE и WR также имеют отрицательную логику и должны быть включены для этого интеллектуального устройства для записи. Вы можете контролировать эти контакты с помощью запасных портов ввода-вывода на вашем микроконтроллере, но мы не будем здесь беспокоиться. Просто подключите их к земле, чтобы они оставались включенными. Уровни яркости Семейство светодиодов DLO имеет четыре программируемых уровня яркости:

  • Пустой
  • 1/7 яркости
  • 1/2 яркости
  • Полная яркость

BL1 HIGH и BL0 LOW - это 1/2 яркости. Оба HIGH - это полная яркость. Установите все, что вам нравится. Опять же, если у вас есть свободные порты ввода-вывода, и это достаточно важно для вас, им также можно управлять с помощью вашего Arduino. Если вы подключите питание к плате, вы должны увидеть, как загорится светодиод. Если вам интересно, поиграйте с регуляторами яркости и тестом лампы, чтобы ознакомиться с ними.

Правая сторона

Правая сторона полностью состоит из портов данных. Нижний правый, контакт 8 или D0, если быть точным, представляет младший значащий бит в 7-битном символе. Вверху справа, вывод 14 или D6 представляет наиболее значимый бит. Это позволяет узнать, в каком порядке перемешивать биты при записи на светодиод. Когда у вас подключены порты ввода данных, найдите семь пустых цифровых портов ввода / вывода на вашем Arduino или AVR и подключите их. Вы, вероятно, захотите запомнить, какой порт вывода данных на вашем AVR идет к какому порту ввода данных на светодиоде. Теперь вы готовы передать некоторые данные на этот интеллектуальный светодиод. Вы еще не дрожите от волнения? Я знаю, что я …

Шаг 3: указание символа для отображения

Указание символа для отображения
Указание символа для отображения

Набор символов, который используется на этом индикаторе CMOS, представляет собой обычный код ASCII, начинающийся с 0x20 (десятичное 32; пробел) и заканчивающийся 0x7F (десятичное число 127; удаление, хотя и представлено на индикаторе в виде курсора). Итак, наличие на светодиодах отображения символа означает не что иное, как нажатие логической 1 или 0 на ваших выводах вывода данных, обычно за которым следует импульс WR, но я отказываюсь от этого в этом упражнении. Итак, вы записали или вспомнил, какие пины к каким портам идут, да? Я выбрал PD [2..7] и PB0 (цифровые выводы со 2 по 8 на языке Arduino). Обычно я не предлагаю использовать PD [0..1], потому что я посвящаю его своей последовательной связи обратно с FreeBSD, а Arduino et al. сопоставьте эти контакты с их USB-каналом связи FTDI, и хотя «они» ГОВОРИТ, что контакты 0 и 1 будут работать, если вы не инициализируете последовательную связь, мне никогда не удавалось использовать эти контакты в качестве обычных цифровых входов / выходов. Фактически, я потратил два дня, пытаясь отладить проблему, когда я попытался использовать PD0 и PD1 и обнаружил, что они всегда были ВЫСОКИМИ. * пожимает плечами * Вероятно, было бы хорошо иметь какой-то внешний ввод, например, клавиатуру, нажимное колесо или дисковый переключатель, или, может быть, даже ввод с терминала (мой ArduinoTerm еще не готов к работе в прайм-тайм …). Выбор остается за вами. А пока я просто собираюсь проиллюстрировать, как получить код для отображения нужного символа на светодиодах. Существует zip-файл для загрузки, включающий исходный код и Makefile, а также небольшой видеоролик, в котором светодиод распечатывает свой набор символов. Приносим извинения за плохое качество видео. Код ниже печатает строку "Добро пожаловать в мой учебник!" затем циклически перебирает весь набор символов, поддерживаемый светодиодом.

DDRD = 0xFF; // OutputDDRB = (1 << DDB0); char msg = "Добро пожаловать в мой Instructable!"; uint8_t i; for (;;) {for (i = 0; i <27; i ++) {Print2LED (msg ); _delay_ms (150); } for (я = 0x20; я <0x80; я ++) {Print2LED (я); _delay_ms (150); } Print2LED (& apos * & apos);}О выводе порта заботится функция Print2Led ().

voidPrint2LED (uint8_t i) {PORTD = (i << 2); если (i & 0b01000000) PORTB = (1 <

Код и Makefile включены в zip-файл ниже.

Шаг 4. Сохраните порты ввода-вывода с помощью сдвигового регистра

Сохранение портов ввода-вывода с помощью регистра сдвига
Сохранение портов ввода-вывода с помощью регистра сдвига
Сохранение портов ввода-вывода с помощью регистра сдвига
Сохранение портов ввода-вывода с помощью регистра сдвига
Сохранение портов ввода-вывода с помощью сдвигового регистра
Сохранение портов ввода-вывода с помощью сдвигового регистра

Итак, теперь наш микроконтроллер может отправлять данные на матричный светодиод, но он использует восемь портов ввода-вывода. Это исключает использование ATtiny в 8-контактном корпусе DIP и даже с более новым Arduino, оснащенным ATmega328p, у которого много портов ввода / вывода для одного светодиода. Однако мы можем обойти это, используя ИС, называемую регистром сдвига. Момент, чтобы «переключить» передачи… Регистр сдвига можно лучше понять, подумав о двух словах, составляющих его название: «сдвиг» и «регистр». Слово сдвиг относится к тому, как данные перемещаются через регистр. Здесь (как и в наших Arduino и микроконтроллерах в целом) регистр - это место, где хранятся данные. Для этого он реализует линейную цепочку цифровых логических схем, называемых «триггерами», которые имеют два стабильных состояния, которые могут быть представлены либо 1, либо 0. Итак, соединив восемь триггеров, вы получите устройство, способное удерживать и представляет собой 8-битный байт. Так же, как существует несколько типов триггеров и несколько вариаций на тему регистров сдвига (например, счетчики увеличения / уменьшения и счетчики Джонсона), существует также несколько типов регистров сдвига в зависимости от того, как данные фиксируется в регистре и как эти данные выводятся. Исходя из этого, рассмотрим следующие типы регистров сдвига:

  • Последовательный вход / параллельный выход (SIPO)
  • Последовательный вход / последовательный выход (SISO)
  • Параллельный вход / последовательный выход (PISO)
  • Параллельный вход / параллельный выход (PIPO)

Два из них - SIPO и PISO. Регистры SIPO принимают данные последовательно, то есть один бит за другим, сдвигая ранее введенный бит на следующий триггер и отправляя данные сразу на все входы. Это делает хороший преобразователь из последовательного в параллельный. Регистры сдвига PISO, наоборот, имеют параллельные входы, поэтому все биты вводятся одновременно, но выводятся по одному. Как вы уже догадались, это хороший преобразователь из параллельного в последовательный. Сдвиговый регистр, который мы хотим использовать для уменьшения количества контактов ввода-вывода, позволит нам взять те 8 контактов ввода-вывода, которые мы использовали ранее, и уменьшить их до одного или, может быть, до пары, учитывая, что нам может потребоваться контролировать, как мы вводим биты. Следовательно, регистр сдвига, который мы будем использовать, будет последовательным входом / параллельным выходом. Подключите регистр сдвига между светодиодом и Arduino. Использовать регистр сдвига очень просто. Самая сложная часть - это просто визуализировать выводы вывода данных и то, как двоичные цифры попадут в ИС и как они в конечном итоге будут отображаться на светодиодах. Найдите минутку, чтобы спланировать это. 1. Подключите 5 В к контакту 14 (вверху справа) и опустите контакт 7 (внизу слева) на землю. Регистр сдвига имеет два последовательных входа, но мы будем использовать только один, поэтому подключите второй контакт к 5V3. Мы не будем использовать чистый вывод (используемый для обнуления всех выходов), поэтому оставьте его плавающим или увеличьте его до 5V4. Подключите один цифровой порт ввода-вывода к одному из сдвиговых регистров. Это контакт последовательного входа 5. Подключите один цифровой порт ввода-вывода к контакту 8 (внизу справа). Это вывод часов 6. Подключите линии передачи данных от Q0 к Q6. Мы используем только 7 бит, потому что набор символов ASCII использует только семь бит. Я использовал PD2 для вывода моих последовательных данных и PD3 для тактового сигнала. Что касается контактов данных, я подключил Q0 к D6 на светодиоде и продолжил в том же направлении (Q1 к D5, Q2 к D4 и т. Д.). Поскольку мы отправляем данные последовательно, нам нужно будет проверить двоичное представление каждого символа, который мы хотим отправить, глядя на единицы и нули и выводя каждый бит в последовательной линии. Я включил вторую версию источника dotmatrixled.c вместе с Makefile ниже. Он циклически перебирает набор символов и отображает все четные символы (если странно думать, что буква может быть нечетной или четной, подумайте на мгновение о двоичном представлении). Попытайтесь выяснить, как заставить его циклически отображать все нечетные символы. Вы можете дальше поэкспериментировать с подключениями между регистром сдвига, светодиодом точечной матрицы и вашим Arduino. Между светодиодом и регистром есть несколько функций управления, которые могут позволить вам точно настроить ваш контроль над отображением данных. Итак…. Мы перешли от необходимости использовать восемь портов ввода / вывода к использованию только двух!

Шаг 5: Резюме

Резюме
Резюме
Резюме
Резюме

В этом руководстве я рассказал о матричном светодиоде DLO7135 и о том, как заставить его работать. Далее я обсуждал, как уменьшить количество требуемых портов ввода-вывода с восьми до двух, используя сдвиговый регистр. Точечно-матричные светодиоды DLO7135 можно соединить вместе, чтобы получились очень привлекательные и интересные шатры. Надеюсь, вам понравилось читать это руководство! Если есть какие-то улучшения, которые, по вашему мнению, я мог бы внести, или предложения, которые вы хотели бы дать по этому или любому из моих объектов, я рад их слышать! Удачного AVR!

Рекомендуемые: