Atsushi Shinbo / Mbed 2 deprecated Attenuator_for_FN1242A

Dependencies:   mbed

Committer:
shinbo
Date:
Sun Feb 02 06:06:32 2014 +0000
Revision:
1:a060fd2ee1aa
Parent:
0:3f8e97e08238
;

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 1:a060fd2ee1aa 66 new_vol = pin_VR.read_u16() >> 6; // 10bit (0-1023)
shinbo 1:a060fd2ee1aa 67
shinbo 1:a060fd2ee1aa 68 if (cur_vol <= new_vol - 8) {
shinbo 1:a060fd2ee1aa 69 new_vol = (new_vol - 8) | 0x3f; // 6bit
shinbo 1:a060fd2ee1aa 70
shinbo 1:a060fd2ee1aa 71 } else
shinbo 1:a060fd2ee1aa 72 if (new_vol + 8 <= (cur_vol - 0x40)) {
shinbo 1:a060fd2ee1aa 73 new_vol = (new_vol + 8) | 0x3f; // 6bit
shinbo 1:a060fd2ee1aa 74
shinbo 1:a060fd2ee1aa 75 } else {
shinbo 1:a060fd2ee1aa 76 new_vol = cur_vol;
shinbo 1:a060fd2ee1aa 77 }
shinbo 0:3f8e97e08238 78
shinbo 0:3f8e97e08238 79 if (new_vol != cur_vol) {
shinbo 0:3f8e97e08238 80 cur_vol = new_vol;
shinbo 0:3f8e97e08238 81
shinbo 0:3f8e97e08238 82 send_cmd(
shinbo 1:a060fd2ee1aa 83 (0 << 11) // MODE0
shinbo 0:3f8e97e08238 84 | (1 << 10) // LDL
shinbo 0:3f8e97e08238 85 | new_vol); // 10bit
shinbo 0:3f8e97e08238 86
shinbo 0:3f8e97e08238 87 send_cmd(
shinbo 1:a060fd2ee1aa 88 (1 << 11) // MODE1
shinbo 0:3f8e97e08238 89 | (1 << 10) // LDR
shinbo 0:3f8e97e08238 90 | new_vol); // 10bit
shinbo 0:3f8e97e08238 91 }
shinbo 0:3f8e97e08238 92
shinbo 0:3f8e97e08238 93 wait_ms(100); // ms
shinbo 0:3f8e97e08238 94 }
shinbo 0:3f8e97e08238 95
shinbo 0:3f8e97e08238 96 }