Серия «Arduino»

LGT8F328P таймеры (Arduino)

Микроконтроллер LGT8F328P содержит 4-е таймера, Timer_1 и Timer_3 16 бит, а Timer_0 и Timer_2 8 бит.

Использование таймеров позволяет вызывать прерывание микроконтроллера для выполнения определенного фрагмента кода через заранее установленное время. Например необходимо мигать светодиодом каждую секунду, таймер будет запускать каждую секунду фрагмент кода отвечающего за мигание светодиода, в независимости от действия основной программы.

Все таймеры содержат счетный регистр TCNT который считает тактовые импульсы до определенной величины (зависит от размера), при достижении предельного числа счетчик переполняется и сбрасывается обратно в ноль. Таймер устанавливает бит флага, давая знать, что переполнение произошло, при этом вызывается прерывание.

Источником тактового сигнала для таймера/счетчика может быть как тактовый сигнал используемый для всего микроконтроллера с использованием предделителя, так и сигнал, поступающий с внешнего входа.

Для того чтобы использовать эти таймеры нужно использовать регистры настроек. Каждый таймер содержат несколько таких регистров, как именно использовать эти регистры и режимы работы таймеров будет описано в этой статье.

Режим CTC (сброс при совпадении)

Режим работы таймера CTC (сброс при совпадении) это когда в регистр OCR микроконтроллера загружается число, а счетный регистр TCNT сравнивает свое значение с числом регистра OCR и при совпадении происходит прерывание и сброс счетного регистра TCNT. При этом в обработчик прерывания исполняет помещенный в него код.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Для примера использования таймера выберем 16 битный таймер Timer_1.

Для настройки таймера в данном примере используется 3 регистра:

  • TCCR1B — Регистр управления B

  • OCR1A — Регистр сравнения А выходных данных

  • TIMSK1 — Регистр маски прерываний счетчика/таймера

Пример скетча:

