Jump to content

Recommended Posts

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Вебинар "Разбор новых уникальных модулей FMAC и CORDIC в микроконтроллерах общего назначения STM32G4" (15.07.2020)

Компания КОМПЭЛ приглашает вас принять участие в вебинаре 15.07.2020, посвященном новому семейству микроконтроллеров общего назначения – STM32G4. Вебинар рассчитан на технических специалистов и тех, кто знаком с основами цифровой обработки сигналов. Мы разберем алгоритм работы CORDIC, а также рассмотрим пример создания цифрового фильтра на базе FMAC.

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

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

Share this post


Link to post
Share on other sites
                     

Новые контроллеры VIPerPLUS для ИП – видео и материалы вебинара STMicroelectronics

Видеозапись и материалы вебинара ST о семействе AC/DC регуляторов VIPerPLUS производства компании STMicroelectronics. Инженерами ST было детально рассмотрено новое семейство микросхем VIPerPLUS со встроенным транзистором, их возможности и топологии применения. Продемонстрировано испытание из лаборатории ST в Праге и моделирование в среде E-DesignSuite.

Подробнее

                     

Конденсаторы ECWFG от Panasonic: теперь и для высоковольтных применений

Компания Panasonic анонсировала существенное расширение серии пленочных конденсаторов ECWFG: на сегодняшний день диапазон рабочих напряжений серии составляет 630…1100 В (DC). Серия ECWFG поддерживает уникальную функцию микропредохранителей.

Подробнее

Передача 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...

  • Сообщения

    • Может странный вопрос, но никто не знает наименования заводских радиаторов для 124ен3-12 в керамическом корпусе ? Видел когда-то, но не придал значения, а теперь вот надо.  П - образная Al пластинка не выход(
    • Может проще поставить еще один аккумулятор и получить 24в? А потом ШИМить. Или такой последовательно с вашей? Правда процесс зарядки сильно усложниться.     Или другой движок взять помощнее...
    • трансформатор будет 900вт ный, с выходом 30вольт, мост 5010 (50 амперный), два кондера после моста по 6800 мкф на 63в,  ток у гальваники от 10А-40А в зависимости от объема детальки, то есть параметр тока меня ограничивает в объеме обрабатываемой детали. чем больше ток тем большую деталь я смогу опустить в ванну для обработки, (в зависимости от технического задания на обрабатываемую деталь еще и зависит напряжение (20-40в), как то так! Плюс еще и инвертор 12/220 собрал(правда не доведу до ума ни как-есть падение напряжения, но это другая тема)а к нему хочу набрать аккумов под 100 ампер, их надо тоже время от времени заряжать.
    • Стабилитроны это 10-вольтовые http://www.s-manuals.com/pdf/datasheet/b/z/bzx84c2v4-au_series_r03_panjit.pdf http://www.s-manuals.com/ru/smd/wg
    • Всем спасибо! Буду ставить 10 вт резистор со стабилитроном - самое простое решение.  
    • Falconist Все зависит от ПАДЕНИЯ напряжение на транзисторе.  Uвх-Uнаг = 3В. Я про Фому Вы про Ерему). Виктор Шаракин спрошу конкретнее. Какой будет стоять трансформатор (или какой у вас источник питания), интересно напряжение. Далее какой ток у гальваники и какое напряжение. И если не критична шумность питания, то зачем вам линейный стабилизатор? Намного лучше подойдет импульсное устройство.
  • Similar Content

    • By Trute
      Цена 700 р.
      Доставка по России Почтой России от 250 р. до 400 р. зависит от региона.
       
       Продаётся Плата в Сборе с Прошитым Микроконтроллером.
      ОПИСАНИЕ:
      Это устройство запитывается от любого источника питания 5 вольт, например, USB порт ПК или ноутбука, зарядка для телефона и т. п..., и не нуждается в подключении к источнику 12 вольт, в отличии от других прототипов.
      Предназначено для восстановления "убитых" микроконтроллеров AVR ATmega и ATtiny путем записи в них корректных значений бит фьюзов.
      Atmega Fusebit Doctor исправит Ваши брикнутые микроконтроллеры за доли секунды.
      Поддерживаемые контроллеры:
       
       



       
    • Guest Роман
      By Guest Роман
      Добрый день, форумчане. Такая задача. Хочу создать несколько устройств на светодиодах. Задача каждого в том, чтобы от движения (датчик вибрации, наклона) светодиод начинал моргать, переливаться и т.д. Подпитывается всё от батарейки, конечно же как можно меньших размеров (таблетка).
      Собственно я уже реализовал такое пробное устройство на ATtiny13, вибродатчике 18015 и батарейке CR1220. Всё работает, но хотелось бы это дело и удешевить и уменьшить в размерах, если это конечно же возможно. Особо в параметрах МК я не разбираюсь, но могу сказать что мне от неё точно нужно:
      1) Маленький размер
      2) Как минимум 1 канал ШИМ (а лучше 3, для переливания трёх светодиодов RGB)
      3) Память на 1Кб (программу для одного такого устройства приложу ниже, может её можно и сократить, но не факт что такую же, но на три диода получится ужать)
      4) Низкое потребление или возможность подключения режимов с низким потреблением.
      5) Работа от 3В. (от таблетки)
      6) Возможность программирования через Arduino UNO (но другие варианты тоже рассматриваю, просто Arduino уже есть)

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

      Очень надеюсь на Вашу помощь. Заранее большое Вам спасибо!
      Прикладываю обещанный мною код:
      int vib = 4; int led = 0; long loopTime = 5000; void setup() { pinMode(led, OUTPUT); pinMode(vib, INPUT); } void loop() { if (digitalRead(vib)){ unsigned long currentMillis = millis(); while(millis()-currentMillis<=loopTime) { for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 0; fadeValue <=255; fadeValue+=5){ analogWrite(led,fadeValue); delay(2); } for(int fadeValue = 255; fadeValue >=0; fadeValue-=5){ analogWrite(led,fadeValue); delay(2); } digitalWrite(led, LOW); delay(600); } } }  
    • By Evgeniy90
      Здравствуйте! Столкнулся со следующей проблемой: при сборке МД "Шанс" дошел до этапа прошивки МК, в итоге запорол 3 атмеги. Прошивал 3 способами:
      1. Через Arduino UNO(As ISP) просто МК
      2. Через Arduino UNO(As ISP) МК внутрисхемно(соответственно с обвязкой)
      3. Через USB ASP внутрисхемно(с обвязкой соответственно).
      Вышло так, что в наличии кварца 11.0592 МГц не было, и я временно впаял 12 МГц. Прошил трижды всё правильно(фьюзы , контакты и т.д). После прошивки просто не видит МК (ну и плата не работает без МК.да и Бог с ней, но МК всеравно не могу считать). В чем причина понять не могу. Одно думаю, что это разница между 11.0592 и 12 МГц. Посоветуйте как решить проблему.
      Коды ошибок после прошивки во всех трёх случаях одинаковые:
      Sinaprog -invalid device signature
      Averdude -avrdude: warning: cannot set sck period, please check for usbasp firmware update
      target don't answer
    • By Николай Станкевич
      Можно ли на микроконтроллерах ATmega реализовать обработку сигналов в радио оборудовании?
      И какой для этих целей лучше подойдёт?
      То есть можно ли перестройку и подстройку частот на них сделать?
      Модуляцию
      Кодирование и тому подобное
      И какую литературу посоветуете?
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
×
×
  • Create New...