Подарок любимой на 14 февраля от электронщика

    Приветствую тебя, читатель 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 Hubáček и выложил на 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):







    Заключение


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





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

    Only registered users can participate in poll. Log in, please.

    Выбрали ли вы подарок любимым на 14 февраля?

    • 16.9%Да86
    • 83.1%Нет424

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 73

      +14
      Добавьте в опрос третий вариант, типа «Некому дарить»
        0
        Уже нельзя, к сожалению…
        0
        Приобрел похожий, но с возможностью работы от батареек и с пультом дистанционного управления.
        +3

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

          +23

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

          +10
          Личный опыт показывает, что (цитата) «очередной пылесборник», даже созданный своими руками, не всегда радует больше «банальных» цветов ;)
            +2
            У всех по-разному, но я цветы не дарю принципиально — это самый бестолковый подарок.
              +11
              Вот и зря. Дарить надо подарки не согласно вашим принципам, а согласно вкусу того человека, которому подарок предназначается. А подавляющее большинство девушек согласятся, что сделанный руками девайс получить действительно приятно, но электронная мигалка светодиодами в форме сердца — это штука на «посмотреть, улыбнуться и закинуть в ящик». Если и оставит, то только чтобы не обидеть, потому что любит. Девушки, не имеющие отношения к технике, не поймут ни потраченных усилий, ни тонкостей программирования, ни преодолённых проблем, и цветы будут куда приятнее. Уж поверьте, я проходил через это. Если хотите сделать девушке приятное своими руками, это должно быть или полезное, или красивое, а лучше и то, и другое. Сердце из куска акрила — это и не полезно, и не красиво. Эффект не будет стоить потраченных сил.
              Кстати, из сделанных своими руками подарков у меня, неожиданно, самым эффектным оказалось трюмо. Я своей супруге как-то смастерил на 8 марта новое трюмо, с освещением со всех сторон, с кучей розеток для косметических гаджетов, и она его постоянно вспоминает, как это здорово.
                0
                Я также как и вы написал свое мнение, основанное на личном опыте. Но я не буду советовать вам, что нужно делать, чтобы сделать девушке приятное своими руками…
                  +7
                  "… сделать девушке приятное своими руками..."… блин, я пошлый! :)
                  +4
                  Неправда, очень толковый подарок. Порадовали человека, а через несколько дней — в утиль и места не знанимают. Еще лучше только что-то съедобное :)
                    0
                    Как ни странно, но на моей памяти действительно радовалась цветам только одна девушка (правда, она потом все равно мне нахамила, чем поставила крест на нашем общении). Так что, видимо, времена меняются.
                      +4
                      Вывод: даже хамящим девушкам нравятся цветы
                        0
                        Если так экстраполировать, то не «даже», а «только».
                    +1
                    а у меня было так. Первое свидание, всё такое, я заявился с розами. Девушке вроде было приятно, ничего такого я не заметил, она взяла цветы и улыбалась. А через несколько минут у неё нос стал жутко красным и она начала чихать, цветы при этом она всё это время не выпускала из рук. На мой вопрос есть ли у неё аллергия прозвучал утвердительный ответ о_0
                      0
                      Дарите альстромерии — они красивые, но без запаха. :)
                        –1
                        ну запах и аллергия это вещи не связанные спрпведливости ради. Но за совет спасибо!
                          0
                          В таком случае искусственные цветы — верняк!
                            –1
                            или гипоаллергенные сорта
                        –5
                        Замечательный тест на аллергичность. Если бы моя девушка начала чихать от цветов, я бы сразу с ней расстался. Девушка должна быть здоровой, чтобы родить здоровых детей. Тем более если сам склонен к аллергии. На данный момент девушка уже жена, от цветов не чихает и очень им радуется, и дети в количестве 3 штуки растут нормально, тоже не чихают в отличие от меня ))
                          +1
                          По вашей логике девушка должна была с вами расстаться… чтобы родить здоровых детей от кого-то другого. Странная логика. Цель, несомненно, благая, но цинично не находите?
                            +1
                            Если бы моя девушка начала чихать от цветов, я бы сразу с ней расстался. Девушка должна быть здоровой, чтобы родить здоровых детей.

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

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

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

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

                                Это смотря сколько вам лет. Если 50, то нормальный материал, можно вас допускать к размножению потомства. Если 30, то надо будет посмотреть на вас в 50, взять анализы, а потом уже принимать решение, как быть с вашей генетической линией.
                                  0
                                  По определению IQ 50% населения обладает коэффицинтом больше ста, 50 — меньше.
                        +8
                        Который год в преддверии очередного праздника возникает дежавю.
                        Интересно, «ынжынэрная мысль» дальше мигающих сердечек и цветочков для прекрасного пола продвинется когда-нибудь?
                          0
                          Только если кто-нибудь додумается совместить это с деревянной флешкой.
                            0
                            Если вы осилили текст и поняли об чем устройство, то там мигающее сердечко только с боку… на мой взгляд. Возможно, это тот вариант, когда трудозатраты абсолютно не соответствуют полученному результату, но работа проделана, результат получен.
                              +2

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

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


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

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

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


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

                                      Футбол, гараж, пиво по вечерам и в сопли по пятницам :)
                                    +2
                                    Смотрю на схему.
                                    Самая первая мысль — «Поставит ли автор транслятор уровней?».
                                    Вторая мысль — «Управляем с UARTа или через SPI?»
                                    И ни одной мысли про подарки и проч.
                                    Совсем я профессионально деформировался.

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

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

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

                                        Только девушке не надо, наверное, так отвечать, если то же самое спросит.
                                          0
                                          А я и не говорил, что мы вкладываемся деньгами… я говорил вкладывемся временем. Хотя если принять, что сердце было только одно, то обошлось мне оно порядка 100т.р.
                                      +1
                                      Помните я упоминал про робкую надежду на то, что WS2812 будет работать от уровня 3,3В? Так вот не будет!!!

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


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

                                        0

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

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

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

                                            0

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

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

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

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

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

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


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

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


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

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

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

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

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

                                                  0
                                                  Не понял куда iPhone вставлять?
                                                    +3
                                                    И никаких Arduino :) Автор молодец!
                                                      0
                                                      Как всегда великолепно, судя по опросу, напоминать про 14 февраля нужно раньше :)
                                                        0
                                                        >Поскольку DMA пишет во весь порт разом, то использовать другие выводы порта как выход не получится.

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

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

                                                              0

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

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

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

                                                                    0

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


                                                                    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
                                                                    }
                                                                      0
                                                                      Да, вы правы. Спасибо.
                                                                        0

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


                                                                        DMA1_Channel1->CCR = MEM2MEM*0 + PL3 + MSIZE32 + MINC +PINC*0 + CIRC*0 + DIR1 + TEIE*0 + THIE*0 + TCIE + EN
                                                              +1
                                                              Только один вопрос — а зачем здесь WS2812. Обычный трёхцветный светодиод (который кстати и стоит в WS2812) — не кошерно?
                                                              WS2812 — это хорошо для тех случаев когда их много, для пиксельной адресации, а здесь он один, и приводит к такой куче проблем. Не понятно.

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

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

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

                                                              Only users with full accounts can post comments. Log in, please.