В этом проекте мы собираемся связать LDR с микроконтроллером ATMEGA8, и с его помощью мы сможем измерить ИНТЕНСИВНОСТЬ СВЕТА в этой области. В ATMEGA8 мы собираемся использовать 10-битный АЦП (аналого-цифровое преобразование) для измерения интенсивности света.
Am LDR - это преобразователь, который меняет свое сопротивление, когда СВЕТ падает на его поверхность. Датчик LDR доступен в различных размерах и формах.
LDR изготавливаются из полупроводниковых материалов, что обеспечивает им светочувствительные свойства. Используется много типов материалов, но самым популярным является сульфид кадмия (CdS). Эти LDR или ФОТОРЕИСТОРЫ работают по принципу « фотопроводимости ». Этот принцип говорит о том, что всякий раз, когда свет падает на поверхность LDR (в данном случае), проводимость элемента увеличивается или, другими словами, сопротивление LDR уменьшается, когда свет падает на поверхность LDR. Это свойство уменьшения сопротивления для LDR достигается благодаря тому, что это свойство полупроводникового материала, используемого на поверхности. LDR используются в большинстве случаев для обнаружения наличия света или для измерения интенсивности света.
Существуют разные типы LDR, как показано на рисунке выше, и каждый имеет разные характеристики. Обычно LDR будет иметь 1 МОм - 2 МОм в полной темноте, 10-20 кОм при 10 люксах, 2-5 кОм при 100 люксах. Типичный график сопротивления LUX LDR показан на рисунке.
Как показано на рисунке выше, сопротивление между двумя контактами датчика уменьшается с увеличением интенсивности света или проводимость между двумя контактами датчика увеличивается.
Теперь для преобразования этого изменения сопротивления в изменение напряжения мы будем использовать схему делителя напряжения. В этой резистивной сети мы имеем одно постоянное сопротивление и другое переменное сопротивление. Как показано на рисунке, R1 здесь - постоянное сопротивление, а R2 - датчик FORCE, который действует как сопротивление.
Измеряется середина ветви. Когда сопротивление R2 изменяется, Vout изменяется вместе с ним линейно. Таким образом, у нас есть напряжение, которое изменяется с весом.
Теперь важно отметить, что входной сигнал, принимаемый контроллером для преобразования АЦП, составляет всего 50 мкА. Этот эффект нагрузки резистивного делителя напряжения важен, так как ток, потребляемый из Vout делителя напряжения, увеличивает процент ошибки, а пока нам не нужно беспокоиться об эффекте нагрузки.
Здесь мы возьмем два резистора и сформируем схему делителя так, чтобы при напряжении Vin 25 В мы получили выходное напряжение 5 Вольт. Поэтому все, что нам нужно сделать, это умножить значение Vout на «5» в программе, чтобы получить реальное входное напряжение.
Составные части
Аппаратное обеспечение: ATMEGA8, блок питания (5 В), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), конденсатор 100 мкФ, конденсатор 100 нФ (5 шт.), Резистор 10 кОм, LDR (светозависимый резистор).
Программное обеспечение: Atmel studio 6.1, прогисп или flash magic.
Принципиальная схема и объяснение работы
В цепи PORTD ATMEGA8 подключен к LCD порту данных. В LCD 16 * 2 всего 16 контактов, если есть подсветка, если подсветки нет, то будет 14 контактов. Можно включить или оставить контакты подсветки. Теперь в 14 контактах 8 контактов данных (7-14 или D0-D7), 2 контакта источника питания (1 и 2 или VSS и VDD или gnd & + 5v), 3- й контакт для контроля контрастности (VEE-контролирует толщину символов. показаны) и 3 контрольных штифта (RS, RW и E)
В схеме вы можете заметить, что я взял только два контрольных контакта. Бит контраста и READ / WRITE используются нечасто, поэтому их можно замкнуть на массу. Это переводит ЖК-дисплей в режим максимальной контрастности и чтения. Нам просто нужно управлять контактами ENABLE и RS, чтобы отправлять символы и данные соответственно.
Эти соединения для LCD приведены ниже:
PIN1 или VSS ------------------ заземление
PIN2 или VDD или VCC ------------ + 5В питание
PIN3 или VEE --------------- земля (дает максимальный контраст лучше всего для новичков)
PIN4 или RS (выбор регистра) --------------- PB0 uC
PIN5 или RW (чтение / запись) ----------------- земля (переводит ЖК-дисплей в режим чтения, упрощает коммуникацию для пользователя)
PIN6 или E (Включить) ------------------- PB1 uC
PIN7 или D0 ----------------------------- PD0 uC
PIN8 или D1 ----------------------------- PD1 uC
PIN9 или D2 ----------------------------- PD2 uC
PIN10 или D3 ----------------------------- PD3 uC
PIN11 или D4 ----------------------------- PD4 uC
PIN12 или D5 ----------------------------- PD5 uC
PIN13 или D6 ----------------------------- PD6 uC
PIN14 или D7 ----------------------------- PD7 uC
На схеме вы можете видеть, что мы использовали 8-битную связь (D0-D7), однако это не обязательно, мы можем использовать 4-битную связь (D4-D7), но с 4-битной коммуникационной программой становится немного сложнее. Итак, исходя из простого наблюдения из приведенной выше таблицы, мы подключаем 10 контактов ЖК-дисплея к контроллеру, в котором 8 контактов являются контактами данных и 2 контакта для управления.
Напряжение на R2 не является полностью линейным; это будет шумно. Чтобы отфильтровать шум, на каждом резисторе в схеме делителя устанавливаются конденсаторы, как показано на рисунке.
В ATMEGA8 мы можем подавать аналоговый вход на любой из ЧЕТЫРЕХ каналов PORTC, неважно, какой канал мы выберем, поскольку все они одинаковы. Мы собираемся выбрать канал 0 или PIN0 PORTC. В ATMEGA8, АЦП имеет разрешение 10 бит, так что контроллер может определить минимальное изменение Vref / 2 ^ 10, так что, если опорное напряжение 5V мы получаем цифровой выходной приращение для каждого 5/2 ^ 10 = 5 мВ. Таким образом, на каждые 5 мВ приращения на входе у нас будет приращение на единицу на цифровом выходе.
Теперь нам нужно настроить регистр АЦП исходя из следующих условий:
1. Прежде всего нам нужно включить функцию ADC в ADC.
2. Вот и получим максимальное входное напряжение для преобразования АЦП + 5В. Таким образом, мы можем установить максимальное значение или ссылку АЦП на 5 В.
3. Контроллер имеет функцию преобразования триггера, которая означает, что преобразование АЦП происходит только после внешнего триггера, поскольку мы не хотим, чтобы нам нужно было настраивать регистры для работы АЦП в непрерывном автономном режиме.
4. Для любого АЦП частота преобразования (аналоговое значение в цифровое значение) и точность цифрового выхода обратно пропорциональны. Поэтому для большей точности цифрового вывода мы должны выбирать меньшую частоту. Для обычных часов АЦП мы устанавливаем предварительную продажу АЦП на максимальное значение (2). Поскольку мы используем внутренние часы с частотой 1 МГц, частота АЦП будет (1000000/2).
Это единственные четыре вещи, которые нам нужно знать, чтобы начать работу с ADC.
Все вышеупомянутые четыре функции устанавливаются двумя регистрами,
КРАСНЫЙ (ADEN): этот бит должен быть установлен для включения функции ADC ATMEGA.
СИНИЙ (REFS1, REFS0): Эти два бита используются для задания опорного напряжения (или максимальное входное напряжение, мы собираемся дать). Поскольку мы хотим иметь 5V опорного напряжения, REFS0 должен быть установлен, в таблице.
ЖЕЛТЫЙ (ADFR): этот бит должен быть установлен для непрерывной работы АЦП (режим автономной работы).
РОЗОВЫЙ (MUX0-MUX3): эти четыре бита указывают входной канал. Поскольку мы собираемся использовать ADC0 или PIN0, нам не нужно устанавливать какие-либо биты, как указано в таблице.
КОРИЧНЕВЫЙ (ADPS0-ADPS2): эти три бита предназначены для установки предскалярного значения для АЦП. Поскольку мы используем прескаляр, равный 2, мы должны установить один бит.
ТЕМНО-ЗЕЛЕНЫЙ (ADSC): этот бит устанавливается для АЦП, чтобы начать преобразование. Этот бит можно отключить в программе, когда нам нужно остановить преобразование.
Таким образом, с сопротивлением LDR на ЖК-экране 16x2 мы можем сопоставить его с графиком LUX для получения интенсивности света.