Бегущая строка на atmega168

Бегущая строка на ATmega168

Тема бегущей строки достаточна популярна среди начинающих в микроконтроллерах. Существует достаточно большое количество вариантов, однако у большинства из них есть один недостаток — нерасширяемость. В большинстве случаев вы ограничены 20-30 колонками светодиодов, а чтобы увеличить их число придется вносить изменения в программу и схему

В этом проекте, я предлагаю новый виток в уже достаточно старой теме — теоретически, в этом проекте можно одновременно задействовать 1200 светодиодов, причем вы можете менять их количество буквально в процессе работы, без существенного изменения схемы и прошивки. Для обмена данными между блоками используется шина SPI.

Шина SPI

В проекте используется один главный(ведущий) модуль и множество подчиненных (ведомых) модулей со светодиодами — именно для этого и используется SPI. SPI (Serial Peripheral Interface, SPI bus — последовательный периферийный интерфейс) — популярный стандарт обмена данными, и существует множество устройств которые могут использовать его для связи друг с другом. Протокол SPI — 4х проводной. Один провод для передачи данных от ведущего к ведомому (MOSI, Master Out / Slave In), еще один, для передачи от ведомого к ведущему (MISO, Master In / Slave Out), еще один для тактирования (SCLK), и один для выбора ведомого для связи (SS). Когда ведущий хочет послать данные к ведомому, то сначала выставляет SS этого конкретного ведомого к земле. Затем выставляет бит данных на линии MOSI и принимает бит на MISO, после чего выдает такт на SCLK.

Сведения о настройке и работе с SPI можно прочитать в datasheet (начиная с стр 162). Там же можно посмотреть примеры кода для работы и конфигурации модуля. Протокол SPI может работать в различных режимах. От режима зависит по какому фронту SCLK (нарастающему или убывающему) будет происходить чтение/запись бита данных, и в каком порядке будет происходить запись/чтение битов в регистр приема/отправки. В этом проекте все настройки SPI оставлены по умолчанию, но если вы хотите связаться с другим устройством через шину SPI вам, возможно, потребуется изменить конфигурацию.

После того, как шина SPI инициализирована, байт для отправки записывается в регистр SPDR. По завершению обмена ставится бит SPIF регистра SPSR, а в регистре SPDR оказывается принятый байт. Можно настроить прерывание, когда запись завершена, а можно следить за изменениями SPIF. В проекте используется прерывание, так как основная программа занята обновлением светодиодов.

Одним из больших преимуществ шины SPI является скорость ее работы. В проекте частота шины получается делением частоты тактирования микроконтроллера на 16. Мы используем кварцевый резонатор на 14.7456 MHz, поэтому фактическая частота SPI составляет чуть более 900kHz. В таком случае, отправка полного кадра в 21 байт занимает всего около 180 микросекунд. Этого достаточно, чтобы обновлять матрицу светодиодов с частотой примерно 60 Гц.

Схема 4 ведомых модулей вместе с ведущим модулем (линия MISO не используется):

Конструкция бегущей строки

Бегущая строка, в отличие от большинства подобных конструкции, состоит из модулей 20×5 светодиодов. Придать дополнительную функциональность не получится без жертв. Шина SPI в оригинале требует 4 провода, поэтому мы теряем возможность использовать 4 линии управления светодиодами. Так как модули не возвращают никаких данных, мы не используем ножку MISO. Итого на обмен данными используется 3 ножки. Используя схему мультиплексирования мы теряем 3 столбца. Это нестрашно, зато у нас есть возможность удлинять строку практически произвольно.

Схема соединения светодиодов:

Схема соединения матрицы с микроконтроллером модуля

Прошивка

Есть два комплекта кода для этого проекта: одна программа для главного модуля (ledarray_master.c) и отдельная программа для ведомых модулей (ledarray_slave.c). Все ведомые модули работают под управлением одной и той же программы.

Вы можете скачать полный исходный код этого проекта в архиве в конце статьи. Папка содержит дополнительные Python сценарии, для связи с Главным устройством через последовательный порт, и сценарий, который используется для отображения текущей музыкальной дорожки

Длинные провода и защита от помех

Если вы внимательно посмотрите на схему в разделе «шина SPI» выше, вы увидите шесть резисторов 1 кОм. Это один из редких случаев, когда расположение элемента на схеме указывает на то, где компонент должен располагаться в реальности. Резисторы должны быть на ведомых модулях, как указано.

Если вы реализуете этот проект, но опустите эти резисторы, вы можете столкнуться с необычным поведением, особенно с блоками физически удаленными от главного модуля. Это первый проект, в котором мы отправляем цифровые сигналы по проводам дальше, чем на несколько дюймов. Даже если скорость передачи данных составляет всего около 900 кГц, как указано выше, на большом расстоянии форма сигнала сильно искажается и вносятся помехи извне. Для предотвращения помех важно прижать линии к земле, что резисторы и делают. Мы выбрали 1K в качестве сопротивления, чтобы не добавить энергопотребления, но достаточно облегчить передачу.

Бегущая строка на atmega168

Здесь я начну выкладывать исходники с коментариями и схемы с платами, от простых до бегущей строки 8×16 с управлением через com port, хранением информации во внешней eeprom 24c64.

Все это будет добавляться на этом форуме и на сайте http://git.h18.ru/avr.html

Кнопка нажата — индикация числа (ATmega
http://dfiles.ru/files/sz4j3b54u

При нажатии кнопки на семисегментном индикаторе высвечивается число 1000. В архив вхдят исходник в AVR studio и схема в Proteus, а также даташит на AVR микроконтроллер ATmega8.

JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

#define IND PORTD

char t1,t2,t3,t4;
unsigned char mc[] = <0b00111111, // 0
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111>; // 9

IND=mc[t4];
PORTB=0b11111110;
_delay_us(300);
PORTB=0xFF;

IND=mc[t3];
PORTB=0b11111101;
_delay_us(300);
PORTB=0xFF;

IND=mc[t2];
PORTB=0b11111011;
_delay_us(300);
PORTB=0xFF;

IND=mc[t1];
PORTB=0b11110111;
_delay_us(300);
PORTB=0xFF;

Daташет в архиве для веса? .

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Многоканальный программный ШИМ на AVR (ATmega .

В данном коде представлено ШИМ управление яркостью 8-ми светодиодов . Нетрудно подкорректировав код обеспечить необходимое количество PWM каналов .(Исходник в CVAVR)

При замене в современном автомобиле электромеханических реле на интеллектуальные силовые ключи PROFET производства Infineon необходимо учитывать особенности их коммутации по сравнению с «сухими контактами» реле, а также особенности управления с их помощью различными типами нагрузок.

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

Вебинар посвящен проектированию и интеграции встроенных и внешних антенн Quectel для сотовых модемов, устройств навигации и передачи данных 2,4 ГГц. На вебинаре вы познакомитесь с продуктовой линейкой и способами решения проблем проектирования. В программе: выбор типа антенны; ключевые проблемы, влияющие на эффективность работы антенны; требования к сертификации ОТА; практическое измерение параметров антенн.

Воплощение кошмара (смотрел только первый архив, ибо скачать остальные не вышло):
а) Архивы упакованы в RAR.
б) Залиты на стрёмный обменник. В том числе и на сайте ссылок нормальных нет.
в) Хоть каким-то форматированием кода никто не озаботился, отступы пляшут как хотят.
г) Комментариев в коде нет, для новичков код бесполезен.
д) Реализация динамической индикации крайне плоха, для неновичков код бесполезен.

В общем, непонятно, зачем это всё?

P.S.

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

Я чувствую себя ущербным теперь, пишу комменты в коде, да ещё и на русском языке

