PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Звук

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2016, 13:58   #1
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
Question регулировка звука аудиопроцессором TDA7442 + ардуино


Поскольку уже со всем разобрался и сделал рабочую модель скетч для TDA7442D можно посмотреть здесь


Итак, задача
Нужно регулировать громкость в машине.
Линейный выход с звуковой карты идёт на звуковой процессор tda7442и после него – на усилитель мощности.



ПЕЧАТКА + скетч
регулировка звука99.zip


картинки вложения опытов пусть пока останутся.
Миниатюры
Нажмите на изображение для увеличения
Название: печатка.jpg
Просмотров: 2871
Размер:	52.1 Кб
ID:	44888   Нажмите на изображение для увеличения
Название: IMG_20160927_120950_новый размер.jpg
Просмотров: 2963
Размер:	63.1 Кб
ID:	44890   Нажмите на изображение для увеличения
Название: IMG_20160927_121028_новый размер.jpg
Просмотров: 2651
Размер:	56.2 Кб
ID:	44891   Нажмите на изображение для увеличения
Название: IMG_20160927_121020_новый размер.jpg
Просмотров: 2452
Размер:	57.7 Кб
ID:	44892   Нажмите на изображение для увеличения
Название: IMG_20160926_211732_новый размер.jpg
Просмотров: 2684
Размер:	44.1 Кб
ID:	44893  


Последний раз редактировалось oleg707; 07.12.2016 в 00:48.
oleg707 вне форума   Ответить с цитированием
Старый 27.09.2016, 23:11   #2
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Сделал тестовую печатку.
Вложение 44888

Запаял железо согласно даташиту и подключил ардуину мегу 2560
Вложение 44890
Вложение 44891
Вложение 44892

ТЕПЕРЬ СОФТ

Для начала открываем даташит и читаем
4 SOFTWARE SPECIFICATION

И там ищем chipadress, то есть I2C адрес чипа (звукового процессора)
Для TDA 7719
1000100
Открываем виндовый калькулятор вид – программист.
Выбираем BIN – 8 байт (то есть цифровой вид ОДИН-НОЛЬ, 8 символов)
Забиваем 1000100 и тыкаем в HEX.
Видимцифры44.
Значит I2C адреc TDA 7719 0x44

Для tda7442 адрес 0x80 (8 страница мануала)
5 DATA BYTES
Address = 80(HEX)

В скетч заливаю:
PHP код:
#include <Wire.h>
 
void setup() {
  
Wire.begin();
}
 
