Перейти к содержанию

Корректировка схемы гирлянды


tifaso

Рекомендуемые сообщения

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

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

Светодиодов в каждом канале гирлянды по 20 поэтому нагрузка там приличная. Ведь всё это ещё планируется питать от блока питания на 5 вольт и 2 ампера.

Вот схема самой гирлянды (уже в изменённом виде):

1431587917_2.thumb.JPG.2e3a1b3d89e0ea721ae2ab06ed2df90a.JPG

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Для чего так много кнопок? Или это еще по совместительству клавишный музыкальный инструмент?

Резисторы подтяжки кнопок можно использовать внутренние микроконтроллера.

Резисторы индикаторов 600 - 1000 Ом

Базовые 1.5к

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Так и не нашел ни одного вопросительного знака в стартовом посте, поэтому пишу о том, что вижу:
1) сопротивление базовых резисторов ключей можно смело увеличить в десять и более раз, не нагружая контроллер впустую;
2) удобнее запитать светодиоды от отдельного источника, включив их последовательно и избавившись от половины токоограничительных резисторов;
3) при использовании для индикации ультраярких светодиодов ток через них может быть значительно меньше 6 мА.
Например, лично опытным путем установил, что для комфортного созерцания красного светодиода ток через него не должен превышать 1 мА, белого - 0,25 мА, синего - 0,1 мА, зеленого - 0,05 мА. Естественно, возможны незначительные вариации в зависимости от используемого типа светодиодов, но мораль в том, что применение ультраярких СИД позволяет разгрузить выходы контроллера

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@Berg Подтяжка по мне так лучше внешними резисторами. При таком раскладе положение точно установится как нужно. Уже попадался на внутренних подтяжках. Теперь я от этого отказался и ставлю только внешние.

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

Ссылка на комментарий
Поделиться на другие сайты

Согласен. Если ультраяркие светодиоды - то для индикации хватит и 0.5-1мА. Если они разного цвета, то у них разное напряжение - это я к тому, что резисторы тоже могут быть разными для получения одинаковой яркости. А гирлянда что собой представляет? Тоже прав Саня110 - можно запитать от 12В, соединив по 3-4 светодиода последовательно, или от 7В, соединив по два. 5В для двух последовательных мало, учитывая падение на транзисторе. Такая схема сделана для упрощения. Так что если питать будете от зарядки типа USB - оставляйте как есть. А если от трансформатора с диодным мостом и 7805 - то можно гирлянду запитать после моста до 7805.

Настоящему коту и в декабре март!

Ссылка на комментарий
Поделиться на другие сайты

@KomSoft Питание у меня будет на пять вольт от блока питания на два ампера и сама гирлянда рассчитана на это в схеме всё это видно.

Фото блока питания:

DSC02844.thumb.JPG.9efadcc79465e9ed9f877f722cf6c83c.JPG

Трансформаторное питание делать не стал потому как греться сильно будет уже пройдено.

Ссылка на комментарий
Поделиться на другие сайты

С чего это вдруг трансформаторное питание греется? Другое дело что сейчас проще и дешевле взять готовый блок, как у вас, а не заморачиваться с изготовлением своего. Тогда делайте, как в схеме, только ток светодиодам установите минимально достаточный по свечению.

Настоящему коту и в декабре март!

Ссылка на комментарий
Поделиться на другие сайты

Сейчас при помощи подстроечного резистора номиналом в 1 ком подобрал нужное сопротивление. Несмотря на разную большую палитру светодиодов (у меня используется 7 цветов) они у меня все примерно одной яркости. Потому как я долго крутил с подстроечником начинал от 1 ком, но это слишком завышеное сопротивление для моих светодиодов они едва светятся при таком сопротивлении. Далее я начал потихоньку понижать сопротивление и смотреть на свечение светодиодов и подобрав золотую серединку к своим светодиодам я остановился на сопротивлении 750 ом это 2.7 миллиампера на светодиод. При таком раскладе светодиоды светят вполне комфортно и достаточно яркости. Пробовал более низкое сопротивление, но там уже светодиоды слишком ярко светят по глазам сильно бьёт.

Н да а я вообще хотел изначально по 100 ом воткнуть. Хорошо хоть вовремя подумал об этом.

Ну теперь остаётся приобрести резисторы на 750 ом и делать.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

@солар Почему же не испытывались. Там хоть прошивка пока ещё не дописана, но на порту A все кнопки и светодиоды работают. Изначально была проблемка на порту С, но после отключения в фьюзах JTAGEN всё ушло.

@Gregorianets А не повлияет ли это на работу моей схемы? Ведь там сейчас всё отлажено как нужно.

Единственное мне не нравится то что кнопки не сразу отзываются это касается всех кнопок. Вот это я бы полечил.

Ссылка на комментарий
Поделиться на другие сайты

31 минуту назад, tifaso сказал:

кнопки не сразу отзываются

А как вы ох опрашиваете? В главном цикле? Реализуйте опрос кнопок в прерывании Таймера1. 

Ссылка на комментарий
Поделиться на другие сайты

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
volatile unsigned char power=0;
volatile unsigned char menu=0;

int main(void)
{
	DDRA = 0b11110000;
	DDRB = 0b00000000;
	DDRC = 0b11111111;
	DDRD = 0b11111111;
	PORTA = 0b00000000;
	PORTB = 0b00000000;
	PORTC = 0b00000000;
	PORTD = 0b10000000;
    while(1)
    {
        if (~PINB & (1<<0))
        {
			_delay_ms(1);
			if (~PINB &(1<<0))
			{
			    while(~PINB & (1<<0));
			    if (PINC)
			    {
				    PORTD = 0b10000000;
				    PORTC = 0b00000000;
				    PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
				    power=0;
			    } 
		    	else
			    {
			    	PORTD &= ~(1<<7);
			    	PORTC |= (1<<0);
				    power=1;
			    }
		    }
        }
		if (power==1)
		{
			if (~PINB & (1<<1))
			{
				_delay_ms(1);
				if (~PINB & (1<<1))
				{
				    PORTC |= (1<<1);
			    	PORTC &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
			    	PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;
			    	menu=1;
				}
			}
			if (~PINB & (1<<2))
			{
				_delay_ms(1);
				if (~PINB & (1<<2))
				{
				    PORTC |= (1<<2);
		    		PORTC &= ~((1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
		    		PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
	    			menu=2;
				}
			}
			if (~PINB & (1<<3))
			{
				_delay_ms(1);
				if (~PINB & (1<<3))
				{
		    		PORTC |= (1<<3);
	    		  	PORTC &= ~((1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
		    		PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
		    		menu=3;
				}
			}
			if (~PINB & (1<<4))
			{
				_delay_ms(1);
				if (~PINB & (1<<4))
				{
	    			PORTC |= (1<<4);
	    			PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6)|(1<<7));
	    			PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
	    			menu=4;
				}
			}
			if (~PINB & (1<<5))
			{
				_delay_ms(1);
				if (~PINB & (1<<5))
				{
	    			PORTC |= (1<<5);
	    			PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6)|(1<<7));
	    			PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
	    			menu=5;
				}
			}
			if (~PINB & (1<<6))
			{
				_delay_ms(1);
				if (~PINB & (1<<6))
				{
				    PORTC |= (1<<6);
				    PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<7));
				    PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
				    menu=6;
				}
			}
			if (~PINB & (1<<7))
			{
				_delay_ms(1);
				if (~PINB & (1<<7))
				{
	    			PORTC |= (1<<7);
	    			PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
	    			PORTA &= ~((1<<4)|(1<<5)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
		    		menu=7;
				}
			}
			if (~PINA & (1<<0))
			{
				_delay_ms(1);
				if (~PINA & (1<<0))
				{
				    PORTA |= (1<<4);
		    		PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
	    			PORTA &= ~((1<<5)|(1<<6)|(1<<7));	
					PORTD = 0b00000000;			
	    			menu=8;
				}
			}
			if (~PINA & (1<<1))
			{
				_delay_ms(1);
				if (~PINA & (1<<1))
				{
    				PORTA |= (1<<5);
	    			PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
	    			PORTA &= ~((1<<4)|(1<<6)|(1<<7));
					PORTD = 0b00000000;				
	    			menu=9;
				}
			}
			if (~PINA & (1<<2))
			{
				_delay_ms(1);
				if (~PINA & (1<<2))
				{
    				PORTA |= (1<<6);
    				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
    				PORTA &= ~((1<<4)|(1<<5)|(1<<7));
					PORTD = 0b00000000;				
    				menu=10;
				}
			}
			if (~PINA & (1<<3))
			{
				_delay_ms(1);
				if (~PINA & (1<<3))
				{
    				PORTA |= (1<<7);
    				PORTC &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7));
    				PORTA &= ~((1<<4)|(1<<5)|(1<<6));	
					PORTD = 0b00000000;			
    				menu=11;
				}
			}
			if (menu==1)
			{
				PORTC |= (1<<1);
				PORTD |= (1<<0);
				PORTD &= ~((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<1);
				PORTD &= ~((1<<0)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<2);
				PORTD &= ~((1<<0)|(1<<1)|(1<<3)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<3);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<4)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<4);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<5)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<5);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<6));
				_delay_ms(300);
				PORTD |= (1<<6);
				PORTD &= ~((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5));
				_delay_ms(300);
			}
			if (menu==2)
			{
				PORTC |= (1<<2);
				PORTD |= (1<<0);
				_delay_ms(300);
				PORTD |= (1<<1);
				_delay_ms(300);
				PORTD |= (1<<2);
				_delay_ms(300);
				PORTD |= (1<<3);
				_delay_ms(300);
				PORTD |= (1<<4);
				_delay_ms(300);
				PORTD |= (1<<5);
				_delay_ms(300);
				PORTD |= (1<<6);
				_delay_ms(300);
				PORTD &= ~(1<<0);
				_delay_ms(300);
				PORTD &= ~(1<<1);
				_delay_ms(300);
				PORTD &= ~(1<<2);
				_delay_ms(300);
				PORTD &= ~(1<<3);
				_delay_ms(300);
				PORTD &= ~(1<<4);
				_delay_ms(300);
				PORTD &= ~(1<<5);
				_delay_ms(300);
				PORTD &= ~(1<<6);
			}
			if (menu==3)
			{
				PORTC |= (1<<3);
				PORTD |= ((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD |= ((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD |= ((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD |= (1<<3);
				_delay_ms(300);
				PORTD &= ~((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD &= ~((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD &= ~((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD &= ~(1<<3);
				_delay_ms(300);
			}
			if (menu==4)
			{
				PORTC |= (1<<4);
				PORTD |= ((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD |= ((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD &= ~((1<<0)|(1<<6));
				_delay_ms(300);
				PORTD &= ~((1<<2)|(1<<4));
				_delay_ms(300);
				PORTD |= ((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD |= (1<<3);
				_delay_ms(300);
				PORTD &= ~((1<<1)|(1<<5));
				_delay_ms(300);
				PORTD &= ~(1<<3);
			}
		}
    }
}

Вот код прошивки. Да получается что кнопки опрашиваются в главном цикле. А то есть как это в прерывании таймера? Можно пожалуйста подробнее или примерчик кода.

Ссылка на комментарий
Поделиться на другие сайты

Где можно найти документацию по прерываниям в таймере ATMEGA16? В даташитах искал так и не нашел нужных параметров. Смотрел видеоуроки как это делается на ATMEGA8. Но документации по 16 меге так не нашёл.

Ссылка на комментарий
Поделиться на другие сайты

И всё таки я так и недопонимаю как можно сделать опрос кнопок по таймеру даже видеоуроки не особо помогают. Скорей всего прийдётся так и оставить. Потому как другого решения я не нашел.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

О сложно это слишком для меня я наверное пока в эти таймеры лезти не буду.

Тут же насколько я понимаю нужно создать параллельный поток в котором будут проверятся кнопки, а основной код программы должен выполнятся отдельно. Но как его создать? И есть ли вообще какие нибудь другие способы кроме таймера.

Изменено пользователем tifaso
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, tifaso сказал:

Вот код прошивки.

А фигурные скобки что означают? Почти в каждой строчке у вас.

Изменено пользователем Гар

Хочешь накормить человека один раз — дай ему рыбу. Хочешь накормить его на всю жизнь — научи его рыбачить.

Ссылка на комментарий
Поделиться на другие сайты

Блоки выделяются в С так. Как begin end в Pascal и Delfi. Столкнулся недавно с Пайтоном, там блоки выделяются только отступом. По-моему х..ня редкая - вдруг придется блок внести в блок -и что, считать отступы по тексту? Скобками надежнее.

Настоящему коту и в декабре март!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Тут я уже писАл, какой ток что на самом деле протекает.  
    • Как к модеру к нему конечно были вопросы. Ну и правила его не касались, когда кидался оскорблениями в адрес Василича. А за ответы на оскорбления Василич баны выхватывал
    • Смотрю, многие в усилителях избегают катодного повторителя. Либо сразу берут токовые лампы с хорошим усилением, либо два каскада последовательно на токовых лампах с низким усилением. Вроде бы на звук не влияет...
    • Имел дело с зарядкой батареек еще с советских времен. Тогда еще в магазине (!) купил специальную зарядку для ртутно-цинковых батареек, очень миниатюрная, зарядка шла от встроенного солнечного элемента (и это еще в советские времена!). Использовал для зарядки батареек для наручных часов, после первой зарядки батарейки хватало примерно на полгода, потом на 3-4 месяца. Потом (когда батарейка служила меньше двух месяцев) батарейка отправлялась на упокой. Спасала студента тогда очень эта вещица. Жалею что тогда не срисовал ее внутренности. А вот с зарядкой щелочных батареек пришлось заниматься уже значительно позже. Мне кто-то подарил такой набор (зарядка с комплектом перезаряжаемых батареек) - вот его обзор https://aphnetworks.com/reviews/pure_energy_xl  Все было нормально, но у всех этих батареек ресурс очень ограничен, примерно 25 циклов максимум. После чего емкость уменьшается и нет смысла их дальше использовать. После каждой зарядки емкость уменьшается, но не сильно. Реально раз десять заряжать можно точно без проблем. После того как выработался ресурс последней батарейки стал вопрос - а можно ли заряжать обычные батарейки тоже? Зарядка-то осталась... И как раз в то время приобрел обычные (т.е. "незаряжаемые") батарейки той же фирмы (PureEnergy). Оказалось что они заряжаются точно также, как и "заряжаемые"! Возможно что у них та же химия... Пробовал батарейки разных фирм, степени разряда. Короче говоря, фирменные всякие Дюраселлы и Энержайзеры не заряжаются вообще, и даже могут потечь во время зарядки. А вот самые дикие и дешевые нонейм чаще всего заряжаются без проблем. Насчет емкости - конечно емкость полностью не восстанавливается, но для работы в беспроводной клаве,, мышке или пульте вполне хватает и достаточно надолго.  Но занимаюсь этим нечасто, просто когда лень ехать в магазин за очередной партией батареек.  А если есть возможность, то предпочитаю переделывать питание под литий. Очень сильно достает саморазряд всяких Ni-Cd, Ni-MH - разряжаются даже те, которые якобы должны долго держать заряд. Схему зарядки еще не срисовывал (лень было разбирать), но схема сложнее чем все что я видел в Интернете. Напряжение заряда примерно 1,7в. xlaa_tds.pdf
    • Я делаю ставку на контакты NC реле запуска и NO реле торможения. Тем более они такие хлипенькие.
    • Раз смогли срисовать схему "силы", то и решить проблему для вас вряд ли сложно будет... Проверьте емкость и ЭПС C-20мкФ и сопротивление контактов этих двух реле в on/off
×
×
  • Создать...