Такое ощущение что человек просто пытается заработать на партнёрке депозита.

Для платного скачивания объёма не хватило? )

Читайте также  Автоматика для тостера

Многоканальный программный ШИМ на AVR (ATmega .

В данном коде представлено ШИМ управление яркостью 8-ми светодиодов . Нетрудно подкорректировав код обеспечить необходимое количество PWM каналов .(Исходник в CVAVR)

Лазить по чужеродно-труднодоступным сайтам просто «влом».
Насчет программного ШИМ для АВР (применимо к любой АВРке с соответствующей доработкой):
http://radiokot.ru/cherdak/03/
и прототип ее происхождения:
viewtopic.php?f=57&t=84941&hilit=+%D1%83%D0%B1%D0%B8%D0%B9%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9+%D0%BA%D0%BE%D0%B4
токмо. я АСМОДЕЙ потребляю.
можно б и про беглу строку замутить. а смысл? — их уже на все случаи жизни понаклепалось.
Насчет ATmega8/8a & ATmega48/88/168 как-нить в ближайшее время свое понимание в частном определении здесь выложу: viewtopic.php?f=62&t=94201

POS_troi — да ничего зазорного в том нету или на русском или на транслите или на инглиш. Вот на мовiще не зустрiчав.

_________________
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

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

_________________
Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

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

Часовой пояс: UTC + 3 часа

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 125

AVR Урок 6. Бегущие огни

Урок 6

Бегущие огни

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

Для этого нам потребуется уже не один светодиод. У меня на этот счёт имеется светодиодная планка или матрица. Я её поместил в беспаечную макетную плату, катоды всех светодиодов соединил вместе и подключил к общему проводу, а аноды каждый через токоограничивающий резистор подключил к соответствующим ножкам порта D. Вот так это всё выглядит (нажмите на картинку для увеличения изображения)

Поэтому, как обычно, по старой доброй традиции мы запускаем Atmel Studio, создаём в ней проект, выбрав тот же самый микроконтроллер Atmega8a, назовём проект Test03. Таким же образом в качестве отладчика выберем simulator, и также, чтобы сэкономить наше драгоценное время, скопируем весь код из файла main.c прошлого занятия.

Начнём писать код. Сначала мы в функции main() создадим целочисленную короткую беззнаковую переменную

unsigned char i ;

Порт также оставляем на выход, и сразу на данном порте включим нулевую ножку в 1

PORTD = 0b00000001;

А в бесконечном цикле мы создадим цикл другого типа – типа for. Данный цикл уже является конечным и работает он следующим образом

Данный цикл немного сложнее и условие в скобках здесь уже состоит из трёх частей, но я думаю, мы разберёмся. Мы ещё не с таким впоследствии разберёмся. Применим цикл данного типа в нашем коде:

for ( i =0; i i ++)

В данном цикле у нас будет пока только задержка, остальной код мы уберём. То есть тело нашего цикла будет у нас выполняться до тех пор, пока переменная i у нас не достигнет значения, большего или равного 7. То есть получится, что наше тело будет выполняться ровно 8 раз, затем мы выйдем из данного цикла и благодаря бесконечному циклу заново в него войдём и наш восьмикратный процесс повторится сначала.

А вот теперь сдвиг. Вставим его до задержки

PORTD = (1 i );

Как мы видим, данный сдвиг мы применяем к регистру, отвечающему за состояния порта D, и в нём мы будем сдвигать единичку влево на величину нашей переменной i, а так как данная переменная с каждым циклом увеличивается на 1 (или инкрементируется), то, соответственно, наша единичка постепенно раз в полсекунды будет двигиться влево, также как и лапки порта, за которые отвечает каждый бит нашего регистра. И тем самым мы и получим эффект бегущего огня.

Давайте соберём наш проект. И, также как и на прошлом занятии скопируем файл протеуса с прошлого занятия и переименуем его в Test03. Откроем его, заменим файл прошивки в свойствах контроллера.

Также добавим ещё 7 светодиодов и 7 резисторов, так как показано на схеме. Можно применять операцию копирования. Как это делается, показано в видеоуроке.

Запустим проект в протеусе и увидим, что наши светодиоды мигают поочерёдно, создавая впечатление эффекта бегущего огня

Теперь прошьём настоящий контроллер и увидим уже результат на практике. Это, конечно, намного интереснее, чем в протеусе. Как всё это выглядит, можно увидеть в видеоверсии урока, ссылка на который находится ниже и доступна с помощью нажатия на картинку.

На следующем занятии мы уже поработаем с ножкой порта не на выход, а на вход. Так как мы уже знаем, что порт – это такая шина, которая умеет работать в разных направлениях. Мы подключим кнопку и попытаемся отследить её состояние. То есть наша задача – узнать в какой-то определённый момент, нажата наша кнопка или отжата. Так что будет интересно.

Купить программатор можно здесь (продавец надёжный) USBASP USBISP 2.0

Создаем бегущую строку с помощью Arduino

Ежегодно на вывесках магазинов, улицах и переходах устанавливаются панели, отражающие рекламные записи в виде текста. Огоньки на панелях зажигаются по-разному: строки передвигаются вверх, вниз, в правую и левую сторону. Также актуальны светящиеся картинки.

Такие аксессуары прохожие не оставят без внимания. Многие начинающие электронщики интересуется тем, как устроена эта конструкция и что требуется для создания. Изделие легко изготавливается в домашних условиях. Статья познакомит начинающего любителя электронных устройств с принципами работы бегущей строки, где Ардуино используется в качестве основного компонента.

Что такое бегущая строка на Ардуино

Бегущая строка на Ардуино – электронное изделие, в основе которого лежит микроконтроллер Arduino. Рабочая область прибора покрыта светодиодами. Основное предназначение – транслирование изображения и текстовых сообщений. Данные могут быть статичными и анимированными.

Световые строки создаются с помощью модулей. Размер по умолчанию – 32х16 см. Область, предназначенная под рабочую поверхность, напрямую зависит отношению количеству модулей и их размеру.

Кроме того, в строку вставлен контроллер, роль которого – управление картинкой. Устройство работает в автономном режиме. Чтобы изменить текстовое послание или изображение, бегущую строку подключают к компьютеру. Профиль из алюминия держит всю конструкцию.

По цветовой гамме различают 2 вида бегущей строки на Arduino:

  1. Монохромный или одноцветный.
  2. Разные оттенки – обычно 8 цветов, здесь также включен черный фон.

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

Все данные пользователь помещает в память микроконтроллера. Для обновления картинки или строки существует несколько методов:

  1. Базовый – через USB-кабель. Микропроцессор Ардуино подключается через USB-порт к компьютерному устройству. С компьютера разработчик переносит свой программный код в память микропроцессора.
  2. По сети через Лан-кабель. Способ предусмотрен для тех пользователей, которые постоянно обновляют электронную строку. Техника подключения аналогична предыдущему пункту.

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

Необходимый набор инструментов и материалов

Ниже приведена таблица с подробным описанием инструментов, которые понадобятся для конструирования бегущих огней на Ардуино.

Инструмент Особенности
Arduino Nano Нано – модель, которая по размерам самая миниатюрная среди линейки Ардуино. По своему характеру данная платформа напоминает своего сородича – Ардуино Уно. Начинающие электронщики, в основном, строят компактные модели своих устройств, поэтому в этом пригодится компактная Нано. Гнездо под внешнее питание спрятано внутри. Работа производится через USB-порты. Остальные характеристики схожи с моделью Уно.
  • напряжение, требуемое для питания устройства, – 5 Вольт;
  • масса – 7 грамм;
  • размер – 19х42 мм;
  • рабочая частотность – 16 МГц;
  • флеш память – 16 Кб;
  • оперативная память – 2 Кб;
  • цифровые пины – 14 штук, причем 6 можно использовать, как ШИМ-выходы
  • требуемое питание при входе – около 12 Вольт.

Существует 2 способа для питания платформы:

Чертежи и схемы

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

В проект включено использование биполярных транзисторов 2N2904. Если подцепить все транзисторы к своему контакту на матричной платформе, понадобится всего 10 штук транзисторов. При конструировании электронных устройств такой вид транзисторов наиболее популярен и подходит по всем критериям и условиям разработки бегущей строки на Ардуино. В созданную систему будет подаваться небольшое напряжение.

Объясним то, как происходит загорание огоньков на ленте. Выбирается 1 контакт, который отвечает за подачу сигнала в анод светодиода. На базу эмиттера, одновременно с предыдущим действием, подается сигнал с выходного отверстия на счетчике. Поэтому от коллектора транзистора напряжение переходит прямиком в катоды светодиодов.

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

Есть еще один вариант исполнения:

Схема будет выглядеть так:

Программная часть

Для первого варианта исполнения код может выглядеть так:

Программный код для осуществления проекта “бегущей строки на ардуино” во втором случае такой:

Пошаговая инструкция по созданию устройства

Алгоритм конструирования Arduino бегущая строка:

  1. Загружаем код программы, описанной выше, в микропроцессор с помощью USB-кабеля и компьютера.
  2. Помещаем Ардуино Нано и светодиодную ленту на платформу управления.
  3. Соединяем все детали между собой.
  4. Включаем питание.

В итоговом видео можно понять как работает второй вариант схемы:

Управление со смартфона

Светодиодными огоньками можно управлять со смартфона. Для осуществления задуманного понадобятся Блютуз и специальный модуль – HC-06, предназначенный для Ардуино. Но это уже мы сделаем в следующих уроках. Всем хороших проектов.

Бегущая строка на Arduino + управление со смартфона

Предисловие

Поиск необходимых материалов и первые шаги

Раньше как-то пробовал баловаться со светодиодами, точнее со светодиодной лентой, но это была простая светомузыка с использованием одного транзистора. А тут нужно же как-то и матрицу светодиодную сделать, и текст где-то хранить, и как-то его выводить. На «рассыпухе» просто так не сделать, по крайней мере с моим опытом.

Услышал, что можно делать на платформе Arduino. Раньше слышал, что есть такая крутая программируемая плата, что проект этот был стартапом, собравшим немалое количество денег, но в подробности не вдавался. А тут пришлось. Посмотрел несколько видео с примерами проектов, реализованных на Arduino, понравилось, купил.

В моей работе использовалась Arduino Uno R3, но не оригинальная, а копия. Как я почитал, особой разницы между копией и оригиналом нет. Плата Arduino имеет 14 цифровых входов/выходов, 6 аналоговых, входы внешнего питания, выходы +5 В, +3.3 В, GND. К компьютеру подключается с помощью USB. Для программирования микроконтроллера используется собственная IDE, которая распространяется бесплатно на официальном сайте Arduino.

С Arduino понятно, теперь надо решить, как сделать саму светодиодную матрицу. Изначально за основу разработки проекта была выбрана статья, в которой предлагалось использовать готовые модули со светодиодными матрицами и сдвиговыми регистрами. Схема представлена на рисунке 1. Использование готовых модулей, а именно MAX7219, значительно упростило бы разработку, так как необходимо было бы только всё правильно подключить и написать программу для корректной работы и вывода информации.

Однако возникли трудности с поиском соответственно этого модуля в нашей стране, поэтому было решено искать другой способ реализации. Да и как-то просто было бы совсем. Поэтому решил, что надо делать матрицу самому на светодиодах, благо в интернете достаточно информации, как это сделать.

Разработка

Размер матрицы был выбран 8х10. Изначально планировалось для выбора столбца матрицы светодиодов использовать сдвиговый регистр 74HC595, который идёт в наборе с Arduino, а он имеет восемь выходов. Вот каждый бы и отвечал за определённый столбец. Однако в процессе пайки случайно была испорчена ножка регистра, отвечающая за выход Q0, поэтому от него пришлось отказаться. В этой схеме регистр по сути мог бы только сократить количество выходов Arduino, используемых для управления матрицей. При его использовании задействовалось бы только три выхода, а так пришлось пожертвовать 8-ю (со 2 по 9). Благо, что их там достаточно.

Для выбора строки матрицы был использован десятичный счётчик с дешифратором К176ИЕ8. Выбор пал на эту микросхему по причине её популярности, а также, потому что она имеет 10 выходов, как раз для управления 10-ю строками матрицы. Управляется счётчик с помощью микроконтроллера Arduino через входы сброса, счёта и выхода на 5 В.

Выходы счётчика подключаются к блоку транзисторов для управления светодиодной матрицей. Подключение будет рассмотрено в блоке транзисторов.

В результате функциональная схема получилась следующего вида:

Блок транзисторов

Для управления светодиодами кроме сигнала, подаваемого на аноды со 2 по 9 портов Arduino, необходимо также подавать напряжение на катоды светодиодов. Делается это с помощью блока транзисторов.

Все катоды светодиодов каждой строки соединены между собой и подключены к коллекторам 10 транзисторов. Эмиттеры транзисторов подключены к «земле», а на базу приходят сигналы с выходов счётчика.

В этом проекте используются биполярные транзисторы npn типа 2N3904. Так как каждый транзистор подключён к своей строке матрицы, то всего в схеме их используется 10 штук. Выбор пал на этот вид транзисторов из-за их популярности, а также соответствия условиям разработанной схемы. Этот транзистор применяется в схемах с небольшим напряжение. Общий вид и УГО данного транзистора:

Теперь можно описать, как происходит загорание светодиода. С определённого порта Arduino подаётся сигнал на анод светодиода. В то же самое время на счётчика с определённого выхода подаётся сигнал на базу эмиттера. И с коллектора транзистора идёт напряжение на катоды светодиодов. Так как в матрице соединены последовательно аноды светодиодов соседних строк, а также последовательно соединены катоды светодиодов соседних столбцов, то в одно время происходит загорание нескольких светодиодов матрицы.

Важный момент! Ардуино на выходе выдаёт около 5 В, поэтому для подсоединения анодов светодиодов к Ардуино нужно использовать резисторы номиналом 220 Ом, а для подсоединения базы транзисторов к выходам счётчика – номиналом 1 КОм. Найти эти резисторы не составляет труда, тем более они идут в стартовом наборе Ардуино.

От мысли к действию, или от схемы к реализации

В результате пайки получилась следующее устройство.

Программная часть

Теперь всё это дело нужно было подключить к Ардуино. Код само-собой писался на C. Первым делом нужно проинициализировать используемы порты платы Arduino. Это делается в функции setup() следующим образом:

clock и reset – порты 11 и 10 Arduino соответственно.

Первым делом идёт указание, что порты со 2 по 9 используются в качестве выходных. Делается это в цикле с помощью метода pinMode(i, OUTPUT), где i –номер порта, OUTPUT – флаг, указывающий, что этот порт выходной.

Далее аналогичным образом инициализируются порты clock и reset. С помощью функции digitalWrite(reset, HIGH) происходит подача высокого уровня напряжения на порт reset, что тем самым делает сброс счётчика. После 5 мс задержки (delayMicroseconds(5)) на порт reset подаётся низкий уровень напряжения.

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

Для этого была создана отдельная функция display_symbol(int loops), которая принимает в качестве аргумента значение задержки для имитации движения текста. Опытным путём было установлено, что лучше всё информация воспринимается, если значение задержки находится в промежутке от 15 до 25.

Рассмотрим внутреннюю реализацию функции display_symbol(int loops).

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

Каждый символ разложен на 10 байт, что соответствует количеству строк, а каждый байт, как известно, состоит из 8 бит. Каждый бит отвечает за определённый светодиод на схеме. Пример разбитого на биты символа:

Например, 0 и 9 байты выглядят как B00000000, это значит, что в 1 и 10 строках светодиоды гореть не будут. Сделано это для удобного чтения информации пользователем. А вот, например, 1-й байт со значением B01000010 указывает, что во второй строке для данного символа должны загораться 2 и 7 светодиоды. Таким образом из всех этих байт выстраивается символ буквы «И».

Вот, что получилось в результате:

А где же обещанное управление со смартфона?

В принципе результатом я остался доволен, как-никак первый раз так много паял и всё сразу заработало. Но захотелось большего, и я подумал добавить управление с Android смартфона по Bluetooth. Для Arduino есть готовый модуль HC-06. Схема его подключения к Arduino выглядит следующим образом:

Подробности подключения к Arduino и соединения со смартфоном описаны в этой статье: Блютуз модуль HC-06 подключение к Arduino. Соединение с телефоном и компьютером
В соответствии с этим код был изменён. И решил добавить ускоренное пролистывание текста, инверсное зажигание светодиодов и пролистывание текста с мерцанием. Ссылки на код для Android и Arduino будут ниже. В результате получилась вот такая штука:

Заключение

Сначала, что касается разработанного курсового. Главным достоинством разработанного устройства является его универсальность. Благодаря использованию программируемой платы Arduino проект можно расширять использованием различных датчиком и написанием соответствующих прошивок. В результате кроме функционала бегущей строки можно добавить и функционал вывода состояния погоды, используя соответственно датчики температуры, влажности, атмосферного давления. Если добавить какой-нибудь датчик звука, то можно доработать схему до музыкального эквалайзера.

А общие выводы заключаются в том, что Arduino – действительно классная штука, с помощью которой в домашних условиях можно сделать множество полезных и просто крутых штук, которые раньше могли сделать люди, посвятившие электронике не один год. Тем более, что есть множество примеров различных устройств на Ардуино в Интернете в открытом доступе. Уже есть даже множество книг по Ардуино, одну из которых я точно советовал бы для рассмотрения в качестве руководства для начинающих и продвинутых разработчиков: Arduino CookBook.

Бугущая строка на базе микроконтролера ATmega48. Made by Hunter & Kosmos

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

Для ее реализации нам понадобится:

— от 56 до 392 диодов (в зависимости от размера матрицы — от 8х7до 56х7);

— резисторы номиналом 330 Ом, 1 кОм и 10 кОм;

— 7 транзисторов КТ972 или его аналогов;

— сдвиговые регистры 74НС595 (от 1 до 7 штук, в зависимости от размера матрицы — 8, 16, 24, 32, 40, 48 и 56 столбцов);

— конденсаторы номиналом 100 нФ;

— клавиатура PS /2 и разъем под нее;

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

— ввод нового текстового сообщения и управление через подключаемую АТ-клавиатуру от персонального компьютера;

— длина текстового сообщения до 255 символов;

— максимальный размер светодиодной матрицы до 56х7;

— два типа шрифта — обычный и жирный, в зависимости от выбранной прошивки;

— отображаются все символы стандартной кодировки, включая специальные;

— регулировка скорости вывода текста;

— эффект инверсии текста;

— малое энергопотребление (100-200мА, включая светодиодную матрицу) позволяет питать всю схему от малогабаритного батарейного источника питания 5 вольт.

Принципиальная схема контроллера бегущей строки изображена на рис.1, а схема светодиодной матрицы — на рис.2.

Рис. 1 — Принципиальная схема контролера.

Рис. 2 — Принципиальная схема светодиодной матрицы.

В основу принципа работы бегущей строки заложен принцип динамической индикации. «Мозгом» всей схемы является микроконтроллер A T mega48 с включенным внутренним тактовым генератором 8 МГц. Он отвечает за опрос внешней клавиатуры, перекодировку информации и осуществление динамической индикации. Воспроизводимый текст хранится в энергонезависимой памяти EEPROM микроконтроллера. Транзисторными ключами VT1-VT7 осуществляется выбор отображаемой светодиодной строки. Далее в последовательно соединенные микросхемы сдвиговых регистров 74HC595 загружается информация. По окончании ее загрузки от микроконтроллера поступает импульс разрешения обновления и выходная информация заменяется на новую. Микросхемы 74HC595 отвечают за управление светодиодными столбцами — они питают светодиоды через токоограничивающие резисторы номиналом 330 Ом.

Схема была реализована на двух платах — управляющей плате и матрице светодиодов. Разъем клавиатуры Х1 типа «мама» MiniDIN6. Его можно выпаять из системной платы старого компьютера, но лучше и проще купить. Микроконтроллер A T mega48 подойдет практически любой (Atmega48-20PU, Atmega48-10 и др.). Транзисторы VT1-VT7 можно использовать любые другие структуры NPN — главное, чтобы они выдерживали ток всех одновременно включенных светодиодов одной строки. Значение токоограничивающих резисторов строк следует выбирать исходя из конкретного типа светодиодов. При этом также необходимо учитывать то, что максимально допустимый ток через одну микросхему 74HC595 не должен превышать значения 70мА. Если необходимо получить большой ток питания светодиодов, то можно выходы микросхем сдвиговых регистров подключить к дополнительным транзисторным ключам, через которые питать светодиоды. Иногда требуется сделать светодиодную матрицу больших размеров. В этом случае светодиоды включаются в группы, а каждая такая группа подключается вместо одного пикселя матрицы. Во время создания платы контролера важно не забыть, что 9-й вывод предыдущей микросхемы 74HC595 соединяется с 14-м выводом следующей микросхемы. Количество микросхем сдвиговых регистров определяется длиной матрицы — до 7 микросхем сдвиговых регистров.

Все клавиши клавиатуры можно поделить на 3 категории:

1. Функциональные клавиши: Esc, F1, F12, Bakcspace, Enter, Shift, Ctrl — управляют режимом работы бегущей строки.

2. Текстовые клавиши — используются для набора текста в режиме редактора.

3. Неактивные клавиши — присутствуют на стандартной компьютерной клавиатуре, но в этой конструкции не используются.

Чтобы войти в режим редактора текста, нажмите F1. Отображаемая информация на строке исчезнет и схема будет готова к вводу нового текста. Введите новый текст. По мере ввода текста он будет отображаться на строке. Если при вводе была допущена ошибка, то можно воспользоваться клавишей Backspace и стереть неправильно введенные символы. Если повторно нажать F1, то стирается весь текст, набранный в режиме редактора. F12 включает эффект инверсии (выделения) части текста. Повторное нажатие F12 отключает эффект инверсии (клавиша F12 тоже имеет свой символ, отображаемый в режиме редактора, который не виден в обычном режиме воспроизведения). Для переключения между русской и английской раскладками клавиатуры используйте клавишу Ctrl. В режиме русской раскладки будет гореть светодиод HL1. Когда текст полностью набран нажмите Enter — новая информация будет записана в энергонезависимую память контроллера и начнется воспроизведение нового текста.

И, в конце, хочется сказать спасибо всем тем кто принимал в этом участие и поддерживал нас морально, когда у нас ничего не получалось.

Удачи Вам с Вашими строками.

Авторы: Супрун О. В., Николаев А. А. (ДРЕ-КС9-1)
Опубликовано: 22.10.11 01:32