1

Тема: Аудиопроцессор R2S15902FP

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

http://forum.rcl-radio.ru/uploads/images/2019/10/e0863727a223ed5b7ecbfdded7f10ae6.gif


http://forum.rcl-radio.ru/uploads/images/2019/10/6ffb404b990bcab8e2fb14a7dd1b87ae.png

Скетч рабочий

R2S15902FP is an audio signal processor for home audio. This IC contains 6 channels electronic volume, gain control,
input selector and 2 band tone control.

Features
• 6 channels independent electronic volume (0 to –99dB/1dBstep, –∞dB)
• 6 channels independent gain control (0 to +14dB/ 2dB step)
• L/R channel 4 input selector (Input gain: 0 to +14dB/ 2dB step)
• Multi channel input: 6 channels input
• Tone control Bass: –14 to + 14dB(2dB step),
Treble: –14 to + 14dB(2dB step)
• Can use 1 input for REC output (REC output gain: 0, +2, +4, +6dB)
• Built-in ADC output (Input Att: 0/ –6/ –12/ –18dB)
• Built-in L+R/ L–R block
• Built-in digital power supply
Recommended Operating Condition
Supply voltage range VCC = 8.0V to 10.0V: 9.0V(typ)

2

Re: Аудиопроцессор R2S15902FP

test.ino

#include <R2S15902FP.h>
      
void setup(){ Serial.begin(9600);
  pinMode(DATA, OUTPUT); // D2
  pinMode(CLK, OUTPUT);   // D3
  delay(100);
}

void loop(){
  audio();
  delay(1000);
}

void audio(){
  Slot1(0,3,0,5,5,0); 
    // input selector  1...3 === int 0...2
    //REC-Output Gain Control int 0...6 dB === int 0...3
    //ADC Input ATT 0...-6 dB === int 0...3
    //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //Input Gain 0...14 dB === int 0...7
  Slot2(3,10,3,10); // gain0, volume0, gain1, volume1
  Slot3(3,10,3,10); // gain2, volume2, gain3, volume3
  Slot4(3,10,3,10); // gain4, volume4, gain5, volume5
  // gain 0...14 dB === int 0...7
  // volume 0...-99 dB === int 0...100
}

R2S15902FP.h

#include <Arduino.h>

#define DATA 2 // pin DATA
#define CLK  3 // pin CLK

  void Slot1(int in, int out_gain, int att, int bass, int treb, int in_gain); 
           // input selector, REC-Output Gain Control, ADC Input ATT, bass (0=+14dB,8=0dB,15=-14dB), treble (0=+14dB,8=0dB,15=-14dB), Input Gain
  void Slot2(int gain0, int vol0, int gain1, int vol1); // gain0, volume0, gain1, volume1
  void Slot3(int gain2, int vol2, int gain3, int vol3); // gain2, volume2, gain3, volume3
  void Slot4(int gain4, int vol4, int gain5, int vol5); // gain4, volume4, gain5, volume5

R2S15902FP.cpp

#include "R2S15902FP.h"

