Я как-то осваивал arduino и делал часы на самодельных 7-сегментниках. С регулировкой яркости. Яркость изменял как раз используя самодельный ШИМ на таймере2 (arduino nano). По совпадению включал разряд, по переполнению выключал.
Подсмотрел код в похожем проекте из интернета и «настроил» таймер вот так:
void setup() {
TCCR2A |= (1 << WGM20)|(1 << WGM21); // Установка режима Fast PWM (WGM20 и WGM21)
TCCR2B |= (1 << CS21); // Установка предделителя на 8 (CS21)
TIMSK2 |= (1 << TOIE2)|(1 << OCIE2A); // Разрешение прерываний по переполнению (TOIE) и по совпадению (OCR2A)
OCR2A = 1; // Начальное значение по совпадению
sei();
}
Код, который я брал за основу был на С++ но не использовал фреймворк ардуино. То есть никаких setup'ов и loop'ов. Он был очень похож на тот, что в статье, но в нём отсутствовала первая часть, где обнуление регистров.
Измерил частоту осциллографом. Получил ~245 Гц. С предделителем 0 — ~490Гц. Методом «тыка» дошёл до того, что нужно обнулить регистры!
Ещё немного поэкспериментировал и получил такое:
Мне так проще воспринимать. Я открыл даташит и смотрю в регистры, как они там написаны. Вижу, где стоят «единички» и что они означают. И места меньше занимает.
Тут дело в понимании процесса. Казалось бы: вот есть резистор — он создаёт сопротивление, на нём падает напряжение. А вот светодиод — на нём падает напряжение, значит он создаёт сопротивление. Но оказывается нет. Не создаёт. Ну, то есть… Короче нельзя его рассматривать как резистор.
Я почитал комменты и представил себе светодиод как ворота. Нужно приложить силу (напряжение), чтобы открыть ворота. Нужно удерживать силой (напряжением) открытые ворота. А в это время поток (ток) будет беспрепятственно (почти) идти через ворота. Но поскольку ток сожжёт светодиод, то его нужно ограничить.
Вот у меня, как у начинающего, возникет диссонанс со светодиодами. Если на нём происходит падение напряжения, значит он должен обладать каким-то сопротивлением. На резисторе ведь тоже происходит падение напряжения.
Например, падение напряжения на светодиоде — 2В. Можно ли к источнику питания 12В подключить 6 диодов без резистора?
Подсмотрел код в похожем проекте из интернета и «настроил» таймер вот так:
Код, который я брал за основу был на С++ но не использовал фреймворк ардуино. То есть никаких setup'ов и loop'ов. Он был очень похож на тот, что в статье, но в нём отсутствовала первая часть, где обнуление регистров.
Измерил частоту осциллографом. Получил ~245 Гц. С предделителем 0 — ~490Гц. Методом «тыка» дошёл до того, что нужно обнулить регистры!
Ещё немного поэкспериментировал и получил такое:
Мне так проще воспринимать. Я открыл даташит и смотрю в регистры, как они там написаны. Вижу, где стоят «единички» и что они означают. И места меньше занимает.
Я почитал комменты и представил себе светодиод как ворота. Нужно приложить силу (напряжение), чтобы открыть ворота. Нужно удерживать силой (напряжением) открытые ворота. А в это время поток (ток) будет беспрепятственно (почти) идти через ворота. Но поскольку ток сожжёт светодиод, то его нужно ограничить.
Катод = Минус = 5 букв
Анод = Плюс = 4 буквы
Анод начинается на «А» катод — на «К».
«А» в алфавите первее «К».
«Плюс» больше «минуса».
«А» = "+", «К» = "-".
Например, падение напряжения на светодиоде — 2В. Можно ли к источнику питания 12В подключить 6 диодов без резистора?