Подскажите про диоды и транзисторы
- Войдите на сайт для отправки комментариев
Сб, 21/04/2018 - 22:59
Доброго времени суток!
Собираж лед-куб. Слой - 24 светодиода, дешевые китайские 3 мм, параметров не нашел но врядли больше 20 мА каждый.
Каждый слой с общим катодом. Поставил транзисторы BC337 и 100 Ом резистор для ограничения тока на светодиод. Внешнее питание 5в, 1 А.
Когда зажигаю пару диодов - горят ярко, чем больше диодов слоя включено - тем тусклее. Проверял на покеа только на одном слое. Что будет, когда включу все 5 слоев? Мне казалось, что должнот было работать . В чем не прав?
Схема от руки, но вроде понятно
Поделите 5В на 100ом - получите 50мА. Это ток, который Вы даёте на все 24 светодиода! Не маловато? А если ещё и падение на переходе транзистора учесть то вообще 44мАполучается.
Кроме того, каждому диоду нужен свой резистора. так что выбрость этот резистор, посчитайте какой нужен на каждый диод и ставьте.
И еще - не забывайте, что у 595-го ограничение - не более 70мА на корпус.
Спасибо, Евгений , за столь быстрый ответ.
Схему брал с китайской поделки-конструктора который собрал ранее
вот так выглядит в сборе
А сделать хочу вот такой
И просто не представляю себе как к каждому поставить по резистору. Как максимум на 1 колонну из 5 штук.
т.е. между 595 и колонной вставить резистор. А акакой? :) и убрать между транзистором и катодом диодов?
Так же как учесть,что молгут гореть и по 1 диоду в каждом слое
Ну, вообще-то сюда лучше не 595 ставить, а что-нибудь с контролем тока (н.п. TLC5940). Тогда резисторы вовсе не нужны. А так - делайте как хотите, но это неправильно. Токоограничвающий резистор должен быть свой у каждого светодиода.
Токоограничвающий резистор должен быть свой у каждого светодиода.
Точнее сказать, "у каждого светодиода, через который идет ток". При динамической индикации, например, один резистор может использоваться для нескольких светодиодов, ток через которые никогда не течет одновременно.
2popUP: т.е. в Вашем случае все 24 светодиода одного слоя должны гореть строго по очереди, одновременное зажигание двух светодиодов одного слоя недопустимо.
В любом случае схема и скетч должны проектироваться одновременно и быть взаимоувязаны. Судя по описанию проблемы, у Вас этого не происходит: схема сама по себе, скетч сам по себе.
Пробный код для 1 слоя
Не дает с андроида вставить как код
const int latchPin = 7; // Пин подключен к ST_CP (ножка 12) входу 74HC595
const int clockPin = 8; // Пин подключен к SH_CP ( ножка 11) входу 74HC595
const int dataPin = 4; // Пин подключен к DS ( ножка 14) входу 74HC595
int LayerPin[] = {3, 5, 6, 9}; // указываем пины, к которым подключены катоды диодов
long bitsToSend = 0; // переменная для хранения состояния каждого пина
int g = 0;
int h = 0;
int atemp = 0;
int State1 = 0; // HIGH=1; LOW=0
int timeStop = 50; //задержка внутри циклов подпрограмм
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(LayerPin[0], OUTPUT);
analogWrite(LayerPin[0], 255); //регулируем яркость светодиодов
//digitalWrite(LayerPin[layer], HIGH);
for (g = 0; g < 24; g = g + 1) // зажжем все
{
bitToSend ( g, 1);
sendToRegister (); // Шлем в регистр
delay (timeStop);
}
} //конец setup
void loop() {
// wave_all() ;
for (int i = 250; i >= 0; i = i- 20)
{
analogWrite(LayerPin[0], i); //регулируем яркость светодиодов
delay (timeStop);
}
for (int i = 0; i < 250; i = i+ 20)
{
analogWrite(LayerPin[0], i); //регулируем яркость светодиодов
delay (timeStop);
}
} //конец loop
//****функция передачи данных в сдвиговый регистр для зажигания светодиодов
void sendToRegister () { // Шлем в регистр
//Отключаем вывод на регистре
digitalWrite(latchPin, LOW);
// разбиваем наши 24 бит на 3 байта
// для записи в первый и второй регистр
byte register1 = (bitsToSend) >> 16;
byte register2 = (bitsToSend) >> 8;
byte register3 = (bitsToSend);
// "проталкиваем" байты в регистры - сначало в дальний
shiftOut(dataPin, clockPin, MSBFIRST, register1);
shiftOut(dataPin, clockPin, MSBFIRST, register2);
shiftOut(dataPin, clockPin, MSBFIRST, register3);
// "защелкиваем" регистр, чтобы биты появились на выходах регистра
digitalWrite(latchPin, HIGH);
}
void bitToSend (int Point, int State1) { //Запись в байт каждой точки
bitWrite(bitsToSend, Point, State1);
}
// ЭФФЕКТЫ
///********** все подряд
void wave_all() {
for (g = 0; g < 24; g = g + 1)
{
bitToSend ( g, 1);
sendToRegister (); // Шлем в регистр
delay (timeStop);
}
// for (g = 23; g >= 0; g = g -1 )
for (g = 0; g < 24; g = g + 1)
{
bitToSend ( g, 0);
sendToRegister (); // Шлем в регистр
delay (timeStop);
}
} //конец wave_all
В продолжение темы
кусочек видео работы куба 4х4х4, собранного из китайского конструктора по схеме выше : https://photos.app.goo.gl/5XCdXS5VU7ZzAZE52
Вот мой скетч для этого кубика.частично хоче использовать для новой поделки
А вот скетч для 1 слоя звезды, для которой и спрашиваю совета.
А вот видео работы 1 слоя звезды.
https://photos.app.goo.gl/L8vnR3AjhgIRoY8D2
В обоих видео видно, как падает яркость с количеством зажженых диодов.
Я абсолютно доверяю Евгению и неоднократно прибегал к его советам. На всех, виденных мной примерах по работе с 595-й везде к каждому диоду прилагаетсясвой резистор.
Пока писал ответы понял что ничего не выйдет и остается тольько оставить резистор там где есть и побольше(в расчете на самый слабый одиночный диод) и миритьсяс падением яркости при включении всех одновременно. Попробую еще для каждого столбца поставить резистор, черт его знает, может получится чтонить годное. Вот только какого номинала ? :)
Так же последовать Совету Евгения и использовать 5940, как, например вот в таком проекте http://dclausen.net/projects/ledcyl/ тем более, что я их для него заказал и жду поставку а диоды уже спаял.
Звездочку хотел собрать чтобы потренироваться с кодом, пока жду микросхемы
Доброго вечера!
В общем и целом следуюя советам мастеров - я таки собрал звездочку. поставил резисторы для каждого столбика. Работает.
Видео https://photos.app.goo.gl/y6IXGU9Y1qmULGFl2
Зато появились проблемы с кодом. Добавил IR и все посыпалось.
Код
как только включаю строку 22
// irrecv.enableIRIn(); // Старт приемника IR
так вырубаются слои 0 и 4. В чем может быть дело?
Пожалуйста, вернитесь к вопросу :)
Я поспешался совета, в каждом столбике резистор 220ом и теперь единовременно горит не более 1 диода в столбике.
Посмотрите, пожалуйста вопрос выше :)
Пожалуйста, вернитесь к вопросу :)
Я поспешался совета, в каждом столбике резистор 220ом и теперь единовременно горит не более 1 диода в столбике.
Посмотрите, пожалуйста вопрос выше :)
Все правильно, так и должно быть.
Пожалуйста, вернитесь к вопросу :)
Я поспешался совета, в каждом столбике резистор 220ом и теперь единовременно горит не более 1 диода в столбике.
Посмотрите, пожалуйста вопрос выше :)
Все правильно, так и должно быть.
Вопрос:
Зато появились проблемы с кодом. Добавил IR и все посыпалось.
Вопрос:
Зато появились проблемы с кодом. Добавил IR и все посыпалось.
1. Это не вопрос, а утверждение
2. И утверждение абсолютно неинформативное: куда добавил? что посыпалось? куда посыпалось? Детали на пол упали, что-ли? Когда добавлял, перемешал как следует?
Евгений,
Извините, что я так...неконкретно. Просто растерялся
Код
как только включаю строку 22
// irrecv.enableIRIn(); // Старт приемника IR
так вырубаются слои 0 и 4. Без этой строчки код работает. Причем, я пробовал и зажигать только эти слои - не получается.
Я закомментировал все, что касалось IR и включал по кускам. Вот как только включил эту строку - так и пропадает свечение слоев.
Код без IR устойчиво работает.
В чем может быть дело?
Что-то не так с кодом - не открывается. У Вас открывается? Перевставьте ещё раз.