lab4 using referenced voltage from knob and generate voltage output from DAC mcp4922
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:bdf668d4c05b
- Child:
- 1:b81dc534e7d7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Nov 02 02:15:49 2018 +0000 @@ -0,0 +1,70 @@ +#include "mbed.h" +#include "math.h" +/********************** + * MCP4922 + **********************/ + +///SPI Interface +SPI MCP4922_SPI(D11,D12,D13);//MOSI ,MISO ,SCK +DigitalOut MCP4922_CS(D7);//CS + + + +//Digital Output +DigitalOut MCP4922_LDAC(D4); +DigitalOut MCP4922_SHDN(D6); +void volt_out(double volt) +{ + + uint16_t temp=((uint16_t)(volt*4096/3.33))&0x0fff; + uint16_t MCP4922_Sent_Data = 0; + MCP4922_Sent_Data = 0x3000|temp; + //MCP4922_Sent_Data = 0x3fff; + MCP4922_CS = 0; + + + //sent data buffer to mcp4922 + MCP4922_SPI.write(MCP4922_Sent_Data); + + //set CS to High to End MCP4922 SPI Interface + MCP4922_CS = 1; + + //set LDAC to LOW to Load data to output + MCP4922_LDAC = 0 ; + + //wait at least 100ns = 0.1 microsec ..... So set at 1 microsec + wait_us(1); + + //set LDAC to High to prepare next output + MCP4922_LDAC = 1 ; +} +int main() +{ + /****************************** + ***** setup ******* + ******************************/ + + /////////setup SPI////////// + //set CS High + MCP4922_CS=1; + + //set SPI mode [1,1]=> mode 3 @16bit + MCP4922_SPI.format(16,3); + + //set SPI Frequency @20MHz + MCP4922_SPI.frequency(20000000); + + //set Load DAC High (inactive) + MCP4922_LDAC = 1; + + //set shutdown DAC High (inactive) + MCP4922_SHDN = 1; + + //loop + while(1) { + for(double x=0; x<2*3.141592; x+=0.00001) { + volt_out((sin(x)+1.00)*3.33/2.00); + } + + } +}