Что нам понадобится?
- В качестве основы, я использовал Frearduino ADK v.2.2 на базе процессора ATmega2560
- TFT LCD Mega Shield v.2.2
- Сам дисплей - 7" TFT LCD SSD1963 ()
- UTFT Library - универсальная библиотека для работы с TFT дисплеями (Найти саму библиотеку, а так же документацию можно )
- Паяльник
Разберёмся с железом
Открыв схему дисплея, можно увидеть, что на конвертер mp3032 идет три входа: LED-A, PWM, 5V. Изначально, PWM неактивен. Этот вход не используется совсем. Подсветка управляется LED-A.Если взглянуть на обратную сторону дисплея, можно найти область, подписанную как "Backlight control" . Здесь то мы и найдём эти самые входы. Для управления подсветкой методом ШИМ, необходимо сделать так, чтобы все было наоборот: LED-A - неактивен, PWM - активен. Для этого придётся перепаять перемычку. Вот фото того, что должно получиться:
Программная часть
Так как наша библиотека не может дать то, что нам надо, мы сами напишем нужную функцию. Для этого откроем документацию к контроллеру, управляющему дисплеем (SSD1963). Управление SSD1963 осуществляется с помощью специальных команд, которые передаются с Arduino через специальные выходы, которые описаны в документации:Управление осуществляется следующим образом: Arduino выводит через RS (D/C в таблице) 0, если мы собираемся передавать команду, 1 - если данные. После передачи команды, RS переключается на 1, и далее передаются необходимые параметры. Все команды и параметры передаются через выходы D0-D7. Если у вас ATmega2560, то все эти восемь выходов объединены в порт C.
Итак, для начала, напишем функцию передачи данных по шине. Для удобства использования, я буду писать прямо в UTFT.h:
Void Lcd_Writ_Bus(uint8_t bla) { digitalWrite(WR,LOW); //Настраиваем SSD1963 на чтение digitalWrite(CS, LOW); PORTC = bla; //Передаем на шину данные в виде одного байта digitalWrite(CS,HIGH); digitalWrite(WR,HIGH); }
Также стоит обратить внимание на названия методов, так как в библиотеке уже могут встретиться функции с такими же именами.
Добавим две функции для вывода команд и данных:
Void Lcd_Write_Com(uint8_t data) { digitalWrite(RS,LOW); //Переключаем RS в режим чтения команды, то есть 0 Lcd_Writ_Bus(data); } void Lcd_Write_Data(uint8_t data) { digitalWrite(RS,HIGH); //Переключаем RS в режим чтения данных, то есть 1 Lcd_Writ_Bus(data); }
Теперь сама настройка подсветки. Чтобы узнать, как осуществить все это, открываем документацию и ищем команду для настройки PWM.
Примечание:
PWM может управляться, с помощью DBC - система динамической регулировки яркости, но я, для простоты, не стал её использовать. Вы же, если хотите, можете найти необходимую информацию в той же документации.Итак, вот, что нам надо:
То есть, сначала мы должны передать команду «0xBE», а потом, в качестве 3-х параметров передать частоту сигнала, длительность рабочего цикла, а также третий параметр, который определяет, включен DBC или нет (0x01 - выключен, 0x09 - включен).
Для регулировки самой яркости, необходимо изменять лишь частоту рабочего цикла. Так как мы передаём данные в виде одного байта, то значения цикла могут быть от 0 до 255. Я решил определить 9 уровней яркости (от 0 до 8). Следовательно, все 256 значений нужно разбить на 9 ступеней. Но также стоит обратить внимание на то, что если ступени будут равными, то яркость будет изменяться не так плавно, как хотелось бы. То есть уже, к примеру, на 4-ой ступени, яркость будет почти максимальной, а с 4-ой по 8-ую ступень будет изменять почти незаметно. Учитывая это, я решил использовать геометрическую прогрессию со знаменателем 2. То есть яркость будет вычисляться по следующей формуле: (2 ^ lvl) - 1 , где lvl - уровень яркости от 0 до 8. Обратите внимание, что так как значения начинаются с нуля, то необходимо вычесть единицу. Конечно, вы можете выбрать ступени и их значения сами, но я привёл вот такой, довольно просто пример. Теперь сам код:
Void setBright(byte lvl) { byte brightness(1); for (byte i(1); i <= lvl; i++) //Возведение в степень brightness *= 2; Lcd_Write_Com(0xBE); //Вывод команды Lcd_Write_Data(0x01); //Ставим частоту 760Гц Lcd_Write_Data(brightness-1); //Выводим длину рабочего цикла Lcd_Write_Data(0x01); //Отключаем DBC }
Теперь можно использовать UTFT.setBright(byte lvl);
Пояснения к схеме
R2 – переменный резистор номиналом 10К. Центральный вывод резистора через НЧ-фильтр подключен к нулевому каналу АЦП. Напряжение на резисторе преобразуется в цифровой код, который записывается в регистр сравнения таймера Т0. Таким образом с помощью резистора осуществляется регулировка скважности ШИМ сигнала.
Led1 – мощный светодиод белого цвета. Падение напряжения на нем около 4 Вольт. Максимальный ток светодиода, задается резистором R5 и равен 100 мА.
(Uпит – Uled)/R5 = (5 - 4)/10 = 100 мА
IRLU024N – N–канальный полевой транзистор. Вместо него можно использовать любые полевые транзисторы серии IRL (L - это значит, что управляются логическим уровнем)
R3 – токоограничительный резистор на всякий случай. R4 – pull-down резистор. Затвор полевого транзистора нельзя оставлять "болтающимся в воздухе".
Программа
//************************************************************
// Учебный курс. Программирование микроконтроллеров AVR на Си
// Управление нагрузкой с помощью
// широтно-импульсной модуляции (ШИМ, PWM)
#include
#include
int
main(void
)
{
//инициализация портов
PORTB = 0;
DDRB = 0xff;
//инициализация таймера Т0
TIMSK = 0;
//реж. - fast pwm, вывод OC0 - неинверт. шим, clk/64
TCCR0 = (1<
OCR0 = 0;
//ион - напряжение питания, выравнивание влево, нулевой канал
ADMUX = (0<
ADCSRA = (1<
SFIOR = 0;
__enable_interrupt
();
while
(1);
return
0;
}
//********************************
//прерывание АЦП
#pragma
vector=ADC_vect
__interrupt
void
adc_my(void
)
{
//считываем старший регистр АЦП и
//записываем в регистр сравнения
Пояснения к коду
Логика работы
Инициализация периферии - таймера Т0, модуля АЦП. Разрешение прерываний. Бесконечный цикл. В прерывании АЦП напряжение считанное с переменного резистора записывается в регистр сравнения OCR0. В микроконтроллере AVR для этого регистра организован буфер, и на самом деле запись происходит сначала в него. Из буфера же значение переписывается в OCR0, только когда происходит переполнение счетного регистра TCNT0. Параллельно циклу while и модулю АЦП, работает таймер Т0 и генерит на выводе OC0(PB2) ШИМ сигнал. Когда счетный регистр TCNT0 переполняется OC0 устанавливается в 1, когда значение счетного регистра совпадает с регистром сравнения OCR0, вывод устанавливается в 0.
Инициализация таймера
Прерывания таймера не используются, поэтому регистр TIMSK = 0.
За установки таймера Т0 отвечает конфигурационный регистр TCCR0.
Биты WGM01, WHM00 определяют режим работы. 11 - режим Fast PWM.
Биты CS02, CS01, CS00 - устанавливают коэффициент предделителя таймера. 011 - соответствует предделителю 64. Тактовая частота таймера/счетчика будет Fcpu/64
Биты COM01, COM00 -определяют поведение вывода OC0. 10 - соответствует неинвертированному ШИМ сигналу. 1 - при переполнении TCNT0, 0 - при совпадении TCNT0 c OCR0.
Инициализация АЦП
Пример №2. Генерация синусоидального сигнала с помощью ШИМ
Пояснение к схемe
Резистор R2 просто забыл выкинуть из схемы. R3 и C8 интегратор.
Программа
//************************************************************
// Генерация синуса с помощью
// широтно-импульсной модуляции (ШИМ, PWM)
//************************************************************
#include
#include
#include
"TableSin.h"
int
main(void
)
{
//инициализация портов
PORTB = 0;
DDRB = 0xff;
TIMSK = (1<
TCCR0 = (1<
TCNT0 = 0;
OCR0 = 0;
__enable_interrupt
();
while
(1);
return
0;
}
//**********************************************************
//Прерывание таймера/счетчика Т0
#pragma vector = TIMER0_COMP_vect
__interrupt void Timer0CompVect(void )
Часто пользователи операционной системы Windows 7 сталкиваются с проблемой настройки яркости экрана . Чтобы исправить эту проблему, мы разберем все доступные способы настройки яркости дисплея в Windows 7 . Регулирование подсветки экрана является довольно простым процессом, с которым справится даже начинающий пользователь. После ознакомления с материалом, вы сможете самостоятельно настроить яркость портативного или стационарного компьютера.
Регулирование яркости стандартными средствами Windows 7
Чтобы выставить яркость ноутбука или моноблока стандартными средствами семерки, первым делом следует перейти к Панели управления . Перейти к Панели управления можно через меню «Пуск » или набрать в программе «Выполнить » команду control
После запуска Панели управления необходимо перейти в раздел «».
Теперь можно увеличить или уменьшить подсветку экрана. Для этого поставьте ползунок «Яркость экрана » в положение, которое соответствует вашим предпочтениям подсветки монитора.
Также вы можете зайти в настройки плана электропитания и выставить яркость , при которой портативный компьютер будет работать от батареи или от сети.
Изменение параметров освещения экрана с помощью драйвера видеокарты
Еще одним интересным способом изменения освещения дисплея является регулировка с помощью драйвера видеокарты . Для нашего примера будет рассматриваться driver от компании Nvidia . Чтобы открыть параметры драйвера видеокарты, нужно кликнуть правой кнопкой мыши на пустом месте Рабочего стола. Должно появиться контекстное меню.
В этом меню выберем пункт «Панель управления NVIDIA » (для другой видеокарты может быть по-другому), после чего откроется панель параметров драйвера видеокарты.
Теперь в этой панели нужно перейти к меню «Видео \ Регулировка параметров цвета для видео ».
В меню регулировки цвета нужно перейти к графе «2. Как выполнить настройки цвета » и поставить переключатель «С настройками NVIDIA ». Выбрав данные параметры, у вас появится возможность регулировки четырех свойств, среди которых яркость дисплея . Чтобы увеличить или уменьшить яркость дисплея, перетяните ползунок к плюсу или к минусу и вы увидите, как меняется подсветка экрана.
Такие программы, которые регулируют освещение экрана с помощью драйвера видеоадаптера, также есть у производителей видеокарт Intel и AMD .
Также в просторах сети вы можете найти множество программ, которые регулируют подсветку дисплея. Все подобные программы работают через обращение к драйверу видеоадаптера. То есть, по сути, они делают то, что вы можете сделать в панели управления видеокарты (в нашем случае Nvidia). Наиболее интересной из всех подобных программ является F.lux . Ее главной особенностью является автоматическая регулировка подсветки дисплея , которая зависит от времени суток.
Пример регулировки подсветки ноутбука с помощью клавиши Fn
Для примера будем использовать нетбук Lenovo s110 с операционной системой Windows 7.
Для регулировки подсветки в нем используется клавиша-модификатор Fn в сочетании с клавишами управления курсором ← и → . Чтобы увеличить подсветку ноутбука Lenovo s110, необходимо использовать комбинацию клавиш Fn + → . Для понижения подсветки нужно использовать комбинацию Fn + ← .
При повышении и понижении подсветки вы увидите как меняется значение графического индикатора. За этот индикатор отвечает программа Hotkey Features .
Как видите, увеличить или уменьшить параметры освещения экрана ноутбука с помощью клавиши «Fn », довольно просто. Использовать этот пример можно и на других ноутбуках, поскольку принципы использования клавиш-модификаторов у них одинаковые.
В частности, на ноутбуках SAMSUNG NP350 сочетания клавиш:
- для увеличения яркости - Fn + F3 ;
- для уменьшения - Fn + F2 .
Ручная настройка подсветки монитора
У пользователей стационарных компьютеров параметры освещения экрана можно регулировать на самом дисплее. Для примера будем использовать монитор LG Flatron W1943SS . Чтобы отрегулировать освещение, необходимо перейти в его меню. Для этого на панели управления монитора нажмите клавишу MENU .
После этого нажмите клавишу AUTO/SET . Должно открыться окно регулировки яркости, в котором можно ее изменить.
Также хочется отметить, что настройки монитора не зависят от того, какая установлена ОС или driver. Они регулируются исключительно в мониторе. Каждый монитор от разного производителя имеет свои параметры ручной настройки . Узнать подробности регулировки параметров освещения экрана того или иного монитора можно в мануале, который комплектуется при продаже или может быть скачан в электронном виде на сайте производителя.
Подводим итог
В данном материале видно, что увеличить и уменьшить яркость дисплея в Windows 7, способен даже начинающий пользователь ПК. А мы надеемся, что наш материал поможет вам научиться менять яркость монитора компьютера.
Видео по теме
Дисплей Nextion: http://ali.pub/1xz0e2
Я покупал такой: http://ali.ski/zF01b
Для начала добавим блок получения данных с дисплея Nextion. Он называется Nextion Get Attr .
Находится данный блок в программе FLProg: Панель Nextion HMI -> Элементы -> Получить Параметр
Настройка данного блока выглядит следующим образом:
Для настройки данного блока Нужно выбрать панель с которой будем получать данные, или если создать новую панель. И выбрать как подключается данная панель к ардуино.
Ну и создадим элемент Ползунок (Slider) , пропишем ему его имя в панели Nextion и id.
Параметр, выберем (val) и выберем период опроса каждую секунду.
Все на этом настройка блока получения параметров закончена.
Настройка данного блока выглядит вот так:
Главное в этом блоке выбрать раннее созданную панель Nextion и заменить константу, на вход.
После этого нужно добавить блок Number Change который находится Базовые элементы -> Детектор изменения числа
И все это соединить по такой схеме:
После чего загрузить все в Ардуино и наслаждаться изменением яркости нашего дисплея.
Нагляднее в Видео: