Penn Electric / MAX518
Committer:
PennElectric
Date:
Thu Dec 20 22:40:17 2012 +0000
Revision:
3:96d5489ff1ab
Parent:
1:aec29e73ffc1
Child:
4:83bdb4efea8b
added multiple constructors;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PennElectric 3:96d5489ff1ab 1 /* Copyright (c) <2012> <P. Patel>, MIT License
PennElectric 3:96d5489ff1ab 2 *
PennElectric 3:96d5489ff1ab 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
PennElectric 3:96d5489ff1ab 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
PennElectric 3:96d5489ff1ab 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
PennElectric 3:96d5489ff1ab 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
PennElectric 3:96d5489ff1ab 7 * furnished to do so, subject to the following conditions:
PennElectric 3:96d5489ff1ab 8 *
PennElectric 3:96d5489ff1ab 9 * The above copyright notice and this permission notice shall be included in all copies or
PennElectric 3:96d5489ff1ab 10 * substantial portions of the Software.
PennElectric 3:96d5489ff1ab 11 *
PennElectric 3:96d5489ff1ab 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
PennElectric 3:96d5489ff1ab 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
PennElectric 3:96d5489ff1ab 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
PennElectric 3:96d5489ff1ab 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
PennElectric 3:96d5489ff1ab 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
PennElectric 3:96d5489ff1ab 17 */
PennElectric 3:96d5489ff1ab 18
PennElectric 3:96d5489ff1ab 19 // ------------------------------ MAX518 Interfacing Library ------------------------------------
PennElectric 3:96d5489ff1ab 20
PennElectric 3:96d5489ff1ab 21
PennElectric 3:96d5489ff1ab 22 #include "MAX518.h"
PennElectric 3:96d5489ff1ab 23 #include "mbed.h"
PennElectric 3:96d5489ff1ab 24
PennElectric 3:96d5489ff1ab 25 // Class constructor 1, create i2c connection, update instance variables
PennElectric 3:96d5489ff1ab 26 DAC::DAC(PinName sda, PinName scl, int address, int freq, bool ack) : i2c(sda, scl) {
PennElectric 3:96d5489ff1ab 27 _address = address;
PennElectric 3:96d5489ff1ab 28 _ack = ack;
PennElectric 3:96d5489ff1ab 29 i2c.frequency(freq);
PennElectric 3:96d5489ff1ab 30 }
PennElectric 3:96d5489ff1ab 31 // Class constructor 2, create i2c connection, update instance variables
PennElectric 3:96d5489ff1ab 32 DAC::DAC(PinName sda, PinName scl, int address, bool ack) : i2c(sda, scl) {
PennElectric 3:96d5489ff1ab 33 _address = address;
PennElectric 3:96d5489ff1ab 34 _ack = ack;
PennElectric 3:96d5489ff1ab 35 }
PennElectric 3:96d5489ff1ab 36 // Class constructor 3, create i2c connection, update instance variables
PennElectric 3:96d5489ff1ab 37 DAC::DAC(PinName sda, PinName scl, int address, int freq) : i2c(sda, scl) {
PennElectric 3:96d5489ff1ab 38 _address = address;
PennElectric 3:96d5489ff1ab 39 _ack = true;
PennElectric 3:96d5489ff1ab 40 i2c.frequency(freq);
PennElectric 3:96d5489ff1ab 41 }
PennElectric 3:96d5489ff1ab 42 // Class constructor 4, create i2c connection, update instance variables
PennElectric 3:96d5489ff1ab 43 DAC::DAC(PinName sda, PinName scl, int address) : i2c(sda, scl) {
PennElectric 3:96d5489ff1ab 44 _address = address;
PennElectric 3:96d5489ff1ab 45 _ack = true;
PennElectric 3:96d5489ff1ab 46 }
PennElectric 3:96d5489ff1ab 47 // Set output of both DAC channels with ints 0 - 255
PennElectric 3:96d5489ff1ab 48 bool DAC::setDAC(int a, int b) {
PennElectric 3:96d5489ff1ab 49 if (a > 255 || a < 0 || b > 255 || b < 0)
PennElectric 3:96d5489ff1ab 50 return false; // Return if int a or int b is out of range
PennElectric 3:96d5489ff1ab 51 int check = 0; // Counter for ACK signals
PennElectric 3:96d5489ff1ab 52
PennElectric 3:96d5489ff1ab 53 i2c.start();
PennElectric 3:96d5489ff1ab 54 check += i2c.write(_address); // Write address
PennElectric 3:96d5489ff1ab 55 check += i2c.write(0); // Select Channel 1
PennElectric 3:96d5489ff1ab 56 check += i2c.write(a); // Write output value
PennElectric 3:96d5489ff1ab 57 check += i2c.write(1); // Select Channel 2
PennElectric 3:96d5489ff1ab 58 check += i2c.write(b); // Write output value
PennElectric 3:96d5489ff1ab 59 i2c.stop(); // End communication (trigger DAC to update outputs)
PennElectric 3:96d5489ff1ab 60
PennElectric 3:96d5489ff1ab 61 if (_ack && check != 5) return false; // Return false if device did not acknowledge when expected
PennElectric 3:96d5489ff1ab 62 else return true;
PennElectric 3:96d5489ff1ab 63 }
PennElectric 3:96d5489ff1ab 64
PennElectric 3:96d5489ff1ab 65 // Set output of DAC Channel 1 with int 0 - 255
PennElectric 3:96d5489ff1ab 66 bool DAC::setCh1(int n) {
PennElectric 3:96d5489ff1ab 67 if (n > 255 || n < 0) return false; // Return if n is out of range
PennElectric 3:96d5489ff1ab 68 int check = 0; // Counter for ACK signals
PennElectric 3:96d5489ff1ab 69
PennElectric 3:96d5489ff1ab 70 i2c.start();
PennElectric 3:96d5489ff1ab 71 check += i2c.write(_address); // Write address
PennElectric 3:96d5489ff1ab 72 check += i2c.write(0); // Select Channel 1
PennElectric 3:96d5489ff1ab 73 check += i2c.write(n); // Write output value
PennElectric 3:96d5489ff1ab 74 i2c.stop(); // End communication (trigger DAC to update outputs)
PennElectric 3:96d5489ff1ab 75
PennElectric 3:96d5489ff1ab 76 if (_ack && check != 3) return false; // Return false if device did not acknowledge when expected
PennElectric 3:96d5489ff1ab 77 else return true;
PennElectric 3:96d5489ff1ab 78 }
PennElectric 3:96d5489ff1ab 79
PennElectric 3:96d5489ff1ab 80 // Set output of DAC Channel 2 with int 0 - 255
PennElectric 3:96d5489ff1ab 81 bool DAC::setCh2(int n) {
PennElectric 3:96d5489ff1ab 82 if (n > 255 || n < 0) return false; // Return if n is out of range
PennElectric 3:96d5489ff1ab 83 int check = 0; // Counter for ACK signals
PennElectric 3:96d5489ff1ab 84
PennElectric 3:96d5489ff1ab 85 i2c.start();
PennElectric 3:96d5489ff1ab 86 check += i2c.write(_address); // Write address
PennElectric 3:96d5489ff1ab 87 check += i2c.write(1); // Select Channel 1
PennElectric 3:96d5489ff1ab 88 check += i2c.write(n); // Write output value
PennElectric 3:96d5489ff1ab 89 i2c.stop(); // End communication (trigger DAC to update outputs)
PennElectric 3:96d5489ff1ab 90
PennElectric 3:96d5489ff1ab 91 if (_ack && check != 3) return false; // Return false if device did not acknowledge when expected
PennElectric 3:96d5489ff1ab 92 else return true;
PennElectric 3:96d5489ff1ab 93 }
PennElectric 3:96d5489ff1ab 94
PennElectric 3:96d5489ff1ab 95 // Reset DAC (all outputs to 0)
PennElectric 3:96d5489ff1ab 96 bool DAC::reset() {
PennElectric 3:96d5489ff1ab 97 int check = 0; // Counter for ACK signals
PennElectric 3:96d5489ff1ab 98
PennElectric 3:96d5489ff1ab 99 i2c.start();
PennElectric 3:96d5489ff1ab 100 check += i2c.write(_address); // Write address
PennElectric 3:96d5489ff1ab 101 check += i2c.write(16); // Reset command (all outputs to 0)
PennElectric 3:96d5489ff1ab 102 i2c.stop(); // End communication (trigger DAC to update)
PennElectric 3:96d5489ff1ab 103
PennElectric 3:96d5489ff1ab 104 if (_ack && check != 2) return false; // Return false if device did not acknowledge when expected
PennElectric 3:96d5489ff1ab 105 else return true;
PennElectric 3:96d5489ff1ab 106 }
PennElectric 3:96d5489ff1ab 107
PennElectric 3:96d5489ff1ab 108 // Power down DAC into silent monitoring mode (outputs also go to 0)
PennElectric 3:96d5489ff1ab 109 bool DAC::powerDown() {
PennElectric 3:96d5489ff1ab 110 int check = 0; // Counter for ACK signals
PennElectric 3:96d5489ff1ab 111
PennElectric 3:96d5489ff1ab 112 i2c.start();
PennElectric 3:96d5489ff1ab 113 check += i2c.write(_address); // Write address
PennElectric 3:96d5489ff1ab 114 check += i2c.write(8); // Power down DAC into silent mode (outputs also go to 0)
PennElectric 3:96d5489ff1ab 115 i2c.stop(); // End communication (trigger DAC to update)
PennElectric 3:96d5489ff1ab 116
PennElectric 3:96d5489ff1ab 117 if (_ack && check != 2) return false; // Return false if device did not acknowledge when expected
PennElectric 3:96d5489ff1ab 118 else return true;
PennElectric 0:8ebf1c452028 119 }