Jump to content

Recommended Posts

Друзья помогите разобраться.

Приобрел управляемые диоды WS2812 многим уже известные.

Поиски доступных для новичка исходников результатов не дали. Сталкивался с скечами для Ардуино, библиотеками NeoPixel.

Во первых не забрался, во-вторых принципиально хочу сообразить всё это на на своей плате на Attiny или Atmege.

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

Только начал разбираться с ШИМом. Думал тут чтото подобное.

Помогите новичку с самого простого.

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

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

Share this post


Link to post
Share on other sites
                     

Вебинар "Как создать BLE-устройство на базе новейшего беспроводного микроконтроллера STM32WB55"

27 ноября 2019 года компания КОМПЭЛ приглашает разработчиков, технических руководителей и энтузиастов беспроводной связи на вебинар, посвященный новинке 2019 года – мультипротокольному беспроводному микроконтроллеру STM32WB55, который позволяет создавать устройства на базе стандартов BLE 5.0; BLE Mesh; 802.15.4/ZigBee и Thread. На вебинаре мы покажем, как с помощью привычных инструментов STM32Cube и STM32CubeMX можно создать свое первое, надежно работающее BLE-приложение.

Зарегистрироваться на вебинар

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

Главное после заволнения всей ленты выждать паузу не менее 10-50 мксек, чтобы загруженые цвета зажглись.

Share this post


Link to post
Share on other sites

Что конкретно не понятно в этой строке ? Что такое while, SPSR или SPIF ? Или символы "!", "&", .... ?
 

Share this post


Link to post
Share on other sites

SPSR - регистр.
SPIF - бит в этом регистре.
"!" - логическое отрицание.
"&" - побитовое "И".
"<<" - сдвиг влево.

Что конкретно не понятно ?


 

Share this post


Link to post
Share on other sites

не думал что все так плохо.... Стоит наверное начать с изучения СИ, потом почитать даташиты на МК, что бы понять как они устроены, разобрать основные шины данных UART\SPI\I2C\1-wire

  • SPI Status Register – SPSR
  • Bit 7 – SPIF: SPI Interrupt Flag
  • When a serial transfer is complete, the SPIF Flag is set. An interrupt is generated if SPIE in
  • SPCR is set and global interrupts are enabled. If SS is an input and is driven low when the SPI is
  • in Master mode, this will also set the SPIF Flag. SPIF is cleared by hardware when executing the
  • corresponding interrupt Handling Vector. Alternatively, the SPIF bit is cleared by first reading the
  • SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR).
Edited by Mishany

Share this post


Link to post
Share on other sites

@Mishany Да некоторые моменты из СИ еще не понятны, но это решаемо с помощью интернета. Мое программирование когда-то давно закончилось на бэйсике, но логика то в голове осталась. Вот исходя логики пытаюсь эмитировать на бумаге ход выполнения программы.

Минуя все воиды с описаниями функций перехожу на войд маин, где крутиться цикл самой программы:

