The MAX500 is an 8 bit DAC that can output to higher voltages (~12V). The chip has 4 onboard DAC channels.

Dependencies:   DAC

Revision:
0:b74d88185698
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX500.h	Tue Jul 03 03:22:59 2012 +0000
@@ -0,0 +1,78 @@
+#ifndef MAX500_H
+#define MAX500_H
+
+#include "DAC_SPI.h"
+
+/** 
+* The MAX500 is a quad package 8 bit DAC.  We should be able to produce four analog output voltages up to the externally wired voltage references (VrefA/B, VrefC, VrefD).
+ The maximum voltage output is recommended to be about 4V less than the power supply voltage, although getting a 12V output from a 15V power supply is possible.  
+*
+* Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX500.pdf
+*
+* We use the "3-wire" serial interface since it seems to be more compatible with the mbed Serial library timing than the "2-wire" interface.  The 2-wire interface uses a somewhat non-standard timing scheme
+* and may require custom code support.
+*
+* All serial commands are 10 bit words.   The highest 2 bits are control bits, while the last 8 are the data bits for the 8-bit DAC MAX500.   
+*    + bit 13-12: choose which DAC to use
+*    + bit 11-0: Data bits for the DAC.
+*/
+class MAX500: public DAC_SPI
+{    
+    public:
+    
+    /** Initializes the MAX 500 DAC 
+    *
+    * @param SPIchannelNum An int representing the SPI channel used by this DAC
+    * channel 0 for p5 and p7
+    * channel 1 for p11 and p13
+    * @param LOAD The chip select pin (CS) used to identify the device
+    * @param LDAC The LDAC pin used to synchronize updates of multiple devices
+    */
+    MAX500(int SPIchannelNum, PinName LOAD,  PinName LDAC);
+    
+    /** Writes a value between 0-255 to the currently selected DAC output 
+    * @param DACvalue a value from 0-255 to write to the DAC register
+    */
+    virtual void write(int DACvalue);
+    
+    /** Writes a value in mV to the DAC outputs.
+    * The output will only be accurate if Vref is set to the appropriate voltage reference scaling factor. 
+    * @param millivolts The desired voltage output in millivolts
+    */
+    virtual void write_mV(int millivolts); 
+    
+    /** If automatic updating is disabled, this will update the DAC output on command */
+    void update();    
+    
+    /** select whether to use DAC A or DAC B. 
+    * @param DACnum 0 to modify DAC A, 1 to modify DAC B
+    */
+    virtual void select(char DACnum); 
+    
+    /** If true, the DAC output will update as soon as the output value is modified.  If false, it will wait for an update command*/
+    bool autoUpdate;
+    
+    /** The currently selected DAC channel.  0 for DAC A, 1 for DAC B*/
+    char DACselect;
+    
+    /** The output scaling factor in mV for channels A and B.
+    * The voltage wired to Vref will be used as the scaling factor which the DAC will use in producing the output voltage.
+    * If using the write_mV function, it is important that Vref is properly set.  This library uses 5000mV by default.
+    */
+    int VrefAB;
+    /** The output scaling factor in mV for channel C.
+    * The voltage wired to Vref will be used as the scaling factor which the DAC will use in producing the output voltage.
+    * If using the write_mV function, it is important that Vref is properly set.  This library uses 5000mV by default.
+    */
+    int VrefC;
+    /** The output scaling factor in mV for channel D.
+    * The voltage wired to Vref will be used as the scaling factor which the DAC will use in producing the output voltage.
+    * If using the write_mV function, it is important that Vref is properly set.  This library uses 5000mV by default.
+    */    
+    int VrefD;
+    
+    
+    
+};
+
+#endif //MAX500_H
\ No newline at end of file