LoginSignup
0
0

AK4382Aのモード設定プログラム

Last updated at Posted at 2018-06-01

旭化成のAK4382AというDACチップをHardOffで324円で購入したジャンクからはがして、USB DAIに接続出来るようにしてみました。DAIはTIのPCM2706でI2Sでの接続になります。AK4382Aはデーターシートを見てみると、デフォルトの入力がI2Sではありません。このチップは3線の独自仕様のコントロールになっていて、ATTiny13でI2Sに設定する簡単なプログラムを作ってみました。

スクリーンショット(2018-06-01 19.13.09).png

/*
ASAHI KASEI AK4382A Mode Control Program
for ATTiny13 on Arduino
*/

#include <avr/sleep.h>

#define CSN  PB0
#define CCLK PB1
#define CDTI PB2

void setbit(int bit)
{
  digitalWrite(CCLK, LOW);
  digitalWrite(CDTI, bit);
  digitalWrite(CCLK, HIGH);
}

void setreg(unsigned char addr, unsigned char data)
{
int i;
  digitalWrite(CSN, LOW);

  setbit(LOW);   // C1
  setbit(HIGH);  // C0
  setbit(HIGH);  // R/W

  // Register Address
  for(i = 4; i >= 0; --i) {
    setbit(addr & (1 << i) ? HIGH : LOW);
  }

  // Control Data
  for(i = 7; i >= 0; --i) {
    setbit(data & (1 << i) ? HIGH : LOW);
  }

  digitalWrite(CCLK, HIGH);
  digitalWrite(CSN, HIGH);
}

void setup()
{
  pinMode(CSN, OUTPUT);
  pinMode(CCLK, OUTPUT);
  pinMode(CDTI, OUTPUT);

  digitalWrite(CSN, HIGH);
  digitalWrite(CCLK, HIGH);
  
  set_sleep_mode(SLEEP_MODE_IDLE);

  delay(5000);
}

void loop()
{
  unsigned char reg;
  
  reg = 1 << 7;  // RSTN
  reg |= 1 << 1; // PW
  reg |= 1 << 0; // ACKS
  reg |= 3 << 2; // DIF
  setreg(0, reg);

  reg = 1 << 1;  // DEM0
  reg |= 1 << 7;  // DZFE
  setreg(1, reg);
  
  reg = 0 << 2;  // DZFB
  setreg(2, reg);
    
  sleep_mode();
}

電源投入後5秒後に設定を行ってスリープします。バイナリは530バイトくらいでした。

AK4382AはHI/LOパルス幅は80ns以上となっていてかなり短く、とくにDelayをいれなくても大丈夫なようです。

写真(2018-06-26 13.10) #2.jpg

FN1242は入力フォーマットをピンで設定できますが、このチップはこのようにマイコンから設定する必要があります。

このチップは2002年くらいのチップで最近の旭化成のDACチップはI2Cで制御になっているようです。

このチップのデジタル系は5VですがHiが2.2V以上なので3.3VのI2Sマスターに接続しても問題ないようです。

このDACはΔΣなチップで結構音よいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0