Страница 2 из 4

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 18:04:45
Eddy_Em
На диоде будет падать от 0.2 до 0.6В. И даже среди одной и той же серии падения могут быть разными!
И нафиг оно надо? Как резистор рассчитывать на светодиод?
Кроме того, что сложного перевести пин не в output=0, а в input?

И насчет ШИМа все правильно говорят! Подцепить диод к выходу таймера, да ШИМить. В прерывании таймера декрементируем на нужную величину значение CCR, пока не получим 0... И зажигать так же можно.
Если DMA подключить, то даже почти не нужно будет насиловать ресурсы МК на это..

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 19:18:41
oleg_4rk
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3722440#p3722440"]На диоде будет падать от 0.2 до 0.6В. И даже среди одной и той же серии падения могут быть разными!
И нафиг оно надо? Как резистор рассчитывать на светодиод?[/uquote]

Дык, так же как и в любой другой ситуации - исходить из расчёта 0.7В падения на диоде и подбирать именно такой :-). А как обычно с диодами поступают? Не думал, что здесь проблема может быть.
Так-то и резисторы разные бывают.
Кроме того, что сложного перевести пин не в output=0, а в input?
Так-то ничего. Придётся ещё добавлять запись в PORT нуля и в целом конструкция в коде потеряет наглядность и обретёт в запутанности.
И насчет ШИМа все правильно говорят!
Согласен. Только я так делал. Говорю ж. А сейчас хотел научиться делать не так :-).

Добавлено after 49 minutes 36 seconds:
Эдвард, вы же апологет stm32 :-). Нет ли какой howto'шки для перехода с avr на stm32 :-)?

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 19:33:51
ARV
oleg_4rk писал(а):Так а в чём смысл этого, если диод решает?
смысл применения микроконтроллера в том и заключается, чтобы свести "обвес" к минимуму. если плавное мигание делать при помощи конденсаторов, диодов и резисторов, то микроконтроллер-то зачем?!

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 20:12:28
oleg_4rk
Ещё вопрос. Если конденсатор загонять со светодиодом под общий резистор, то как правильно резистор выбрать?
Если рассматривать начало зарядки конденсатора, то(при учёте 40мА макс. на пин, 20мА при 2.2В на светодиоде) выходит 70 Ом. Но, когда конденсатор зарядится, светодиод, видимо, сгорит :-). Т.е. надо 140 Ом минимум сопротивления, что бы при полном заряде светодиод норм себя чувствовал. Правильно я мыслю?

Добавлено after 1 minute 59 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3722502#p3722502"]смысл применения микроконтроллера в том и заключается, чтобы свести "обвес" к минимуму. если плавное мигание делать при помощи конденсаторов, диодов и резисторов, то микроконтроллер-то зачем?![/uquote]

Как зачем? Что бы задавать порядок мигания лампочек :-).

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 20:35:12
Dimon456
А вы не рассматривайте начало зарядки конденсатора.
Вам уже написали
[uquote="ЭлектроKOT",url="/forum/viewtopic.php?p=3722327#p3722327"]250 Ом - 100% (максимум тока, 0,02А).
360 Ом (ближайший номинал) - ограничение до 70%, 14 mA.
Как-то так.
Возьмите сверхяркий светодиод, ему, в отличие от обычного, ток нужен меньше.
Эффект будет заметнее или, что еще лучше, емкость конденсатора можно будет взять меньше.[/uquote]

Re: arduino и конденсатор

Добавлено: Пн окт 21, 2019 21:01:49
Eddy_Em
Что у вас там за светодиоды, у которых 20мА — нормальный ток? Ультрафиолетовые что ли???
А насчет сверхъярких, так они по 100мА спокойно жрать могут, а то и больше... И падение на них обычно в районе трех Вольт.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 06:44:47
ARV
Eddy_Em писал(а):Что у вас там за светодиоды, у которых 20мА — нормальный ток?
практически все обычные светодиоды нормируются при токе 10 или 20 мА
Eddy_Em писал(а):А насчет сверхъярких, так они по 100мА спокойно жрать могут, а то и больше...
сверхяркие и мощные - это разные светоидоды. сверхяркий при токе 20 мА может иметь яркость 10 канделл, вв то время как обычный (т.е. не сверхяркий) при том же токе светит всего на 500 милликанделл. не надо путать с мощностью.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 07:07:27
Eddy_Em
[uquote="ARV",url="/forum/viewtopic.php?p=3722637#p3722637"]сверхяркий при токе 20 мА может иметь яркость 10 канделл, вв то время как обычный (т.е. не сверхяркий) при том же токе светит всего на 500 милликанделл[/uquote]
Кефиродинамика какая-то получается! А как же закон сохранения энергии? Что-то я не чувствую жара от "обычного" светодиода...
Ну и повторюсь: большинство "обычных" светодиодов при токе 20мА тупо сгорит спустя небольшое время. Даже 10мА — много. Рассчитывать надо на 3..5мА, чтобы продлить срок службы.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 10:16:19
oleg_4rk
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=3722562#p3722562"]Что у вас там за светодиоды, у которых 20мА — нормальный ток? Ультрафиолетовые что ли???[/uquote]