const boolean input[3][3]={{0,1,0},{1,0,0},{1,1,0}}; //  Input Selector 
const boolean rec_out[4][2]={{0,0},{0,1},{1,0},{1,1}}; //  REC-Output Gain Control  
const boolean input_att[4][2]={{0,0},{0,1},{1,0},{1,1}};//ADC Input ATT 
const boolean bass_data[15][4]={{1,1,1,1},{1,1,1,0},{1,1,0,1},{1,1,0,0},{1,0,1,1},{1,0,1,0},{1,0,0,1},{1,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1}}; // bass
const boolean treb_data[15][4]={{1,1,1,1},{1,1,1,0},{1,1,0,1},{1,1,0,0},{1,0,1,1},{1,0,1,0},{1,0,0,1},{1,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1}}; // treble
const boolean input_gain_data[8][3]={{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};//Input Gain 
const boolean input_control_data[8][3] ={{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}};//Gain Control  
const boolean volume[100][7]  ={{0,0,0,0,0,0,0},{0,0,0,0,0,0,1},{0,0,0,0,0,1,0},{0,0,0,0,0,1,1},{0,0,0,0,1,0,0},{0,0,0,0,1,0,1},{0,0,0,0,1,1,0},{0,0,0,0,1,1,1},{0,0,0,1,0,0,0},{0,0,0,1,0,0,1},{0,0,0,1,0,1,0},{0,0,0,1,0,1,1},{0,0,0,1,1,0,0},{0,0,0,1,1,0,1},{0,0,0,1,1,1,0},{0,0,0,1,1,1,1},{0,0,1,0,0,0,0},{0,0,1,0,0,0,1},{0,0,1,0,0,1,0},{0,0,1,0,0,1,1},{0,0,1,0,1,0,0},{0,0,1,0,1,0,1},{0,0,1,0,1,1,0},{0,0,1,0,1,1,1},{0,0,1,1,0,0,0},{0,0,1,1,0,0,1},{0,0,1,1,0,1,0},{0,0,1,1,0,1,1},{0,0,1,1,1,0,0},{0,0,1,1,1,0,1},{0,0,1,1,1,1,0},{0,0,1,1,1,1,1},{0,1,0,0,0,0,0},{0,1,0,0,0,0,1},{0,1,0,0,0,1,0},{0,1,0,0,0,1,1},{0,1,0,0,1,0,0},{0,1,0,0,1,0,1},{0,1,0,0,1,1,0},{0,1,0,0,1,1,1},{0,1,0,1,0,0,0},{0,1,0,1,0,0,1},{0,1,0,1,0,1,0},{0,1,0,1,0,1,1},{0,1,0,1,1,0,0},{0,1,0,1,1,0,1},{0,1,0,1,1,1,0},{0,1,0,1,1,1,1},{0,1,1,0,0,0,0},{0,1,1,0,0,0,1},{0,1,1,0,0,1,0},{0,1,1,0,0,1,1},{0,1,1,0,1,0,0},{0,1,1,0,1,0,1},{0,1,1,0,1,1,0},{0,1,1,0,1,1,1},{0,1,1,1,0,0,0},{0,1,1,1,0,0,1},{0,1,1,1,0,1,0},{0,1,1,1,0,1,1},{0,1,1,1,1,0,0},{0,1,1,1,1,0,1},{0,1,1,1,1,1,0},{0,1,1,1,1,1,1},{1,0,0,0,0,0,0},{1,0,0,0,0,0,1},{1,0,0,0,0,1,0},{1,0,0,0,0,1,1},{1,0,0,0,1,0,0},{1,0,0,0,1,0,1},{1,0,0,0,1,1,0},{1,0,0,0,1,1,1},{1,0,0,1,0,0,0},{1,0,0,1,0,0,1},{1,0,0,1,0,1,0},{1,0,0,1,0,1,1},{1,0,0,1,1,0,0},{1,0,0,1,1,0,1},{1,0,0,1,1,1,0},{1,0,0,1,1,1,1},{1,0,1,0,0,0,0},{1,0,1,0,0,0,1},{1,0,1,0,0,1,0},{1,0,1,0,0,1,1},{1,0,1,0,1,0,0},{1,0,1,0,1,0,1},{1,0,1,0,1,1,0},{1,0,1,0,1,1,1},{1,0,1,1,0,0,0},{1,0,1,1,0,0,1},{1,0,1,1,0,1,0},{1,0,1,1,0,1,1},{1,0,1,1,1,0,0},{1,0,1,1,1,0,1},{1,0,1,1,1,1,0},{1,0,1,1,1,1,1},{1,1,0,0,0,0,0},{1,1,0,0,0,0,1},{1,1,0,0,0,1,0},{1,1,0,0,0,1,1}}; // volume


void Slot1(int in, int out_gain, int att, int bass, int treb, int in_gain){
  // input selector  ||  0-2 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input[in][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
  //  REC Output  ||  3 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
  //  REC-Output Gain Control  ||  4-5 bit
  for(int i=0;i<2;i++){
    digitalWrite(DATA, rec_out[out_gain][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
  //  ADC Input ATT  ||  6-7 bit
 for(int i=0;i<2;i++){
    digitalWrite(DATA, input_att[att][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
  //   L/R Input   || 8 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
  // BASS  ||   9 - 12 bit
  for(int i=0;i<4;i++){
    digitalWrite(DATA, bass_data[bass][i]); 
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
  // TREBLE   ||  13 - 16 bit
  for(int i=0;i<4;i++){
    digitalWrite(DATA, treb_data[treb][i]); 
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
  //   SL/ SR/ C/ SW Input  || 17 bit 
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
   // Input Gain  ||  18 - 20 bit
   for(int i=0;i<3;i++){
    digitalWrite(DATA, input_gain_data[in_gain][i]); 
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
    // 21 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 22 bit 
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 23 bit  
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, HIGH);// CLOCK
    digitalWrite(CLK, LOW);
    digitalWrite(DATA, LOW);
}

void Slot2(int gain0, int vol0, int gain1, int vol1){
 // Gain Control 0  ||  0-2 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain0][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 0  ||  3 - 9 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol0][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // Gain Control 1  ||  10-12 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain1][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 1  ||  13 - 19 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol1][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
    //  20 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    //  21 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 22 bit 
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 23 bit 
    digitalWrite(DATA, HIGH); // 1
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, HIGH); // CLOCK
    digitalWrite(CLK, LOW);
    digitalWrite(DATA, LOW);
}

void Slot3(int gain2, int vol2, int gain3, int vol3){
 // Gain Control 2  ||  0-2 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain2][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 2  ||  3 - 9 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol2][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // Gain Control 3  ||  10-12 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain3][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 3  ||  13 - 19 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol3][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
    // 20 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    //  21 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 22 bit LOW
    digitalWrite(DATA, HIGH); // 1
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 23 bit  HIGH
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, HIGH); // CLOCK
    digitalWrite(CLK, LOW);
    digitalWrite(DATA, LOW);
}

void Slot4(int gain4, int vol4, int gain5, int vol5){
 // Gain Control 4  ||  0-2 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain4][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 4  ||  3 - 9 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol4][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // Gain Control 5  ||  10-12 bit
  for(int i=0;i<3;i++){
    digitalWrite(DATA, input_control_data[gain5][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
 // volume 5  ||  13 - 19 bit
  for(int i=0;i<7;i++){
    digitalWrite(DATA, volume[vol5][i]);
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);}
    // 20 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    //  21 bit
    digitalWrite(DATA, LOW); // 0
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 22 bit LOW
    digitalWrite(DATA, HIGH); // 1
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, LOW);
    digitalWrite(CLK, LOW);
    // 23 bit  HIGH
    digitalWrite(DATA, HIGH); // 1
    digitalWrite(CLK, HIGH);
    digitalWrite(DATA, HIGH); // CLOCK
    digitalWrite(CLK, LOW);
    digitalWrite(DATA, LOW);
}

3

Re: Аудиопроцессор R2S15902FP

Основная статья - http://rcl-radio.ru/?p=67106

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

http://forum.rcl-radio.ru/uploads/images/2019/10/57983eec1eb18d9af06c1c0ed78de335.png
http://forum.rcl-radio.ru/uploads/images/2019/10/dd3aaafdbf6a75ccdbe6b78e5fd9e392.png
http://forum.rcl-radio.ru/uploads/images/2019/10/b7ae543a9a1a44cae04969bbb4917467.png
http://forum.rcl-radio.ru/uploads/images/2019/10/057de98c10ca6d5fe10159aed69e1324.png


Компоненты:
1. Аудиопроцессор R2S15902FP
2. LCD1602 I2C
3. Энкодер

Подключение:
D2 - DATA
D3 - CLK

Подключение можно изменить отредактировав файл R2S15902FP.h библиотеки

R2S15902FP.ino

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <R2S15902FP.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);// DT, CLK
  decode_results ir; 
 byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
 byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
 byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};  
 unsigned long time,oldPosition  = -999,newPosition;    
 int menu,vol,vol_d,treb,treb_d,bass,bass_d,in; 
 byte w,w2,z,z0,z1; 
      
void setup(){ irrecv.enableIRIn(); // запускаем модуль IR
  lcd.init();lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0,0);lcd.print("   R2S15902FP   ");delay(2000);
  Serial.begin(9600); lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
  pinMode(DATA, OUTPUT); // D2
  pinMode(CLK, OUTPUT);   // D3
  pinMode(10,INPUT);// МЕНЮ КНОПКА SW энкодера
   MsTimer2::set(3, to_Timer);MsTimer2::start(); // АКТИВИРУЕМ ПРЕРЫВАНИЯ ДЛЯ ЭНКОДЕРА
   vol = EEPROM.read(0);treb = EEPROM.read(1);bass = EEPROM.read(2);in = EEPROM.read(3);
  delay(100);cl();
  audio();
}

void loop(){
   if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu>3){menu=0;}}// меню
   
   if(menu==0){
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print("VOLUME  ");
     lcd.print(" ");lcd.print(-vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=48-vol;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}

///////////////////////// TREBLE +/-14 dB /////////////////////////////////////////////////////////
   if(menu==1){
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print("TREBLE  ");
   lcd.print(" ");lcd.print(14-treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=28-treb*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
   
///////////////////////// BASS +/-14 dB /////////////////////////////////////////////////////////
   if(menu==2){
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print("BASS    ");
   lcd.print(" ");lcd.print(14-bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=28-bass*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}  

///////////////////// IN /////////////////////////////////////////////////////////////////////////  
   if(menu==3){  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    in=in-newPosition;myEnc.write(0);newPosition=0;time=millis();cl();w=1;w2=1;in_func();audio();} 
   lcd.setCursor(0,0);lcd.print("INPUT  ");lcd.print(in+1);
   }
  
   if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,bass);EEPROM.update(3,in);
     menu=0;w=0;w2=1;cl();} 
}
void in_func(){if(in>2){in=0;}if(in<0){in=2;}}
void bass_func(){if(bass>14){bass=14;}if(bass<0){bass=0;}}
void treb_func(){if(treb>14){treb=14;}if(treb<0){treb=0;}}
void vol_func(){if(vol<0){vol=0;}if(vol>99){vol=99;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
  Slot1(in,0,0,bass,treb,0); 
    // input selector  1...3 === int 0...2
    //REC-Output Gain Control int 0...6 dB === int 0...3
    //ADC Input ATT 0...-6 dB === int 0...3
    //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //Input Gain 0...14 dB === int 0...7
  Slot2(0,vol,0,vol); // gain0, volume0, gain1, volume1
  Slot3(0,vol,0,vol); // gain2, volume2, gain3, volume3
  Slot4(0,vol,0,vol); // gain4, volume4, gain5, volume5
  // gain 0...14 dB === int 0...7
  // volume 0...-99 dB === int 0...100
}

4

Re: Аудиопроцессор R2S15902FP

Активация 6 - канального входа. Выбрать вход IN4.
Установить разделительные конденсаторы на выводы с 6 по 11 по 2,2 мкФ

http://forum.rcl-radio.ru/uploads/images/2019/10/f21dd5c4e6ed5209a5d7dd3c2df379bc.png

Скетч не тестировался!!!
Внесены изменения в библиотеку - Данный контент доступен только зарегистрированным пользователям.

Измененный скетч:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <R2S15902FP.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);// DT, CLK
  decode_results ir; 
 byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
 byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
 byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};  
 unsigned long time,oldPosition  = -999,newPosition;    
 int menu,vol,vol_d,treb,treb_d,bass,bass_d,in; 
 byte w,w2,z,z0,z1,r_l; 
      
void setup(){ irrecv.enableIRIn(); // запускаем модуль IR
  lcd.init();lcd.backlight();// Включаем подсветку дисплея
  lcd.setCursor(0,0);lcd.print("   R2S15902FP   ");delay(2000);
  Serial.begin(9600); lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
  pinMode(DATA, OUTPUT); // D2
  pinMode(CLK, OUTPUT);   // D3
  pinMode(10,INPUT);// МЕНЮ КНОПКА SW энкодера
   MsTimer2::set(3, to_Timer);MsTimer2::start(); // АКТИВИРУЕМ ПРЕРЫВАНИЯ ДЛЯ ЭНКОДЕРА
   vol = EEPROM.read(0);treb = EEPROM.read(1);bass = EEPROM.read(2);in = EEPROM.read(3);
  delay(100);cl();
  audio();
}

void loop(){
   if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu>3){menu=0;}}// меню
   
   if(menu==0){
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print("VOLUME  ");
     lcd.print(" ");lcd.print(-vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=48-vol;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}

///////////////////////// TREBLE +/-14 dB /////////////////////////////////////////////////////////
   if(menu==1){
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print("TREBLE  ");
   lcd.print(" ");lcd.print(14-treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=28-treb*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
   
///////////////////////// BASS +/-14 dB /////////////////////////////////////////////////////////
   if(menu==2){
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print("BASS    ");
   lcd.print(" ");lcd.print(14-bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=28-bass*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}  

///////////////////// IN /////////////////////////////////////////////////////////////////////////  
   if(menu==3){  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    in=in-newPosition;myEnc.write(0);newPosition=0;time=millis();cl();w=1;w2=1;in_func(); if(in==3){r_l=1;}else{r_l=0;}audio();} 
   lcd.setCursor(0,0);lcd.print("INPUT  ");lcd.print(in+1);
  
   }
  
   if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,bass);EEPROM.update(3,in);
     menu=0;w=0;w2=1;cl();} 
}
void in_func(){if(in>3){in=0;}if(in<0){in=3;}}
void bass_func(){if(bass>14){bass=14;}if(bass<0){bass=0;}}
void treb_func(){if(treb>14){treb=14;}if(treb<0){treb=0;}}
void vol_func(){if(vol<0){vol=0;}if(vol>99){vol=99;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
  Slot1(in,0,r_l,0,bass,treb,0); 
    // input selector  1...4 === int 0...3, in4 === multi in
    //REC-Output Gain Control int 0...6 dB === int 0...3
    //L/R Input 0 === IN1...3, 1 === IN4 MULTI
    //ADC Input ATT 0...-6 dB === int 0...3
    //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //Input Gain 0...14 dB === int 0...7
  Slot2(0,vol,0,vol); // gain0, volume0, gain1, volume1
  Slot3(0,vol,0,vol); // gain2, volume2, gain3, volume3
  Slot4(0,vol,0,vol); // gain4, volume4, gain5, volume5
  // gain 0...14 dB === int 0...7
  // volume 0...-99 dB === int 0...100
}

Re: Аудиопроцессор R2S15902FP

Имеется готовая плата для этого процессора ,будет полезно к этой библиотеке!Данный контент доступен только зарегистрированным пользователям. Данный контент доступен только зарегистрированным пользователям. Данный контент доступен только зарегистрированным пользователям.

6

Re: Аудиопроцессор R2S15902FP

Не тестировано!!!


Добавлены усилителя выходов, перебор выходов кнопкой IN

http://forum.rcl-radio.ru/uploads/images/2020/01/2868e94881eff52bd06c5047709117ab.png



#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <
#define IR_5 0x2FD708F // Кнопка IN

#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <R2S15902FP.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
   LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
   IRrecv irrecv(12); // указываем вывод модуля IR приемника
   Encoder myEnc(9, 8);// DT, CLK
   decode_results ir;
  byte a1[8] ={0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
  byte a2[8] ={0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
  byte a3[8] ={0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
  unsigned long time,oldPosition  = -999,newPosition;
  int menu,vol,vol_d,treb,treb_d,bass,bass_d,in;
  byte w,w2,z,z0,z1,www,gr1,gr2;
  int out,vol_out,rf,lf,rt,lt,sab1,sab2;

void setup(){ irrecv.enableIRIn(); // запускаем модуль IR
   lcd.init();lcd.backlight();
   lcd.setCursor(0,0);lcd.print("   R2S15902FP   ");delay(2000);
   Serial.begin(9600);
lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   pinMode(DATA, OUTPUT); // D2
   pinMode(CLK, OUTPUT);   // D3
   pinMode(10,INPUT);// МЕНЮ КНОПКА SW энкодера
   pinMode(11,INPUT);// КНОПКА IN
    MsTimer2::set(3, to_Timer);MsTimer2::start(); // АКТИВИРУЕМПРЕРЫВАНИЯ ДЛЯ ЭНКОДЕРА
    vol = EEPROM.read(0);treb = EEPROM.read(1);bass = EEPROM.read(2);in= EEPROM.read(3);
    rf = EEPROM.read(10);lf = EEPROM.read(11);rt = EEPROM.read(12);lt =EEPROM.read(13);sab1 = EEPROM.read(14);sab2 = EEPROM.read(24);
   delay(100);cl();
   audio();
}

void loop(){
if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu>4){menu=0;}}//меню
if(digitalRead(11)==HIGH){in++;;cl();time=millis();w=1;w2=1;www=1;in_func();lcd.setCursor(0,0);lcd.print("    INPUT");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА I

    if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println(ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник -чтение, в мониторе порта отображаются коды кнопок
    if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта

if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu>4){menu=0;}}//меню кнопка вверх
if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu<0){menu=4;}}//меню кнопка вниз


    if(menu==0){

if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка <<<<<<

    if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();}

      lcd.setCursor(0,0);lcd.print("VOLUME  ");
      lcd.print(" ");lcd.print(-vol);lcd.print("");lcd.setCursor(13,0);lcd.print("dB");vol_d=48-vol;
    if(w2==1){
    for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(" ");}}
    if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
    if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}

///////////////////////// TREBLE +/-14 dB
/////////////////////////////////////////////////////////
    if(menu==1){

if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and
gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and
gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка <<<<<<

      if (newPosition != oldPosition) {
     oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();}

    lcd.setCursor(0,0);lcd.print("TREBLE  ");
    lcd.print(" ");lcd.print(14-treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=28-treb*2;
    if(w2==1){
for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
    if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
    if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}

///////////////////////// BASS +/-14 dB
/////////////////////////////////////////////////////////
    if(menu==2){

if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка <<<<<<

      if (newPosition != oldPosition) {
     oldPosition = newPosition;
bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();}

    lcd.setCursor(0,0);lcd.print("BASS    ");
    lcd.print(" ");lcd.print(14-bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=28-bass*2;
    if(w2==1){
for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print(" ");}}
    if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
    if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}

///////////////////// IN
/////////////////////////////////////////////////////////////////////////
    if(menu==3){
  if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;
   in_func();lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
     
     if (newPosition != oldPosition) {
     oldPosition = newPosition;
in=in-newPosition;myEnc.write(0);newPosition=0;time=millis();cl();w=1;w2=1;in_func();audio();}

    lcd.setCursor(0,0);lcd.print("INPUT  ");lcd.print(in+1);}

////////////////////////////////////////// out
/////////////////////////////////////////////////
  if(menu==4){
if(digitalRead(11)==HIGH){out++;cl();time=millis();www=1;w=1;if(out>5){out=0;}audio();}
// перебор выходов кнопкой IN
if(ir.value==IR_5){out++;cl();time=millis();www=1;w=1;if(out>5){out=0;}audio();}
// перебор выходов кнопкой IN
        switch(out){
           case 0:vol_out=rf;break;
           case 1:vol_out=lf;break;
           case 2:vol_out=rt;break;
           case 3:vol_out=lt;break;
           case 4:vol_out=sab1;break;
           case 5:vol_out=sab2;break;
           }

if(ir.value==IR_3){vol_out++;gr1=1;gr2=0;cl1();w2=1;vol_out_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){vol_out++;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol_out--;gr1=0;gr2=1;cl1();w2=1;vol_out_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){vol_out--;gr1=0;cl1();w2=1;vol_out_func();audio();}// кнопка <<<<<<

       if (newPosition != oldPosition) {
       oldPosition = newPosition;
vol_out=vol_out+newPosition;myEnc.write(0);newPosition=0;time=millis();www=1;w=1;w2=1;vol_out_func();audio();}


    lcd.setCursor(0,0);lcd.print("Volume OUT");lcd.setCursor(0,1);
       switch(out){
    case 0:rf=vol_out;lcd.print("RF:  ");lcd.print(rf);break;
    case 1:lf=vol_out;lcd.print("LF:  ");lcd.print(lf);break;
    case 2:rt=vol_out;lcd.print("RT:  ");lcd.print(rt);break;
    case 3:lt=vol_out;lcd.print("LT:  ");lcd.print(lt);break;
    case 4:sab1=vol_out;lcd.print("SUBW_1: ");lcd.print(sab1);break;
    case 5:sab2=vol_out;lcd.print("SUBW_2: ");lcd.print(sab2);break;
    }
     if(www==1){audio();www=0;}
   lcd.print(" dB      ");}


    if(millis()-time>10000 && w==1){
EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,bass);EEPROM.update(3,in);
EEPROM.update(10,rf);EEPROM.update(11,lf);EEPROM.update(12,rt);EEPROM.update(13,lt);EEPROM.update(14,sab1);EEPROM.update(24,sab2);
      menu=0;w=0;w2=1;cl();}
}

void cl1(){ir.value=0;delay(100);}
void vol_out_func(){if(vol_out>7){vol_out=7;}if(vol_out<0){vol_out=0;}}
void in_func(){if(in>3){in=0;}if(in<0){in=3;}}
void bass_func(){if(bass>14){bass=14;}if(bass<0){bass=0;}}
void treb_func(){if(treb>14){treb=14;}if(treb<0){treb=0;}}
void vol_func(){if(vol<0){vol=0;}if(vol>99){vol=99;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
   Slot1(in,0,0,bass,treb,0);
     // input selector  1...4 === int 0...3, in4 === multi in
     //REC-Output Gain Control int 0...6 dB === int 0...3
     //L/R Input 0 === IN1...3, 1 === IN4 MULTI
     //ADC Input ATT 0...-6 dB === int 0...3
     //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
     //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
     //Input Gain 0...14 dB === int 0...7
   Slot2(rf,vol,lf,vol); // gain0, volume0, gain1, volume1
   Slot3(rt,vol,lt,vol); // gain2, volume2, gain3, volume3
   Slot4(sab1,vol,sab2,vol); // gain4, volume4, gain5, volume5
   // gain 0...14 dB === int 0...7
   // volume 0...-99 dB === int 0...100
}

7

Re: Аудиопроцессор R2S15902FP

Большие цифры

http://forum.rcl-radio.ru/uploads/images/2020/01/72618337a0404b95e25a7172b31dd898.png
http://forum.rcl-radio.ru/uploads/images/2020/01/138f25fae9568c90a8da0c9f62766446.png
http://forum.rcl-radio.ru/uploads/images/2020/01/d75cf529e59b0f1e9c4525641c58c5c1.png

#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <
#define IR_5 0x2FD708F // Кнопка IN

#include <Wire.h>
#include <R2S15902FP.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
   IRrecv irrecv(12); // указываем вывод модуля IR приемника
   Encoder myEnc(9, 8);// DT, CLK
   decode_results ir;
      byte v1[8] = {31,31,31,31,31,31,31,31};
      byte v2[8] = {31,31,31, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,31,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,31,31};
  
  unsigned long time,oldPosition  = -999,newPosition;
  int menu,vol,vol_d,treb,treb_d,bass,bass_d,in;
  byte w,w2,www,gr1,gr2;
  byte a[2];
  int out,vol_out,rf,lf,rt,lt,sab1,sab2;
  byte i,d1,d2,d3,d4,d5,d6,e1,e2,e3;

void setup(){ irrecv.enableIRIn(); // запускаем модуль IR
  lcd.init();lcd.backlight();
   lcd.setCursor(0,0);lcd.print("   R2S15902FP   ");delay(2000);
   Serial.begin(9600);
lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);lcd.createChar(5, v5);lcd.createChar(7, v7);
   pinMode(DATA, OUTPUT); // D2
   pinMode(CLK, OUTPUT);   // D3
   pinMode(10,INPUT);// МЕНЮ КНОПКА SW энкодера
   pinMode(11,INPUT);// КНОПКА IN
    MsTimer2::set(3, to_Timer);MsTimer2::start(); // АКТИВИРУЕМПРЕРЫВАНИЯ ДЛЯ ЭНКОДЕРА
    vol = EEPROM.read(0);treb = EEPROM.read(1);bass = EEPROM.read(2);in= EEPROM.read(3);
    rf = EEPROM.read(10);lf = EEPROM.read(11);rt = EEPROM.read(12);lt =EEPROM.read(13);sab1 = EEPROM.read(14);sab2 = EEPROM.read(24);
   delay(100);cl();
   audio();
}

void loop(){
if(digitalRead(10)==LOW){menu++;cl();time=millis();w=1;w2=1;if(menu>4){menu=0;}}//меню
if(digitalRead(11)==HIGH){in++;;cl();time=millis();w=1;w2=1;www=1;in_func();lcd.setCursor(0,0);lcd.print("    INPUT");lcd.print(in+1);audio();delay(2000);cl();}// КНОПКА ВЫБОРА ВХОДА I

    if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println(ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник -чтение, в мониторе порта отображаются коды кнопок
    if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта

if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu>4){menu=0;}}//меню кнопка вверх
if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu<0){menu=4;}}//меню кнопка вниз

///////////////////////  vol
    if(menu==0){

if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка <<<<<<

    if (newPosition != oldPosition){oldPosition = newPosition;vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();}
    vol_d = abs(vol-99);
    a[0]= vol_d/10;a[1]=vol_d%10;

    for(i=0;i<2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}

      lcd.setCursor(0,0);lcd.print("VOLUME");
      lcd.setCursor(0,1);;lcd.print("INPUT ");lcd.print(in+1);
  }

///////////////////////// TREBLE +/-14 dB
/////////////////////////////////////////////////////////
    if(menu==1){

if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and
gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and
gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка <<<<<<

      if (newPosition != oldPosition) {
     oldPosition = newPosition;
treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();}

    treb_d = abs(treb-14);
    a[0]= treb_d/10;a[1]=treb_d%10;

    for(i=0;i<2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}

      lcd.setCursor(0,0);lcd.print("TREBLE");
     // lcd.setCursor(0,1);;lcd.print("INPUT ");lcd.print(in+1);
  
  
  }

///////////////////////// BASS +/-14 dB
/////////////////////////////////////////////////////////
    if(menu==2){

if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка <<<<<<

      if (newPosition != oldPosition) {
     oldPosition = newPosition;
bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();}

   bass_d = abs(bass-14);
    a[0]= bass_d/10;a[1]=bass_d%10;

    for(i=0;i<2;i++){
      switch(i){
        case 0: e1=9,e2=10,e3=11;break;
        case 1: e1=13,e2=14,e3=15;break;}       
      switch(a[i]){
        case 0: d1=1,d2=2,d3=1,d4=1,d5=3,d6=1;break;
        case 1: d1=2,d2=1,d3=5,d4=7,d5=1,d6=7;break;
        case 2: d1=2,d2=4,d3=1,d4=1,d5=3,d6=3;break;
        case 3: d1=2,d2=4,d3=1,d4=3,d5=3,d6=1;break;
        case 4: d1=1,d2=3,d3=1,d4=5,d5=5,d6=1;break;
        case 5: d1=1,d2=4,d3=2,d4=3,d5=3,d6=1;break;
        case 6: d1=1,d2=4,d3=2,d4=1,d5=3,d6=1;break;
        case 7: d1=2,d2=2,d3=1,d4=5,d5=5,d6=1;break;
        case 8: d1=1,d2=4,d3=1,d4=1,d5=3,d6=1;break;
        case 9: d1=1,d2=4,d3=1,d4=3,d5=3,d6=1;break;
       case 11: d1=5,d2=5,d3=5,d4=5,d5=5,d6=5;break;
    }
     
      lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
      lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}

      lcd.setCursor(0,0);lcd.print("BASS");
     // lcd.setCursor(0,1);;lcd.print("INPUT ");lcd.print(in+1);

   
   }

