В этом руководстве мы собираемся соединить датчик FLEX с микроконтроллером ATMEGA8. В ATMEGA8 мы собираемся использовать 10-битный АЦП (аналого-цифровое преобразование) для выполнения этой работы. Теперь АЦП в ATMEGA не может принимать на входе более + 5В.
Что такое датчик изгиба?
Датчик FLEX представляет собой преобразователь, который изменяет свое сопротивление, когда его форма изменяется. Это показано на рисунке ниже.
Этот датчик используется для определения изменений линейности. Таким образом, когда датчик FLEX изгибается, сопротивление резко увеличивается. Это показано на рисунке ниже.
Теперь для преобразования этого изменения сопротивления в изменение напряжения мы будем использовать схему делителя напряжения. В этой резистивной сети мы имеем одно постоянное сопротивление и другое переменное сопротивление. Как показано на рисунке ниже, R1 здесь - постоянное сопротивление, а R2 - датчик FLEX, который действует как сопротивление. Измеряется середина ветви. Когда сопротивление R2 изменяется, Vout изменяется вместе с ним линейно. Таким образом, у нас есть напряжение, которое изменяется линейно.
Теперь важно отметить, что входной сигнал, принимаемый контроллером для преобразования АЦП, составляет всего 50 мкА. Этот эффект нагрузки резистивного делителя напряжения важен, поскольку ток, потребляемый из Vout делителя напряжения, увеличивает процент ошибки, пока нам не нужно беспокоиться об эффекте нагрузки.
Мы возьмем два резистора и сформируем схему делителя так, чтобы для напряжения Vin 25 В мы получили выходное напряжение 5 Вольт. Поэтому все, что нам нужно сделать, это умножить значение Vout на «5» в программе, чтобы получить реальное входное напряжение.
Необходимые компоненты
АППАРАТНОЕ ОБЕСПЕЧЕНИЕ : ATMEGA8, блок питания (5 В), ПРОГРАММАТОР AVR-ISP, JHD_162ALCD (16x2LCD), конденсатор 100 мкФ, конденсатор 100 нФ (5 шт.), Резистор 100 кОм.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Atmel studio 6.1, progisp или flash magic.
Принципиальная схема и объяснение работы
В схеме PORTD ATMEGA8 подключен к LCD порту данных. В ЖК-дисплее 16x2 всего 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-соединения с ATmega8 следующие:
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 - D4 uC
PIN12 или D5 - PD5 uC
PIN13 или D6 - PD6 uC
PIN14 или D7 - PD7 uC
В схеме вы можете видеть, что мы использовали 8-битную связь (D0-D7), однако это не обязательно, мы можем использовать 4-битную связь (D4-D7), но с 4-битной коммуникационной программой становится немного сложнее, поэтому мы просто выбрали 8-битную общение. (Также проверьте это руководство: ЖК-дисплей 16x2, взаимодействующий с микроконтроллером AVR)
Итак, исходя из простого наблюдения из приведенной выше таблицы, мы подключаем 10 контактов ЖК-дисплея к контроллеру, в котором 8 контактов - это контакты данных, а 2 контакта - для управления.
Напряжение на R2 не является полностью линейным; это будет шумно. Чтобы отфильтровать шум, на каждом резисторе в схеме делителя устанавливаются конденсаторы, как показано на рисунке.
Поток 1K здесь предназначен для настройки точности АЦП. Теперь поговорим об АЦП ATMEGA8.
В ATMEGA8 мы можем подавать аналоговый вход на любой из ЧЕТЫРЕХ каналов PORTC, неважно, какой канал мы выбираем, поскольку все они одинаковы, мы собираемся выбрать канал 0 или PIN0 PORTC.
В ATmega8, АЦП имеет разрешение 10 бит, так что контроллер может определить смысл как минимум смена Vref / 2 ^ 10, поэтому, если опорное напряжение 5V мы получаем цифровой приращение выходного сигнала для каждого 5/2 ^ 10 = 5mV. Таким образом, на каждые 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): этот бит устанавливается для АЦП, чтобы начать преобразование. Этот бит можно отключить в программе, когда нам нужно остановить преобразование.
Взаимодействие датчика FLEX с ATmega8 объясняется шаг за шагом в коде C, приведенном ниже.