Libreria del modulo generador de seniales
Dependents: Graficador_De_Bode_OTERO-OSSO_PPs2018
AD9833.cpp@0:1bc0260fa422, 2018-12-06 (annotated)
- Committer:
- JAgustinOtero
- Date:
- Thu Dec 06 00:08:12 2018 +0000
- Revision:
- 0:1bc0260fa422
funciones para el generador de seniales
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JAgustinOtero | 0:1bc0260fa422 | 1 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 2 | // AD9833 control code |
JAgustinOtero | 0:1bc0260fa422 | 3 | // Create by Po-Cheng Chen 07-04-2014 |
JAgustinOtero | 0:1bc0260fa422 | 4 | // Version 0.1 |
JAgustinOtero | 0:1bc0260fa422 | 5 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 6 | |
JAgustinOtero | 0:1bc0260fa422 | 7 | #include "mbed.h" |
JAgustinOtero | 0:1bc0260fa422 | 8 | #include "SPI.h" |
JAgustinOtero | 0:1bc0260fa422 | 9 | #include "DigitalOut.h" |
JAgustinOtero | 0:1bc0260fa422 | 10 | #include "AD9833.h" |
JAgustinOtero | 0:1bc0260fa422 | 11 | SPI AD9833_SPI(PTD6, PTD7, PTD5); //mosi, miso, sclk --> don't need MISO |
JAgustinOtero | 0:1bc0260fa422 | 12 | DigitalOut fSync(PTE1); //use p8 as FSync data pin (same as chip select) |
JAgustinOtero | 0:1bc0260fa422 | 13 | |
JAgustinOtero | 0:1bc0260fa422 | 14 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 15 | // SPI initialization |
JAgustinOtero | 0:1bc0260fa422 | 16 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 17 | void SPI_INITIALIZATION() |
JAgustinOtero | 0:1bc0260fa422 | 18 | { |
JAgustinOtero | 0:1bc0260fa422 | 19 | //Setup the spi for 16 bit data, with 25MHz clock rate, mode 2 |
JAgustinOtero | 0:1bc0260fa422 | 20 | // Note: mBed is MSB first SPI protocol |
JAgustinOtero | 0:1bc0260fa422 | 21 | AD9833_SPI.format(8,2); |
JAgustinOtero | 0:1bc0260fa422 | 22 | AD9833_SPI.frequency(250000/*250000*/); |
JAgustinOtero | 0:1bc0260fa422 | 23 | fSync = 1; |
JAgustinOtero | 0:1bc0260fa422 | 24 | wait_ms(10); |
JAgustinOtero | 0:1bc0260fa422 | 25 | } |
JAgustinOtero | 0:1bc0260fa422 | 26 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 27 | // SPI writing |
JAgustinOtero | 0:1bc0260fa422 | 28 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 29 | void write_SPI(short dat,short dat2) |
JAgustinOtero | 0:1bc0260fa422 | 30 | { |
JAgustinOtero | 0:1bc0260fa422 | 31 | fSync = 0; |
JAgustinOtero | 0:1bc0260fa422 | 32 | AD9833_SPI.write(dat); |
JAgustinOtero | 0:1bc0260fa422 | 33 | AD9833_SPI.write(dat2); |
JAgustinOtero | 0:1bc0260fa422 | 34 | fSync = 1; |
JAgustinOtero | 0:1bc0260fa422 | 35 | } |
JAgustinOtero | 0:1bc0260fa422 | 36 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 37 | // Set desired frequency |
JAgustinOtero | 0:1bc0260fa422 | 38 | // Comments:Calculate the desired frequency accrodingly |
JAgustinOtero | 0:1bc0260fa422 | 39 | // Do it in Matlab or mBed? |
JAgustinOtero | 0:1bc0260fa422 | 40 | ///////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 41 | void setFreq(long FREQ) |
JAgustinOtero | 0:1bc0260fa422 | 42 | { |
JAgustinOtero | 0:1bc0260fa422 | 43 | int freq_MSB; //define freq MSB reg value |
JAgustinOtero | 0:1bc0260fa422 | 44 | int freq_LSB; //define freq LSB reg value |
JAgustinOtero | 0:1bc0260fa422 | 45 | |
JAgustinOtero | 0:1bc0260fa422 | 46 | long freq_cal; //define freq calculated value |
JAgustinOtero | 0:1bc0260fa422 | 47 | float freq_val = 0.00000000; //define ferq calculate tempotary value |
JAgustinOtero | 0:1bc0260fa422 | 48 | |
JAgustinOtero | 0:1bc0260fa422 | 49 | //calculate the frqe reg value |
JAgustinOtero | 0:1bc0260fa422 | 50 | //((desired frequency)/(reference frequency)) x 0x10000000. |
JAgustinOtero | 0:1bc0260fa422 | 51 | freq_val = (((float)(FREQ))/25000000); |
JAgustinOtero | 0:1bc0260fa422 | 52 | freq_cal = freq_val*0x10000000; |
JAgustinOtero | 0:1bc0260fa422 | 53 | |
JAgustinOtero | 0:1bc0260fa422 | 54 | freq_MSB = (int)((freq_cal & 0xFFFC000)>>14); // shift 14 bits |
JAgustinOtero | 0:1bc0260fa422 | 55 | freq_LSB = (int)(freq_cal & 0x3FFF); |
JAgustinOtero | 0:1bc0260fa422 | 56 | |
JAgustinOtero | 0:1bc0260fa422 | 57 | freq_MSB = freq_MSB | 0x4000; //assign freq reg address |
JAgustinOtero | 0:1bc0260fa422 | 58 | freq_LSB = freq_LSB | 0x4000; |
JAgustinOtero | 0:1bc0260fa422 | 59 | /////////////////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 60 | /* //print the data from the serial port to verifiy the function |
JAgustinOtero | 0:1bc0260fa422 | 61 | printf("freq_LSB 0x%x\n\r", freq_LSB); |
JAgustinOtero | 0:1bc0260fa422 | 62 | //print the data from the serial port to verifiy the function |
JAgustinOtero | 0:1bc0260fa422 | 63 | printf("freq_MSB 0x%x\n\r", freq_MSB);*/ |
JAgustinOtero | 0:1bc0260fa422 | 64 | /////////////////////////////////////////////////////////////////////////////////// |
JAgustinOtero | 0:1bc0260fa422 | 65 | write_SPI(0x21 , 0x00); //write control reg - apply reset |
JAgustinOtero | 0:1bc0260fa422 | 66 | //write control reg - apply reset |
JAgustinOtero | 0:1bc0260fa422 | 67 | write_SPI((freq_LSB & 0xFF00)>>8 , freq_LSB & 0x00FF); //write freq reg - LSB |
JAgustinOtero | 0:1bc0260fa422 | 68 | //write freq reg - LSB |
JAgustinOtero | 0:1bc0260fa422 | 69 | write_SPI((freq_MSB & 0xFF00)>>8 , freq_MSB & 0x00FF); |
JAgustinOtero | 0:1bc0260fa422 | 70 | //write freq reg - MSB |
JAgustinOtero | 0:1bc0260fa422 | 71 | write_SPI(0xC0 , 0x00); //write phase reg - 0 for now |
JAgustinOtero | 0:1bc0260fa422 | 72 | |
JAgustinOtero | 0:1bc0260fa422 | 73 | write_SPI(0x20 , 0x00); //write control reg - disable reset |
JAgustinOtero | 0:1bc0260fa422 | 74 | |
JAgustinOtero | 0:1bc0260fa422 | 75 | } |