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

Обсуждаем контроллеры компании Atmel.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

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

И насчет ШИМа все правильно говорят! Подцепить диод к выходу таймера, да ШИМить. В прерывании таймера декрементируем на нужную величину значение CCR, пока не получим 0... И зажигать так же можно.
Если DMA подключить, то даже почти не нужно будет насиловать ресурсы МК на это..
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение 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 :-)?
Ардуинщик. Не шарю в электронике.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg_4rk писал(а):Так а в чём смысл этого, если диод решает?
смысл применения микроконтроллера в том и заключается, чтобы свести "обвес" к минимуму. если плавное мигание делать при помощи конденсаторов, диодов и резисторов, то микроконтроллер-то зачем?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение oleg_4rk »

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

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

Как зачем? Что бы задавать порядок мигания лампочек :-).
Ардуинщик. Не шарю в электронике.
Реклама
Эиком - электронные компоненты и радиодетали
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

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

Сообщение Eddy_Em »

Что у вас там за светодиоды, у которых 20мА — нормальный ток? Ультрафиолетовые что ли???
А насчет сверхъярких, так они по 100мА спокойно жрать могут, а то и больше... И падение на них обычно в районе трех Вольт.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[uquote="ARV",url="/forum/viewtopic.php?p=3722637#p3722637"]сверхяркий при токе 20 мА может иметь яркость 10 канделл, вв то время как обычный (т.е. не сверхяркий) при том же токе светит всего на 500 милликанделл[/uquote]
Кефиродинамика какая-то получается! А как же закон сохранения энергии? Что-то я не чувствую жара от "обычного" светодиода...
Ну и повторюсь: большинство "обычных" светодиодов при токе 20мА тупо сгорит спустя небольшое время. Даже 10мА — много. Рассчитывать надо на 3..5мА, чтобы продлить срок службы.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение oleg_4rk »

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

Самые обычные :-) - https://www.chipdip.ru/product/gnl-3012ed
Ардуинщик. Не шарю в электронике.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение oleg_4rk »

И всё таки, я не уверен, что понимаю как расчитать общий резистор в такой схеме:

Изображение

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

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

Но в момент заряда/разряда конденсатора ситуация, ведь, другая будет. Как это правильно учитывают?
Ардуинщик. Не шарю в электронике.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

oleg_4rk писал(а):Как это правильно учитывают?
никак.
так никто яркостью светодиода не управляет.

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

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Нечто подобное в дремуче древни времена делали на основе неонки/тиратрона, диода, пары кондеев и тройки резисторов.
Только там не яркость регулировалась, а "мигалка" получалась с весьма длинным периодом мигания после отключения от сети.
8)
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

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

Сообщение 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.
Понятно.
Ардуинщик. Не шарю в электронике.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55: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);
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение 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?
Ардуинщик. Не шарю в электронике.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение 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.
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Сообщение 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); };
}
Ардуинщик. Не шарю в электронике.
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение 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'
Ответить

Вернуться в «AVR»