You are on page 1of 7

#include "PT2313.

h"

/*
loudness:off
gain:0db
source:user assigned:
volume:muted or presetted
*/
void PT2313::initialize(byte src,bool muted){
Wire.begin();
#if ARDUINO >= 157
Wire.setClock(100000UL); // Set I2C frequency to 100kHz
#else
TWBR = ((F_CPU / 100000UL) - 16) / 2; // Set I2C frequency to
100kHz
#endif
if (muted){
volume(63);//muted
} else {
volume(PT2313_DEFVOL);
}
audioSwitch_reg = 0x5C;
source(src);
balance(0);
bass(0);
treble(0);
}

void PT2313::source(byte val) {


val = val % 3; //range 0-2
switch(val){
case 0:
bitClear(audioSwitch_reg,0);
bitClear(audioSwitch_reg,1);
break;
case 1:
bitSet(audioSwitch_reg,0);
bitClear(audioSwitch_reg,1);
break;
case 2:
bitClear(audioSwitch_reg,0);
bitSet(audioSwitch_reg,1);
break;
}
writeByte(audioSwitch_reg);
}

void PT2313::gain(byte val) {


val = val % 4; //range 0-3
switch(val){
case 0://0db
bitSet(audioSwitch_reg,3);
bitSet(audioSwitch_reg,4);
break;
case 1://+3,75db
bitClear(audioSwitch_reg,3);
bitSet(audioSwitch_reg,4);
break;
case 2://+7.5db
bitSet(audioSwitch_reg,3);
bitClear(audioSwitch_reg,4);
break;
case 3://+11.25db
bitClear(audioSwitch_reg,3);
bitClear(audioSwitch_reg,4);
break;
}
writeByte(audioSwitch_reg);
}

void PT2313::loudness(bool val) {


if (val){
bitClear(audioSwitch_reg,2);
} else {
bitSet(audioSwitch_reg,2);
}
writeByte(audioSwitch_reg);
}

void PT2313::volume(byte val) {


val = boundary(val,0,0x3F);
writeByte(PT2313_VOL_REG|(0x3F - val));
}

void PT2313::bass(int val){


byte temp = eqsubroutine(val);
writeByte(PT2313_BASS_REG|temp);
}

void PT2313::treble(int val){


byte temp = eqsubroutine(val);
writeByte(PT2313_TREBLE_REG|temp);
}

byte PT2313::eqsubroutine(int val){


byte temp;
val = boundary(val,-7,7);
if (val < 0) {
temp = 7 - abs(val);
} else {
temp = 15 - val;
}
return temp;
}

void PT2313::balance(int val) {


val = boundary(val,-31,31);
if (val == 0) {
writeByte(PT2313_L_ATT_REG|0x00);
writeByte(PT2313_R_ATT_REG|0x00);
} else {
if (val < 0) {
writeByte(PT2313_L_ATT_REG|0x00);
writeByte(PT2313_R_ATT_REG|((byte)abs(val)));
} else {
writeByte(PT2313_L_ATT_REG|((byte)abs(val)));
writeByte(PT2313_R_ATT_REG|0x00);
}
}
}

int PT2313::boundary(int val,int min,int max){


if (val < min) val = min;
if (val > max) val = max;
return val;
}
void PT2313::writeByte(byte val) {
Wire.beginTransmission(PT2313_ADDR);
Wire.write(val);
Wire.endTransmission();
delay(10);
}
/*
_
___ _ _ _ __ ___ ___ | |_ ___ _ _
/ __|| | | || '_ ` _ \ / _ \ | __|/ _ \ | | | |
\__ \| |_| || | | | | || (_) || |_| (_) || |_| |
|___/ \__,_||_| |_| |_| \___/ \__|\___/ \__, |
|___/
PT2313 Library
----------------------------------------
A C library for Princeton Technology Corp PT2313 L or E Audio Chip
(I2C)
version 1.0
coded by Max MC Costa
--------------------------------------------------------
Library works with most arduino compatible processors and teensy3

*/
#ifndef PT2313_h
#define PT2313_h

#include "Arduino.h"
#include "Wire.h"

#define PT2313_ADDR 0x44


#define PT2313_DEFVOL 35

#define PT2313_VOL_REG 0x00 //00000000


#define PT2313_L_ATT_REG 0xC0 //11000000
#define PT2313_R_ATT_REG 0xE0 //11100000
#define PT2313_BASS_REG 0x60 //01101111
#define PT2313_TREBLE_REG 0x70 //01110000

class PT2313 {

public:
void initialize(byte source=0,bool muted=true);
void source (byte val);
void volume (byte val);
void bass(int val);
void treble(int val);
void balance (int val);
void gain (byte val);
void loudness(bool val);
private:
byte eqsubroutine(int val);
void writeByte(byte val);
int boundary(int val,int min,int max);
uint8_t audioSwitch_reg;
};

#endif
PT2313 KEYWORD1

initialize KEYWORD2

source KEYWORD2

volume KEYWORD2

bass KEYWORD2

treble KEYWORD2

balance KEYWORD2

gain KEYWORD2

loudness KEYWORD2
#include <Wire.h>

#include <PT2313.h>

PT2313 audioChip;

void setup(){

audioChip.initialize(1,true);//source 1,mute on

audioChip.source(1);//select your source 0...3

audioChip.volume(33);//Vol 0...62 : 63=muted

audioChip.gain(3);//gain 0...11.27 db

audioChip.loudness(true);//true or false

audioChip.bass(0);//bass -7...+7

audioChip.treble(0);//treble -7...+7

audioChip.balance(0);//-31...+31

void loop(){

}
PT2313
======

Sebuah perpustakaan sederhana untuk menggerakkan Audio Chip ** PT2313L **


atau ** PT2313E ** <br>
Ini adalah perpustakaan sederhana untuk mengantar Princeton Technology
Corp. chip PT2313, sebuah chip audio stereo dengan 3 input stereo dan
kenyaringan, volume, bass, treble dan 2 stereo outs.
Perpustakaan membiarkan Anda mengakses semua fitur dengan menggunakan
protokol I2C dengan Arduino o Teensy 2, 3, 3.1, MCU LC dan semua Energia
mendukung MCU's. Chip ini bekerja hanya pada 100Khz jadi jangan mencoba
untuk memaksakannya pada 400 atau tidak akan bekerja
Saya telah melakukan ini untuk membuat speaker ampas stereo yang saya
miliki di rumah.

Chip ini berkomunikasi via I2C di 100Khz, tidak lebih!

Untuk koneksi, lihat datasheet yang disertakan dalam folder docs. Selamat
bersenang-senang!

** Peringatan **: Dukungan Energia sama seperti tahap dasarnya dan tidak
diuji. Ini mengkompilasi tapi tidak berarti itu akan berhasil! Jadi tolong
tunggu saya mengujinya (dan prolly fix) sebelum menggunakannya dengan
Energia MCU's!

You might also like