///////////////////// IN
/////////////////////////////////////////////////////////////////////////
    if(menu==3){
  if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;
   in_func();lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
     
     if (newPosition != oldPosition) {
     oldPosition = newPosition;
in=in-newPosition;myEnc.write(0);newPosition=0;time=millis();cl();w=1;w2=1;in_func();audio();}

    lcd.setCursor(0,0);lcd.print("INPUT  ");lcd.print(in+1);}

////////////////////////////////////////// out
/////////////////////////////////////////////////
  if(menu==4){
if(digitalRead(11)==HIGH){out++;cl();time=millis();www=1;w=1;if(out>5){out=0;}audio();}
// перебор выходов кнопкой IN
if(ir.value==IR_5){out++;cl();time=millis();www=1;w=1;if(out>5){out=0;}audio();}
// перебор выходов кнопкой IN
        switch(out){
           case 0:vol_out=rf;break;
           case 1:vol_out=lf;break;
           case 2:vol_out=rt;break;
           case 3:vol_out=lt;break;
           case 4:vol_out=sab1;break;
           case 5:vol_out=sab2;break;
           }

if(ir.value==IR_3){vol_out++;gr1=1;gr2=0;cl1();w2=1;vol_out_func();audio();}//кнопка >
      if(ir.value==0xFFFFFFFF and gr1==1){vol_out++;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка >>>>>>
if(ir.value==IR_4){vol_out--;gr1=0;gr2=1;cl1();w2=1;vol_out_func();audio();}//кнопка <
      if(ir.value==0xFFFFFFFF and gr2==1){vol_out--;gr1=0;cl1();w2=1;vol_out_func();audio();}// кнопка <<<<<<

       if (newPosition != oldPosition) {
       oldPosition = newPosition;
vol_out=vol_out-newPosition;myEnc.write(0);newPosition=0;time=millis();www=1;w=1;w2=1;vol_out_func();audio();}


    lcd.setCursor(0,0);lcd.print("Volume OUT");lcd.setCursor(0,1);
       switch(out){
    case 0:rf=vol_out;lcd.print("RF:  ");lcd.print(rf);break;
    case 1:lf=vol_out;lcd.print("LF:  ");lcd.print(lf);break;
    case 2:rt=vol_out;lcd.print("RT:  ");lcd.print(rt);break;
    case 3:lt=vol_out;lcd.print("LT:  ");lcd.print(lt);break;
    case 4:sab1=vol_out;lcd.print("SUBW_1: ");lcd.print(sab1);break;
    case 5:sab2=vol_out;lcd.print("SUBW_2: ");lcd.print(sab2);break;
    }
     if(www==1){audio();www=0;}
   lcd.print(" dB      ");}


    if(millis()-time>10000 && w==1){
EEPROM.update(0,vol);EEPROM.update(1,treb);EEPROM.update(2,bass);EEPROM.update(3,in);
EEPROM.update(10,rf);EEPROM.update(11,lf);EEPROM.update(12,rt);EEPROM.update(13,lt);EEPROM.update(14,sab1);EEPROM.update(24,sab2);
      menu=0;w=0;w2=1;cl();}
}

