Atsushi Shinbo / Mbed 2 deprecated Attenuator_for_FN1242A

Dependencies:   mbed

Committer:
shinbo
Date:
Sun Feb 02 03:24:55 2014 +0000
Revision:
0:3f8e97e08238
Child:
1:a060fd2ee1aa
digital volume for FN1242A.; ; FN1242A : 24bit/192KHz/2ch DAC; http://akizukidenshi.com/download/ds/niigataseimitsu/FN1242Ajspec.pdf;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shinbo 0:3f8e97e08238 1 #include "mbed.h"
shinbo 0:3f8e97e08238 2
shinbo 0:3f8e97e08238 3 // digital volume for FN1242A.
shinbo 0:3f8e97e08238 4 //
shinbo 0:3f8e97e08238 5 // FN1242A : 24bit/192KHz/2ch DAC
shinbo 0:3f8e97e08238 6 // http://akizukidenshi.com/download/ds/niigataseimitsu/FN1242Ajspec.pdf
shinbo 0:3f8e97e08238 7
shinbo 0:3f8e97e08238 8
shinbo 0:3f8e97e08238 9 // LPC1114FN28
shinbo 0:3f8e97e08238 10 // 3 SWCLK
shinbo 0:3f8e97e08238 11 // 4 PIO0_11 to VR10k (AnalogIN)
shinbo 0:3f8e97e08238 12 // 7 AVIN 3.3V
shinbo 0:3f8e97e08238 13 // 8 AGND
shinbo 0:3f8e97e08238 14 // 9 PIO1_0 to FN1242A (ML)
shinbo 0:3f8e97e08238 15 // 10 PIO1_1 to FN1242A (MD)
shinbo 0:3f8e97e08238 16 // 11 PIO1_2 to FN1242A (MC)
shinbo 0:3f8e97e08238 17 // 12 SWDIO
shinbo 0:3f8e97e08238 18 // 21 VIN 3.3V
shinbo 0:3f8e97e08238 19 // 22 GND
shinbo 0:3f8e97e08238 20 // 23 RESET
shinbo 0:3f8e97e08238 21
shinbo 0:3f8e97e08238 22
shinbo 0:3f8e97e08238 23 AnalogIn pin_VR(dp4);
shinbo 0:3f8e97e08238 24 DigitalOut pin_ML(dp9);
shinbo 0:3f8e97e08238 25 DigitalOut pin_MD(dp10);
shinbo 0:3f8e97e08238 26 DigitalOut pin_MC(dp11);
shinbo 0:3f8e97e08238 27
shinbo 0:3f8e97e08238 28
shinbo 0:3f8e97e08238 29 void send_cmd(uint16_t word) {
shinbo 0:3f8e97e08238 30
shinbo 0:3f8e97e08238 31 pin_ML = 1;
shinbo 0:3f8e97e08238 32
shinbo 0:3f8e97e08238 33 for (int iii = 0; iii < 16; iii++) {
shinbo 0:3f8e97e08238 34 pin_MC = 0;
shinbo 0:3f8e97e08238 35 pin_MD = (word & 0x8000) == 0 ? 0 : 1; // msb first
shinbo 0:3f8e97e08238 36 wait_us(10); // us
shinbo 0:3f8e97e08238 37
shinbo 0:3f8e97e08238 38 pin_MC = 1;
shinbo 0:3f8e97e08238 39 wait_us(10); // us
shinbo 0:3f8e97e08238 40
shinbo 0:3f8e97e08238 41 word = word << 1;
shinbo 0:3f8e97e08238 42 }
shinbo 0:3f8e97e08238 43
shinbo 0:3f8e97e08238 44 pin_MD = 0;
shinbo 0:3f8e97e08238 45 pin_MC = 0;
shinbo 0:3f8e97e08238 46 pin_ML = 0;
shinbo 0:3f8e97e08238 47 wait_us(10); // us
shinbo 0:3f8e97e08238 48
shinbo 0:3f8e97e08238 49 pin_ML = 1;
shinbo 0:3f8e97e08238 50 wait_us(10); // us
shinbo 0:3f8e97e08238 51 }
shinbo 0:3f8e97e08238 52
shinbo 0:3f8e97e08238 53 uint16_t new_vol = 0;
shinbo 0:3f8e97e08238 54 uint16_t cur_vol = 0;
shinbo 0:3f8e97e08238 55
shinbo 0:3f8e97e08238 56 int main() {
shinbo 0:3f8e97e08238 57
shinbo 0:3f8e97e08238 58 wait_ms(100); // ms
shinbo 0:3f8e97e08238 59
shinbo 0:3f8e97e08238 60 pin_ML = 1;
shinbo 0:3f8e97e08238 61 pin_MD = 0;
shinbo 0:3f8e97e08238 62 pin_MC = 0;
shinbo 0:3f8e97e08238 63 wait_us(10); // us
shinbo 0:3f8e97e08238 64
shinbo 0:3f8e97e08238 65 while (1) {
shinbo 0:3f8e97e08238 66 new_vol = pin_VR.read_u16() >> 6;
shinbo 0:3f8e97e08238 67 new_vol = new_vol | 0x3f; // 6bit
shinbo 0:3f8e97e08238 68
shinbo 0:3f8e97e08238 69 if (new_vol != cur_vol) {
shinbo 0:3f8e97e08238 70 cur_vol = new_vol;
shinbo 0:3f8e97e08238 71
shinbo 0:3f8e97e08238 72 send_cmd(
shinbo 0:3f8e97e08238 73 (0 << 11) // MODE0
shinbo 0:3f8e97e08238 74 | (1 << 10) // LDL
shinbo 0:3f8e97e08238 75 | new_vol); // 10bit
shinbo 0:3f8e97e08238 76
shinbo 0:3f8e97e08238 77 send_cmd(
shinbo 0:3f8e97e08238 78 (1 << 11) // MODE1
shinbo 0:3f8e97e08238 79 | (1 << 10) // LDR
shinbo 0:3f8e97e08238 80 | new_vol); // 10bit
shinbo 0:3f8e97e08238 81 }
shinbo 0:3f8e97e08238 82
shinbo 0:3f8e97e08238 83 wait_ms(100); // ms
shinbo 0:3f8e97e08238 84 }
shinbo 0:3f8e97e08238 85
shinbo 0:3f8e97e08238 86 }