void loop() {
Wire.beginTransmission(0x80);  // i2c adress 7442
Wire.write(0b11110000);        // задаем десятки
//Wire.write(0b11111111);        // задаем еденицы
Wire.endTransmission();
//delay(500);

И вижу осциллографом:

Вложение 44893
Синяя – SCL
Красная – SDA (наши данные). Если Посылать данные на другой адрес (например 0х44), то форма красной линии меняется.

Если я загружаю другой скетч, то осциллограмма не меняется:
PHP код:
//Для запуска TDA7719 достаточно загрузить скетчь который ниже в ардуино
//http://alekssandr.myjino.ru/na-stadii-razrabotki/audioprotsessor-na-tda7719
#include "Wire.h" 
 
void setup() 

Wire.begin(); 
delay(1000); 
Serial.begin(9600); 
 

void loop(){ 
 
//delay(2000); 
 
tda7719(00b11100000);  //Конфигурация входа/выбора источника     :Input Configuration / Main Source Selector 
tda7719(10b00011111);  //2-й выбор источника / Прямой Путь       :2nd Source Selector / Direct Path 
tda7719(20b00011111);  //Смешивание Источников / Смешивание Gain :Mixing Source / Mixing Gain 
tda7719(30b00011111);  //Контроль смешивания и т.д               :Mix Control / Level Meter / DC Offset Detector Config 
tda7719(40b00000000);  //Soft Mute / Others 
tda7719(50b00000000);  //Soft Step I 
tda7719(60b00000000);  //Soft Step II / DC-detector 
tda7719(70b10000000);  //Громкость                              :Loudness 
tda7719(80b00010000);  //Объем / Output Gain                    :Volume / Output Gain 
tda7719(90b01110000);  //Treble filter  
tda7719(100b01110000); //Middle filter 
tda7719(110b01110000); //Bass filter 
tda7719(120b01111000); //Настройки Сабвуфер/Средний/Басс        :Subwoofer / Middle / Bass 
tda7719(130b00010000); //Настройки динамика передний левый      :Speaker Attenuator Left Front 
tda7719(140b00010000); //Настройки динамика передний правый     :Speaker Attenuator Right Front 
tda7719(150b00010000); //Настройки динамика задний Левый        :Speaker Attenuator Left Rear 
tda7719(160b00010000); //Настройки динамика задний правый       :Speaker Attenuator Right Front 
tda7719(170b00010000); //Настройки сабвуфера Левый              :Subwoofer Attenuator Left 
tda7719(180b00010000); //Настройки сабвуфера Правый             :Subwoofer Attenuator Right 
 

 
void tda7719(int subaddressint data)  //Вызов tda7719 

Wire.beginTransmission(0x80); //СТАРТ и Адрес микросхема TDA7442
Wire.write(subaddress);       //Подадрес команды 
//Wire.write(0b01110000);       //Подадрес команды 
Wire.write(data);             //Команда 
Serial.println(subaddress);   //Пишем подадрем в монитор 
Serial.println(data);         //Пишем команду в монитор 
//Serial.println(tda7719,(6)); 
Wire.endTransmission();       //СТОП 
//delay(500); 

Теперь вопрос.
Как послать данные, какие послать данные, и как увидеть реакцию звукового проца(должен ли он что либо отвечать.



итак, запустил этим кодом.
не получалось потому, что адрес в мануале указан 80 (hex), а в bin адрес 1000000.
А адрес 1000000 в BIN это 40 HEX! Прямо в мануале обманули?
Итак, I2C адрес tda7442 HEX(0x40) или 0b1000000
Сканер I2C в ардуино тоже показал 0x40.
Работоспособность видно на осциллограмме.
Нажмите на изображение для увеличения
Название: IMG_20160927_215436_новый размер.jpg
Просмотров: 1011
Размер:	118.7 Кб
ID:	44902

По массам:
Массу DIGgnd можно не подключать (только к ардуине)
Масса Agnd подключается на минус источника питания (9В)
Подключение к ардуине:

ардуино мега 2560 tda7442
+5В ______________ на резисторы подтяжки шины
- ______________ - на DIGgnd
20pin ______________ - SDA
21pin______________ -SCL


PHP код:
//Для запуска tda7442 достаточно загрузить скетчь который ниже в ардуино
#include "Wire.h" 
 
void setup() 

Wire.begin(); 
delay(1000); 
Serial.begin(9600); 
 

void loop(){ 
 
//delay(2000); 
 /*
tda7442(0, 0b01100000);  //INPUT ATTENUATION  -16dB (0b - показывает, что данные будут в двоичной форме. )
потом идут разряды
D7 D6 D5 D4 D3 D2 D1 D0
по даташиту (5,1 пункт) D7 это B ( в табличке, B = 1 incremental bus; active B = 0 no incremental bus;X = indifferent 0,1)поэтому D7 будет 0.
D7 D6 D5 D4 D3 D2 D1 D0
B  X  X  X  0  0  0  0    INPUT ATTENUATION (из даташита)

X X X 0 0 0 0 INPUT ATTENUATION

*/


tda7442(00b01100000);  //INPUT ATTENUATION   (-16dB )
tda7442(10b00000110);  //SURROUND & OUT & EFFECT CONTROL( -6 FIX OFF)
tda7442(20b00000011);  //SURROUND PHASE RESISTOR( 37KOm)
tda7442(30b00011111);  //BXXX0011 BASS SELECTION (0dB)
tda7442(40b01111110);  //BXXX0100 TREBLE (0dB)
tda7442(50b00000000);  //BXXX0101 SPEAKER ATTENUATION "L" (0dB)( SPEAKER ATTENUATION = 0dB ~ -79dB)
tda7442(60b00000000);  //BXXX0110 SPEAKER ATTENUATION "R" (0dB)
tda7442(70b00000000);  //BXXX0111 NOT ALLOWED
tda7442(80b00000000);  //BXXX1000 NOT ALLOWED         
tda7442(90b00000110);  //BXXX1001 INPUT MULTIPLEXER
            
 

 
void tda7442(int subaddressint data)  //Вызов tda7719 char??

Wire.beginTransmission(0x40); //СТАРТ и Адрес микросхема tda7442 
//или Wire.beginTransmission(0b1000000);
//после beginTransmission дуина ждёт по линии ДАТА ответа от tda7442 ( присаживание линии на землю)и потом передает
Wire.write(subaddress);       //Подадрес команды 
Wire.write(data);             //Команда 
Serial.println(subaddress);   //Пишем подадрем в монитор 
Serial.println(data);         //Пишем команду в монитор 
Wire.endTransmission();       //СТОП 
//delay(500); 

в мониторе ком порта тоже видим реакцию - наши данные в десятичном виде
PHP код:
0
96
1
6
2
3
3
31
4
126
5
0
6
0
7
0
8
0
9
6
0
96
1
6
2
3
3
31
4
126
5
0
6
0
7
0
8
0
9


Последний раз редактировалось admin; 27.10.2018 в 23:19.
oleg707 вне форума   Ответить с цитированием
Старый 27.09.2016, 23:57   #3
Alekssandr
Старший Пользователь
 
Регистрация: 11.08.2013
Возраст: 35
Регион: 86
Сообщений: 445
Alekssandr is a jewel in the roughAlekssandr is a jewel in the roughAlekssandr is a jewel in the rough
По умолчанию

Молодец!!! Хотел написать чтоб попробовал 40, так как я не понял за что отвечает буковка B, а вообще она может быть или 0 (в итоге 0x40) или 1 (в итоге 0x80).
Alekssandr вне форума   Ответить с цитированием
Старый 28.09.2016, 00:14   #4
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от Alekssandr Посмотреть сообщение
Молодец!!! Хотел написать чтоб попробовал 40, так как я не понял за что отвечает буковка B, а вообще она может быть или 0 (в итоге 0x40) или 1 (в итоге 0x80).
Очень помог yuriy m
Адрес в мануале явно указан, так что ХЗ.
буковку видел только в субадресе
B = 1 incremental bus; active
B = 0 no incremental bus;

И потом ( пока еще рано) у меня возникнет вопрос, как управлять этой штукой в режиме incremental bus ( 7 стр мануала, я так понял это когда
CHIP ADDRESS --- SUBADDRESS --- DATA 1 to DATA n)
И надо ли это. По идее шину разгружать должно при большом объеме данных. А на шине и так пару устройств...
oleg707 вне форума   Ответить с цитированием
Старый 28.09.2016, 10:03   #5
yuriy m
Старший Пользователь
 
Регистрация: 13.11.2011
Возраст: 46
Город: Гомель BY
Регион: 03
Машина: Гольф2 -> Lancia Zeta
Сообщений: 376
yuriy m is a jewel in the roughyuriy m is a jewel in the roughyuriy m is a jewel in the rough
По умолчанию

Цитата:
Сообщение от oleg707 Посмотреть сообщение
Очень помог yuriy m
Адрес в мануале явно указан, так что ХЗ.
Вот теперь я вспомнил,ардуиновская библиотека "су**"в адресе rw 8й бит подставляет сама, посему ей нужно указывать только старшие 7бит
__________________
Управление под ANDROID ... http://www.pccar.ru/showthread.php?t=24001
Мой старый проект http://www.pccar.ru/showthread.php?t=18038
yuriy m вне форума   Ответить с цитированием
Старый 28.09.2016, 11:11   #6
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Цитата:
Сообщение от yuriy m Посмотреть сообщение
Вот теперь я вспомнил,ардуиновская библиотека "су**"в адресе rw 8й бит подставляет сама, посему ей нужно указывать только старшие 7бит
Первый пакет шлется от ведущего к ведомому это физический адрес устройства и бит направления.

Сам адрес состоит из семи бит (вот почему до 127 устройств на шине), а восьмой бит означает что будет делать Slave на следующем байте — принимать или передавать данные. Девятым битом идет бит подтверждения ACK.

Если Slave услышал свой адрес и считал полностью, то на девятом такте он придавит линию SDA в 0, сгенерировав ACK — то есть Понял!
Мастер, заметя это, понимает, что все идет по плану и можно продолжать. Если Slave не обнаружился, прозевал адрес, неправильно принял байт, сгорел или еще что с ним случилось, то, соответственно, SDA на девятом такте будет прижать некому и ACK не получится. Будет NACK. Мастер с горя хлопнет водки и прекратит свои попытки до лучших времен.
После адресного пакета идут пакеты с данными в ту или другую сторону, в зависимости от бита RW в заголовочном пакете.
Вот, например, Запись. В квадратиках идут номера битов. W=0



Если смотрим в мануал, то адрес у нас S 100000 A 0, то есть косяк в физическом адресе звукового проца и обработкой его WIRE. КОгда я писал все нули в нужном количестве, wire смещала первую единицу левее и на физику она не попадала. Поэтому в первой осциллограмме запрос выглядит, как все нули. Соответственно ответить некому.
Короче, используем скетч поиска I2C устройств.

Ладно, пойду припаивать вход и выход линейные и дальше с софтом гуляться.
Наушники эта TDA7442D потянет?
oleg707 вне форума   Ответить с цитированием
Старый 28.09.2016, 16:44   #7
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

итак
подключил
вход к джеку наушников телефона
выход - на линейный вход активной акустики.

Прицепил 2 кнопки для теста ( подтяжку не надо, использую внутренние резаки; один конец на минус, второй на 52 и 53 пины)

скетч, при нажатии кнопок громкости в ком порт идут значения громкости
0-80 звук есть, 80-255 Mute.

Монитор ком порта работает только когда есть питание на TDA7442!

PHP код:
//Для запуска tda7442 достаточно загрузить скетчь который ниже в ардуино
#include "Wire.h" //добавление библиотеки I2C шины 
//настройка кнопок громкости
const int volUPbutton 52;     // номер пина на подключение кнопки VOL+
const int volDNbutton 53;     // номер пина на подключение кнопки VOL-  


int buttonStateVOLup 0//переменная для чтения статуса кнопки
int buttonStateVOLdn 0//переменная для чтения статуса кнопки
byte MasterVolume 80// переменная, хранящая в себе громкость выходного звука, 0 - макс громкость, 79- минимальная, 80-255 MUTE http://arduino.ru/Reference/Byte Тип данных byte 8-ми битное беззнаковое целое число, в диапазоне 0..255
 
void setup() 

pinMode(13OUTPUT); // настройка пина встроенного светодиода на выход (чтоб моргать мог)
pinMode(volUPbuttonINPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости +
pinMode(volDNbuttonINPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости -
digitalWrite(volUPbuttonHIGH);       // включить подтягивающий резистор http://arduino.ru/Tutorial/DigitalPins
digitalWrite(volDNbuttonHIGH);       // включить подтягивающий резистор

Wire.begin(); // включение библиотеки I2C шины 
delay(1000); 
Serial.begin(9600); // ком порт
Serial.println(MasterVolume);
delay(1000); 

void loop(){ 

  
buttonStateVOLup digitalRead(volUPbutton); // читаем статус кнопки volUPbutton
  // проверяем, нажата ли кнопка 
    
if (buttonStateVOLup == LOW) {      digitalWrite(13HIGH); MasterVolume--; Serial.println(MasterVolume);  delay(300); } //если нажата кнопка VOL+, то включаем светик, уменьшаем переменную громкости (для увеличения звука)выводим значение громкости в порт и паузу от дребезга
     
else {      digitalWrite(13LOW);  }//если нет - тушим светик.
     
  
buttonStateVOLdn digitalRead(volDNbutton); // читаем статус кнопки volDNbutton   
      // проверяем, нажата ли кнопка 
      
if (buttonStateVOLdn == LOW) {      MasterVolume++; Serial.println(MasterVolume);  delay(300); }//если нажата кнопка VOL- увеличиваем переменную громкости (для уменьшения звука)выводим значение громкости в порт и паузу от дребезга

 /*
tda7442(0, 0b01100000);  //INPUT ATTENUATION  -16dB (0b - показывает, что данные будут в двоичной форме. )
потом идут разряды
D7 D6 D5 D4 D3 D2 D1 D0
по даташиту (5,1 пункт) D7 это B ( в табличке, B = 1 incremental bus; active B = 0 no incremental bus;X = indifferent 0,1)поэтому D7 будет 0.
D7 D6 D5 D4 D3 D2 D1 D0
B  X  X  X  0  0  0  0    INPUT ATTENUATION (из даташита)

X X X 0 0 0 0 INPUT ATTENUATION

*/




tda7442(00b01000000);  //INPUT ATTENUATION    приглушение ВХОДНОГО (IN1-IN4) канала (0 ~ -31.5dB)(0db-макс громкость, без приглушения)
tda7442(10b00000110);  //SURROUND & OUT & EFFECT CONTROL( -6 FIX OFF)
tda7442(20b00000011);  //SURROUND PHASE RESISTOR( 37KOm)
tda7442(30b00011111);  //BXXX0011 BASS SELECTION (0dB)-14dB
tda7442(40b01111110);  //BXXX0100 TREBLE (0dB)
//tda7442(5, 0b00000000);  //BXXX0101 SPEAKER ATTENUATION "L" (0dB)( SPEAKER SELECTION = 0dB ~ -79dB) громкость правого канала
//tda7442(6, 0b00000000);  //BXXX0110 SPEAKER ATTENUATION "R" (0dB) громкость левого канала
// регулировку громкости можно делать  0dB ~ -79dB в DEC c шагом 1. если (80-255) - то MUTE  
tda7442(5,  MasterVolume); //0 - макс громкость, 80-255 - MUTE .  
tda7442(6,  MasterVolume);
tda7442(70b00000000);  //BXXX0111 NOT ALLOWED
tda7442(80b00000000);  //BXXX1000 NOT ALLOWED         
tda7442(90b00000110);  //BXXX1001 INPUT MULTIPLEXER
            
 

 
void tda7442(int subaddressint data)  //Вызов tda7719 char??

Wire.beginTransmission(0x40); //СТАРТ и Адрес микросхема tda7442 
//или Wire.beginTransmission(0b1000000);
//после beginTransmission дуина ждёт по линии ДАТА ответа от tda7442 ( присаживание линии на землю)и потом передает
Wire.write(subaddress);       //Подадрес команды 
Wire.write(data);             //Команда 
//Serial.println(subaddress);   //Пишем подадрем в монитор 
//Serial.println(data);         //Пишем команду в монитор 
Wire.endTransmission();       //СТОП 
//delay(500); 

oleg707 вне форума   Ответить с цитированием
Старый 28.09.2016, 16:56   #8
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

Еще по качеству звука -
Источник - телефон играет флак через штекер наушников
Эквалайзер отключен на телефоне и на tda7442.
С выхода tda7442 звук идет на линейный вход ресивера Yamaha RX-V1071, который выводит звук на колонки Yamaha ns-f700.
Ардуина питается от ЮСБ компа, 7442 питается от домашнего блока питания (12В) через КРЕНку (8В).

Так вот, звук НОРМАЛЬНЫЙ. Нет хрюкания, жевания, "басы басовые, верха серебристые."
oleg707 вне форума   Ответить с цитированием
Старый 28.09.2016, 17:42   #9
oleg707
Гуру
 
Аватар для oleg707
 
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
oleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond reputeoleg707 has a reputation beyond repute
По умолчанию

а вот простой готовый скетч для регулировки громкости, собирай, прошивай ардуину и регулируй. Начальная громкость -35dB. Никаких плюшек, только громкость!

PHP код:
//Для запуска tda7442 достаточно загрузить скетчь который ниже в ардуино
/*
вход к джеку наушников телефона
выход - на линейный вход активной акустики.
Прицепил 2 кнопки для теста ( подтяжку не надо, использую внутренние резаки; один конец на минус, второй на 52 и 53 пины)
скетч, при нажатии кнопок громкости в ком порт идут значения громкости 
0-80 звук есть, 80-255 Mute.
Монитор ком порта работает только когда есть питание на TDA7442!
*/

#include "Wire.h" //добавление библиотеки I2C шины 
//настройка кнопок громкости
const int volUPbutton 52;     // номер пина на подключение кнопки VOL+
const int volDNbutton 53;     // номер пина на подключение кнопки VOL-  


int buttonStateVOLup 0//переменная для чтения статуса кнопки
int buttonStateVOLdn 0//переменная для чтения статуса кнопки
byte MasterVolume 35// переменная, хранящая в себе громкость выходного звука, 0 - макс громкость, 79- минимальная, 80-255 MUTE http://arduino.ru/Reference/Byte Тип данных byte 8-ми битное беззнаковое целое число, в диапазоне 0..255
 
void setup() 

pinMode(13OUTPUT); // настройка пина встроенного светодиода на выход (чтоб моргать мог)
pinMode(volUPbuttonINPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости +
pinMode(volDNbuttonINPUT); //настройка порта ардуины на вход - приём данных от кнопки громкости -
digitalWrite(volUPbuttonHIGH);       // включить подтягивающий резистор http://arduino.ru/Tutorial/DigitalPins
digitalWrite(volDNbuttonHIGH);       // включить подтягивающий резистор

Wire.begin(); // включение библиотеки I2C шины 
delay(1000); 
Serial.begin(9600); // ком порт
Serial.println(MasterVolume);
delay(1000); 

void loop(){ 

  
buttonStateVOLup digitalRead(volUPbutton); // читаем статус кнопки volUPbutton
  // проверяем, нажата ли кнопка 
    
if (buttonStateVOLup == LOW) {  
                                     
digitalWrite(13HIGH); 
                                     if (
MasterVolume==0){Serial.println ("I tak VOLUME MAX (0dB)"); } else (MasterVolume--);
                                     
Serial.println(MasterVolume);  delay(50);
                                 } 
//если нажата кнопка VOL+, то включаем светик, уменьшаем переменную громкости (для увеличения звука)выводим значение громкости в порт и паузу от дребезга
                                              
else {      digitalWrite(13LOW);  }//если нет - просто тушим светик.
     
  
buttonStateVOLdn digitalRead(volDNbutton); // читаем статус кнопки volDNbutton   
      // проверяем, нажата ли кнопка 
      
if (buttonStateVOLdn == LOW)
                                 {      if (
MasterVolume==80){Serial.println ("I tak VOLUME MIN (80dB-MUTE)");}  else (MasterVolume++);
                                         
Serial.println(MasterVolume);  delay(30); 
                                 }
//если нажата кнопка VOL- увеличиваем переменную громкости (для уменьшения звука)выводим значение громкости в порт и паузу от дребезга

 /*
tda7442(0, 0b01100000);  //INPUT ATTENUATION  -16dB (0b - показывает, что данные будут в двоичной форме. )
потом идут разряды
D7 D6 D5 D4 D3 D2 D1 D0
по даташиту (5,1 пункт) D7 это B ( в табличке, B = 1 incremental bus; active B = 0 no incremental bus;X = indifferent 0,1)поэтому D7 будет 0.
D7 D6 D5 D4 D3 D2 D1 D0
B  X  X  X  0  0  0  0    INPUT ATTENUATION (из даташита)

X X X 0 0 0 0 INPUT ATTENUATION

*/




tda7442(00b01000000);  //INPUT ATTENUATION    приглушение ВХОДНОГО (IN1-IN4) канала (0 ~ -31.5dB)(0db-макс громкость, без приглушения)
tda7442(10b00000110);  //SURROUND & OUT & EFFECT CONTROL( -6 FIX OFF)
tda7442(20b00000011);  //SURROUND PHASE RESISTOR( 37KOm)
tda7442(30b00011111);  //BXXX0011 BASS SELECTION (0dB)-14dB
tda7442(40b01111110);  //BXXX0100 TREBLE (0dB)
//tda7442(5, 0b00000000);  //BXXX0101 SPEAKER ATTENUATION "L" (0dB)( SPEAKER SELECTION = 0dB ~ -79dB) громкость правого канала
//tda7442(6, 0b00000000);  //BXXX0110 SPEAKER ATTENUATION "R" (0dB) громкость левого канала
// регулировку громкости можно делать  0dB ~ -79dB в DEC c шагом 1. если (80-255) - то MUTE  
tda7442(5,  MasterVolume); //0 - макс громкость, 80-255 - MUTE .  
tda7442(6,  MasterVolume);
tda7442(70b00000000);  //BXXX0111 NOT ALLOWED
tda7442(80b00000000);  //BXXX1000 NOT ALLOWED         
tda7442(90b00000110);  //BXXX1001 INPUT MULTIPLEXER выбор источника IN1-4
            
 

 
void tda7442(int subaddressint data)  //Вызов tda7719 char??

Wire.beginTransmission(0x40); //СТАРТ и Адрес микросхема tda7442 
//или Wire.beginTransmission(0b1000000);
//после beginTransmission дуина ждёт по линии ДАТА ответа от tda7442 ( присаживание линии на землю)и потом передает
Wire.write(subaddress);       //Подадрес команды 
Wire.write(data);             //Команда 
//Serial.println(subaddress);   //Пишем подадрем в монитор 
//Serial.println(data);         //Пишем команду в монитор 
Wire.endTransmission();       //СТОП 
//delay(500); 

oleg707 вне форума   Ответить с цитированием
Старый 28.09.2016, 19:48   #10
yuriy m
Старший Пользователь
 
Регистрация: 13.11.2011
Возраст: 46
Город: Гомель BY
Регион: 03
Машина: Гольф2 -> Lancia Zeta
Сообщений: 376
yuriy m is a jewel in the roughyuriy m is a jewel in the roughyuriy m is a jewel in the rough
По умолчанию

И тут Остапа понесло... в хорошем смысле
__________________
Управление под ANDROID ... http://www.pccar.ru/showthread.php?t=24001
Мой старый проект http://www.pccar.ru/showthread.php?t=18038
yuriy m вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 09:05.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot