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

Ну а поскольку: Не так дорог подарок, как дорого внимание (с) — попробуем вложиться временем. Представляю вашему вниманию «Сердце v1.0»



Основная идея устройства была придумана коллективно с моей командой еще для «Елки v1.0». Кратко набор функций:

— гравированное поздравление на сердце
— питание от ЗУ телефона (разъем microUSB)
— RGB подсветка с возможностью записи профилей мигания, переключаемых по кнопке
— режим ночника
— встроенная память для записи поздравления. При подключении к ПК определяется как флешка.

Подискутировав/порадовавшись заложенному функционалу мы решили делать — никто тогда не подозревал каких временнЫх затрат потребует сердце…

Железо


Как оказалось — самая простая часть сердца. Первым делом была составлена структурная схема устройства:



Детали брались из тех, что были у нас на складе, а также уже не раз использованы в устройствах. По схеме можно сказать: самый дешевый МК с USB на борту STM32F042F6P6, простой LDO — XC6206P332MR, 32Мбит SPI память W25Q32FVSSIG (на плату заложили 2 шт, но в итоге паяли одну), управляемый RGB светодиод WS2812.

Принципиальная схема:



Минимум деталей и самый главный просчет — надежда на то, что WS2812 будет нормально работать от уровня 3,3В (Славик! Да я сто раз так делал… говорили многие).

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



Фейл


Помните я упоминал про робкую надежду на то, что WS2812 будет работать от уровня 3,3В? Так вот не будет!!! Точнее все вроде как работало до начала обмена по USB. При этом начинал сбоить канал Blue. Долго искали проблему в ПО, думая, что не хватает ресурсов процессора, но потом подтянули ногу PB1 к 5В через резистор 1кОм и все заработало четко. При этом уровень лог.1 стал примерно 4,3В. Понимаю, что так делать не хорошо, но выбора не было. На плате получился довольно элегантный «колхоз»:



Софт МК


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

Тем не менее, в нашем микроконтроллере доступно 32кб, прошивка займет чуть больше половины, поэтому логично в оставшейся памяти хранить последовательности из трех байт (R-G-B), которые и передавать по очереди на вход светодиода. Нажатие кнопки будет по кругу переключать последовательности, которые записаны во флеш МК.

Здесь мы сталкиваемся с первой проблемой: светодиод WS2812 очень требователен к периоду и длительности импульсов, при том что время импульсов (0.4-0.8мкс) достаточно мало для процессора работающего на 48МГц. Кроме того, надо учесть, что кроме управления светодиодом, наш мк должен будет еще обслуживать общение с ПК по usb и чтение/запись флеш памяти.
К счастью, этот диод довольно популярен и в интернете описано несколько способов реализации его протокола, в том числе и на микроконтроллерах STM. Мы выбрали, пожалуй, один из самых сложных с точки зрения реализации, но и одновременно самый эффективный с точки зрения процессорного времени — DMA + таймер. DMA пишет непосредственно в GPIO порт, таймер управляет каналами DMA. Поскольку DMA пишет во весь порт разом, то использовать другие выводы порта как выход не получится. Именно поэтому для управления светодиодом был выбран вывод PB1. Идеологически все просто, но с реализацией пришлось бы изрядно повозиться, если бы не замечательная библиотека, которую написал Martin Hubacek и выложил на github. После небольшого допиливания под наш МК и выбранный способ хранения RGB последовательностей, мы получаем работающий светодиод.

Флеш память


Представьте, подарили Вам сердечко с персональным поздравлением. Приходите Вы, радостный, домой, подключаете его к компьютеру, а оно, вместо «Люблю!», выдает Вам «Не найден необходимый драйвер устройства» или еще что-нибудь в этом роде. Нехорошо.

Поэтому сердце должно распознаваться как флеш накопитель в любой из распространенных операционных систем, не требуя установки драйверов. Поэтому будем использовать класс usb под названием «Mass storage device», благо STM32 USB Device Library предоставляет нам готовое решение. Стоп! Готовое???? Сейчас посмотрим.

