Arduino
66 постов
66 постов
ИМС PT2315 (аналог TDA7315) представляет собой простой стерео аудиопроцессор, который позволяет регулировать громкость и тембр.
Основные параметры аудиопроцессора PT2315:
Напряжение питания от 6 до 10 В
Ток потребления от 30 до мА
Максимальное входное напряжение 2,5 Vrms
Коэффициент гармоник 0,07 %
Разделение каналов 85 дБ
Отношение сигнал/шум 95 дБ
Регулировка громкости от -70 до 0 дБ с шагом регулировки 1,25 дБ
Регулировка тембра (BASS, TREBLE) ±14 дБ с шагом регулировки 2 дБ
Аттенюаторы выходов (CHL, CHR) от 0 до 30 дБ с шагом регулировки 1,25 дБ
Управление I2C
Библиотека — https://github.com/liman324/PT2315.git
Тестовый скетч:
#include <Wire.h>
#include <PT2315.h>
PT2315 pt;
void setup() {
Serial.begin(9600);
delay(600);
audio();
}
void loop() { }
void audio(){
pt.set_volume(0); // int 0...56 === 0...-70 dB step 1.25 dB
pt.set_att_l(0); // int 0...24 === 0...-30 db step 1.25 dB
pt.set_att_r(0); // int 0...24 === 0...-30 db step 1.25 dB
pt.set_loudness(1); // bool 0...1 = on...off
pt.setBass(0); // int -7...+7 === -14...+14 dB step 2 dB
pt.setTreble(7); // // int -7...+7 === -14...+14 dB step 2 dB
}
На базе Adruino Nano используя аудиопроцессор PT2315 можно собрать простой регулятор громкости и тембра.
Регулятор громкости позволяет регулировать громкость, тембр НЧ, тембр ВЧ и баланс, так же поддерживает функцию MUTE.
ИК пульт дублирует работу энкодера и кнопу MUTE. Для управления регулятором подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:
#define IR2 0x2FDB24D // button encoder
#define IR3 0x2FDF00F // mute
#define IR4 0x2FD906F // >>>
#define IR5 0x2FDF20D // <<<
Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.
На рисунке показана схема простого индикатора уровня звукового сигнала (VU meter) имитирующего работу стрелочного индикатора. На входы А0 подается звуковой сигнал через резисторы номиналом 4,7 кОм. Индикатор уровня имеет 90 ступеней, содержит шкалу в дБ и %.
0.96′ I2C 128X64 OLED
В OLED дисплее отсутствует дополнительный слой подсветки всей поверхности экрана. Каждый пиксел, формирующий изображение, испускает самостоятельное свечение. При этом картинка получается яркой и контрастной.
Управление OLED дисплеем в данном примере осуществляется при помощи шины I2C.
Параметры дисплея SSD1306:
Технология дисплея: OLED
Разрешение дисплея: 128 на 64 точки
Диагональ дисплея: 0,96 дюйма
Угол обзора: 160°
Напряжение питания: 2.8 В ~ 5.5 В
Мощность: 0,08 Вт
Габариты: 27.3 мм х 27.8 мм х 3.7 мм
Скетч содержит ряд настроек которые можно изменить:
#define GAIN 100 — уровень усиления
#define STEP 3 — плавность хода стрелки (от 1 до 9, чем больше число тем выше скорость стрелки)
#define LOW_SOUND 100 — уровень нуля сигнала (устранение ложного срабатывания стрелки при отсутствии аудиосигнала)
#define MAX_SOUND 600 — уровень максимального сигнала (при максимальном уровне сигнала стрелка должна доходить до +3 дБ)
Последние три параметра можно не менять, достаточно установить уровень усиления сигнала.
Скетч - http://rcl-radio.ru/?p=128914
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами.
АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ. Так имеет два выхода стабилизированного тока для питания термометров сопротивления.
Входное напряжение АЦП ограничено напряжением опорного источника питания которое может иметь значения 1,25 или 2,5 В. В данной статье рассмотрен пример использования внутреннего источника опорного напряжения которое имеет значение 1,17 В.
АЦП имеет три дифференциальных входа, вход IN3 может использоваться как вход для подачи внешнего опорного напряжения. Входы АЦП могут работать в дифференциальном и несимметричном режиме.
Схема подключения к Arduino
Характеристики AD7793:
Напряжение питания цифровое от 2,7 до 5,25 В
Напряжение питания аналоговое от 2,7 до 5,25 В
Эффективное разрешение до 23 бит
Ток потребления 400 мкА
Ток потребления в режиме ожидания не более 1 мкА
Частота измерения от 4,17 Гц до 500 Гц
3 дифференциальных входа
Внутренний источник опорного напряжения 1.17 ± 0.01%
Режим измерения напряжения аналогового питания
Встроенный датчик температуры (точность ±2°С, необходима калибровка)
Самокалибровка шкалы измерения и нуля
Два источника тока для питания датчиков
Встроенный программируемый усилитель входного сигнала с множителем от 1 до 128
Разрешение в зависимости от множителя входного усилителя (bit) и режима работы входа (Uref = 2.5 V)
несимметричный (дифференциальный) вход
Разрешение в зависимости от множителя входного усилителя (мкВ) (Uref = 2.5 V)
Управление АЦП 4-проводное SPI, используются пины CS, DOUT, DIN, SCLK. Режим работы шины SPI показаны на рисунках (чтение/запись)
В режиме записи данных в регистр сигнал разрешения работы CS необходимо перевести низкий уровень, далее подавать синхроимпульсы SCLK одновременно с данными DIN, запись битов происходит на восходящем фронте синхроимпульса.
При чтении после перевода сигнала разрешения работы CS в низкий уровень необходимо дождаться сигнала готовности АЦП, как только уровень DOUT/RDY станет низким, можно считывать данные. Считывание бита происходит на восходящем фронте синхроимпульса.
Управление АЦП осуществляется через несколько регистров, некоторые из них доступны для записи и чтения, другие только для чтения:
Communications Register During a Write Operation — регистр связи (Write)
При записи или чтении регистров сначала необходимо воспользоваться регистром связи. В нем задается адрес для чтения или записи последующего регистра.
Status Register During a Read Operation — регистр состояния (Read)
RDY — бит готовности АЦП к считываю данных
ERR — ошибка считывания
0/1 — тип чипа (AD7792/AD7793)
CH0…CH2 — индикатор активного входа
Mode Register — регистр режима (Raad/Write)
16-и битный регистр содержит основные настройки работы АЦП
U/B — дифференциальный / несимметричный вход
G0…G2 — коэффициент усиления усилителя
BUF — буферизация
REFSEL — выбор внутреннего или внешнего источника опорного напряжения
Data Register — регистр данных (Read)
24-х битный регистр данных, доступен только для чтения
ID Register — Идентификационный регистр (Read)
Идентификационный номер для AD7792/AD7793 сохраняется в реестре идентификаторов.
IO Register — (Raad/Write)
Регистр для управления источниками тока.
OFFSET Register — регистр смещения (Raad/Write)
24-х битный регистр, содержит коэффициент смещения шкалы.
FULL-SCALE Register — масштабный регистр (Raad/Write)
24-х битный регистр, содержит калибровочные коэффициенты шкалы.
Ниже показан пример скетча позволяющий провести измерения напряжения аналогового питания, напряжение подаваемое на вход 1 с множителем 16 работающего в дифференциальном режиме, а так же напряжение встроенного датчика температуры.
Читать дальше - http://rcl-radio.ru/?p=128932
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Более подробно об АЦП AD7793 можно узнать из — http://rcl-radio.ru/?p=128932
На базе АЦП AD7793 можно сделать высокоточный измеритель температуры термопары. Для примера в измерителе температуры будут применены наиболее популярные характеристики термопар ТХА и ТХК.
Термопара ТХА
Тип: К
Обозначение: ТХА
Материал: хромель/алюмель
Рабочая температура: -270…+1372°С
Термопара ТХК
Тип: L
Обозначение: ТХК
Материал: хромель/копель
Рабочая температура: -200…+800°С
Для компенсации температуры холодного спая будет использован цифровой датчик температуры DS18B20. Для предотвращения саморазогрева датчика, обращение микроконтроллера к датчику будет проводится один раз в 10 секунд. В состав измерителя входит плата разработчика Arduino Nano, дисплей LCD1602 с модулем I2C, одна тактовая кнопка, датчик температуры (моуль) DS18B20, АЦП AD7793.
Для точного измерения температуры термопары подсоединение термопары к измерителю должно быть через термокомпенсационный провод с характеристикой аналогичной термопаре.
Схема измерителя термопары
Температура термопары с учетом температуры окружающей среды
ЭДС термопары (без учета температуры окружающей среды)
Тип термопары (выбор кнопкой ХА/ХК)
Температура окружающей среды
Выбранный тип термопары заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Добавив в схему несколько простых компонентов можно сделать простой терморегулятор.
При помощи энкодера можно настроить температуру регулирования, а кнопкой энкодера выбрать тип термопары.
Температура термопары с учетом температуры окружающей среды
ЭДС термопары (без учета температуры окружающей среды)
Индикатор нагрева
Тип термопары (выбор кнопкой энкодера)
Температура регулирования
Выбранный тип термопары и температура регулирования заносится в EEPROM. В настройке и калибровке измеритель термопары не нуждается, единственный параметр который может нуждаться к корректировке это гистерезис: float gis=0.2; // гистерезис 0,2 гр.ЦельсияСкетчи - http://rcl-radio.ru/?p=128968
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Перед прочтением статьи рекомендую ознакомится с двумя первыми статьями про АЦП AD7793:
В статье AD7793 + термопара (Arduino) был рассмотрен пример создания простого но высокоточного измерителя-регулятора температуры с применением в качестве датчика термопару. Большая разрядность АЦП AD7793 и линейность характеристики позволяет весьма точно измерять постоянное напряжение которое не превышает единиц мВ. Ранее описанный измеритель-регулятор преобразует ЭДС термопары в температуру с погрешностью не более ±0,2…±0,3 °С на всем диапазоне, а погрешность измерения ЭДС термопары не превышает 5…10 мкВ.
В этой статье будет рассмотрен пример использования АЦП AD7793 в качестве измерителя-регулятора с использованием датчика термометра сопротивлений.
Для примера была выбрана номинальная статическая характеристика (НСХ) 100П, при желании можно добавить в измеритель-регулятор еще несколько номинальных статических характеристик (НСХ).
Измеритель-регулятор с датчиком термосопротивления не будет отдельным уст-вом, он дополнит уже ранее описанный в термометр-регулятор с использованием в качестве датчиков термопары ТХА и ТХК.
АЦП AD7793 содержит два программируемых источника тока номиналами 10 мкА, 210 мкА, 1 мА. Токовые выходы IOT1 и IOT2 могут независимо работать друг от друга, а источники тока могут быть направлены в один токовый выход.
IO REGISTER управляет работой токовых выходов и источника тока.
Биты IEXCDIR1 IEXCDIR0 позволяю выбрать режим работы токовых выходов, а биты IEXCEN1 IEXCEN0 задают номиналы тока.
В рассматриваемом примере оба источника тока в 1 мА перенаправлены на выход IOT1, что в сумме дает ток 2 мА. Ток подается на термосопротивление, на котором вход АЦП IN2 измеряет падение напряжения, исходя из полученного значения вычисляется сопротивление термометра сопротивления и программно высчитывается температура.
Для уменьшения влияния измерительных проводов используется 4-х проводная схема подключения, при этом пары измерительных проводов соединяются непосредственно на клеммах термосопротивления.
Управление измерителем-регулятором очень простое, кнопка энкодера переключает тип датчика (ХА, ХК, 100П), а поворот ручки энкодера изменяет температуру регулирования. Выбранный последним тип датчика и температура регулирования заносятся в энергонезависимую память.
Внутренние источники тока имею отличную стабильность, но не очень высокую точность выходного тока, поэтому для получения высокой точности измерения температуры при использовании термосопротивления необходимо произвести калибровку.
/// калибровка
float gis=0.2;
float i_1ma = 1.0137;
float r_0_kall = 0.29;
Гистерезис gis общий для всех датчиков, i_1ma калибровочный коэффициент источника тока, фактически это точное значение тока который выдает один источник тока, настраивать этот коэффициент необходимо при подключении ко входу сопротивления 300…400 Ом, меняя коэффициент необходимо добиться максимально точных показаний омметра измерителя-регулятора. r_0_kall — калибровка нуля, для его определения необходимо ко входу подключить сопротивление номиналом 1…5 Ом, а r_0_kall это погрешность измерения. Например, если Вы подключили ко входу сопротивление 1 Ом, а на дисплее Вы видите показание 0,71 Ом, то калибровочный коэффициент нуля будет 0,29. Для точного определения калибровочных значений необходимо повторить ранее описанную процедуру калибровки 2-3 раза.
Температура измеренная термометром сопротивления
Омметр
Индикатор нагрева
Тип датчика
Температура регулирования
Результаты измерений
На вход измерителя регулятора подключен магазин сопротивлений МСР-60М (0,02%)
300 Ом
200 Ом
100 Ом
50 Ом
Тест точности измерения сопротивления и точности преобразования сопротивления в температуру
Как видно из таблицы максимальная погрешность при измерении температуры не превышает 0,13 °С при диапазоне 1050 °С (-200…+850 °С), что дает относительную погрешность в 0,0123%. При измерении сопротивления в диапазоне от 0 до 400 Ом относительная погрешность не превысила 0,01%. Полученная погрешность будет немного выше, так как магазин сопротивлений имеет класс точности 0,02%.
Скетч - http://rcl-radio.ru/?p=128979
AD7793 — малошумящий 24-разрядный сигма-дельта АЦП с тремя дифференциальными аналоговыми входами. АЦП AD7793 предназначен для высокоточного измерения постоянного напряжения, может применяться для измерения напряжения термопар и других датчиков с выходным напряжением в несколько единиц или десятков мВ.
Перед прочтением статьи рекомендую ознакомится с тремя первыми статьями про АЦП AD7793:
На базе AD7793 с использованием Arduino Nano можно собрать миллиомметр с диапазоном измерения от 0,0000 до 32,000 Ом.
Схема миллиомметра
Вход АЦП сконфигурирован как несимметричный вход, предусилитель АЦП имеет коэффициент усиления равный 1, частота опроса 4,17 Гц.
Для точного измерения необходимо иметь эталонное сопротивление 100 Ом (манганин) через которое подается ток на измеряемое сопротивление, от точности эталонного сопротивления зависит точность прибора. Если нет возможности очень точно изготовить (намотать из манганиновой проволоки) эталонное сопротивление, то откалибровать прибор можно при помощи другого эталонного сопротивления 1…30 Ом с классом точности не менее 0.02 %.
Для упрощения конструкции прибора напряжение на эталонное сопротивление 100 Ом подается от источника питания +5 В Arduino, которое также является аналоговым напряжением питания АЦП AD7793, а так как в АЦП имеется возможность контроля этого напряжения, то оно становится опорным, так как перед каждым замером сопротивления производится измерения аналогового напряжения питания АЦП которое также подается на эталонное сопротивление.
Для получения большой точности при измерении сопротивлений миллиомметр нуждается в калибровке:
#define R_100 99.969
#define K_0 0.0015
#define K_AVDD 6.065
K_AVDD — калибровочный коэффициент напряжения подаваемого на эталонное сопротивление, так как оно является аналоговым напряжением питания АЦП и имеется возможность его измерять, то необходимо очень точно произвести калибровку результата его измерения. Для этого измерьте напряжение подаваемое на эталонное сопротивление, откройте монитор порта и сравните его с измеренным значением.
AVDD — напряжением аналогового питания АЦП (выделено красным)
Измените K_AVDD таким образом, чтобы напряжение подаваемое на эталонное сопротивление соответствовало напряжению AVDD в мониторе порта.
R_100 — точное значение эталонного сопротивления.
K_0 — калибровка нуля. Замкните вход омметра, если показания не равны нулю, то укажите в K_0 погрешность нуля.
Результаты измерений
Скетч - http://rcl-radio.ru/?p=128992
Графический дисплей 12864b v2.0 (ST7920) представляет собой ЖК-матрицу с разрешением в 128 на 64 точек, предназначен для вывода графической и текстовой информации. Поддерживает 8/4-битный параллельный режим работы и поставляется вместе с микросхемой контроллера/драйвера ST7290. Также дисплей поддерживает последовательный режим работы по шине PSB (программный SPI), именно в этом режиме будет работать описанный в этой статье дисплей.
Основное напряжение питания +5 В, дополнительное 3,3 В используется для подсветки дисплея. Рассматриваемый в статье дисплей на плате имеет регулятор контрастности, но может поставляться и без него, тогда на вход Vo подается напряжение с потенциометра (см. схему).
Встроенный потенциометр
Подключение дисплея к Arduino Nano:
При работе с дисплее можно использовать библиотеку U8glib , в папке библиотеки много различных примеров скетчей. Установить библиотеку можно через менеджер библиотек Arduino IDE.
Пример 1
#include <U8glib.h>
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&i...
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов
void draw() {
u8g.setRot180();
u8g.setFont(u8g_font_unifont);
u8g.drawStr(15, 12, "RCL-RADIO.RU");
u8g.drawLine(0, 15, 128, 15);
u8g.setFont(u8g_font_6x12);
u8g.drawStr(45, 25, "ST7920");
u8g.setColorIndex(1);
u8g.drawBox(0, 35, 128, 20);
u8g.setFont(u8g_font_unifont);
u8g.setColorIndex(0);
u8g.drawStr(35, 50, "ARDUINO");
u8g.setColorIndex(1);
u8g.setFont(rus6x10);
u8g.drawStr(45, 64, "ПРИВЕТ");
}
void setup() { }
void loop() {
u8g.firstPage();
do { draw(); }
while( u8g.nextPage() );
}
Для поддержки русского шрифта скачайте архив шрифта и распакуйте его в папку со скетчем.
Пример 2
Ниже показан пример создания простых часов, в примере используется модуль часов реального времени DS3231. Время устанавливается по времени компиляции.
Для поддержки семисегментных цифр скачайте архив шрифта и распакуйте его в папку со скетчем.
Скетч - http://rcl-radio.ru/?p=129018
Дисплей VDF1602 (16T202DA1E) выполнен на базе вакуумно-люминесцентного индикатора, который может отображать ASCII символы в 2 строки (16 знаков в 1 строке) каждый символ в виде матрицы 5х7 пикселей.
Дисплей 16T202DA1E программно полностью совместим с дисплеем LCD1602 контроллере HD44780, поэтому использует стандартную библиотеку LiquidCrystal которая интегрирована в Arduino IDE.
Для правильной работы базе вакуумно-люминесцентного индикатора требуется два источника питания, это питание сеток и анодов напряжением 12-27 В и питание катода (нити накала) переменным напряжением от 1,2 до 5 В (в зависимости от типа ВЛИ). В дисплее 16T202DA1E все необходимые источники для правильной работы ВЛИ уже встроены в плату, поэтому для питания дисплея Вам понадобится только одно напряжение в 5 В. Так же в отличии от LCD1602 в дисплее 16T202DA1E нет вывода Vo (регулировка контрастности), что делает подключение дисплея к Arduino Nano еще проще.
Распиновка дисплея
Как ранее отмечалось дисплей полностью совместим с библиотекой LiquidCrystal, но в дисплее имеется дополнительно программная регулировка яркости свечения индикатора которую так же можно использовать при помощи библиотеки LiquidCrystal
Ниже показан тестовый скетч который поддерживает ступенчатую регулировку яркости (25, 50, 75, 100 %).
#include <LiquidCrystal.h> /* подключаем встроенную в Arduino IDE библиотеку для дисплея LCD 16x2 */
LiquidCrystal lcd(12, 11, 5, 6, 7, 8); /* номер вывода дисплея(вывод Arduino): RS(12),E(11),D4(5),D5(6),D6(7),D7(8) */
void setup() {
lcd.begin(16, 2);// указываем тип дисплея LCD 16X2
Brightness(100);
lcd.setCursor(1,0); // положение курсора - нулевая строка, первый символ lcd.print("HELLO!!!");// вывод на экран
delay(1000);
lcd.noDisplay();
delay(1000);
lcd.display();
}
void loop() {
lcd.setCursor(0,0); // положение курсора - нулевая строка, первый символ
lcd.print("RCL-RADIO.RU");// вывод на экран
lcd.setCursor(0,1);// положение курсора - первая срока, первый символ
lcd.print("ARDUINO ");// ввод на экран
delay(500);// пауза 500 мс
for (int n=25;n<=100;n+=25){
lcd.setCursor(9,1);
lcd.print("BR ");
lcd.print(n);
lcd.print("% ");
Brightness(n);delay(1000);
} }
void Brightness(byte brig){
switch(brig){
case 25 : lcd.command(0b00101011);break;
ase 50 : lcd.command(0b00101010);break;
case 75 : lcd.command(0b00101001);break; c
ase 100 : lcd.command(0b00101000);break;
} }
Для регулировки яркости используется дополнительная функция управления дисплеем:
Brightness(byte brig);
Переменная brig может иметь значение 25, 50, 75 и 100 (% яркости)
Примеры использования дисплея 16T202DA1E
Простые часы DS3231
Простые часы DS3231 с кнопками коррекции времени
Простые часы DS3231 + BMP280 (с кнопками коррекции времени)
Индикатор уровня звукового сигнала (VU метр)
Скетчи - http://rcl-radio.ru/?p=129034