Самые обычные :-) - https://www.chipdip.ru/product/gnl-3012ed

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 10:29:17
ARV
Eddy_Em писал(а):Что-то я не чувствую жара от "обычного" светодиода...
вы, вероятно, снова путаете рассеиваемую мощность и яркость излучения. у меня в запасничках авляются суперяркие светодиоды, которые при 20 мА дают 2 канделы (2000 милликандел) света (красные). ну и сравните их с АЛ307, которые при 20 мА дают 0,15 милликандел. а жара нет от обоих :)))
Eddy_Em писал(а):большинство "обычных" светодиодов при токе 20мА тупо сгорит
как бы производители с вами не согласны, и приводят характеристики для своей продукции для 10 и 20 мА (с исключениями, конечно, но...)

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 10:33:48
oleg_4rk
И всё таки, я не уверен, что понимаю как расчитать общий резистор в такой схеме:

Изображение

Если рассматривать полностью заряженный конденсатор, то считаем просто светодиод, т.к. конденсатор это разрыв цепи:

- светодиод при 2.2В даёт 0.02А
- напряжение питания - 5В
- т.е. резистор должен на себе сожрать 2.8В и дать 0.02А тоже - 140 Ом

Но в момент заряда/разряда конденсатора ситуация, ведь, другая будет. Как это правильно учитывают?

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:01:11
ARV
oleg_4rk писал(а):Как это правильно учитывают?
никак.
так никто яркостью светодиода не управляет.

Добавлено after 6 minutes 53 seconds:
поясняю.
рассматриваем самый первый раз подачи напряжения на вашу схему. конденсатор разряжен, т.е. является закороткой - светоидод не светится.
конденсатор заряжается через резистор. когда он зарядится примерно до 1,5 вольт - начнет светиться светодиод, после чего заряд конденсатора пойдет уже с другой постоянной времени... но светодиод в промежутке от этих самых 1,5 до 2,2 вольт "наберет" свою яркость очень быстро. может быть, вы даже не заметите этого процесса.
теперь рассматриваем вторую часть - снятие напряжения со схемы. поскольку конденсатор заряжен до 2,2 вольт он будет подпитывать светоидод до момента погасания, т.е. до тех самых 1,5 вольт. поскольку никакого резистора для разряда конденсатора в этой цепи больше нет, разряд произойдет быстро - снова, может быть, вы этого не заметите, т.е. светоидод погаснет быстро.
когда светоидод погас, можно считать, что ток он уже не проводит, и конденсатор останется заряженным до 1,5 вольт... т.е. когда вы подадите напряжение на схему в следующий раз (ну не через час же вы это сделаете? а через несколько миллисекунд конденсатор еще не разрядится сам по себе), светодиод СРАЗУ начнет светиться, ведь на нем уже есть почти 1,5 вольт...

1,5 вольта в качестве момента начала свечения - это, конечно, моя фантазия, напряжение там может быть и иным, но сути процессов это не меняет.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:11:01
BOB51
Нечто подобное в дремуче древни времена делали на основе неонки/тиратрона, диода, пары кондеев и тройки резисторов.
Только там не яркость регулировалась, а "мигалка" получалась с весьма длинным периодом мигания после отключения от сети.
8)

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:15:23
NStorm
[uquote="oleg_4rk",url="/forum/viewtopic.php?p=3722461#p3722461"]Так-то ничего. Придётся ещё добавлять запись в PORT нуля и в целом конструкция в коде потеряет наглядность и обретёт в запутанности.[/uquote]
Не надо ничего добавлять. В PORT вы и так писали. А надо писать вместо этого в DDR, а в PORT можно ничего не писать (ну точнее один раз туда 1 записать в начале). Получаете псевдо ОК. Обычная практика на AVR. Наглядность точно такая же. А вообще для наглядности чего только не придумали, уж как минимум макросы.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:28:24
oleg_4rk
[uquote="ARV",url="/forum/viewtopic.php?p=3722751#p3722751"]
oleg_4rk писал(а):Как это правильно учитывают?
никак.
так никто яркостью светодиода не управляет.[/uquote]

