Официальный сайт компании Arduino по адресу arduino.cc
Регулировка яркости в часах на 7SEG индикаторах
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 26/07/2016 - 21:12
я всё строю часы =)
что хочу сделать:
1. на семисегментных индикаторах и RTC 1302(у меня нет другого).
2. с авторегулировкой яркости.
3. будильник.
4. отключение будильника датчиком положения.
5. варианты отключения меняются случайным образом(быстрые потряхивания\ медленные\ количество этих самых потряхиваний).
пока не сильно продвинулся, изучаю матчасть и ищу похожее в сети что б надёргать из кусочков (пока что сам не смогу такое осилить).
вот, нашел вот такой код регулировки яркости и схема подключения индикатора(хотя из скетча и так всё понятно).
мож кому пригодится
Код, кстати, кривоватенький.
Для начала следовало бы заменить циклы с NOP (длительность которых зависит от тактовой частоты) на delayMicroseconds().
А вот такие конструкции
имеет смысл применять только в тех случаях, когда p может принимать более двух значений.
спасибо за поправку.
работает скетч и правда, не очень. но лучшего не нашел.
Код откровенно плохой. Синтез знаков делается не так. Яркостью лучше управлять шим-каналом. Тогда можно задавать даже разную яркость для разных разрядов. У меня в коде паялки все это есть.
a5021, а можно взглянуть?
я примерно так (что ШИМ) и представлял: ОА(или ОК) подключать на те порты, которые с ШИМом.
ОА можно напрямую к МК, а когда ОК - то через транзисторы.
Глянуть можно. Все исходники есть в теме "Паяльная станция из ардуино", но не уверен, что они покажутся наглядными из-за накрученного там функционала.
Если бы на меге были четыре шим-канала на одном таймере, то идеальной схемой было бы подключить каждый из них к каждому из четрех разрядов индикатора. Имеется ввиду, к общему электроду для сегментов этого разряда. Но у меги такого раскошества нет и придется выкручиваться.
В принципе, можно обойтись и одним шим-каналом. Идея простая. Разрешаем прерывания таймера по переполнению счетчика и по совпадению (compare match) на шим-канале. В обработчике по переполнению "зажигаем" нужную цифру, а в обработчике по совпадению "гасим" ее. Таким образом цифра будет гореть только на протяжении, пока таймер не досчитает до совпадения. Когда случается следующее прерывания по переполнению, то зажигаем следующую цифру, а по совпадению гасим уже ее. И так для всех разрядов по кругу.
так на АТМ328 вроде 4 ШИМ?
тему глянул... н-дя...
не разберусь :(
Шесть. По два на каждом из трех таймеров. Задействовать два таймера, чтобы получить совокупно четыре канала для управления разрядами, лишает всю идею изящества и не лучшим образом расходует аппаратный ресурс. В этом случае проще программно одним каналом рулить всеми разрядами.
А вот такие конструкции
имеет смысл применять только в тех случаях, когда p может принимать более двух значений.
Чем предлагаете заменять?
Чем предлагаете заменять?
Простым вычислением:
p = !p;
или
p ^=1;
так понимаю, что это вариант для управления одним ШИМ (а там ключ, который идёт на общий анод или катод)?
или я неверно понял?
В моём драйвере четырёх семисегментников не используется ШИМ вообще. Точнее, ШИМ задействован только для мигающего двоеточия (реализованного отдельной парой светодиодов 3528).
Разряды же управляются так:
8-битный таймер работает на тактовой частоте МК (я использовал PIC16F72, потому что он стоит всего 30 центов и у него 22 линии ввода-вывода), без предделителя. Это порядка 1,5 мГц.
Обработчик прерывания переполнения таймера инкрементирует счётчик. Если младшие 5 бит равны нулю, то переключается ключ, выбирая нужный разряд, и отображается соответствующий разряд, один из четырёх (6-й и 7-й бит счётчика указывают разряд), а если не равны, то значение сравнивается с переменной яркости для соответствующей цифры (опять же, биты 7..6 определяют, с какой из 4-х переменных сравнивать). В случае равенства изображение стирается.
Таким образом обеспечивается раздельная регулировка яркости для каждой из четырёх цифр в пределах от 1/32 до 31/32. Можно и 64 взять, но тогда частота сканирования будет низковата, периферийным взглядом можно заметить мерцание.
Можно ногами без ШИМ подавать VCC на каждый сегмент и один транзистор уже с ШИМ комутировать общую GND, и ресурсы свободны и плавное регулирование яркости есть!)
Точнее, там мне транзистор не нужен, поскольку в качестве светодиодного драйвера используются микросхемы сдвиговых регистров MBI5024, и ШИМ от МК (инвертированный) подаётся на вход !OE.
Но для задачи в этой теме нет смысла использовать аппаратный ШИМ, поскольку всё равно отображение динамическое (цифры приходится перебирать), а раз уж мы выводим цифры программно, то и стирать их есть смысл программно, каждую в своё время. Это удобно для режима настройки часов: вместо мерцающей цифры — выделение яркостью.