Светодиоды c пиксельной адресацией WS2812B

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

akl писал(а):Нет. Разбираться не стал
Там просто у ЮАРТа особенность в том, что он линию по умолчанию перевернутой держит. И для его использования, надо внешний инвертор ставить. Любой.
я думаю какой-нибудь p-n-p транзистор с общим эмиттером что ли . ))) :roll:
Станислав
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Я в курсе.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

akl писал(а):Программа на UART чёто не пошла.
Я погляжу на следующей неделе. Дописывал ее в неком тумане. Но вроде как на выход то что-то выдавало и вроде как по делу.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Заснял работу программы пересылки кодов $95 $81 $33 WS2812B
Изображениесобственно макет
Изображениеначало передачи $95
Изображениеконец передачи кода $33.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

akl писал(а):Заснял работу программы пересылки кодов $95 $81 $33 WS2812B
Это Вы со своим кодом провели эксперемент?

Проверил свой уартовский код в протеусе . Работает. Была одна ошибка, инкрементирование Z было заремарчено и количество байт в X должно быть двойным значением. Но все равно выдавать что-то должен был. Обратите внимание, что в обработчике прерывания не сохраняются флаги.
Спойлер

Код: Выделить всё

.equ eMaskData=~0x24
//---------------------------------------
.def zero=R1

.def buf=R16

.def MaskData =R17	//флаг что надо передавать старшую половину байта
.def DataSend=R18   //текущие отправляемые данные
.def RegSum=R19



//---------------------

 .org 0

rjmp RESET ; Reset Handler
	reti// rjmp INT0 ; External Interrupt0 Handler
	reti// rjmp INT1 ; External Interrupt1 Handler
	reti// rjmp TIM1_CAPT ; Timer1 Capture Handler
	reti// rjmp TIM1_COMPA ; Timer1 CompareA Handler
	reti// rjmp TIM1_OVF ; Timer1 Overflow Handler
	reti// rjmp TIM0_OVF ; Timer0 Overflow Handler
	reti// rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
	reti// rjmp USART0_TXC ; USART0 TX Complete Handler
	reti// rjmp ANA_COMP ; Analog Comparator Handler
	reti// rjmp PCINT0 ; PCINT0 Handler
	reti// rjmp TIMER1_COMPB ; Timer1 Compare B Handler
	reti// rjmp TIMER0_COMPA ; Timer0 Compare A Handler
	reti// rjmp TIMER0_COMPB ; Timer0 Compare B Handler
	reti// rjmp USI_START ; USI Start Handler
	reti// rjmp USI_OVERFLOW ; USI Overflow Handler
	reti// rjmp EE_READY ; EEPROM Ready Handler
	reti// rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
	reti// rjmp PCINT1 ; PCINT1 Handler
	reti// rjmp PCINT2 ; PCINT2 Handler
//*************************************************************************
//--------------------------------------------
USART0_DRE:



clr RegSum



//--------	
	brts HiData 
	lpm DataSend,Z+
	swap DataSend
	set
	rjmp mask
HiData:
	lpm DataSend,Z
	clt 
	
mask:
	ldi MaskData,eMaskData 

	rol DataSend
	BrCc PC+3
	andi MaskData,~(1<<0)
	inc RegSum
	
	rol DataSend
	BrCC PC+3
	andi MaskData,~(1<<3)
	inc RegSum

	rol DataSend
	BrCC PC+3
	andi MaskData,~(1<<6)
	inc RegSum
	
	sbrc DataSend,7
	inc RegSum

	sbrc RegSum,0
	ldi buf,(1<<UPM1)|(1<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0)  // (1<<UPM0) нечетность
	sbrs RegSum,0
	ldi buf,(1<<UPM1)|(0<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0)  // (0<<UPM0) четность

	out UCSRC,buf
	
	//ldi MaskData,0xFF	
	out UDR,MaskData


	sbiw X,1
	brne pc+3

	ldi buf,(0<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)    //запррешить прерывания пустого буфера
	out UCSRB,buf

reti 

//------------------------

//***************************************************************************
RESET:  //
ldi buf,low(RAMEND)
out SPL, buf
//ldi buf,High(RAMEND)
//out SPH,buf

//настройка UART

ldi buf,1<<U2X
out UCSRA,buf

ldi buf,(0<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)|(1<<TXB8)   
out UCSRB,buf

ldi buf,(1<<UPM1)|(1<<UCSZ1)|(1<<UCSZ0)   
out UCSRC,buf

ldi buf,0x00
out UBRRL,buf

sei

//*****************************************************
//Запуск передачи
ldi Zl,Low(Data*2) //откуда
ldi Zh,high(Data*2)

ldi Xl,Low(8)   //сколько *2
ldi Xh,high(8)

SET

ldi buf,(1<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)    //разрешить прерывания пустого буфера
out UCSRB,buf
//****************************************************
loop:

	rjmp loop
//*********************8
Data: 
.db 0x51,0x00,0xA1,0x00


Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Да, своим. Ваш код начал работать, но с лапы PD1/TxD через инвертор идет такой сигнал. По мне, не очень похоже.
Изображение
Чтобы как-то синхронизироваться, добавил несколько строчек в Вашу программу
Спойлер

Код: Выделить всё

	.include "tn2313def.inc"

.equ eMaskData=~0x24
//---------------------------------------
.def zero=R1

.def buf=R16

.def MaskData =R17   //флаг что надо передавать старшую половину байта
.def DataSend=R18   //текущие отправляемые данные
.def RegSum=R19



//---------------------

 .org 0

rjmp RESET ; Reset Handler
   reti// rjmp INT0 ; External Interrupt0 Handler
   reti// rjmp INT1 ; External Interrupt1 Handler
   reti// rjmp TIM1_CAPT ; Timer1 Capture Handler
   reti// rjmp TIM1_COMPA ; Timer1 CompareA Handler
   reti// rjmp TIM1_OVF ; Timer1 Overflow Handler
   reti// rjmp TIM0_OVF ; Timer0 Overflow Handler
   reti// rjmp USART0_RXC ; USART0 RX Complete Handler
rjmp USART0_DRE ; USART0,UDR Empty Handler
   reti// rjmp USART0_TXC ; USART0 TX Complete Handler
   reti// rjmp ANA_COMP ; Analog Comparator Handler
   reti// rjmp PCINT0 ; PCINT0 Handler
   reti// rjmp TIMER1_COMPB ; Timer1 Compare B Handler
   reti// rjmp TIMER0_COMPA ; Timer0 Compare A Handler
   reti// rjmp TIMER0_COMPB ; Timer0 Compare B Handler
   reti// rjmp USI_START ; USI Start Handler
   reti// rjmp USI_OVERFLOW ; USI Overflow Handler
   reti// rjmp EE_READY ; EEPROM Ready Handler
   reti// rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
   reti// rjmp PCINT1 ; PCINT1 Handler
   reti// rjmp PCINT2 ; PCINT2 Handler
//*************************************************************************
//--------------------------------------------
USART0_DRE:



clr RegSum



//--------   
   brts HiData
   lpm DataSend,Z+
   swap DataSend
   set
   rjmp mask
HiData:
   lpm DataSend,Z
   clt
   
mask:
   ldi MaskData,eMaskData

   rol DataSend
   BrCc PC+3
   andi MaskData,~(1<<0)
   inc RegSum
   
   rol DataSend
   BrCC PC+3
   andi MaskData,~(1<<3)
   inc RegSum

   rol DataSend
   BrCC PC+3
   andi MaskData,~(1<<6)
   inc RegSum
   
   sbrc DataSend,7
   inc RegSum

   sbrc RegSum,0
   ldi buf,(1<<UPM1)|(1<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0)  // (1<<UPM0) нечетность
   sbrs RegSum,0
   ldi buf,(1<<UPM1)|(0<<UPM0)|(1<<UCSZ1)|(1<<UCSZ0)  // (0<<UPM0) четность

   out UCSRC,buf
   
   //ldi MaskData,0xFF   
   out UDR,MaskData


   sbiw X,1
   brne pc+3

   ldi buf,(0<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)    //запррешить прерывания пустого буфера
   out UCSRB,buf

reti

//------------------------

//***************************************************************************
RESET:  //
ldi buf,low(RAMEND)
out SPL, buf
//ldi buf,High(RAMEND)
//out SPH,buf
	SBI	DDRB,7
	SBI	PINB,7

	CLR	YH
	CLR	YL
//настройка UART

ldi buf,1<<U2X
out UCSRA,buf

ldi buf,(0<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)|(1<<TXB8)   
out UCSRB,buf

ldi buf,(1<<UPM1)|(1<<UCSZ1)|(1<<UCSZ0)   
out UCSRC,buf

ldi buf,0x00
out UBRRL,buf

sei

//*****************************************************
//Запуск передачи
ldi Zl,Low(Data*2) //откуда
ldi Zh,high(Data*2)

ldi Xl,Low(8)   //сколько *2
ldi Xh,high(8)

SET

ldi buf,(1<<UDRIE)|(1<<TXEN)|(1<<UCSZ2)    //разрешить прерывания пустого буфера
out UCSRB,buf
//****************************************************
loop:
	SBIW	Y,1
	BRNE	LOOP
;   rjmp loop
   RJMP	RESET
//*********************8
Data:
.db 0x51,0x00,0xA1,0x00
.exit
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Тогда Вы забыли добавить сохранение флагов.
akl писал(а):По мне, не очень похоже.
Придется попросить СКАЗОЧНИКА протестировать на реальных светодиодах. Тайминги то не идеальные.

Добавлено after 14 minutes 45 seconds:
Кстати, на 16МГц то не получится так делать. На 20МГц предделитель нулевой, плюс двойная скорость.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Доброго всем дня.
Вопрос тут меня мучает. Чем питать такие светодиоды? Если их 72 штуки, то при белом свете они будут жрать примерно 60 мА * 72 = 4,32 Ампера.
Питаются они от 5 Вольт.
Какой использовать ДС-ДС с 24 Вольта на 5 Вольт с таким током?
Станислав
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

Две lm2596 с двух сторон ленты. Будет до 6А в пике

Добавлено after 2 minutes 17 seconds:
Вы если что кидайте мне прошивку потестю на 8меге у меня есть 5м этих диодов, и логический анализатор
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

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

Добавлено after 3 minutes 2 seconds:
И вроде тестить мне есть на чем, и логический анализатор тоже есть. Да у меня и прошивка работает, которая меня пока устраивает. Еще надо бы прошивку с ЮАРТом проверить, которую выше выкладывали.

А у меня стопор возник. Т.к. контроллер и светодиоды я питаю тупо с 7805, то она естественно, ахриневает от такой наглости. :facepalm: :))) Сильно греется, начинает дымить канифолью и приходится все выключать, чтобы остыла... :roll:
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

СКАЗОЧНИК писал(а):Еще надо бы прошивку с ЮАРТом проверить
Флаги не забудьте сохранять и при необходимости регистры. Кстати, заметьте. В одном кадре у меня передаются 4 значащих бита. Просто я видел в одном месте описание как использовать УАРТ, там предлагают только 3 бита за кадр. Что явно не удобно. Для 4 бит пришлось задействовать бит четности и длину данных 9 бит.
СКАЗОЧНИК писал(а):я питаю тупо с 7805, то она естественно, ахриневает от такой наглости.
Возмите помощнее транзюк. Выход 7805 сразу на базу, нагрузку на эммитер. На коллектор напряжение поближе к 5в, чтобы меньшую мощность рассеивать.
Вот, первая попавшаяся картинка эмиттерного повторителя.
СпойлерИзображение
Добавлено after 10 minutes 42 seconds:
.def MaskData =R17 из исходника можно выкинуть, остался как аппендикс.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Z_h_e писал(а):Кстати, заметьте. В одном кадре у меня передаются 4 значащих бита.
К своему стыду и сожалению :oops: ни разу не пользовался ЮАРТом в своей жизни. Просто как-то не надо было. Лишь поверхностно читал и понимаю его работу. RS-232 это тоже ЮАРТ? Или я чего-то путаю?
Z_h_e писал(а): На коллектор напряжение поближе к 5в,
Вот это хрен знает как обеспечить... ибо есть только входящие 24-26 Вольт (борт сеть УРАЛа) :))) и понизить их и стоит задача.
Z_h_e писал(а): первая попавшаяся картинка эмиттерного повторителя.
Это под что? После КРЕНки? Чет я не понимаю. Спать пора идти... 4 утра уже. :sleep:
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

