темброблок на тда7313

gh2424
Offline
Зарегистрирован: 22.08.2015

Добрый день решил собрать темброблок на тда 7313 под управлением ардуино уно по шине i2c , скачал даташит на тда7313 , с кодами управления по шине, для начала хочу написать простенький скетч управления данной микрой при помощи кнопок, в будущем хочу сделать управление пультом ДУ , в связи с этим возник вопрос как заставить ардуино передавать эти коды по I2С , в инете читал многие начинали подобные проекты , но почему то никто до ума не довел, неужели там все так сложно? хотелось бы дойти по принципа работы самому, но буду рад любой конструктивной помощи и советам...

vvadim
Offline
Зарегистрирован: 23.05.2012
gh2424
Offline
Зарегистрирован: 22.08.2015

подскажите как можно дублировать энкодер громкости, при помощи кнопок пульта ДУ

сам скетч регулировки громкости такой :

 

#include <MP1241.h>
#include <MP1090.h>
#include <Wire.h>
#include <PinChangeInt.h>
#include <IRremote.h> 
 
#define VOL_A  0x490
#define VOL_B  0xC90
 
 
 
const int MP1093_VOL_A = 14;
const int MP1093_VOL_B = 15;
 
 
const int MP1093_CounterClockWiseRot = 0;
const int MP1093_ClockWiseRot = 1;
const int MP1093_Unchanged = 2;
 
volatile byte VOLUME_FLAG = MP1093_Unchanged;
 
int IRR_Pin = 8;
 
IRrecv irrecv(IRR_Pin);
 
 
 
 
 
 
 
 
void setup()
{
  Serial.begin (9600);
  Wire.begin();
 
 
 
  PCintPort::attachInterrupt(MP1093_VOL_A, &MP1093_VOL_A_ISR, RISING);
  PCintPort::attachInterrupt(MP1093_VOL_B, &MP1093_VOL_B_ISR, RISING);
 
 
 
 
 
 
 
}
 
void loop ()
{   
 
 
 
 
  if ((VOLUME_FLAG == MP1093_ClockWiseRot) || (VOLUME_FLAG == MP1093_CounterClockWiseRot))
  {
    ChangeVolume ();
    Serial.print ("Volume   ");
    Serial.print (MP1241::GetParameter (MP1241_VOLUME), HEX);
    Serial.print ("\n");
    VOLUME_FLAG = MP1093_Unchanged;
  }
 
 
 
}
 
void MP1093_VOL_A_ISR ()
{
  if (PCintPort::arduinoPin == MP1093_VOL_A)
  {
    delay (100);
 
    if ((digitalRead (MP1093_VOL_A)) && (!digitalRead (MP1093_VOL_B)))
    {
      VOLUME_FLAG = MP1093_ClockWiseRot;
    }
  }
}
 
void MP1093_VOL_B_ISR ()
{
  if (PCintPort::arduinoPin == MP1093_VOL_B)
  {
    delay (100);
    if ((digitalRead (MP1093_VOL_B)) && (!digitalRead (MP1093_VOL_A)))
    {
      VOLUME_FLAG = MP1093_CounterClockWiseRot;
    }
  }
}
 
 
void ChangeVolume ()
  byte CurValue = MP1241::GetParameter (MP1241_VOLUME);
  byte NewValue = CurValue;
 
  if (VOLUME_FLAG == MP1093_ClockWiseRot)
  {
    if (NewValue < 0x3F)
      NewValue++;
  }
 
  else if (VOLUME_FLAG == MP1093_CounterClockWiseRot)
  {
    if (NewValue > 0x0C)
      NewValue--;
  }
 
  if (NewValue != CurValue)
    MP1241::SetParameter (MP1241_VOLUME, NewValue);
}