Создаем проект в STM32CubeMX, соединяем методы read/write для spi флэш памяти с соответствующими вызовами в модуле usb mass storage и обнаруживаем сразу две проблемы: флешка не хочет безопасно извлекаться и «захлебывается» при попытке записать на нее что-нибудь больше чем текст «Hello World» в файле README.txt.

Первую проблему решить легко — нужно реализовать отсутствующую обработку SCSI команды StartStopUnit. Вторую решить сложнее. Размер блока файловой системы (естественно, располагая лишь 8мб места, мы будем использовать Fat16) 512 байт. Память умеет стирать только блоками по 4кб. Придется резервировать один из блоков под временное хранилище (занять 4кб оперативной памяти при имеющихся 6кб мы себе позволить не можем). То есть чтобы записать 512 байт, придется скопировать 4кб, стереть 4кб, и скопировать их обратно. Мало того, если файл достаточно большой, операционная система хочет записывать на накопитель по 64кБ за раз, и наш контроллер не способен обслужить такой большой для него объем данных за нужное время, учитывая что используемый флеш накопитель тоже не самый быстрый. В общем, пока контроллер неспешно пишет данные по 256 байт за раз (размер страницы памяти), операционная система (по крайней мере Fedora, на которой все это тестировалось) уже успевает решить, что накопитель пал смертью храбрых.

Знатоки наверняка укажут более элегантное решение проблемы, но «мы пойдем другим путем». Чтение флеш памяти будет по интерфейсу mass storage device и в этом режиме он будет позиционировать себя как Read-Only (заодно сердце можно будет спокойно «вырвать» из компа без всяких «безопасных извлечений», но боясь попортить файловую систему), а записывать его будем через виртуальный com-порт (aka Communication Device Class). Через этот же интерфейс будем записывать в конец памяти МК наши RGB последовательности.

Режим загрузки (mass storage или cdc) будем выбирать при загрузке по нажатой (или нет) кнопке.
Сказано — сделано (как всегда, на эти два слова было потрачено основное количество времени и кофе). Возвращаем read-write в MSC интерфейс, поскольку обнаруживается что в режиме read-only macOs отказывается распознавать флешку, — не беда, тут мы обманем операционную систему и будем возвращать «success» на любой запрос записи, ничего при этом не делая (опять же, решение из разряда «пусть не элегантно, зато дешево и сердито»). Дело за малым — софт для ПК.

Софт ПК


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

Приложение должно быть кросс-платформенное, и тут нам на помощь приходят библиотека Qt для создания графического интерфейса и FatFS от ChaN для создания и управления образом диска. Обмен данными с устройством через com-порт доступен в Qt последних версий «из коробки» (модуль QSerialPort), для операций с образом диска используем QTreeView с item model, наследованной от QabstractItemModel, в которой дополнительно реализованы операции Drag&Drop (что ни говори, «перетащить мышкой» удобно и привычно, если речь идет о файлах/папках). Для создания RGB последовательностей пригодится QListWidget (для отображения последовательности цветов), библиотека QtColorWidgets (автор Mattia Basaglia) для выбора цвета и встроенный в Qt класс QEasingCurve для плавных (или наоборот скачкообразных) переходов между цветами и создания эффекта радуги.

Результат: приложение имеет две вкладки:

1) «Storage» для файлов



2) «LED» для управления RGB последовательностями



Диалог создания RGB последовательности:



Диалог работает в трех режимах:

а) RGB — позволяет задавать переходы между двумя цветами заданными в нотации RGB.
б) HSV — то же самое, но в нотации HSV — перелив получается более привычный для человеческого глаза, в частности режим «HSV» + «Iterate->HUE» позволяет создавать радуги.
в) Custom — этот режим дает возможность задать каждый цвет последовательности вручную. Большие последовательности так не составить, в вот погасить сердце на какое-то время (задав цвет «черный») в этом режиме как раз очень удобно.

Ну и, наконец, определение нашего устройства как флешки в Windows/macOs/Linux(Gnome):







Заключение