int main(void)
{
    SPI_MasterInit();
    while(1)
    {
//     off_strip();
//     _delay_ms(100);
    Set_Effect_2();

 

То-есть программа лезет в функцию эффектов в которой во временный массив загоняются значения эффекта:

for (s=0; s<t; s++)        //strip-длина ленты
    {
        for (i=0; (i<=s); i++)
        {

            for (j=0;j<3;j++)
            {
                if (i<longh)    //longh-длина эффекта
                {
                    temp[s+i][j]=led_on[j];//задвигаем массив эффекта во временный массив   
                }
                else
                {
                    temp[s+i][j]=led_off[j];//задвигаем led_off во временный массив
                }
            }

        SPI_Write();//отправляем что собрали на ленту
        delay(8+(strip-t));

 

И тут у меня есть вопрос. Во временный массив

temp[0][0] попадает led_on[0]

temp[0][2] попадает led_on[1]

temp[0][2] попадает led_on[2]

 

И больше про Led_on в программе ни слова. Только в самом начале описывается переменная unsigned char led_on[3]={255,255,255};

И при отправке временного массива в SPI_Write происходит сравнение:

if ((temp[n][j]&a)==0)            // что есть сравнение led_on[0..2] и a  == 0

 

Вот тут я не понимаю для чего led_on[0..2]. Может тут какие-то значения пропущены???

 

 

Share this post


Link to post
Share on other sites

в led_on[] храниться белый цвет

//вывод временного массива на ленту
void SPI_Write(void)				
{
	unsigned char a;
	unsigned char j,i,n;
for (n=0; n<strip; n++)			//strip=20 диодов длина ленты
{
	

	for (j=0; j<3; j++)			//первым выставляется G (Hi->Low), потом R и B
	{
		a = 0x80;				//сравниваем каждый бит
		for (i=0;i<8;i++)			//передача 8 бит цвета из подготовленного массива temp
		{
			if ((temp[n][j]&a)==0)
			{
				SPDR = 224;//0xE0 0.37us 0	//ноль
			}
			else
			{
				SPDR = 252;//0xFC 0.75us 1 //единица
			}
			while(!(SPSR & (1<<SPIF)));
			a=a>>1;
		}
	}
}
}

что тут может быть не понятно? Учите СИ, битовые поля, битовые маски, многомерные массивы

Share this post


Link to post
Share on other sites

Выше @Mishany привел примерчик реализации обмена по SPI с WS2812 - не смотря на то, что идея на поверхности и мне самому приходила в голову, я почему-то уперся в работу по прерываниям и, само собой, требования протокола не смог выполнить. А его пример вдохновил меня на другой подход, и вот что вышло:

Скачать видео
Скачать видео
Скачать видео

Это первый положительный результат. Основа - atmega32 (просто она есть в наличии, реально можно упихать и в atmega8), немного модифицированная библиотека FFT от Chan-а и 32 штуки WS2812 на выходе. В начале и конце работает фоновая подсветка (при тишине, не обращайте внимание на гул - это вентилятор системника на горизонте).

К сожалению, правила ютуба не позволяют выложить со звуком видео с ритмичной музыкой типа Boney M или Rock'n'Roll, на которой зрелищность заметно выше. Ну и качество видео не отражает реального эффекта в полной мере...

Но мне все равно нравится :) 

Edited by ARV

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.
Note: Your post will require moderator approval before it will be visible.

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.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Misereli
      Здравствуйте.
      Хочу сделать свою клавиатуру на микроконтроллере Atmel (например, ATmega8).
      Знаю несколько видов схем: матричная клавиатура и резистивная.
      Реализация матричной клавиатуры требует использования большого количества ног на микроконтроллере .
      Реализация резистивной (в зависимости от напряжения, АЦП определяет какая нажата кнопка) не позволит зажимать сразу несколько клавиш. 

      На форумах "клаводелов" нашел интересную плату (satan gh60), на основе которой собирают клавиатуру. Она работает на atmega32u4, на плате распаяно множество резисторов. Несколько нажатий поддерживает.


      Если кто-то поделится мыслями как она работает, буду очень благодарен, т.к. самому мозгов не хватает 
      Об использовании специализированных МК прошу не упоминать, интересно сделать на ATmega.
       
    • By shuks
      Добрый день!
      От товарища поступила просьба собрать на ардуино (либо изготовить плату на avr) детектор короткого замыкания.
      Есть у него на производстве ряд БП 12в 2квт и десяток потребителей на каждом, таких блоков порядка сотни, и поступила "хотелка" навесить на каждый БП ардуину (питание будет отдельное независимое) которая будет посылать по wifi уведомление когда будет возникать КЗ в блоке/потребителе (важна возможность определения именно КЗ).
      Опыта нет, первое что пришло в голову это:
      1) мониторить потерю напряжения 12в на БП (при КЗ блок уходит в защиту)
      2) при потере напряжения 12в подавать напряжение 3.3в от питания МК с управлением через ключ от ножки МК на "+" питания БП и переход на пп.3
      3) ноль от БП подключить к АЦП МК и замерять: если 0в то все норм и КЗ нет (поломка блока без КЗ либо отключение от сети 220в), если на АЦП будет 3.3в то имеем КЗ и отправляем уведомление.
      Т.к. опыта схемотехники почти нет, прошу помощи по схеме в даже в мелочах
       
    • By IgnatiusF
      Взял с места практики отладочную плату с атмегой 32-й, дома понял (возможно), что микроконтроллер заблокирован.
      Пытался шить через USBASP при помощи AVRDUDE, однако ошибка:
      avrdude.exe: error: programm enable: target doesn't answer. 1 avrdude.exe: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check. В правильности и надежности подключения полностью уверен, проверил каждый контакт и каждый элемент на всей плате тестером. Кстати, вот она:
      У меня точно такая же, только с Atmega32A.
      Попробовал поставить на нее дрова, но теперь она определяется вот так: Неизвестное USB-устройство (сбой дескриптора устройства).
      Из этой статьи по решению данной проблемы выполнил все указания, однако ничего не сработало.
      Тут я подумал на отключенный rst выход, так как был опыт из-за путаницы с обратными и прямыми фьюзами на Attiny13A. Тогда быстренько все исправил высоковольнтным программатором из этой статьи, вот и подумал сделать здесь подобное. Немного (чуть больше) полазив в интернете нашел вот такую схему на arduino. Все есть, чтобы ее сделать, только сперва понять бы, можно или нет без выпаивания это делать. И еще понять бы, в этом ли настоящая проблема? Или может я что-то не то надумал?
      Надеюсь на вашу помощь
  • Сообщения

    • И еще без коррекции 100 ватт на коленке @remzone ,желание помочь понятно,но не с этой вечно гулящей по инетам потехой. Поэтому с этим вотъ можно сильно шибко впухнуть. Удачи и проверенных источников!
    • Руслан,ты же прекрасно в курсе сказано-не есть сделано. Сколько раз уж это к сожалению было
    • Спасибо за ответы. Извиняюсь за неправильную терминологию по поводу трансформатора, просто буквально пару недель назад начал разбираться в радиоэлектронике. То что обведенные красные и черные линии это линии положительного и отрицательного напряжения я предпологал, но вот с общим так и не могу понять. Вот допустим на трансформаторе как увидеть где выход этого общего провода(синий)? Ведь там всего 6 контактов на выходе. И еще вопрос - почему на плате в районе диодного моста установлена перемычка между Gnd и отрицательным напряжением?(см.фото)   Очень хочется разобраться в этом всем, но по книжкам это тяжело дается. Намного проще когда кто то объясняет. Надеюсь поймете)
    • ему сказано было: или не понимает или .... : А может и не трогал он его ... там делов - на 5 минут с приборами .... для специалиста.
    • нет и НЕ БУДЕТ, на коммерческие изделия - ее нет в природе - покупай контроллер, если есть отдельный парт на него, или модуль в сборе в АСЦ ....
    • Возможно из за разного теплового расширения,может бытьвпресовка будет лучше чем подсохшая термопаста которую будет шевелить разность теплового расширения медной и алюминевой поверхности
    • Там с массой подколка по моему. Пред должен быть подключен. Вроде так. Делал давно тьфу-тьфу,точно не помню
×
×
  • Create New...