Jump to content
  • Sign Up
  • Language

Recommended Posts

Светодиодный баннер на контроллере Raspberry  Pi
Изготовления простого светодиодного экрана, в данном случае светодиодного баннера, можно наглядно увидеть в этом видео:

В качестве светодиодов была использована управляемая светодиодная лента, с RGB светодиодами и драйверами LPD8806. под управлением контроллера Adafruit Raspberry  Pi

post-67-0-46358400-1440586360_thumb.jpgpost-67-0-66256600-1440586591_thumb.jpg

Схема изготовления led баннера довольно проста, и под силу каждому начинающему. За основу был взят обычный штендер, обычно используются в рекламных щитах.  На него при помощи пластиковых хомутов были закреплены светодиодные ленты, помещенные в прозрачные пластиковые трубки. Соответственно было подведено питание от отдельного блока питания,  и все они были подключены к линии данных и линии синхронизации к контроллеру Raspberry  Pi.

Контроллер заранее запрограммирован в соответствии с количеством используемых светодиодов, изображение и анимация загружаются в него отдельно с компьютера через порт USB. Такой светодиодный баннер легко масштабируется, что позволяет его сделать совершенно разных размеров (есть только аппаратные ограничения контроллера).

Как видите, реализация светодиодной рекламы очень проста и не требует больших усилий!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By SMD
      LED доска для рисования с подсветкой надписей

      Шаг 1: Требуемые материалы

      Лист оргстекла Маркеры NEON Expo (флуоресцентные маркеры) Белая светодиодная лента или многоцветная RGBW Винты, болты, гайки, шурупы Три деревянных бруска 5 х 10 см длиной 3 метра Наждачная бумага разной зернистости Стальные скобки Прочий сопутствующий материал Шаг 2: Создание каркаса LED доски

      На этом шаге создается каркас с пазами в деревянных брусках для установки листа из оргстекла и установки светодиодов. Для этого используется сначала два деревянных бруска по три метра, которые делятся на отрезки. Первый разрезается на отрезки по 1,8 и 1,2 метра, а второй на один отрезок 1,8 метра и два по 0,6 метра.
      Два отрезка по 1,8 метра используются в качестве вертикальных боковых стоек. По центру внутренней стороны брусков делается выборка паза Т-образной формы, начиная сверху вниз, длиной 122 см.
      Брусок длиною 1,2 метра используется в качестве горизонтальной поддержки, на котором также делается выборка Т-образной формы по всей длине бруска. Для точной подгонки ширины каркаса, этот брусок должен быть короче ширины листа из оргстекла на 1,3 см.
      Бруски по 0,6 метра используются в качестве перпендикулярных опор для вертикальных стоек.
      Шаг 3: Сборка

      Каркас собирается при помощи металлических пластин и скобок, надежно фиксирующих все элементы конструкции. После сборки каркаса и установки светодиодной ленты в пазы, был установлен лист из оргстекла. Светодиодная лента подключаются к внешнему источнику питания с подходящими характеристиками.
      Шаг 4: Проверка

      После подключения питания, светодиодная лента начинает подсвечивать торец  листа из оргстекла белым светом.  При написании надписей разноцветными специальными маркерами NEON Expo, они начинают светиться разными цветами в зависимости от цвета маркера.
       
      По материалам instructables
    • By ColorPlay
      Большой LED экран на основе малых RGB панелей
      Используя светодиодные матрицы 16x32 RGB LED, и проявив немного терпения, вы можете создать сумасшедший, яркий, профессиональный светодиодный экран любого размера! В этом уроке мы будем использовать 18 светодиодных панелей, чтобы создать дисплей размером 96x96 пикселей, который занимает примерно 2 фута!
      Декодер видео платы делает всю самую тяжелую работу. Все, что вам нужно, это DVI/HDMI/выход Displayport с надлежащим кабелем, хороший запас мощности с напряжением 5В и немного времени для сборки и подключения. Драйвер поддерживает разрешение до 1024x800 пикселей, но мы сделали экран разрешением 96x96, и это уже было довольно круто! После того, как все запрограммировано и настроено, вы можете использовать любой источник видео, мы использовали обычный компьютер. И все прошло без каких-либо проблем. Теперь и вы можете делать свои собственные светодиодные видео дисплеи для удовольствия!
      Пожалуйста, обратите внимание! Это проект не для новичков! Там много проводов и сложное управление электропитанием. Изготовление дисплея может занять несколько выходных и требует внимательности и терпения. 

      Слева направо картинке изображены: IDC адаптер для приемника, ресивер, и специализированный преобразователь видеосигнала.
      Система разработана таким образом, что светодиодные панели могут работать на большом расстоянии от источника видео. Преобразователь видеосигнала принимает видео на вход DVI, а передает его на дисплей по сети Ethernet на ресивер, где он декодируется, а затем отображается на светодиодном экране.

      Требуемые компоненты:
      Светодиодные RGB панели 16х32 - не все светодиодные панели подходят - они поставляются с определенным разъемом и светодиодной конфигураций. В этом уроке мы использовали светодиодные панели Adafruit. Вы можете построить экран любого размера на самом деле, но для экрана размером 2”x2” мы использовали 18 панелей. Плата преобразователя видеосигнала, ресивер с IDC адаптером Adafruit - они приходят уже запрограммированные. 16-контактный кабель IDC и толстые 5V силовые кабеля. Длинные 16-контактные IDC кабели. Это для подключения платы к первому ряду панелей, для этой конструкции вы должны будете иметь 8 штук Овальные Т-гайки Нейлоновые прокладки 3/16”, которые будут соответствовать винтам M4. Гайки, винты М4 разной длинны Алюминиевый профиль, и сопутствующие крепежные материалы Источник питания 5V, с мощностью, по крайней мере 20А - 30А, чем больше, тем лучше. Большой блок питания ATX может подойти, он доступен во многих магазинах компьютерных товаров. ATX разъемы питания на кабели могут быть полезны, если вы используете блок питания ATX. Вырежьте сразу желтый провод, так чтобы вы случайно не подключили 12V на ваши светодиодные панели. 12 AWG медный основной провод - красный и черный Кольцевые клеммы, которые будут соответствовать 12 AWG Термо - усадочная изоляция Источник питания с разъемом 2,5 мм мощностью 5V 1A.  Ethernet кабель - мы использовали до 100 футов длиной кабеля с успехом, любой кабель 5 категории должен работать. Доступ к компьютеру с Windows XP / 7, если вы хотите, запустить программу конфигурации - программное обеспечение конфигурации необходимо запустить, только если вы хотите изменить конфигурацию дисплея. Соответственно весь необходимый инструмент.   Подготовка светодиодных панелей
      Каждая панель имеет стрелки, указывающие ориентацию + направление потока данных между ними. Первая панель каждой строки, в конечном счете, будет подключена к ресиверу, будет принимать данные и передавать их оставшуюся часть дальше по строке. 

      Для легкого монтирования панелей вместе, установите шесть винтов с овальной Т-гайкой на задней части каждой панели, так чтобы они могли легко скользить в алюминиевых профилях рамы (смотрите следующий раздел). Оцинкованный винт М4 длинной ½” с нейлоновой прокладкой обеспечивает достаточное пространство для гайки и хорошего скольжения в профиле.
      Разложите все панели на плоской поверхности, убедившись, в их правильной ориентации. Стрелка вверх указывает выходные точки каждой панели по отношению к входу следующей панели.

      Изготовление рамы.

      Каркас выполнен из пяти отрезков двух-щелевого  алюминиевого профиля 20mm x 40mm и четырех  отрезков одно-щелевого алюминиевого профиля 20mm x 20mm.
      Все 5 отрезков двух-щелевого профиля нужно отрезать длиной 20,75". Они будут держать каждую строку панелей в верхней части друг друга.
      2 из 4 отрезков одно-щелевого профиля также должны быть отрезаны длиной 20,75". Они будут держать панели сверху и снизу. Два других остаются дополнительными, и использоваться в качестве опоры.

      Затем вставьте светодиодные панели в алюминиевые профили, при этом правильно ориентируя овальные T-гайки. Порядок сборки хорошо виден на изображениях ниже. 

      Для придания раме жесткости, зафиксируйте углы вашей рамы при помощи четырех угловых скобок (алюминиевых треугольников). Имейте в виду, что в верхних углах располагаются разъемы IDC, сместите скобы таким образом, чтобы не заблокировать их.

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

      На этом моменте сборка корпуса окончена.
      Подключение питания и кабелей передачи данных. Соедините построчно все внутренние разъемы панелей двенадцатью 16-контактными  IDC кабелями. Боковые разъемы пока остаются свободными, так как они будут подключены к ресиверу. Красный провод на каждом кабеле IDC означает, что это первый контакт и должен соответствовать контакту DR1 на светодиодной панели.

      Каждая панель 16x32 поставляется с 2 кабелями и винтами для подключения питания между ними. Для предотвращения падения напряжения на длинных участках, каждая строка будет получать свою собственную 5V линию питания.
      Соедините параллельно между собой все панели через разъемы питания построчно. Аккуратно уложите провода по профилю. На крайней панели просто отпустите винты, к ним будут подключены более длинные провода, идущие от источника питания.

      Для обеспечения питания светодиодного экрана, я использовал компьютерный ATX источник питания. Любой 5V источник питания, который может обеспечить более 20 ампер тоже подойдет. ATX блоки отлично работают, они обычно дешевле, и имеют стандартные и безопасные разъемы.

      Отрежьте 3 пары проводов 12 AWG красного и черного цвета. Светодиодный экран потребляет значительное количество энергии, так что делайте кабели относительно короткой длины, около 5 футов. Для того чтобы подключить питание на светодиодный экран,  обожмите провода наконечниками под болты на одном конце и припаяйте ATX разъемы на другом.

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

      Аккуратно уложите силовые провода по алюминиевому профилю и надежно зафиксируйте их при помощи пластиковых хомутов.

      Монтаж платы ресивера.
      Для того, что бы установить плату ресивера на раму, необходимо изготовить диэлектрическую подложку по размерам платы, она предохраняет плату ресивера от короткого замыкания. После того, как подложка будет изготовлена, при помощи винтов М4 и Т-гаек, закрепите плату ресивера на алюминиевом профиле как показано на изображениях. 
      Подсоедините питание 5V с ближайшей удобной полосы панелей путем установки перемычки из проводов.

      Подключение платы ресивера.
      После установки и подключения платы ресивера, установите на нее плату IDC адаптера. Убедитесь, что она установлена правильно, так как показано на изображении ниже.
      Каждый разъем на плате адаптера IDC соответствует определенной строке на вашем светодиодном экране. Разъем J1, идет к верхней строке, т.е. к первой, J2 ко второй и т.д. Опять же убедитесь, что штекер на кабеле правильно ориентирован.

      После того, как вы все подсоединили, аккуратно при помощи ленты и липучки уложите все шлейфы как можно ближе к задней панели вашего экрана.

      Подготовка карты преобразования видеосигнала.

      Карта преобразования видеосигнала, получает видеосигнал на видеовход и далее передает его в другом виде по каналу Ethernet. Это позволяет передавать данные на ваш светодиодный экран на значительные расстояния.
      В новых картах начиная с июля 2014 года, для подключения питания используется разъем Molex. На данной карте питание подается через старый разъем mini-jack 2,5мм, которое берется с вашего блока питания. Таким образом, получается, что кабель Ethernet подключается к разъему «U», питание подается на разъем mini-jack 2,5мм. Видеосигнал подается на вход DVI/HDMI. Разъем USB используется для связи с компьютером. Подключение USB используется только для конфигурирования платы преобразования сигнала и ресивера, и не используется для общего использования после завершения установки.
      Финальные соединения.
      Подключите кабель Ethernet на вход «А» на карте ресивера.
      Подключите все провода питания к вашему источнику питания.

      Рекомендуем подключать питание к каждой строке по отдельности, и после того, как вы убедитесь, что отсутствует короткое замыкание,  и нет признаков дымления, на всех строках, подключить все строки одновременно. Не торопитесь при тестировании, будьте осторожны!
      Подключите кабель USB к вашему компьютеру. После того, как все подключено, ваш компьютер должен обнаружить внешний монитор. Adafruit ресивер и обработчик сигнала заранее запрограммирован так, что вы должны будете увидеть некоторые видео изображения в зависимости от конфигурации вашего экрана. Если вы можете запустить зеркальное видео на экране, то это будет самый простой способ отладки. Если у вас отличные параметры экрана, чем в этом уроке, не волнуйтесь, если светодиодные панели работают не правильно или не совсем не работают. Это будет исправлено в следующем шаге. Пока зеленые огни мигают на картах ресивера и обработчика, значит,  обмен данными идет нормально. Программное обеспечение LED Studio Software Configuration. Для того чтобы настроить светодиодные панели вам нужно скачать программное обеспечение студии Linsn LED. Это бесплатно, однако они попросят серийный номер, просто введите "888888". LED Studio Software Configuration можно скачать по ссылке Мы также предлагаем скачать конфигурационные файлы под различные экраны по ссылке Установите программное обеспечение на ваш компьютер
      Перед открытием программного обеспечения подключите плату обработчика к компьютеру через USB. Это позволит вам настроить как плату обработчика, так и плату ресивера. Теперь откройте программу и нажмите меню Option >> Установка программного обеспечения.

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

      На вкладке обработчика видеосигнала, вы можете настроить разрешение экрана, зеркало / поворот, а также начало X / Y позиции, части экрана, которая будет отображаться на светодиодном экране. Это обновление можно выполнить в реальном времени. Нажмите кнопку «Save on sender», и конфигурация будет сохранена на плату преобразователя видеосигнала.
      На вкладке ресивера, загрузите файл конфигурации Adafruit_96x96.RCG и светодиодный экран будет отражать площадь 96x96, указанную на вкладке обработчика сигнала.
      Вкладка подключение дисплея используется для более сложных установок с несколькими картами ресиверов. В нашем случае мы используем только один, показывая 96 х 96 пикселей. Если что-то не работает должным образом, загрузить файл Adafruit_96x96.CON. Не забудьте сохранить конфигурацию на приемник, когда вы закончите настройку параметров.
      На этом настройка заканчивается и ваш светодиодный экран готов к работе. Загрузите несколько видео и GIF анимации для проверки работоспособности.  Вот собственно и все. Удачи вам!    
      Источник:  https://learn.adafruit.com/adafruit-diy-led-video-wall?view=all
    • By ColorPlay
      Сервопривод + программируемая светодиодная лента NeoPixel   Проблема совместимости библиотек светодиодов NeoPixel  и сервоприводов.
      Однопоточный протокол управления, используемый NeoPixels, требует очень устойчивого соединения со скоростью передачи данных до 800 килобит в секунду. В нем допускается не большой процент ошибок, но он очень мал. Каждый бит должен быть передан с точно контролируемой скоростью. Библиотека Adafruit NeoPixel обрабатывает все эти сигналы в фоновом режиме, тщательно рассчитывая время каждой команды машинного кода. Для каждого пикселя есть 24 команды:

      Между тем, Arduino, как правило, в небольшие отрезки времени обрабатывает прерывание, т.е. выполняет определенные события и ситуации, которые должны быть обработаны немедленно. Вы, как правило, не замечаете этого, но прерывания все же обрабатываются в фоновом режиме. В это время ваш основной машинный код останавливается, вызывается подпрограмма обслуживания прерывания, и после возобновляется выполнение вашего основного кода, с того места в котором он был прерван. Прерывания помогают работать функциям Arduino’s delay() и millis(), а также функции Serial.read(), и другим всевозможным вещам.

      Тут-то вся и проблема. Даже очень короткий и простой способ обработки прерывания будет нарушать работу деликатной синхронизации NeoPixel. Таким образом, библиотека NeoPixel временно отключает обработку всех прерываний при записи данных в полоску светодиодов, а затем вновь позволяет им работать, когда закончит запись.
      Такие совпадения редко являются проблемой. Вы, возможно заметили, что функции millis() и micros() простаивают в эскизах (sketches) NeoPixel (отсчет времени останавливается, когда происходит запись на полосу светодиодов), что, как правило, притормаживает сервопривод.
      Возникает вопрос, что сервоприводы также имеют очень специфические требования по времени их синхронизации, и библиотека Arduino сервопривода использует прерывания для достижения этой цели. Таким образом, каждый раз, библиотека NeoPixel выключается прерывания, даже на мгновение, сервоприводы будут простаивать, и соответственно их положение в итоге будет не предсказуемо. Как грустно!

      Одним из способов решения этой проблемы является использование других особенностей AVR микроконтроллеров на ядре Arduino для управления сервоприводами без использования прерываний, как мы объясним на следующей странице. Это сложная тема, но очень полезная вещь, чтобы узнать о таком тонком нюансе. Если дальнейшее объяснение технически сложное  для вашего текущего уровня квалификации, или если вы хотите просто использовать нашу библиотеку, а это нормально, то можете пропустить технические аспекты.
      Есть аппаратные обходные пути, которые гораздо более гибкие. Наш 16-канальный 12-битный ШИМ Servo Driver (в двух секционных форматах) разгружает задачу серво управления при помощи чипа специального назначения. Так NeoPixels не может вмешиваться в работу сервопривода. Эти платы могут быть объединены "стек" для управления десятками (потенциально даже сотнями) сервоприводов! Для сложных проектов, которые, вероятно могут возникнуть. 
      Общие сведения о AVR Peripherals

      В обычном компьютере, под словом «периферийные» устройства, мы обычно подразумеваем себе такие вещи как принтер, сканер, USB диски и прочее.
      В отношении микроконтроллера, это же слово имеет несколько иной смысл. Периферийным устройством микроконтроллера, является небольшой кремниевый чип, выделенный из микропроцессора CPU (часть микроконтроллера, которая на самом деле обрабатывает машинный код), на который возложены специфические задачи, выполняемые независимо от процессора. 
      Некоторые из периферийных устройств микроконтроллера AVR в Arduino включают в себя аналого-цифровой порт (используемый функцией analogRead() ), последовательный порт UART (связь с компьютером, как и при использовании последовательного, обеспечивает связь с библиотекой и при передачу кода в чип), порт SPI (Serial Peripheral Interface иногда используется для SD карты и для сопряжения между прочими устройствами) и порт I2C (другой способ связи между чипами, поддерживаемый библиотекой Wire).
      Из интересующих нас в данный момент периферийных устройств, является Таймер / счетчик, который точно измеряет временные интервалы, которые могут быть использованы для широтно-импульсной модуляции (ШИМ, иногда используется для управления яркостью светодиодов или звука). ШИМ выход из таймера / счетчика периферийного устройства может быть использован для управления сервоприводами без участия прерываний процессора. NeoPixels и сервоприводы могут сосуществовать! Это не все цветочки, хотя ... есть некоторые серьезные ограничения ... мы рассмотрим их позже.
      Специальный материал.
      Непосредственное управление периферийными устройствами очень отличается от обычного программирования Arduino. По этой причине, большинство команд аккуратно запаковано в специальных библиотеках (или же в самой библиотеке ядра Arduino, которая сама обрабатывает большинство часто используемых функций, таких как digitalWrite() или analogRead() ).
      Разработка кода на этом уровне, человек начинает со спецификации к микроконтроллеру  ... массивного документа, в котором подробно расписан каждый последний бит и измеримый атрибут чипа. Эти данные опубликованы (и, как правило, их можно свободно загрузить с интернет сайта производителей чипов). Эти технические описания являются уникальными для каждого конкретного чипа и его разновидностей. Например:
      «ATmega 328P Datasheet»   (Arduino Uno, Adafruit Pro Trinket, etc.). 34.3 MB.
      http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
      «ATmega 32U4 Datasheet» (Arduino Leonardo & Micro, Adafruit FLORA, etc.). 7.5 MB.
      http://www.atmel.com/Images/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf
      «ATmega 2560 Datasheet» (Arduino Mega). 8.4 MB.
      http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf
      «ATtiny85 Datasheet» (Adafruit Trinket & Gemma). 3.8 MB.
      http://www.atmel.com/Images/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf 
      Да, это действительно 650 страниц технической информации. К счастью, вы не должны читать все это. Но с этим надо ознакомиться!
      Периферийное управления включает в себя доступ к регистрам специальных функций чипа, нескольким десятков адресов памяти, которые могут быть прочитаны, письменные или модифицированные, или как переменные. Но каждый байт ... часто отдельные биты внутри каждого байта ... сложные аспекты управления конкретных периферийных устройств.
      Как и переменные, регистры специального назначения называются по имени ... это все было определены в файле заголовка, который автоматически включен в программный код.
      Например, чип ATmega328P в Arduino Uno и Adafruit Pro Trinket имеет три таймера/счетчика единиц (таймер/счетчик 0, 1 и 2 - каждый имеет свой собственный раздел в файле заголовке). Использование частоты 16 МГц процессора (часы), как временную базу, каждый может отсчитывать интервалы где-то между 1 и 256 временного такта, но таймер/счетчик 1 представляет особый интерес, потому что это 16-разрядный счетчик ... он может считать в любом диапазоне от 1 до 65536 такта, обеспечивая много дополнительных возможностей для этой задачи. Подраздел "Register Desription" описания деталей, дает техническое описание каждого из регистров специального назначения, связанных с таймером/счетчиком.

      На рисунке выше показано описание специальной функции с именем регистра TCCR1A и отдельных битов контроля. Всем этим контрольным битам тоже присвоены имена, каждому из которых соответствует одно битное число от 0 до 7, их надо помнить, при написании кода, либо использовать макрос _BV (бит) или (1 << бит) при определении битов регистра; несколько битов может быть добавлено (+) или соединены через логическое ИЛИ OR(|) вместе. Обычно должны быть настроены несколько регистров,  чтобы получить полезные функции.
      Вот несколько строк из нашей библиотеки сервопривода (которую можно будет скачать  далее), показывающие, как это выглядит:
      TCCR1A = _BV(WGM11);                                                         // Mode 14 (fast PWM)
      TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS11);     // 1:8 prescale
      ICR1   = F_CPU / 8 / 50;                                                           // ~50 Hz (~20 ms)
      Едва ли похоже на код Arduino, не так ли? Если вы когда-либо создавали программный код, вы наверное использовали "Buh?". Скорее всего, это прямой доступ к регистрам специального назначения.
      Вы должны будете прочитать соответствующие разделы спецификации, чтобы полностью понять, что происходит и почему, но в основном: первые две строки - это установка специальной функции регистров TCCR1A и TCCR1B, чтобы настроить режим генерации сигнала таймера/счетчика 1 (в "fast PWM " (быстрая ШИМ) в данном случае),  и установить делитель – на "тик" время - вперед счетчика каждые 8 тактов процессора,  вместо каждого цикла. Следующая строка (ICR1) устанавливает верхний лимит счетчика/таймера (после которого он перезапускается с нуля) и, таким образом, общее время ШИМ. Немного математики, здесь присутствуют такие переменные: частота процессора в Гц (F_CPU)и частота импульса сервопривода (50 Гц). Чтобы определить это значение ... на Arduino частота процессора 16МГц, то вычисление выглядело бы следующим образом  16,000,000 ÷ 8 ÷ 50 = 40000 тиков на один цикл ШИМ.
      В других частях кода,  есть строки, подобные этим:
      TCCR1A ^= _BV(COM1A1);
      OCR1A   = pos;
      Первая строка переключает (^ является XOR оператор в C) бит COM1A1 в специальной функции регистра TCCR1A. Это разрешает или запрещает PWM (ШИМ) выход на выводе OC1A (который отмечен в другом месте в спецификации ... на Uno, это контакт 9). Вторая строка устанавливает выход сравнения регистра на том же контакте – рабочий цикл ШИМ – его значение хранится в переменной «pos».
      Сложная вещь, не так ли? Рассмотрите все это поэтапно. Помните, что это всего лишь  создание и очистка бита. Очень, очень, очень конкретного бита. Не вините себя, если что-то не заработает в первый раз, или второй, или 23 ... от нескольких проектов я просто вынужден был отказаться, потому что я никогда не мог сделать их наугад. Периферийные устройства AVR одни из самых трудных вещей Arduino. Более сложное программирование может быть только на языке ассемблера. Именно поэтому существуют библиотеки Arduino, которые избавляют нас от сложностей аппаратного программирования.
      Периферийные устройства это огромная тема, гораздо больше, чем мы затронули здесь (помните, это 650 страниц технического описания), но я хотел, обеспечить высокий уровень объяснения и понимания очень низкоуровневой технической специфики.
      Заключение
      Окупаемости всей этой тяжелой работы? В случае применения этой библиотеки, NeoPixels и сервоприводы отлично работают вместе. В более широком смысле, гораздо более отлаженно. Байт в байт, цикл для цикла, там просто нет лучшего, чем стратегия оптимизации использования встроенных периферийных устройств микроконтроллера. После настройки и запуска, ноль командных циклов тратятся на выполнение задачи. Параллельно запускается другой код, в то время как периферийные устройства делают свою работу - это явный вид многозадачности.
      Достоинства и недостатки.
      Производительность это не главное. Это часто сильно увеличивает стоимость, но не добавляет гибкости, давайте рассмотрим:
      • Периферийные устройства и регистры специальных функций являются уникальными для каждого производителя и модели микроконтроллера. Чтобы использовать их, нужно ограничить себя очень специфическим кругом оборудования. Код, который выполняет волшебные функции на Arduino Uno, не будет работать на Arduino Due ... можно даже не компилировать ... они основаны на совершенно разных архитектурах. Наша библиотека работает на наиболее распространенных 8-разрядных микроконтроллерах AVR.
      • Периферийные устройства чрезвычайно ограниченный ресурс, гораздо больше, чем даже ОЗУ или пространство кода. Существует ровно один 16-разрядный таймер/счетчик на Arduino Uno. Это может легко привести к конфликтам библиотеки ... например, библиотека WaveHC (которая играет WAV файлы с SD карты) также опирается на таймер/счетчик 1. В этом случае будет конфликт с NeoPixels.
      • ШИМ выход из блока таймера/счетчика ограничен очень специфическим набором контактов. На Arduino Uno, вы не можете контролировать более двух сервоприводов одновременно, и они должны быть на контактах 10 или 11. На Leonardo и Micro, не более четырех сервоприводов на контактах 5, 9, 10 или 11. 
      • Микроконтроллеры Trinket и Gemma не имеют даже 16-разрядный таймер. Есть только 8-разрядный таймер, при его использовании, у сервопривода возможно только лишь 8 различных положений, и соответственно плавное движение становится невозможным.
      Ранние версии "официальной" библиотеки Arduino для сервопривода работали именно так, как мы описываем здесь ... используя ШИМ выход из таймера/счетчика 1. Это уже позже перешли на технику прерывания в основе, с выгодной поддержкой многих сервоприводов на любых контактах. Там не было очевидных недостатков, NeoPixels не было даже вообще в природе, пока они не появились совсем недавно!
      Описание библиотеки The TiCoServo Library
      Если вы просто хотите, загрузить и использовать библиотеку, это полностью нормально. Пожалуйста, ознакомьтесь, что бы быть в курсе следующих ограничений:
      • Эта библиотека работает только на некоторых Arduino-совместимых платах. Все наиболее распространенное оборудование с 8-битной архитектурой AVR микроконтроллеров должно хорошо работать (Arduino Uno, Duemilanove, Leonardo, Mega, Pro Trinket, Teensy 2 и прочие.). "Обрезанные" платы, использующие другие микроконтроллеры (Arduino Due, Teensy 3, и т.д.) могут тоже работать.
      • На микроконтроллерах Trinket и Gemma возможно всего восемь сервопозиций, не будет плавности хода (на Pro Trinket должно быть все нормально).
      • Сервоприводы работают только на очень ограниченном количестве контактов, ниже приведена распиновка для различных микроконтроллеров:
      Микроконтроллер- Контакты для сервопривода
      Arduino Uno, Duemilanove, Diecimila, Adafruit Pro Trinket, Boarduino, Menta (anything w/ATmega328P or ATmega168) - 9, 10
        Arduino Leonardo, Micro - 5, 9, 10, 11   Adafruit FLORA - D9, D10   PJRC Teensy 2.0 (not Teensy+ or 3.X) - 4, 9, 14, 15   Arduino Mega - 2, 3, 5, 6, 7, 8, 11, 12, 13, 44, 45, 46   Adafruit Trinket - 1, 4   Adafruit Gemma - D1   Скачать библиотеку Adafruit TiCoServo Library для Arduino можно по ссылке:  https://github.com/adafruit/Adafruit_TiCoServo/archive/master.zip  Скачать библиотеку Adafruit NeoPixel для Arduino можно по ссылке: https://github.com/adafruit/Adafruit_NeoPixel/archive/master.zip 
      Установка этих библиотек становится точкой преткновения для новичков, пособие по установке этих библиотек доступна по ссылке:  https://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
      После установки библиотеки, перезагрузите Arduino IDE.
      Есть два простых примера, которые согласуют сервоприводы и NeoPixels. Один будет работать на Adafruit Gemma или Trinket, другой на Arduino Uno или большинства других неспециализированных плат (Leonardo, и т.д.). Вам, возможно, потребуется изменить некоторые номера контактов PIN (PIN # NeoPixel, и т.д.) в программном коде.
      Библиотека моделируется после официальной библиотеки Arduino для сервопривода ... все функции и аргументы идентичны, и вы можете просто обратиться к сайту Arduino для справки. Для назначения номеров контактов нужно внести незначительные изменения в программный код, большинство программных кодов для сервоприводов Arduino совместимы и сложностей, возникнуть не должно. Итак, покажем какие строки возможно придется изменить:
      Вместо: #include <Servo.h> Пишем: #include <Adafruit_TiCoServo.h>
      Изменение декларации сервопривода, в место:
      Servo myservo; // create servo object to control a servo Пишем: Adafruit_TiCoServo myservo; // create servo object to control a servo
      С функциями attach(), write() и прочими, работать аналогично стандартной библиотеке сервоприводов, если конечно вы не будете использовать Trinket или Gemma.
      Особые дополнения для Trinket и Gemma
      Так как они основаны на уменьшенном микроконтроллере ATtiny85, то эти платы работают немного по-другому.
      Во-первых, необходима одна дополнительная линия #include в верхней части кода:
      #include <avr/power.h>
      Затем добавьте следующую строку в функции setup(). Важно, что она стояла пред вызовом функции  servo.attach ()!.
      #if (F_CPU == 16000000L)
      clock_prescale_set(clock_div_1);
      #endif
      В отличие от «большого» кода, который работает с градусами или микросекундами, "крошечная" версия может указать только серво позиции в значениях "тик", где каждый тик равен примерно 128 микросекунд. Учитывая, что большинство сервоприводов номинально синхронизируются импульсом между 1000 и 2000 микросекунд, то это означает значение от 8 до 15 тиков, и являются разумным диапазоном. Каждый сервопривод немного отличается, хотя ... некоторые из них более или менее совместимы по диапазону, так что вы можете быть уверенны в настройках этих значений.
      Это может показаться большим достижением. Многие проекты требуют только два сервопривода (например, ворота, флаг или клапан переключения между открытым и закрытым положениями).
      Источник:  https://learn.adafruit.com/neopixels-and-servos?view=all
  • LIGHTING DESIGN | PROJECTS LIGHTING:

  • Lighting Design: NEW IDEAS OF FUNCTIONAL AND DECORATIVE LIGHTING

  • Clubs

  • Who's Online   62 Members, 0 Anonymous, 95 Guests (See full list)

  • Popular Contributors

  • Member Statistics

    2,092
    Total Members
    1,029
    Most Online
    braydendevin313
    Newest Member
    braydendevin313
    Joined
  • Gallery Statistics

    2,760
    Images
    3,782
    Comments
×
×
  • Create New...