СКАЗОЧНИК писал(а):. RS-232 это тоже ЮАРТ?
Он и есть. Еще поправка к программе UART. Изначально, с какого-то перепугу, я указал что выход на ноге PB4. Само собой на PB1, именно там Tx.
СКАЗОЧНИК писал(а):ибо есть только входящие 24-26 Вольт
Это жестоко так понижать до 5 В. Но если кренка держит такой режим, то мощный транзистор тоже должен. Какой-нибудь в дубовом корпусе из металла :lol: на радиатор. Лампочку еще можно повесить между + питания и коллектором.
СКАЗОЧНИК писал(а):Это под что? После КРЕНки? Чет я не понимаю.
Выход кренки напрямую на базу, коллектор или сразу на + "Урала" или через лампочку, питание светодиодов на эммитер. Все тепло будет уже рассеиваться на транзисторе.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Z_h_e писал(а):Но если кренка держит такой режим, то мощный транзистор тоже должен.
Вот тут заминка. :) Я тестирую схему на столе и подаю на КРЕНку 10 Вольт всего. Однако же вроде на них можно до 30 Вольт подавать, но следить за током...
Z_h_e писал(а):питание светодиодов на эммитер.
Так КРЕНка будет выступать в роли стабилизатора - стабилитрона? Попробую конечно.
А зачем тогды в схеме нарисован Rн?
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Кстати. На том же МК, можно сделать ШИМ 1/3. Подать на ключ, который будет заряжать кондер приличной емкости. Если его правильно подобрать, то при включенной нагрузке на нем будет около 1/3 напряжения. Это же будет проще стабилизировать в 5. А когда нагрузки не будет, то пускай он заряжается до максимума, нет тока - нет тепла.

Добавлено after 43 seconds:
Rн - это ваши светодиоды.

Добавлено after 3 minutes 24 seconds:
30 Вольт подавать, но следить за током...
Кроме этого, надо еще следить за рассеиваемой мощностью. Подали 11, на выход 5. Значит на ней упало 6 В. Предположим ток 1,5А. Надо рассеять тепла 9Вт. Поглядите в ДШ сколько допустимо.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Z_h_e писал(а):надо еще следить за рассеиваемой мощностью. Подали 11, на выход 5. Значит на ней упало 6 В. П
Ну, я то и имел ввиду. :roll: Чем больше разница во входном и выходном, тем все хуже и сложнее...
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Если имеет значение, то еще и очень низкий КПД. Больше будет воздух греть, чем светить :)

Добавлено after 4 minutes 28 seconds:
Проще что-нибудь такое.
У китайцев поди еще за 3 рубля за кучку можно взять :)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Это мало. У китайцев смотрел. В районе 200 рублей за штуку. А мне надо две таких. И светодиодов еще 100 штук надо и уже почти 1000 рублей получается... Дорого.
А дома есть 34063 целая куча. Думал, может из них чего замутить.

http://c2.at.ua/load/skhemy_na_mikroskh ... 3/13-1-0-8
Станислав
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Z_h_e писал(а):к программе UART... Изначально, с какого-то перепугу, я указал что выход на ноге PB4. Само собой на PB1, именно там Tx...
Наверно имелся ввиду PD1. У какого контроллера TxD сидит на PB1 не нашел.
СКАЗОЧНИК писал(а):А дома есть 34063 целая куча. Думал, может из них чего замутить.
Можно посмотреть в сторону разветвления питания. Эти микрухи имеют довольно мощный выход. Если с каждого стаба снимать 1А, потребуется всего 5 штук для светиков.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

akl писал(а):Наверно имелся ввиду PD1. У какого контроллера TxD сидит на PB1 не нашел.
Наверное :facepalm:
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

Вернуться в «Периферия»