This library controls a ST TDA7419 audio control IC. This is part of a project to implement an mbed controlled car stereo. The TDA7419 will take in stereo and output four channels of audio plus a subwoofer channel.
PreampTDA7419.h@2:34a58356394c, 2014-10-26 (annotated)
- Committer:
- danielashercohen
- Date:
- Sun Oct 26 22:49:34 2014 +0000
- Revision:
- 2:34a58356394c
- Parent:
- 1:69c37f1ab7df
Basic tone control features all implemented, working with FRDM-KL25Z
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
danielashercohen | 0:86ea14016b10 | 1 | /** TDA7419 PreAmp library, I2C |
danielashercohen | 0:86ea14016b10 | 2 | * |
danielashercohen | 0:86ea14016b10 | 3 | * @Author: Dan Cohen |
danielashercohen | 0:86ea14016b10 | 4 | */ |
danielashercohen | 0:86ea14016b10 | 5 | #ifndef DigoleSerialDisp_h |
danielashercohen | 0:86ea14016b10 | 6 | #define DigoleSerialDisp_h |
danielashercohen | 0:86ea14016b10 | 7 | |
danielashercohen | 0:86ea14016b10 | 8 | #include "mbed.h" |
danielashercohen | 0:86ea14016b10 | 9 | #include <inttypes.h> |
danielashercohen | 1:69c37f1ab7df | 10 | |
danielashercohen | 1:69c37f1ab7df | 11 | /////////////////////////// |
danielashercohen | 0:86ea14016b10 | 12 | // Variables for TDA7419 // |
danielashercohen | 0:86ea14016b10 | 13 | /////////////////////////// |
danielashercohen | 0:86ea14016b10 | 14 | // I2C address for TDA7419 |
danielashercohen | 0:86ea14016b10 | 15 | #define TDA7419_ADDRESS 0x44 |
danielashercohen | 0:86ea14016b10 | 16 | |
danielashercohen | 0:86ea14016b10 | 17 | /** TDA7419 PreAmp library |
danielashercohen | 0:86ea14016b10 | 18 | * |
danielashercohen | 0:86ea14016b10 | 19 | * Includes the commands for volume, fader, subwoofer and tone controls |
danielashercohen | 0:86ea14016b10 | 20 | * |
danielashercohen | 0:86ea14016b10 | 21 | */ |
danielashercohen | 0:86ea14016b10 | 22 | class PreampTDA7419 { |
danielashercohen | 0:86ea14016b10 | 23 | public: |
danielashercohen | 0:86ea14016b10 | 24 | |
danielashercohen | 2:34a58356394c | 25 | /** Create a new TDA7419 communication interface |
danielashercohen | 0:86ea14016b10 | 26 | * |
danielashercohen | 0:86ea14016b10 | 27 | * @param sda is the pin for I2C SDA |
danielashercohen | 0:86ea14016b10 | 28 | * @param scl is the pin for I2C SCL |
danielashercohen | 0:86ea14016b10 | 29 | */ |
danielashercohen | 0:86ea14016b10 | 30 | PreampTDA7419(PinName sda, PinName scl); |
danielashercohen | 2:34a58356394c | 31 | |
danielashercohen | 2:34a58356394c | 32 | /** Directly set the TDA7419 Master volume (0->11) |
danielashercohen | 2:34a58356394c | 33 | * |
danielashercohen | 2:34a58356394c | 34 | */ |
danielashercohen | 1:69c37f1ab7df | 35 | void setVolume (int volume); |
danielashercohen | 2:34a58356394c | 36 | /** Read the the TDA7419 Master volume (0->11) |
danielashercohen | 2:34a58356394c | 37 | * |
danielashercohen | 2:34a58356394c | 38 | */ |
danielashercohen | 1:69c37f1ab7df | 39 | int readVolume (); |
danielashercohen | 2:34a58356394c | 40 | /** Increase the current volume (if below 11) |
danielashercohen | 2:34a58356394c | 41 | * |
danielashercohen | 2:34a58356394c | 42 | */ |
danielashercohen | 1:69c37f1ab7df | 43 | int increaseVolume(); |
danielashercohen | 2:34a58356394c | 44 | /** Decrease the current volume (if more than 0) |
danielashercohen | 2:34a58356394c | 45 | * |
danielashercohen | 2:34a58356394c | 46 | */ |
danielashercohen | 1:69c37f1ab7df | 47 | int decreaseVolume(); |
danielashercohen | 2:34a58356394c | 48 | /** Select the input (1->4) |
danielashercohen | 2:34a58356394c | 49 | * Stereo inputs are 1->3 |
danielashercohen | 2:34a58356394c | 50 | */ |
danielashercohen | 1:69c37f1ab7df | 51 | void setInput (int input); |
danielashercohen | 2:34a58356394c | 52 | /** Read currently selected input |
danielashercohen | 2:34a58356394c | 53 | * |
danielashercohen | 2:34a58356394c | 54 | */ |
danielashercohen | 1:69c37f1ab7df | 55 | int readInput (); |
danielashercohen | 1:69c37f1ab7df | 56 | |
danielashercohen | 2:34a58356394c | 57 | /** Increase treble level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 58 | * |
danielashercohen | 2:34a58356394c | 59 | */ |
danielashercohen | 1:69c37f1ab7df | 60 | int increaseTreble(); |
danielashercohen | 2:34a58356394c | 61 | /** Decrease treble level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 62 | * |
danielashercohen | 2:34a58356394c | 63 | */ |
danielashercohen | 1:69c37f1ab7df | 64 | int decreaseTreble(); |
danielashercohen | 2:34a58356394c | 65 | /** Read currently set treble level |
danielashercohen | 2:34a58356394c | 66 | * |
danielashercohen | 2:34a58356394c | 67 | */ |
danielashercohen | 1:69c37f1ab7df | 68 | int readTreble (); |
danielashercohen | 2:34a58356394c | 69 | |
danielashercohen | 2:34a58356394c | 70 | /** Increase middle level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 71 | * |
danielashercohen | 2:34a58356394c | 72 | */ |
danielashercohen | 2:34a58356394c | 73 | int increaseMiddle(); |
danielashercohen | 2:34a58356394c | 74 | /** Decrease middle level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 75 | * |
danielashercohen | 2:34a58356394c | 76 | */ |
danielashercohen | 2:34a58356394c | 77 | int decreaseMiddle(); |
danielashercohen | 2:34a58356394c | 78 | /** Read currently set middle level |
danielashercohen | 2:34a58356394c | 79 | * |
danielashercohen | 2:34a58356394c | 80 | */ |
danielashercohen | 2:34a58356394c | 81 | int readMiddle (); |
danielashercohen | 2:34a58356394c | 82 | |
danielashercohen | 2:34a58356394c | 83 | /** Increase Bass level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 84 | * |
danielashercohen | 2:34a58356394c | 85 | */ |
danielashercohen | 2:34a58356394c | 86 | int increaseBass(); |
danielashercohen | 2:34a58356394c | 87 | /** Decrease bass level (-5 -> 5) |
danielashercohen | 2:34a58356394c | 88 | * |
danielashercohen | 2:34a58356394c | 89 | */ |
danielashercohen | 2:34a58356394c | 90 | int decreaseBass(); |
danielashercohen | 2:34a58356394c | 91 | /** Read currently set middle level |
danielashercohen | 2:34a58356394c | 92 | * |
danielashercohen | 2:34a58356394c | 93 | */ |
danielashercohen | 2:34a58356394c | 94 | int readBass (); |
danielashercohen | 2:34a58356394c | 95 | |
danielashercohen | 2:34a58356394c | 96 | /** Adjust the volume of each channel attenuator |
danielashercohen | 2:34a58356394c | 97 | * |
danielashercohen | 2:34a58356394c | 98 | * @param speakerNumber |
danielashercohen | 2:34a58356394c | 99 | * 1 - left front, |
danielashercohen | 2:34a58356394c | 100 | * 2 - right front, |
danielashercohen | 2:34a58356394c | 101 | * 3 - back left, |
danielashercohen | 2:34a58356394c | 102 | * 4 - back right, |
danielashercohen | 2:34a58356394c | 103 | * 5 - subwoofer, |
danielashercohen | 2:34a58356394c | 104 | * 6 - volume of mix channel |
danielashercohen | 2:34a58356394c | 105 | */ |
danielashercohen | 2:34a58356394c | 106 | int increaseSpeaker (int speakerNumber); |
danielashercohen | 2:34a58356394c | 107 | /** Adjust the volume of each channel attenuator |
danielashercohen | 2:34a58356394c | 108 | * |
danielashercohen | 2:34a58356394c | 109 | * @param speakerNumber |
danielashercohen | 2:34a58356394c | 110 | * 1 - left front, |
danielashercohen | 2:34a58356394c | 111 | * 2 - right front, |
danielashercohen | 2:34a58356394c | 112 | * 3 - back left, |
danielashercohen | 2:34a58356394c | 113 | * 4 - back right, |
danielashercohen | 2:34a58356394c | 114 | * 5 - subwoofer, |
danielashercohen | 2:34a58356394c | 115 | * 6 - volume of mix channel |
danielashercohen | 2:34a58356394c | 116 | */ |
danielashercohen | 2:34a58356394c | 117 | int decreaseSpeaker (int speakerNumber); |
danielashercohen | 2:34a58356394c | 118 | |
danielashercohen | 2:34a58356394c | 119 | /** Read the value that is currently set for each attenuator |
danielashercohen | 2:34a58356394c | 120 | * @param speakerNumber match the increase and decrease parameter values |
danielashercohen | 2:34a58356394c | 121 | */ |
danielashercohen | 2:34a58356394c | 122 | int readSpeaker (int speakerNumber); |
danielashercohen | 2:34a58356394c | 123 | |
danielashercohen | 2:34a58356394c | 124 | /** Enable the mix input (by default this mixes to the front two channels |
danielashercohen | 2:34a58356394c | 125 | * @return The return is the state of the mix (1 = on, 0 = 0ff) after this call |
danielashercohen | 2:34a58356394c | 126 | */ |
danielashercohen | 2:34a58356394c | 127 | int toggleMix(); |
danielashercohen | 2:34a58356394c | 128 | |
danielashercohen | 2:34a58356394c | 129 | /** Read if Mix is enabled or not |
danielashercohen | 2:34a58356394c | 130 | * @return The return is the state of the mix (1 = on, 0 = 0ff) after this call |
danielashercohen | 2:34a58356394c | 131 | */ |
danielashercohen | 2:34a58356394c | 132 | int readMix(); |
danielashercohen | 1:69c37f1ab7df | 133 | |
danielashercohen | 0:86ea14016b10 | 134 | private: |
danielashercohen | 1:69c37f1ab7df | 135 | // Signals related to I2C communication |
danielashercohen | 0:86ea14016b10 | 136 | I2C _device; |
danielashercohen | 1:69c37f1ab7df | 137 | |
danielashercohen | 1:69c37f1ab7df | 138 | //////////////////////////////////// |
danielashercohen | 1:69c37f1ab7df | 139 | // register addresses for TDA7419 // |
danielashercohen | 1:69c37f1ab7df | 140 | //////////////////////////////////// |
danielashercohen | 1:69c37f1ab7df | 141 | int _volume; |
danielashercohen | 1:69c37f1ab7df | 142 | int _input; |
danielashercohen | 1:69c37f1ab7df | 143 | |
danielashercohen | 1:69c37f1ab7df | 144 | int _mute; |
danielashercohen | 1:69c37f1ab7df | 145 | int _mix; |
danielashercohen | 1:69c37f1ab7df | 146 | |
danielashercohen | 1:69c37f1ab7df | 147 | // for register 4 Treble Filter |
danielashercohen | 1:69c37f1ab7df | 148 | int _referenceInE; |
danielashercohen | 1:69c37f1ab7df | 149 | int _trebleCenterFreq; |
danielashercohen | 1:69c37f1ab7df | 150 | int _treble; |
danielashercohen | 1:69c37f1ab7df | 151 | |
danielashercohen | 1:69c37f1ab7df | 152 | // for middle frequecy filter |
danielashercohen | 1:69c37f1ab7df | 153 | int _middleSoftStep; |
danielashercohen | 1:69c37f1ab7df | 154 | int _middleQ; |
danielashercohen | 1:69c37f1ab7df | 155 | int _middle; |
danielashercohen | 1:69c37f1ab7df | 156 | |
danielashercohen | 1:69c37f1ab7df | 157 | // for bass frequecy filter |
danielashercohen | 1:69c37f1ab7df | 158 | int _bassSoftStep; |
danielashercohen | 1:69c37f1ab7df | 159 | int _bassQ; |
danielashercohen | 1:69c37f1ab7df | 160 | int _bass; |
danielashercohen | 1:69c37f1ab7df | 161 | |
danielashercohen | 1:69c37f1ab7df | 162 | // for output attenuators |
danielashercohen | 1:69c37f1ab7df | 163 | int _atten_lf; |
danielashercohen | 1:69c37f1ab7df | 164 | int _atten_rf; |
danielashercohen | 1:69c37f1ab7df | 165 | int _atten_lr; |
danielashercohen | 1:69c37f1ab7df | 166 | int _atten_rr; |
danielashercohen | 1:69c37f1ab7df | 167 | int _atten_mix; |
danielashercohen | 1:69c37f1ab7df | 168 | int _atten_sub; |
danielashercohen | 2:34a58356394c | 169 | |
danielashercohen | 2:34a58356394c | 170 | void writeToTDA7419 (int command, int value); |
danielashercohen | 2:34a58356394c | 171 | void setAttenuationReg (int regAddr, int attenuation); |
danielashercohen | 1:69c37f1ab7df | 172 | int calcToneAttenuationReg(int attenuation); |
danielashercohen | 1:69c37f1ab7df | 173 | void updateTDA7419Reg(); |
danielashercohen | 0:86ea14016b10 | 174 | |
danielashercohen | 0:86ea14016b10 | 175 | }; |
danielashercohen | 0:86ea14016b10 | 176 | |
danielashercohen | 0:86ea14016b10 | 177 | #endif |
danielashercohen | 0:86ea14016b10 | 178 | |
danielashercohen | 0:86ea14016b10 | 179 | |
danielashercohen | 0:86ea14016b10 | 180 | |
danielashercohen | 0:86ea14016b10 | 181 | |
danielashercohen | 0:86ea14016b10 | 182 | |
danielashercohen | 0:86ea14016b10 | 183 | |
danielashercohen | 0:86ea14016b10 | 184 | |
danielashercohen | 0:86ea14016b10 | 185 | |
danielashercohen | 0:86ea14016b10 | 186 | |
danielashercohen | 0:86ea14016b10 | 187 | |
danielashercohen | 0:86ea14016b10 | 188 | |
danielashercohen | 0:86ea14016b10 | 189 | |
danielashercohen | 0:86ea14016b10 | 190 | |
danielashercohen | 0:86ea14016b10 | 191 |