void setup() {  

pinMode(12, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1B = (1 << WGM12) | n;  

OCR1A = 9999;// 0-65535  

TIMSK1 |= (1 << OCIE1A); //

_ctc = f_sys / (2 * n * (1 + OCR1A)) // 32 000 000 / (2 * 1024 * (1 + 9999)) = 1.5625 Hz interrupts();

}

void loop() {}

ISR(TIMER1_COMPA_vect){digitalWrite(12, !digitalRead(12));}

Подключите светодиод (через резистор 200 Ом) к выходу D12. После загрузки скетча светодиод начнет мигать с частотой 1,5625 Гц.

TCCR1B

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

В регистре управления используем бит WGW12 и биты CS10:CS12.

WGW12 активирует режим СТС

CS10:CS12 предделитель который делит тактовую частоту микроконтроллера

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

OCR1A

16-и битный регистр сравнения, содержит два 8-и битных регистра: OCR1AL и OCR1AH объединены для
формирования 16-разрядного OCR1A.

TIMSK1

Бит регистра TIMSK1 OCIE1A  разрешают прерывания при совпадении с A (OCR1A).

ISR(TIMER1_COMPA_vect) — функция обработчика прерывания, в нее помещается код который необходимо исполнять в режиме прерывания.

Если имеется необходимость использовать таймер для генерации импульсов (меандр), в микроконтроллере имеются выходы таймера. Для Timer_1 это выходы D9 и D10.

При совпадении регистра сравнения OCIE1A и счетного регистра состояние выхода таймера меняется на противоположное, а счетный регистр TCNT1 сбрасывается.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Ниже показан пример скетча генерации меандра, таймер работает в режиме CTC

void setup() {  

pinMode(9, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1B = (1 << WGM12) | n;  

OCR1A = 9999;// 0-65535  

TCCR1A |= (1 << COM1A0);

// f_ctc = f_sys / (2 * n * (1 + OCR1A)) // 32 000 000 / (2 * 1024 * (1 + 9999)) = 1.5625 Hz interrupts();

}

void loop() {}

Бит COM1A0 регистра TCCR1A определяет режим работы таймера. Если установлен бит COM1A0 то состояние на выходе OC1A меняется на противоположное при совпадении.

В этом примере если подключить светодиод (через резистор 200 Ом) к выходу D9, то после загрузки скетча он начнет мигать с частотой 1,5625 Гц.

Нормальный режим работы таймера

В нормальном режиме работы таймера можно использовать регистр сравнения OCR1A, при равенстве счетного регистра TCNT1 и регистра сравнения OCR1A происходит прерывание, но в отличии от режима СТС счетный регистр TCNT1 не сбрасывается, а увеличивает свое значение до максимального 65535 и только после этого происходит его сброс и новое прерывание.

Для нормальной работы этого режима в регистре масок прерывания TIMSK1 используются биты OCIE1A и TOIE1.

Бит OCIE1A разрешает прерывание по совпадению, а бит TOIE1 разрешает прерывание по переполнению.

При этом прерывания происходят два раза за один цикл заполнения счетного регистра TCNT1.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Пример скетча

void setup() {  

pinMode(12, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1B = n;  

OCR1A = 9999;// 0-65535  

TIMSK1 |= (1 << OCIE1A) | (1 << TOIE1);

interrupts();

}

void loop() {}

ISR(TIMER1_COMPA_vect){  digitalWrite(12, !digitalRead(12));  }

При обнулении счетного регистра светодиод подключенный к D12 (через резистор 200 Ом) загорается, как только значение счетного регистра станет равным значению регистра сравнения, светодиод погаснет и не будет светится пока значение счетного регистра не достигнет максимального значения.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Период работы прерывания при переполнении счетного регистра равен:

Tпереполнения = 1/(f sys / (2 * N * 65536))

Период работы прерывания при совпадении равен:

Tсовпадения = 1/(f_sys / (2 * n * (1 + OCR1A)))

В скетче установлен предделитель на 1024, значит:

Tпереполнения = 1/(32 000 000 / (2 * 1024 * 65536)) = 4,19424 с

Период работы прерывания при совпадении при OCR1A = 9999:

Tсовпадения = 1/(32 000 000 / (2 * 1024 * (1 + 9999))) = 0,64 с

Если например не использовать режим работы таймера прерывание и сбор при переполнении, то подключенный светодиод к D12 (через резистор 200 Ом), будет загораться при совпадении значений счетного регистра и регистра сравнения, а после переполнения счетного регистра и новом совпадении значений счетного регистра и регистра сравнения гаснуть.

void setup() {  

pinMode(12, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1B = n;  

OCR1A = 20000;// 0-65535  

TIMSK1 |= (1 << OCIE1A);

interrupts();

}

void loop() {}

ISR(TIMER1_COMPA_vect){  digitalWrite(12, !digitalRead(12));  }

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Если например не использовать режим работы таймера при совпадении значений счетного регистра и регистра сравнения, то подключенный светодиод к D12 (через резистор 200 Ом), будет загораться при переполнении счетного регистра, а после гаснуть при новом переполнении счетного регистра.

void setup() {  

pinMode(12, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1B = n;  

TIMSK1 |= (1 << TOIE1);

interrupts();

}

void loop() {}

ISR(TIMER1_OVF_vect){  digitalWrite(12, !digitalRead(12));  }

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

В нормальном режиме работы таймера можно использовать выход таймера, например если к D9 (через резистор 200 Ом) подключить светодиод, то при совпадении значений счетного регистра и регистра сравнения подключенный светодиод будет загораться и гаснуть при новом при совпадении значений счетного регистра и регистра сравнения.

Если установлен бит COM1A0 то состояние на выходе OC1A (D9) меняется на противоположное при совпадении.

void setup() {  

pinMode(D9, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 5;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1A = (1 << COM1A0);  

TCCR1B = n;  

OCR1A = 9999;

interrupts();

}

void loop() {}

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Режим PWM (ШИМ)

Широтно-импульсная модуляция  (PWM) — процесс управления мощностью методом пульсирующего включения и выключения потребителя энергии.

Основной причиной применения ШИМ является стремление к повышению КПД при построении вторичных источников питания электронной аппаратуры и в других узлах, например, ШИМ используется для регулировки яркости подсветки LED-мониторов и дисплеев в телефонах, КПК и т. п.

По сути выходной PWM сигнал в LGT8F328P это импульсный сигнал с изменяемой длительностью импульсов. Если взять период следования импульсов за 100 %, то длительность импульсов может меняться от 0 до 100%, а так как Timer_1 16 бит, то заполнение длительности импульса периода следования импульса может меняться от 0 до 65535 значений, то есть от 0 до 100%.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Режим FPWM

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Режим работы FPWM определяется несколькими регистрами, а в частности регистром захвата ICR1 и регистром сравнения OCR1A.

В регистр ICR1 записывается значение которое сравнивается с счетным регистром TCNT1 и при равенстве происходит изменение состояния  на выводе OC1A (D9), в данном случае появляется лог. 1, в регистре ICR1 указываем максимальное значение (зависит от разрядности).

В регистр OCR1A записывается значение которое сравнивается с счетным регистром TCNT1 и при равенстве происходит изменение состояния  на выводе OC1A (D9), в данном случае появляется лог. 0.

void setup() {  

pinMode(D9, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 1;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1A = (1 << COM1A1) | (1 << WGM11);  

TCCR1B = (1 << WGM13) | (1 << WGM12) | n;  

ICR1 = 65535;  

OCR1A = 5000;

interrupts();

}

void loop() {}

Бит COM1A1 делает активным выход OC1A (D9), а биты WGM11 WGM12 WGM13 активируют режим FPWM.

Частота PWM в этом режиме определяется:

Fpwm = f sys / (N * (1 + ICR1))

Если предделитель установлен на 1, а регистр ICR1 имеет значение 65535, то:

Fpwm = 32 000 000 / (1 * (1 + 65535)) = 488,28125 Hz

Аналогично можно использовать выход Timer_1 OC1B (D10), использование которого определяет бит COM1B1, при этом используется регистр сравнения OCR1B.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

void setup() {  

pinMode(D10, OUTPUT);  

noInterrupts();  

TCNT1 = 0;  

TCCR1A = 0;  

TCCR1C = 0;  

byte n = 1;  

// clksys / 1 = 1  

// clksys / 8 = 2  

// clksys / 64 = 3  

// clksys / 256 = 4  

// clksys / 1024 = 5  

// [CS12:CS10]  

TCCR1A = (1 << COM1B1) | (1 << WGM11);  

TCCR1B = (1 << WGM13) | (1 << WGM12) | n;  

ICR1 = 65535;  

OCR1B = 1000;

interrupts();

}

void loop() {}

Так же в этом режиме PWM имеется возможность инверсии выходного сигнала. Биты COM1A1 COM1A0 определяют режим работы выходного сигнала.

LGT8F328P таймеры (Arduino) Arduino, Электроника, Программирование, Длиннопост

Читать дальше...

Показать полностью 13

NTP8212 — цифровой усилитель 2х20 Вт (Arduino)

S/PDIF (Sony/Philips Digital Interface) – распространенный и стандартизированный интерфейс, предназначенный для передачи цифрового звука между доступными компонентами, звуковыми картами, ресиверами и аудиоаппаратурой.

I2S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств. Применяется для передачи PCM-аудиоданных между интегральными схемами в электронном устройстве. Шина I2S передает по разным линиям сигналы синхронизации и сигналы данных, что приводит к снижению фазового дрожания, типичного для систем связи, восстанавливающих сигналы синхронизации из целого потока.

NTP8212 — полнофункциональный цифровой аудио усилитель (класса D), включающий силовой каскад для
системы стерео усилителей. В NTP8212G интегрирована система цифровой обработки аудиосигнала (ЦАП), высокоточный цифровой ШИМ-модулятор и два мощных полномостовых каскада питания МОП-транзисторов.

NTP8212G поддерживает формат передачи цифровых данных I2S (I²S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств) с частотой дискретизации от 8 кГц до 192 кГц, с разрешением до 24 бит.

Усилитель выдает 2 x 20 Вт (при питании 24 В на нагрузке 8 Ом), оснащен цифровым регулятором громкости, баланса, имеет 5-и полосный эквалайзер, так же доступны функции MUTE и STANDBY.

Структурная схема усилителя

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Основные параметры усилителя NTP8212:

  • Напряжение питания цифровое от 3,0 до 3,6 В (3,3 В рекомендуемое)

  • Аналоговое питание от 4,5 до 28 В

  • Отношение сигнал/шум 95 дБ

  • Коэффициент гармоник (THD+N 1W, 1kHz) не более 0,1 %

  • КПД усилителя 90 %

  • Частота PWM 384 кГц

  • Управление цифровое I2C

  • Ток потребления в режиме STANDBY не более 0.2 мкА

  • 5-и полосный эквалайзер 100 Гц, 300 Гц, 1 кГц, 3 кГц, 10 кГц с диапазоном регулировки от -12 до +12 дБ

Для правильной работы цифрового усилителя NTP8212, необходимо использовать ресивер, который преобразует сигнал S/PDIF в формат I2S. В данном примере использован ресивер CS8416.

Параметры ресивера CS8416:

  • Напряжение питания:

    • +3.3 V Analog Supply (VA)

    • +3.3 V Digital Supply (VD)

    • +3.3 V or +5.0 V Digital Interface Supply (VL)

  • Входной формат данных: S/PDIF

  • Выходной формат данных:

    • Left-Justified

    • Right-Justified

    • I2S (аппаратно настроен)

  • Разрядность 16 — 24 бит (аппаратно настроен на 24 бит)

  • Частота дискредитации 32 — 192 кГц (аппаратно настроен на 192 кГц)

  • Фильтр De-emphasis:

    • No De-emphasis (аппаратно настроен)

    • 32 kHz

    • 48 kHz

    • 44.1 kHz

  • Кол-во входов: 8 (аппаратно поддерживает 4)

Ресивер CS8416 имеет цифровой интерфейс управления, но может быть сконфигурирован аппаратно. В данном примере ресивер сконфигурирован аппаратно и имеет выходной формат I2S 24 бит с частотой дискредитации 192 кГц. При аппаратной настройке в ресивере доступно 4 входа S/PDIF (8 входов при программном управлении).

Коммутация входами осуществляется при помощи пинов RSEL1 и RSEL0 микросхемы ресивера , при этом лог. 1 подается с питания VL (+5 В), а логический ноль с DGND.

INPUT RSEL0 RSEL1

RXP0 00 RXP1 10

RXP2 01 RXP3 11

Ресивер работает независимо от Arduino, в схеме присутствует индикатор режима работы светодиод D1, при подключении коаксиального кабеля с источником цифрового сигнала светодиод гаснет, при отключении кабеля загорается.

Для управления работой усилителя и ресивера используется плата Arduino Nano, три кнопки и энкодер (модуль KY-040), так же управление полностью продублировано ИК пультом, информация о текущих настройка отображается на дисплее LCD1602 с платой I2C.

Схема ресивера

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Схема усилителя

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Схема управления

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

На дисплей выводится три меню, переключение меню осуществляется при помощи кнопки энкодера.

  • Меню индикаторов громкости (от 0 до 99) и коммутатора входов

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Регулировка громкости осуществляется при помощи энкодера.

  • Меню эквалайзера, регулировка уровня усиления или ослабления выбранной полосы осуществляется при помощи энкодера, выбор полосы происходит при нажатии на кнопку INPUT/EQ_F. Меню эквалайзера содержит графический индикатор регулировки полос.

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Меню регулировки баланса

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Режим MUTE

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Режим STANDBY

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Так как предусмотрена управляемая яркость подсветки дисплея, то можно установить яркость подсветки в основном  режиме и в режиме STANDBY (как правило с пониженной яркостью подсветки), регулировка яркости подсветки осуществляется через скетч:

#define BRIG_H 200 // Яркость 0…255 POWER ON
#define BRIG_L 50 // Яркость 0…255 POWER OFF

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).

Максимальный выходной ток одного выхода Arduino Nano не должен превышать 40 мА (рекомендуется не более 20 мА).

ИК пульт дублирует работу энкодера и кнопок. Для управления усилителем подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:

#define IR_1 0x2FDD02F // Кнопка вверх #define IR_2 0x2FD32CD // Кнопка вниз #define IR_3 0x2FD906F // Кнопка > #define IR_4 0x2FDF20D // Кнопка < #define IR_5 0x2FD6A95 // Кнопка IN #define IR_6 0x2FDEA15 // Кнопка MUTE #define IR_7 0x2FD00FF // Кнопка STANDBY (POWER)

Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.

NTP8212 — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Скетч - http://rcl-radio.ru/?p=129927

Показать полностью 11

OLED 1.3 I2C 128х64 (Arduino)

OLED 1.3″ I2C 128х64 дисплей обладает высокой контрастностью, высоким разрешением и низким энергопотреблением. В OLED дисплее отсутствует дополнительный слой подсветки всей поверхности экрана. Каждый пиксел, формирующий изображение, испускает самостоятельное свечение.

OLED 1.3 I2C 128х64 (Arduino) Самоделки, Электроника, Arduino, Длиннопост

Чип драйвера — SH1106, который обеспечивает связь I2C.

Параметры дисплея SH1106:

  • Технология дисплея: OLED

  • Разрешение дисплея: 128 на 64 точки

  • Диагональ дисплея: 1,3 дюйма

  • Угол обзора > 170°

  • Напряжение питания: 3,3 В ~ 5.0 В

  • Мощность: 0,08 Вт

  • Габариты: 35.7 х 30.9 х 4.0 мм

  • Вес: 7 грамм

Подключение OLDE дисплея к плате Arduino Nano (Uno):

  • VCC > 5V

  • GND > GND

  • SCL > A5 (I2C)

  • SDA > A4 (I2C)

Ниже показан тестовый скетч который содержит пример вывода текста и цифр. В тестовом скетче используется библиотека U8glib которая доступна для установки через менеджер библиотек Arduino IDE , библиотека так же содержит большое количество примеров.

OLED 1.3 I2C 128х64 (Arduino) Самоделки, Электроника, Arduino, Длиннопост

#include <Wire.h>

#include <U8glib.h>  // https://github.com/olikraus/u8glib/

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);

int i;

char s[6];

void setup() {  

Wire.begin();  

// u8g.setRot180();

}

void loop(void) {  

u8g.firstPage(); 

do { 

u8g.setFont(u8g_font_profont15r); 

u8g.drawStr( 0, 12, "OLED 1.3 128x64"); 

u8g.setFont(u8g_font_profont11r); 

u8g.drawStr( 0, 25, "SH1106 U8glib"); 

u8g.drawStr( 0, 37, "RCL-RADIO.RU"); 

u8g.setFont(u8g_font_profont22r); 

u8g.drawLine(0, 45, 128, 45); 

u8g.setPrintPos(0, 64); 

u8g.print(-3.14); 

//  u8g.print(2023);

}

while( u8g.nextPage() );  

delay(500);

}

http://rcl-radio.ru/?p=130369

Показать полностью 1

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino)

S/PDIF (Sony/Philips Digital Interface) – распространенный и стандартизированный интерфейс, предназначенный для передачи цифрового звука между доступными компонентами, звуковыми картами, ресиверами и аудиоаппаратурой.

I2S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств. Применяется для передачи PCM-аудиоданных между интегральными схемами в электронном устройстве. Шина I2S передает по разным линиям сигналы синхронизации и сигналы данных, что приводит к снижению фазового дрожания, типичного для систем связи, восстанавливающих сигналы синхронизации из целого потока.

NTP3000(А) — полнофункциональный цифровой аудио усилитель (класса D), включающий силовой каскад для
системы стерео усилителей. В NTP3000(А) интегрирована система цифровой обработки аудиосигнала (ЦАП), высокоточный цифровой ШИМ-модулятор и два мощных полномостовых каскада питания МОП-транзисторов.

NTP3000(А) поддерживает формат передачи цифровых данных I2S (I²S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств) с частотой дискретизации от 8 кГц до 192 кГц, с разрешением до 24 бит.

Усилитель выдает 2 x 30 Вт, оснащен цифровым регулятором громкости, баланса, имеет 7-и полосный эквалайзер, так же доступны функции MUTE и STANDBY.

Структурная схема усилителя

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Параметры ресивера CS8416:

  • Напряжение питания:

    • +3.3 V Analog Supply (VA)

    • +3.3 V Digital Supply (VD)

    • +3.3 V or +5.0 V Digital Interface Supply (VL)

  • Входной формат данных: S/PDIF

  • Выходной формат данных:

    • Left-Justified

    • Right-Justified

    • I2S (аппаратно настроен)

  • Разрядность 16 — 24 бит (аппаратно настроен на 24 бит)

  • Частота дискредитации 32 — 192 кГц (аппаратно настроен на 192 кГц)

  • Фильтр De-emphasis:

    • No De-emphasis (аппаратно настроен)

    • 32 kHz

    • 48 kHz

    • 44.1 kHz

  • Кол-во входов: 8 (аппаратно поддерживает 4)

Основные параметры усилителя NTP3000(A):

  • Напряжение питания основной логики 1,8 В

  • Напряжение питания аналоговое 1,8 В

  • Напряжение питания цифровое 1,8 В

  • Напряжение питания для каскадов ввода/вывода 3,3 В

  • Напряжение питания для силового каскада 7… 30 В (6 А)

  • Выходная мощность для выхода 2.0 2х30 Вт

  • Выходная мощность для выхода 2.1 1х30 Вт + 2х15 Вт

  • Входной сигнал I2S 24 бит 192 кГц

  • 7 полосный эквалайзер

  • Динамический диапазон 100 дБ

  • Частота дискретизации от 8 до 192 кГц

  • Коэффициент гармоник (THD+N / 1W, 1kHz) 0,01%

  • Управление цифровое I2C

Ресивер CS8416 имеет цифровой интерфейс управления, но может быть сконфигурирован аппаратно. В данном примере ресивер сконфигурирован аппаратно и имеет выходной формат I2S 24 бит с частотой дискредитации 192 кГц. При аппаратной настройке в ресивере доступно 4 входа S/PDIF (8 входов при программном управлении).

Коммутация входами осуществляется при помощи пинов RSEL1 и RSEL0 микросхемы ресивера , при этом лог. 1 подается с питания VL (+5 В), а логический ноль с DGND.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Ресивер работает независимо от Arduino, в схеме присутствует индикатор режима работы светодиод D1, при подключении коаксиального кабеля с источником цифрового сигнала светодиод гаснет, при отключении кабеля загорается.

Усилитель NTP3000(А) имеет цифровое управление I2C, может определятся по двум I2C адресам. Для выбора адреса необходимо на вход AD микросхемы подать лог 0 или 1.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Интерфейс последовательной шины I2S в данной схеме состоит из трех сигналов —  BCK, WCK, SDATA.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

WCK — выбор ПК / ЛК

BCK — синхроимпульсы

SDATA — данные

Схема ресивера

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Схема усилителя

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Схема управления

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Схема источника питания

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Для каждого источника питания рекомендуется использовать отдельный стабилизатор, например усилитель имеет три источника питания 1,8 В, для каждого необходим отдельный стабилизатор.

Для управления работой усилителя и ресивера используется плата Arduino Nano, три кнопки и энкодер (модуль KY-040), так же управление полностью продублировано ИК пультом, информация о текущих настройка отображается на дисплее LCD1602 с платой I2C.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

На дисплей выводится три меню, переключение меню осуществляется при помощи кнопки энкодера.

  • Меню индикаторов громкости (от 0 до 92) и коммутатора входов

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Регулировка громкости осуществляется при помощи энкодера.

  • Меню эквалайзера, регулировка уровня усиления или ослабления выбранной полосы осуществляется при помощи энкодера, выбор полосы происходит при нажатии на кнопку INPUT/EQ_F. Меню эквалайзера содержит графический индикатор регулировки полос.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Меню регулировки баланса

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Режим MUTE

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост
  • Режим STANDBY

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Так как предусмотрена управляемая яркость подсветки дисплея, то можно установить яркость подсветки в основном  режиме и в режиме STANDBY (как правило с пониженной яркостью подсветки), регулировка яркости подсветки осуществляется через скетч:

#define BRIG_H 200 // Яркость 0…255 POWER ON
#define BRIG_L 50 // Яркость 0…255 POWER OFF

Подсветка — убрать перемычку с модуля I2C PCF8574 и подключить вывод модуля к цифровому выходу Arduino D6. Перед подключением замерить ток подсветки который не должен превышать 20 мА (у моего модуля ток не более 15 мА, замер производить между контактами перемычки).

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

ИК пульт дублирует работу энкодера и кнопок. Для управления усилителем подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:

#define IR_1 0x2FDD02F // Кнопка вверх

#define IR_2 0x2FD32CD // Кнопка вниз

#define IR_3 0x2FD906F // Кнопка >

#define IR_4 0x2FDF20D // Кнопка <

#define IR_5 0x2FD6A95 // Кнопка IN

#define IR_6 0x2FDEA15 // Кнопка MUTE

#define IR_7 0x2FD00FF // Кнопка STANDBY (POWER)

Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.

NTP3000(А) — цифровой усилитель 2х30 Вт (Arduino) Arduino, Электроника, Самоделки, Усилитель звука, Длиннопост

Усилитель в настройке не нуждается, помимо занесения в скетч кодов кнопок пульта и параметров подсветки дисплея можно подкорректировать в скетче общее усиление усилителя:

#define GAIN 80 // 10 — 126 КОЭФФИЦИЕНТ УСИЛЕНИЯ УСИЛИТЕЛЯ

Скетч - http://rcl-radio.ru/?p=130078

Показать полностью 16

Частотомер на LGT8F328P (Arduino)

На базе микроконтроллера LGT8F328P можно сделать частотомер, с достаточно большой точностью и стабильностью измерений. Показания частоты выводятся на 8-и разрядный семисегментный индикатор на базе микросхемы max7219.

Микросхема MAX7219 – это компактный драйвер индикатора, который позволяет управлять 7-сегментными индикаторами разрядностью до 8 цифр или 64 отдельными светодиодами. Драйвер управляется по последовательному интерфейсу SPI.

Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост

Микроконтроллер LGT8F328P содержит 4 таймера, два из которых 8-и разрядные и два 16-и разрядные. На основе двух 16-и битный таймеров будет осуществлено измерение частоты.

Схема частотомера очень простая:

Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост

На вход D5 подается сигнал уровня TTL, а на выходе D11 присутствует импульсный сигнала (меандр) для тестирования работы частотомера.

Частотомер работает следующим образом — на вход Т1 Timer_1 подается входной сигнал (TTL), Timer_1 сконфигурирован на работу с внешним тактовыми импульсами источником которого является измеряемый сигнал.

TCCR1A = 0;

TCCR1B = 0;

TCNT1=0;

TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10);

TIMSK1 = (1 << TOIE1);

TCKCSR = (1 << F2XEN) | (1 << TC2XS1);

Биты CS12 CS11 CS10 регистра TCCR1B настроены на внешний режим тактирования:

Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост

Бит TOIE1 регистра TIMSK1 переводит таймер в режим — сброс при переполнении (прерывание).

Биты F2XEN TC2XS1 регистра TCKCSR запускаю высокоскоростной режим синхронизации.

Если на вход Т1 таймера поступают тактовые импульсы, счетчик TCNT1 начинает отсчет импульсов до максимального значения 65535 (при условии что входной сигнал имеет частоту выше 65535 Гц) далее он обнуляется и происходит прерывание. В обработчике прерывания указан следующий код:

ISR(TIMER1_OVF_vect) {tic++;}

Этот код просто подсчитывает кол-во прерываний.

Timer_3 имеет разрешение 16 бит, его задача состоит в точном отсчете времени измерения в 1 секунду.

TCCR3B = (1 << CS32) | (1 << WGM32);

TIMSK3 = (1 << OCIE3A);

OCR3A = CAL;

Бит CS32 регистра TCCR3B устанавливает предделитель на 256, бит WGM32 активирует режим СТС (сброс при совпадении счетного регистра TCNT1 с регистром сравнения OCR3A).

Регистр OCR3A содержит значение CAL отмеряющее 1 секунду.

При совпадении счетного регистра TCNT1 с регистром сравнения OCR3A происходит прерывание:

ISR(TIMER3_vect) {

if (TIFR3 & (1 << OCF3A)){

TIFR3 = 1 << OCF3A;

freq = tic*0xFFFF + TCNT1;

tic=0;

TCNT1=0;

w=1;

} }

В обработчике прерывания Timer_3 происходит подсчет частоты:

freq = tic*0xFFFF + TCNT1;

то есть кол-во прерываний Timer_1 умножается на 65535, так как одно прерывание содержит 65535 отсчетов счетного регистра TCNT1 и далее к полученному значению прибавляется остаток счета в регистре TCNT1.

После чего кол-во прерываний Timer_1 и показания счетного регистра обнуляются, а в переменной freq содержится значение измеренной частоты, которые выводится на восьми разрядный семисегментный индикатор.

При наличии очень точного импульсного генератора можно откалибровать частотомер при помощи значения счетного регистра:

#define CAL 62502; //62499 = 1 sec

При прошивке микроконтроллера рекомендую ознакомится со следующей статьей —  LGT8F328P-LQFP32 MiniEVB в Arduino IDE , версия платы не ниже 2.0.0

Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост

Так же при конфигурировании платы в Arduino IDE руководствуйтесь этим скриншотом:

Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост
Частотомер на LGT8F328P (Arduino) Arduino, Электроника, Программирование, Самоделки, Длиннопост

Скетч - http://rcl-radio.ru/?p=130049

Показать полностью 5

Работа с прерываниями PCINT0…39 для LGT8F328P

PCINT0…39 — это входы для внешнего прерывания которое срабатывает при изменении состояния на входах PCINT0..39.

Работа с прерываниями PCINT0…39 для LGT8F328P Arduino, Электроника, Программирование, Самоделки, Длиннопост

Следует отметить, что плата LGT8F328P-LQFP32 MiniEVB содержит не все входы PCINT, так в ней установлен микроконтроллер в корпусе LQFP32, полный набор входов PCINT содержит микроконтроллер выполненный в корпусе LQFP48.

За внешние прерывания отвечают несколько регистров:

Регистр PCICR — определяет какую группу входов использовать в качестве источника прерывания:

Работа с прерываниями PCINT0…39 для LGT8F328P Arduino, Электроника, Программирование, Самоделки, Длиннопост

Группа PCIE4 отвечает за входы PCINT[32:39], PCIE3 за  PCINT[24:31], PCIE2 за  PCINT[16:23], PCIE1 за  PCINT[8:15], PCIE0 за  PCINT[0:7].

Пример использования:

PCICR |= (1 << PCIE0); // определяет группу входов PCIE0 PCINT0…7

Далее используются при необходимости пять регистров PCMSKn, каждый регистр отвечает за вход PCINTn в своей группе:

Работа с прерываниями PCINT0…39 для LGT8F328P Arduino, Электроника, Программирование, Самоделки, Длиннопост

Установка какого-нибудь бита из PCINT0…39 разрешает соответствующему выводу работать в качестве источника прерывания.

Одновременно можно задействовать несколько входов, которые будут работать как источник прерывания.

Пример использования:

PCMSK0 |= (1 << PCINT0); // использовать PCINT0 в группе PCIE0

PCIFR — регистр флагов

Работа с прерываниями PCINT0…39 для LGT8F328P Arduino, Электроника, Программирование, Самоделки, Длиннопост

При смене логического уровня на любом из выводов PCINT0…39 происходит вызов прерывания, при этом устанавливается соответствующий флаг прерывания PCIF0…4 (на одну группу один флаг). Этот флаг очищается аппаратно после выхода из подпрограммы обработки прерывания.

Обработчики прерывания PCINTx_vect, каждый для своей группы.

Пример использования:

ISR(PCINT0_vect){ // — код — //} — при возникновении прерывания исполняется // — код — //

ISR(PCINT1_vect){ // — код — //} — при возникновении прерывания исполняется // — код — //

ISR(PCINT2_vect){ // — код — //} — при возникновении прерывания исполняется // — код — //

ISR(PCINT3_vect){ // — код — //} — при возникновении прерывания исполняется // — код — //

ISR(PCINT4_vect){ // — код — //} — при возникновении прерывания исполняется // — код — //

Пример:

int i;

void setup() {  

DDRB |= (1 << PB5);// выход светодиода D13 (PB5) на плате Arduino  

DDRB &= ~(1 << 0);

PORTB |= (1 << 0); // выход PCINT0 (D8) как выход, подтягивающий резистор включить

PCICR |= (1 << PCIE0); // определяет группу входов PCIE0 PCINT0...7  

PCMSK0 |= (1 << PCINT0); // использовать PCINT0 в группе PCIE0

}

void loop() {  

PORTB |= (1 << PB5); // PB5 выход 1  

if (i == 1)delay(5000); i = 0; // как сработает прерывание подождать 5 секунд

}

ISR(PCINT0_vect) {  

PORTB &= ~(1 << PB5); // погасить светодиод на D13  

i = 1;

}

Светодиод на плате Arduino Uno который подключен к PB5 горит всегда, если кратковременно замкнуть вход PCINT0 на GND, светодиод погаснет на 5 секунд и загорится вновь.

Пояснение работы кода:

Команда PORTB |= (1 << PB5) в loop() всегда устанавливает на выходе PB5 высокий уровень. Если кратковременно замкнуть вход PCINT0 на GND, то сработает обработчик прерывания PCINT0_vect, в котом находится команда PORTB &= ~(1 << PB5) которая переводит выход PB5 в низкий уровень, тем самым Мы видим как гаснет светодиод демонстрирующий работы прерывания. Далее в  обработчике прерывания используется переменная i , которая становится равной 1. Эта переменная нужна чтобы сработало условие:

if (i == 1)delay(5000); i = 0;

После того как сработает условие следует пауза в 5 секунд, переменная i становится равной 0, тем самым запрещая выполнение условия. Пауза в 5 секунд необходима для демонстрации работы внешнего прерывания, так как без паузы после того как погаснет от прерывания светодиод, он тут же снова загорится, так как команда PORTB |= (1 << PB5) в loop() всегда устанавливает на выходе PB5 высокий уровень.

http://rcl-radio.ru/?p=130036

Показать полностью 3

Часы на адресной светодиодной ленте WS2812B (Arduino)(2)

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

Ранее в статье http://rcl-radio.ru/?p=110997 рассматривался пример создания часов на адресной ленте WS2812b с использованием часов реального времени DS3231. В этой статье будет рассмотрен пример аналогичных часов но с использованием GPS модуля NEO-6M — http://rcl-radio.ru/?p=129191.

GPS модуль необходим для получения точного времени со спутников GPS. Для поиска спутников модулю NEO-6M может понадобится время от 5 до 30 минут после подачи питания на модуль GPS.

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

Назначение контактов модуля NEO-6M:

  • GND —  заземляющий вывод питания

  • TxD — вывод для передачи данных

  • RxD — вывод для получения данных

  • VCC — вывод питания 3,3 В

В часах предусмотрена регулировка яркости адресной ленты и изменения цвета свечения.

Схема часов

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

Кнопки:

  • MODE — позволяет менять цвет свечения адресной ленты

  • UP —  кнопка позволяет увеличивать яркость свечения адресной ленты

  • DOWN — кнопка позволяет уменьшать яркость свечения адресной ленты

Сборка часов

Материал на который наклеена адресная лента для создания часов может быть различный, адресную ленту необходимо разрезать на 28 отрезков по три пикселя для сегментов индикаторов , и 2 отрезка по два пикселя для разделительных точек.

Порядок наклеивания отрезков адресной ленты на основание показан на рисунках:

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост
Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

При установке большой яркости свечения адресной ленты, необходимо использовать отдельный от Arduino источник питания 5 В, так ток потребления адресной ленты может превысить 2 А.

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост
Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

Как ранее было написано, что GPS модулю после подачи на него питания необходимо некоторое время чтобы осуществить поиск спутников. Пока спутники не найдены, часы работать не будут, а в мониторе порта должна появится следующая информация:

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

Это значит что GPS модуль активен и передает информация на плату Arduino, но спутники еще не найдены.

Как только модуль GPS найдет спутники то информация в мониторе порта поменяется и часы начнут показывать время:

Часы на адресной светодиодной ленте WS2812B (Arduino)(2) Arduino, Электроника, Самоделки, Часы, Длиннопост

При настройке часов необходимо внести изменения в скетч:

#define time_offset 21600 // смещение от UTC 1 час = 3600 (зависит от часового пояса, для примера смещение времени для Омска 6 часов, то есть 21600 секунд )

#define BRIG_MAX 50 // настойка ограничения максимальной яркости. Напряжение 5 В подаваемое на адресную ленту может подаваться от платы Arduino, от маломощного источника питания,  но при этом яркость ленты не должна превышать 10 единиц.

Скетч - http://rcl-radio.ru/?p=130337

Показать полностью 8

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino)

S/PDIF (Sony/Philips Digital Interface) – распространенный и стандартизированный интерфейс, предназначенный для передачи цифрового звука между доступными компонентами, звуковыми картами, ресиверами и аудиоаппаратурой.

I2S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств. Применяется для передачи PCM-аудиоданных между интегральными схемами в электронном устройстве. Шина I2S передает по разным линиям сигналы синхронизации и сигналы данных, что приводит к снижению фазового дрожания, типичного для систем связи, восстанавливающих сигналы синхронизации из целого потока.

STA333BW — полнофункциональный цифровой аудио усилитель (класса D), включающий силовой каскад для системы стерео усилителей. В STA333BW интегрирована система цифровой обработки аудиосигнала (ЦАП), высокоточный цифровой ШИМ-модулятор и два мощных полномостовых каскада питания МОП-транзисторов.

STA333BW поддерживает формат передачи цифровых данных I2S (I²S — стандарт интерфейса электрической последовательной шины, использующийся для соединения цифровых аудиоустройств) с частотой дискретизации от 8 кГц до 192 кГц, с разрешением до 24 бит.

Усилитель может работать в нескольких режимах подключения нагрузки:

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

В статье будет рассмотрен только первый вариант подключения нагрузки к усилителю (выход 2.0 — 2х20 Вт при напряжении питания 18 В).

Усилитель выдает 2 x 20 Вт, оснащен цифровым регулятором громкости, баланса, регуляторы тембра ВЧ и НЧ, регулятор полосы НЧ, de-emphasis, так же доступны функции MUTE и STANDBY.

Структурная схема усилителя

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Ресивер S/PDIF собран на ИМС DIR9001, так как вход DIR9001 имеет вход уровня TTL, сигнал S/PDIF подается через преобразователь интерфейса MAX485. DIR9001 поддерживает формат I2S, 24 бит, частота дискредитации 96 кГц.

Для вывода информации о настройках используется дисплей 0.96′ I2C 128X64 OLED. Управление OLED дисплеем в данном примере осуществляется при помощи шины I2C.

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Параметры дисплея SSD1306:

  • Технология дисплея: OLED

  • Разрешение дисплея: 128 на 64 точки

  • Диагональ дисплея: 0,96 дюйма

  • Угол обзора: 160°

  • Напряжение питания: 2.8 В ~ 5.5 В

  • Мощность: 0,08 Вт

  • Габариты: 27.3 мм х 27.8 мм х 3.7 мм

Основные параметры усилителя STA333BW

  • Напряжение питания цифровое и аналоговое 3,3 В

  • Напряжение питания для выходного каскада усилителя от 4.5 В to 21.5 В

  • Режим работы 2.0 и 2.1 (в данном примере рассматривается режим работы 2.0)

  • Выходная мощность в режиме 2.0 … 2 x 20 Вт (8 Ом 18 В)

  • Выходная мощность в режиме 2.1 … 2 x 9 Вт + 1 х 20 Вт (8 Ом 18 В)

  • Динамический диапазон 100 дБ

  • Частота дискредитации от 32 до 192 кГц

  • Управление цифровое I2C

  • Регулировка громкости от -80 до 48 дБ с шагом 0,5 дБ

  • Регулировка тембра ВЧ НЧ ±12 дБ с шагом 2 дБ

  • Регулировка полосы НЧ от 80 до 340 Гц (14 шагов)

  • Коэффициент гармоник не более 0,2 % (Po = 1 W f = 1 kHz)

  • КПД 90% в режиме 2.0

  • Зашита от перегрева и токовая защита

Схема ресивера

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Схема усилителя

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Схема управления

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Схема источника питания

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Для управления работой усилителя используется плата Arduino Nano, две кнопки и энкодер (модуль KY-040), так же управление полностью продублировано ИК пультом, информация о текущих настройка отображается на дисплее 0.96′ OLED.

На дисплей выводится пять меню, переключение меню осуществляется при помощи кнопки энкодера.

Меню громкости

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Bass

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Treble

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Частота Bass

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Баланс

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Дополнительные функции

STANDBY (ток потребления усилителя в режиме STANDBY 0.3 мкА)

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

MUTE

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

De-emphasis

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

ИК пульт дублирует работу энкодера и кнопок. Для управления усилителем подойдет практически любой пульт ИК, для поддержки Вашего пульта необходимо прописать коды кнопок в скетч:

#define IR_1 0x2FDD02F // Кнопка menu up
#define IR_2 0x2FD32CD // Кнопка menu dw
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <
#define IR_5 0x2FDF00F // Кнопка MUTE
#define IR_6 0x2FD00FF // Кнопка STANDBY (POWER)
#define IR_7 0x2FD6A95 // DEMP

Для получения кодов кнопок Вашего пульта загрузите скетч и откройте монитор порта, при нажатии кнопки пульта его код будет отображен в мониторе порта.

STA333BW + 0.96 OLED — цифровой усилитель 2х20 Вт (Arduino) Arduino, Электроника, Самоделки, Аудиотехника, Усилитель звука, Длиннопост

Скетч - http://rcl-radio.ru/?p=130127

Показать полностью 16
Отличная работа, все прочитано!