Это Понятно. Но светодиод тут только для примера нагрузки.
поясняю.
...
Спасибо. Примерно так я себе и представлял. Действительно в этой схеме пропадает затухание плавное.

Добавлено after 3 minutes 40 seconds:
[uquote="NStorm",url="/forum/viewtopic.php?p=3722762#p3722762"]Не надо ничего добавлять. В PORT вы и так писали. А надо писать вместо этого в DDR, а в PORT можно ничего не писать (ну точнее один раз туда 1 записать в начале).[/uquote]

А разве 1 в PORT это не PULLUP включается? Вроде ж, 0 в PORT это HiZ.
Обычная практика на AVR.
Понятно.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:44:57
NStorm
[uquote="oleg_4rk",url="/forum/viewtopic.php?p=3722765#p3722765"]А разве 1 в PORT это не PULLUP включается? Вроде ж, 0 в PORT это HiZ.[/uquote]
Ну смотря какая AVR. У некоторых отдельные регистры PUEx есть. для pullup'ов. У остальных обычно есть глобальный бит PUD в SFRIO/MCUCR, которым можно отключить все пулл-апы, даже если PORT=1 при DDR=0.
Даже если с 2мя регистрами работать, никто не мешает написать простой макрос:

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

#define LIGHTON()  do { PORTB |= (1 << PB3);   DDRB |= (1 << DDRB3); } while (0);
#define LIGHTOFF() do { DDRB &= ~(1 << DDRB3); PORTB &= ~(1 << PB3); } while (0);

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 11:58:24
oleg_4rk
[uquote="NStorm",url="/forum/viewtopic.php?p=3722776#p3722776"]Ну смотря какая AVR. У некоторых отдельные регистры PUEx есть. для pullup'ов. У остальных обычно есть глобальный бит PUD в SFRIO/MCUCR, которым можно отключить все пулл-апы, даже если PORT=1 при DDR=0.[/uquote]

Понятно.

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

#define LIGHTON()  do { PORTB |= (1 << PB3);   DDRB |= (1 << DDRB3); } while (0);
#define LIGHTOFF() do { DDRB &= ~(1 << DDRB3); PORTB &= ~(1 << PB3); } while (0);
В чём смысл do/while?

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 12:05:48
NStorm
[uquote="oleg_4rk",url="/forum/viewtopic.php?p=3722780#p3722780"]В чём смысл do/while?[/uquote]
Чтобы подставить можно было куда угодно без наживания проблем на свою голову. Например

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

if (some_var == 123) 
  LIGHTON();
Без do...while(0); раскрылось бы в:

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

if (some_var == 123) 
  PORTB |= (1 << PB3);

DDRB |= (1 << DDRB3);
И DDRB менялся бы всегда, вне зависимости от some_var. А с do ... while(0); все, что внутри макроса будет выполнен только при условии когда some_var будет == 123.

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 12:23:34
oleg_4rk
[uquote="NStorm",url="/forum/viewtopic.php?p=3722785#p3722785"]Чтобы подставить можно было куда угодно без наживания проблем на свою голову. Например

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

if (some_var == 123) 
  LIGHTON();
Без do...while(0); раскрылось бы в:

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

if (some_var == 123) 
  PORTB |= (1 << PB3);

DDRB |= (1 << DDRB3);
[/uquote]

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

~$ cat t.c
#define LIGHTON()  { PORTB |= (1 << PB3); DDRB |= (1 << DDRB3); }

void
main(void)
{
        if (some_var == 123)
                LIGHTON();
}

~$ cpp t.c
void
main(void)
{
 if (some_var == 123)
  { PORTB |= (1 << PB3); DDRB |= (1 << DDRB3); };
}

Re: arduino и конденсатор

Добавлено: Вт окт 22, 2019 13:49:08
NStorm
oleg_4rk, https://ru.stackoverflow.com/questions/ ... -do-while0

}; прервет ваш if, и дальше else/else if нельзя будет поставить.

; после while(0) я конечно лишнюю поставил в своё примере..

Сделайте

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

        if (some_var == 123)
                LIGHTON();
        else
               LIGHTOFF();
И получите ошибку без do ... while(0):
t.c:13:2: error: 'else' without a previous 'if'