И вот после всей проделанной работы и написанного текста я обнаружил, что не сделал ни одной нормальной фото самого сердца. Поэтому прилагаю вариант «как получилось»:





В реальности смотрится прекрасно (особенно при наличие гравировки). Любите своих близких!!!
Выбрали ли вы подарок любимым на 14 февраля?

Проголосовало 503 человека. Воздержался 181 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (73)


  1. rusticus
    13.02.2017 09:51
    +14

    Добавьте в опрос третий вариант, типа «Некому дарить»


    1. vladimir_open-dev
      13.02.2017 09:53

      Уже нельзя, к сожалению…


  1. GreenStore
    13.02.2017 09:51

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


    1. vladimir_open-dev
      13.02.2017 10:16
      +1

      Так ссылкой в нас… ссылкой



  1. Jmann
    13.02.2017 10:01
    +3

    Я три раза подряд дарил своей любимой самодельные мигающие сердечки (одно повторил и немного переделал. Автор Игорь с сайта chipenable ), то на 8 марта, то на 14 февраля. В итоге она вышла за меня за муж =)


    1. czA
      13.02.2017 11:51
      +23

      Хотел сделать, но теперь задумаюсь) спасибо парень!


  1. GeMir
    13.02.2017 10:11
    +10

    Личный опыт показывает, что (цитата) «очередной пылесборник», даже созданный своими руками, не всегда радует больше «банальных» цветов ;)


    1. vladimir_open-dev
      13.02.2017 10:16
      +2

      У всех по-разному, но я цветы не дарю принципиально — это самый бестолковый подарок.


      1. DrPass
        13.02.2017 11:00
        +11

        Вот и зря. Дарить надо подарки не согласно вашим принципам, а согласно вкусу того человека, которому подарок предназначается. А подавляющее большинство девушек согласятся, что сделанный руками девайс получить действительно приятно, но электронная мигалка светодиодами в форме сердца — это штука на «посмотреть, улыбнуться и закинуть в ящик». Если и оставит, то только чтобы не обидеть, потому что любит. Девушки, не имеющие отношения к технике, не поймут ни потраченных усилий, ни тонкостей программирования, ни преодолённых проблем, и цветы будут куда приятнее. Уж поверьте, я проходил через это. Если хотите сделать девушке приятное своими руками, это должно быть или полезное, или красивое, а лучше и то, и другое. Сердце из куска акрила — это и не полезно, и не красиво. Эффект не будет стоить потраченных сил.
        Кстати, из сделанных своими руками подарков у меня, неожиданно, самым эффектным оказалось трюмо. Я своей супруге как-то смастерил на 8 марта новое трюмо, с освещением со всех сторон, с кучей розеток для косметических гаджетов, и она его постоянно вспоминает, как это здорово.


        1. vladimir_open-dev
          13.02.2017 11:09

          Я также как и вы написал свое мнение, основанное на личном опыте. Но я не буду советовать вам, что нужно делать, чтобы сделать девушке приятное своими руками…


        1. IgorGIV
          13.02.2017 13:56
          +7

          "… сделать девушке приятное своими руками..."… блин, я пошлый! :)


      1. nerudo
        13.02.2017 12:27
        +4

        Неправда, очень толковый подарок. Порадовали человека, а через несколько дней — в утиль и места не знанимают. Еще лучше только что-то съедобное :)


        1. LampTester
          13.02.2017 12:40

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


          1. Leo7777
            13.02.2017 13:08
            +4

            Вывод: даже хамящим девушкам нравятся цветы


            1. LampTester
              13.02.2017 21:07

              Если так экстраполировать, то не «даже», а «только».


      1. UJIb9I4AnJIbIrUH
        13.02.2017 18:30
        +1

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


        1. LampTester
          13.02.2017 21:08

          Дарите альстромерии — они красивые, но без запаха. :)


          1. UJIb9I4AnJIbIrUH
            13.02.2017 21:15
            -1

            ну запах и аллергия это вещи не связанные спрпведливости ради. Но за совет спасибо!


            1. vladimir_open-dev
              13.02.2017 21:16

              В таком случае искусственные цветы — верняк!


              1. UJIb9I4AnJIbIrUH
                13.02.2017 21:18
                -1

                или гипоаллергенные сорта


        1. sim31r
          14.02.2017 00:09
          -5

          Замечательный тест на аллергичность. Если бы моя девушка начала чихать от цветов, я бы сразу с ней расстался. Девушка должна быть здоровой, чтобы родить здоровых детей. Тем более если сам склонен к аллергии. На данный момент девушка уже жена, от цветов не чихает и очень им радуется, и дети в количестве 3 штуки растут нормально, тоже не чихают в отличие от меня ))


          1. vladimir_open-dev
            14.02.2017 00:11
            +1

            По вашей логике девушка должна была с вами расстаться… чтобы родить здоровых детей от кого-то другого. Странная логика. Цель, несомненно, благая, но цинично не находите?


          1. DrPass
            14.02.2017 12:06
            +1

            Если бы моя девушка начала чихать от цветов, я бы сразу с ней расстался. Девушка должна быть здоровой, чтобы родить здоровых детей.

            Так ведь не только девушка должна быть здоровой, но и папа тоже. Зачем вы распространяете свой генетический материал, если он содержит гены подверженности к аллергии?

            дети в количестве 3 штуки растут нормально, тоже не чихают в отличие от меня

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


            1. sim31r
              15.02.2017 14:16

              Зачем вы распространяете свой генетический материал, если он содержит гены подверженности к аллергии?

              О да, «ужасный» материал. С учетом того, что в поликлинике у меня и медицинской карточки нет. Сижу по 12 часов за компом с детства, единственное чего не вижу — спутники Юпитера ))
              Аллергия мелкая, имеет и положительные стороны, гиперактивный иммунитет мочит любые вирусы и раковые клетки.
              Есть материал и лучше, коллеги некоторые, то же самое, только еще и IQ свыше 140, очень быстро соображают, но таких 1 на 1000.
              Впрочем всё ерунда, на подходе реализация фильма «Гаттака» все будут идеальными, что заложат еще до зачатия. Уже сейчас сбойные гены могут заменять. На нас новое поколение будет смотреть как на неандертальцев, аллергики, близорукие, «дурачки» с IQ менее 200 и прочие.


              1. DrPass
                15.02.2017 14:55

                О да, «ужасный» материал. С учетом того, что в поликлинике у меня и медицинской карточки нет. Сижу по 12 часов за компом с детства, единственное чего не вижу — спутники Юпитера ))

                Это смотря сколько вам лет. Если 50, то нормальный материал, можно вас допускать к размножению потомства. Если 30, то надо будет посмотреть на вас в 50, взять анализы, а потом уже принимать решение, как быть с вашей генетической линией.


              1. ksil
                16.02.2017 16:30

                По определению IQ 50% населения обладает коэффицинтом больше ста, 50 — меньше.


  1. laughing_Hyena
    13.02.2017 10:22
    +8

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


    1. Disasm
      13.02.2017 10:24

      Только если кто-нибудь додумается совместить это с деревянной флешкой.


    1. vladimir_open-dev
      13.02.2017 10:25

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


    1. Jmann
      13.02.2017 11:40
      +2

      Я когда-то давно, лет 12 назад, дарил маме на 8 марта хендмейд плеер на ATA CD-ROM, схема была на x51 от Atmel + МР3 декодер VS1001, который очень трудно было достать (уже и не помню, но проект был какого-то зарубежного разработчика, я выдернул у него работу с приводом и МР3). Все было красиво упаковано в корпус из фанеры, отшпаклеванный автомобильной шпатлевкой и закрашенный черной матовой краской.


    1. LampTester
      13.02.2017 12:35
      +1

      «ынжынэрная мысль» дальше мигающих сердечек и цветочков для прекрасного пола продвинется когда-нибудь?


      Этого не требуется. :) Просто каждый раз приходят новые люди. Человек увлекается электроникой, доходит до уровня, когда уже что-то может, и у него возникает естесственное желание использовать навыки для того, чтобы любимый человек разделил его восторг. Потом он либо идет дальше и перерастает слишком бурный восторг от мигалок, либо бросает это дело; затем на его место приходят новые энтузиасты, которые доходят до уровня, когда уже могут что-то сделать, и…

      Это круговорот жизни. Мне сложно сосчитать, сколько раз на форуме я отвечал на вопросы на тему «мигалка для дамы сердца». Они всегда одинаковые и всегда дышат энтузиазмом. :) И это прекрасно.

      Богами вам еще даны
      Златые дни, златые ночи,
      И томных дев устремлены
      На вас внимательные очи.
      Играйте, пойте, о друзья!
      Утратьте вечер скоротечный;
      И вашей радости беспечной
      Сквозь слезы улыбнуся я.


      Скоротечный вечер, в частности, можно утратить на сборку светодиодного сердечка.


    1. Alexey2005
      13.02.2017 19:38
      -1

      А всё потому, что у прекрасного пола как правило плоховато с увлечениями. Такое ощущение, что они вообще не способны чем-то всерьёз увлечься, ну так чтобы тратить на некоторое занятие очень много времени и средств, засиживаться за полночь, поддерживать интерес годами и всё в таком же духе.
      У каждого мужчины есть устойчивое хобби: рыбалка, электроника, фотография или ещё что-то. И достаточно его примерно узнать (а рассказывают они о нём крайне охотно, с увлечением) — и дело в шляпе, сразу понятно, чего дарить.
      А у женщин что же? Почему они настолько поверхностны?


      1. LampTester
        13.02.2017 21:13
        -1

        Они не поверхностны; просто, что бы там ни задвигали феминистки, у женщин от природы другие задачи, что и определяет их характерные особенности.


      1. Vanellope
        14.02.2017 04:05

        У каждого мужчины есть устойчивое хобби:

        Футбол, гараж, пиво по вечерам и в сопли по пятницам :)


  1. the_turkale_cat
    13.02.2017 10:27
    +2

    Смотрю на схему.
    Самая первая мысль — «Поставит ли автор транслятор уровней?».
    Вторая мысль — «Управляем с UARTа или через SPI?»
    И ни одной мысли про подарки и проч.
    Совсем я профессионально деформировался.


    1. vladimir_open-dev
      13.02.2017 10:27

      Это нормально:)


  1. Shaz
    13.02.2017 11:38
    +3

    И как это успеть собрать за за 4 часа?!


    1. vladimir_open-dev
      13.02.2017 12:30

      Плат на всех хватит)))


  1. Celtis
    13.02.2017 12:37
    +1

    Что, когда и кому дарить — вам тут уже насоветовали…
    Влезу-ка и я в калашный ряд, но уже по теме железа.
    Скажите, чем была вызвана необходимость использовать прожорливый и сложный в работе WS2812, героически преодолевая(и успешно преодолев, должен признать) все его капризы?
    Почему было не взять любой "глупый" RGB в корпусе 5050 и управлять им по ШИМ?


    1. vladimir_open-dev
      13.02.2017 13:34

      С ним дешевле получилось и компактнее + у нас опыт работы с ними большой. Прожорливость тут не важна(разве он больше жрет чем дискрет)


      1. 3aicheg
        14.02.2017 04:42

        С ним дешевле получилось

        Только девушке не надо, наверное, так отвечать, если то же самое спросит.


        1. vladimir_open-dev
          14.02.2017 09:34

          А я и не говорил, что мы вкладываемся деньгами… я говорил вкладывемся временем. Хотя если принять, что сердце было только одно, то обошлось мне оно порядка 100т.р.


  1. madf
    13.02.2017 13:10
    +1

    Помните я упоминал про робкую надежду на то, что WS2812 будет работать от уровня 3,3В? Так вот не будет!!!

    У меня без проблем везде и всегда работает, причем не только 2812, но и предыдущие модели. Никаких проблем.


    Чот я так и не понял, зачем флешка в этой штуке...


    1. Radmin
      13.02.2017 13:16

      У меня есть версия на этот счёт. Тоже очень хотел отписаться, что успешно питал ленту из 10 диодов от 3,3 вольт.
      В начале знакомства с WS2812 так же имел проблемы с запуском на таком напряжении, затем заглянул в даташит и выяснил, что уровень логики и питания не должны отличаться больше, чем на 0,5В. При соблюдении этих условий все проблемы исчезали, и лента начинала исправно работать.


      1. Celtis
        13.02.2017 14:16

        уровень логики и питания не должны отличаться больше, чем на 0,5В.

        Контрпример из моего опыта: практически всегда питаю 2812 от 5В, но управляю по 3.3В — полет нормальный.


      1. madf
        13.02.2017 14:55

        вообще в статье разговор про "уровень", а не питание)
        я питаю их всегда 5В, а управляю 3.3В
        т.к. схема цифровая, то никаких проблем не должно быть и не наблюдал


    1. vladimir_open-dev
      13.02.2017 13:36

      Я уже говорил кому-то в одной из статей про ws2812 если у вас работает от 3,3в то ищите проблему. Или напряжение питания ниже 5в или вам пока везет(такое тоже бывает).
      Флешка для записи поздравления(не скачанного с инета, а написанного самим дарующим). Я добавил фото семейное и тхт с письмом. Определяется как флешка при подключении к пк. Это неожиданно приятно как показала практика.


    1. Vanellope
      13.02.2017 14:42

      Чот я так и не понял, зачем флешка в этой штуке...

      Как флешка на 8 МБ, конечно же!


    1. vladimir_open-dev
      14.02.2017 09:47

      Чудес ведь не бывает — по документации работать не должно (где-то с 3,7В начинается устойчивая «1»). Повод задуматься о том — почему работает.


      1. madf
        14.02.2017 11:20

        Читайте внимательнее документацию, там написано "Hysteresis voltage (Vh set): 0.35", т.е. любое напряжение свыше этого значения приравнивается к единице. WS-ми можно управлять хоть 1.8 логикой...


        1. vladimir_open-dev
          14.02.2017 11:59

          Блажен кто верует… от 1,8 В светодиод даже не мигнет. Написано черным по белому
          image
          Получается самый минимальный уровень единицы(как говорил мой преподаватель — самая плохая единица) это 0,7Uпит. При питании 5В это 3,5В.
          В вашем случае вам просто везет (о чем я неоднократно говорю людям у которых что-то работает, хотя не должно). Это связано, скорее всего с разбросом допуска, с пониженным питанием (4,7В). При наличии помех ваша система рухнет (как рухнула наша при обмене по usb).


          1. madf
            14.02.2017 12:34
            -1

            У меня ЭТО всё работает уже в 4-х принципиально разных проектах и никаких проблем нет. Причем там далеко не один светоед и разных марок (до китайских подделок).


            как говорил мой преподаватель — самая плохая единица) это 0,7Uпит.

            Какой учитель — такой и ученик (ничего не работает). Почитайте про типы логики и разные уровни напряжений. Поисковиком надеюсь умеете пользоваться.


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


            1. vladimir_open-dev
              14.02.2017 14:00

              Уже спорили про это несколько раз… уже тошнит.
              https://geektimes.ru/post/284248/#comment_9792538


              1. madf
                14.02.2017 14:27

                Ну так вам там уже давно всё разжевали, а вы любите видимо спорить.)


                1. vladimir_open-dev
                  14.02.2017 14:31

                  Вот об этом я и говорил…
                  Объясните мне (и моему преподавателю) тогда что же за параметры VIL VIH?


            1. GarryC
              14.02.2017 14:30

              Очень жаль заказчиков Ваших 4х проектов, в которых не выдерживаются требования ТУ на микросхему. Хотя если это Ваши собственные проекты, то продолжайте, не стоит думать о воспроизводимости и устойчивости работы, это не для Вас.


  1. kmishukov
    13.02.2017 14:42

    Не понял куда iPhone вставлять?


  1. SadAngel
    13.02.2017 14:42
    +3

    И никаких Arduino :) Автор молодец!


  1. n-krd
    13.02.2017 16:28

    Как всегда великолепно, судя по опросу, напоминать про 14 февраля нужно раньше :)


  1. FGV
    13.02.2017 20:31

    >Поскольку DMA пишет во весь порт разом, то использовать другие выводы порта как выход не получится.

    почему не получится? если работать через GPIOx _BSRR все получится.


    1. vladimir_open-dev
      13.02.2017 20:34

      DMA пишет весь порт целиком(все 16 бит) и на это нельзя повлиять. За подробностями сюда


      1. FGV
        14.02.2017 05:44

        dma можно конфигурировать, на 8,16 и 32 бита. И если писать не в регистр порта а в регистр сброса\установки отдельных бит _BSRR, то все прекрасно работает.
        За подробностями http://www.st.com/resource/en/datasheet/stm32f042c4.pdf
        Так что не вводите в заблуждение.


        1. FGV
          14.02.2017 06:12

          upd: извиняюсь, ссыль не ту отправил. RM0091: http://www.st.com/resource/en/reference_manual/dm00031936.pdf
          л. 159, л. 192.


          1. vladimir_open-dev
            14.02.2017 09:32

            Может я не так понял, что вы предлагаете сделать, но как я понял вашу идею она с DMA не будет работать. Все потому, что destination для записи «1» — GPIOx->BSRR, а для записи «0» GPIOx->BRR. Как DMA это отработает?


            1. FGV
              14.02.2017 09:48

              DMA отработает точно так же как и запись в регистр BRR, только из памяти в bsrr будут пересылаться 32х разрядные слова. Суть в том _BSRR- 32х разрядный регистр, чувствителен только к записи 1 в соответствующие разряды. 1 в 32-16 разрядах сбрасывает соответствующий бит порта (15-0); 1 в 15-0 взводит.


            1. FGV
              14.02.2017 10:00

              пример "неработающего" дма:


              long WordToArinc[64];//sending_32bit_w
              
              //start word send
              void inline start_send()
              {
                  DMA1_Channel1->CCR=0;//channel configuration register
                  //dma config:
                  DMA1_Channel1->CNDTR=64;// Number of data to transfer
                  DMA1_Channel1->CMAR=(WordToArinc);// memory address register
                  DMA1_Channel1->CPAR=&(GPIOC->BSRR);// peripheral address register
                  //////////////////////FEDCBA9876543210
                  DMA1_Channel1->CCR=0b0011101010010011;//channel configuration register
              }


              1. vladimir_open-dev
                14.02.2017 14:15

                Да, вы правы. Спасибо.


              1. GarryC
                15.02.2017 14:50

                При все уважении, последняя строка в настройке все-таки должна вроде быть следующей


                DMA1_Channel1->CCR = MEM2MEM*0 + PL3 + MSIZE32 + MINC +PINC*0 + CIRC*0 + DIR1 + TEIE*0 + THIE*0 + TCIE + EN


  1. totuin
    13.02.2017 20:54
    +1

    Только один вопрос — а зачем здесь WS2812. Обычный трёхцветный светодиод (который кстати и стоит в WS2812) — не кошерно?
    WS2812 — это хорошо для тех случаев когда их много, для пиксельной адресации, а здесь он один, и приводит к такой куче проблем. Не понятно.

    Упс, нашёл ответ выше


    1. vladimir_open-dev
      13.02.2017 21:05

      Очень туго было с местом на плате + яркость дискретного решения зависела бы от напряжения питания (у WS2812 стабилизаторы тока внутри) + вышел бы дороже монтаж (12 точек против 4).


      1. Radmin
        13.02.2017 22:47

        Кстати, простите за занудство, но у вас в статье WS2812b, а не WS2812. Не знаю, влияет ли это уточнение на что-то в вашей статье, но сами по себе они сильно отличаются друг от друга, как минимум, таймингами управления цветом.


        1. vladimir_open-dev
          13.02.2017 22:52

          Влияет на множители в ПО.