void cl1(){ir.value=0;delay(100);}
void vol_out_func(){if(vol_out>7){vol_out=7;}if(vol_out<0){vol_out=0;}}
void in_func(){if(in>3){in=0;}if(in<0){in=3;}}
void bass_func(){if(bass>14){bass=14;}if(bass<0){bass=0;}}
void treb_func(){if(treb>14){treb=14;}if(treb<0){treb=0;}}
void vol_func(){if(vol<0){vol=0;}if(vol>99){vol=99;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
   Slot1(in,0,0,bass,treb,0);
     // input selector  1...4 === int 0...3, in4 === multi in
     //REC-Output Gain Control int 0...6 dB === int 0...3
     //L/R Input 0 === IN1...3, 1 === IN4 MULTI
     //ADC Input ATT 0...-6 dB === int 0...3
     //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
     //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
     //Input Gain 0...14 dB === int 0...7
   Slot2(rf,vol,lf,vol); // gain0, volume0, gain1, volume1
   Slot3(rt,vol,lt,vol); // gain2, volume2, gain3, volume3
   Slot4(sab1,vol,sab2,vol); // gain4, volume4, gain5, volume5
   // gain 0...14 dB === int 0...7
   // volume 0...-99 dB === int 0...100
}

8

Re: Аудиопроцессор R2S15902FP

Исправленная библиотека
Данный контент доступен только зарегистрированным пользователям.


https://github.com/liman324/R2S15902FP

Тестовый скетч

#include <R2S15902FP.h>
      
void setup(){ Serial.begin(9600);
  pinMode(DATA, OUTPUT); // D2
  pinMode(CLK, OUTPUT);  // D3
  delay(100);
}

void loop(){
  audio();
  delay(1000);
}

void audio(){
  Slot1(0,0,0,0,5,5,0); 
   // input selector  1...4 === int 0...3, in4 === multi in
    //REC-Output Gain Control int 0...6 dB === int 0...3
    //ADC Input ATT 0...-6 dB === int 0...3
    //L/R Input 0 === IN1...3, 1 === IN4 MULTI
    //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //Input Gain 0...14 dB === int 0...7
  Slot2(3,10,3,10); // gain0, volume0, gain1, volume1
  Slot3(3,10,3,10); // gain2, volume2, gain3, volume3
  Slot4(3,10,3,10); // gain4, volume4, gain5, volume5
  // gain 0...14 dB === int 0...7
  // volume 0...-99 dB === int 0...99
}

9

Re: Аудиопроцессор R2S15902FP

Активация IN4(AUX4) - замените в библиотеке файл - Данный контент доступен только зарегистрированным пользователям.

AUX1...AUX4 IN6

10

Re: Аудиопроцессор R2S15902FP

what encoder can i use. i hv tried but failed! Help me!

11

Re: Аудиопроцессор R2S15902FP

ky-040 (модуль)

12

Re: Аудиопроцессор R2S15902FP

thank you!

13

Re: Аудиопроцессор R2S15902FP

Hi sir it is very nice to see this program.. Can u plz give the latest link with big number display..

14

Re: Аудиопроцессор R2S15902FP

boarddefs.h где взять такую библиотеку?

15

Re: Аудиопроцессор R2S15902FP

Входит в состав библиотеки IRremote

16

Re: Аудиопроцессор R2S15902FP

Скачал несколько IRremote таких библиотек. Не в одной нет boarddefs. Может не там ищу.

17

Re: Аудиопроцессор R2S15902FP

http://rcl-radio.ru/wp-content/uploads/ … remote.zip

18

Re: Аудиопроцессор R2S15902FP

aleksashka386 пишет:

Имеется готовая плата для этого процессора ,будет полезно к этой библиотеке!Данный контент доступен только зарегистрированным пользователям. Данный контент доступен только зарегистрированным пользователям. Данный контент доступен только зарегистрированным пользователям.

Уважаемый могли бы вы дать пояснения относительно USB коннектора ? Для чего он нужен ?

19

Re: Аудиопроцессор R2S15902FP

Лиман доброго времени суток !

Огромная просьба разъяснить по функции "Slot1". Не могу разобраться, что за что отвечает (имеется ввиду операнды). В некоторых случаях бывает весь функционал не требуется и хотелось бы знать в каком месте этот операнд нужен, а какой не трогать прописать его в "Setup" один раз и все. Заранее спасибо !

20

Re: Аудиопроцессор R2S15902FP

Slot1(0,0,0,0,5,5,0);
   // input selector  1...4 === int 0...3, in4 === multi in  // селектор входов
    //REC-Output Gain Control int 0...6 dB === int 0...3    // линейный выход программно настроен на 4-й стерео вход
    //ADC Input ATT 0...-6 dB === int 0...3                      // предусилитель выхода разностного сигнала L-R
    //L/R Input 0 === IN1...3, 1 === IN4 MULTI              // переключение режимов 4 AUX и 6-и канального входа
    //bass int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //treble int 0 === +14dB int 8 === 0dB int 15 === -14dB
    //Input Gain 0...14 dB === int 0...7                           // входной предусилитель

21

Re: Аудиопроцессор R2S15902FP

Лиман вы уж извините мне мою тупость, но все равно не понял по второму и третьему операнду. REC-Otput Gain Control, ADC Input ATT.

//REC-Output Gain Control int 0...6 dB === int 0...3    // линейный выход программно настроен на 4-й стерео вход

Это как понимать ? Линейный выход подключается ко входу 4 селектора ? И где на схеме из даташита линейный выход. Там вроде его нет.

//ADC Input ATT 0...-6 dB === int 0...3                      // предусилитель выхода разностного сигнала L-R

А в этом случае не понятно на что влияет этот параметр. Понятно что это предусилитель, а далее не бум бум.

Если не составит вам труда разъясните чуть более раскрыто. А то видишь параметр а для чего он и с чем его едят не понятно.

22

Re: Аудиопроцессор R2S15902FP

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

23

Re: Аудиопроцессор R2S15902FP

Александр спасибо за честный ответ ! Наверное тоже нужно пытаться разбираться экспериментальным путем. И да вы правы в даташите об этих параметрах ничего нет.

24

Re: Аудиопроцессор R2S15902FP

И в догонку такой вопрос.... Можно ли сделать правку в файле .срр библиотеки, константы массива громкости ? А именно поменять местами ячейки массива с зада на перед. Тем самым изменить настройку громкости по значениям int от 0 до 100 -> от -99дб до 0дб.

25

Re: Аудиопроцессор R2S15902FP

Примерно так:

void Slot2(int gain0, int vol0, int gain1, int vol1){
vol0=100-vol0;
vol1=100-vol1;


int 0 = -100 дБ
int 100 = 0 дБ

У аудиопроцессора нет общей громкости, для каждого выхода своя громкость vol0,vol1,vol2,vol3,vol4,vol5