Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Revision 0:4e9491b0ed04, committed 2015-08-20
- Comitter:
- visarute
- Date:
- Thu Aug 20 21:21:22 2015 +0000
- Commit message:
- a
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 4e9491b0ed04 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Aug 20 21:21:22 2015 +0000
@@ -0,0 +1,308 @@
+// Paladin board control code
+// control switch matrix and function generator
+// by Visarute Pinrod 4/23/2015
+// with AD9833 control code from Po-Cheng Chen 07-04-2014
+
+#include "mbed.h"
+#include "SPI.h"
+#include "DigitalOut.h"
+
+SPI spi1(p5, p6, p7); //mosi, miso, sclk --> don't need MISO
+DigitalOut cs_AD9833(p8); //use p8 as FSync data pin (same as chip select)
+
+Serial pc(USBTX, USBRX); //define serial USB port
+DigitalOut myled1(LED1), myled2(LED2), myled3(LED3), myled4(LED4); //define LEDs
+
+DigitalOut set1(p15);
+DigitalOut set2(p16);
+DigitalOut set3(p19);
+DigitalOut set4(p18);
+DigitalOut set5(p23);
+DigitalOut set6(p25);
+DigitalOut set7(p27);
+DigitalOut set8(p29);
+
+DigitalOut rset1(p13);
+DigitalOut rset2(p14);
+DigitalOut rset3(p20);
+DigitalOut rset4(p17);
+DigitalOut rset5(p24);
+DigitalOut rset6(p26);
+DigitalOut rset7(p28);
+DigitalOut rset8(p30);
+
+DigitalOut enableVout(p21);
+DigitalOut disableVout(p22);
+
+// get value from command format
+int getVal(char *cmd){
+ int val=-1;
+ char valC[4];
+ valC[0]=cmd[3];
+ valC[1]=cmd[4];
+ valC[2]=cmd[5];
+ valC[3]=cmd[6];
+ sscanf(valC,"%4x",&val);
+ return val;
+}
+
+// Start SPI connection
+void startSPI(){
+ spi1.format(8,3);
+ spi1.frequency(1000000);
+ cs_AD9833 = 1;
+}
+
+void writeAD9833(short dat)
+{
+ cs_AD9833 = 0;
+ spi1.write(dat>>8);
+ spi1.write(dat&0xFF);
+ cs_AD9833 = 1;
+}
+
+/////////////////////////////////////////////////////////////////////////
+// Function for AD9833 control code
+// Create by Po-Cheng Chen 07-04-2014
+// Version 0.2 (MATLAB)
+/////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////
+// Calculate desired frequency
+/////////////////////////////////////////////////////////////////////////
+long calFreq(long freq)
+{
+ long freq_cal; //define freq calculated value
+ float freq_val = 0.00000000; //define ferq calculate tempotary value
+
+ //calculate the frqe reg value
+ //((desired frequency)/(reference frequency)) x 0x10000000.
+ freq_val = (((float)(freq))/10000000);
+ freq_cal = freq_val*0x10000000;
+ return freq_cal;
+}
+/////////////////////////////////////////////////////////////////////////
+// Set frequency register
+/////////////////////////////////////////////////////////////////////////
+void setFreq(long frequency)
+{
+ int freq_MSB; //define freq MSB reg value
+ int freq_LSB; //define freq LSB reg value
+
+ long freq_cal = calFreq(frequency); //calculate the frequency register
+
+ freq_MSB = (int)((freq_cal & 0xFFFC000)>>14); // shift 14 bits
+ freq_LSB = (int)(freq_cal & 0x3FFF);
+
+ freq_MSB = freq_MSB | 0x4000; //assign freq reg address
+ freq_LSB = freq_LSB | 0x4000;
+ ///////////////////////////////////////////////////////////////////////////////////
+ //print the data from the serial port to verifiy the function
+ //printf("freq_LSB 0x%x\n\r", freq_LSB);
+ //printf("freq_MSB 0x%x\n\r", freq_MSB);
+ ///////////////////////////////////////////////////////////////////////////////////
+ writeAD9833(0x2100); //write control reg - apply reset
+ writeAD9833(freq_LSB); //write freq reg - LSB
+ writeAD9833(freq_MSB); //write freq reg - MSB
+ writeAD9833(0xC000); //write phase reg - (0 for now)
+ writeAD9833(0x2000); //write control reg - disable reset
+}
+
+void swInitial(){
+ set1 = 0;
+ set2 = 0;
+ set3 = 0;
+ set4 = 0;
+ set5 = 0;
+ set6 = 0;
+ set7 = 0;
+ set8 = 0;
+ rset1 = 0;
+ rset2 = 0;
+ rset3 = 0;
+ rset4 = 0;
+ rset5 = 0;
+ rset6 = 0;
+ rset7 = 0;
+ rset8 = 0;
+ enableVout = 0;
+ disableVout = 0;
+}
+
+void setSwitch(DigitalOut& sw){
+ sw = 1;
+ wait(0.005);
+ sw = 0;
+ wait(0.05);
+}
+
+void setRotation(){
+ setSwitch(set1);
+ setSwitch(rset2);
+ setSwitch(rset3);
+ setSwitch(set4);
+ setSwitch(set5);
+ setSwitch(rset6);
+ setSwitch(set7);
+ setSwitch(rset8);
+}
+
+void rsetRotation(){
+ setSwitch(rset1);
+ setSwitch(set2);
+ setSwitch(set3);
+ setSwitch(rset4);
+ setSwitch(rset5);
+ setSwitch(set6);
+ setSwitch(rset7);
+ setSwitch(set8);
+}
+
+void setX(){
+ setSwitch(rset1);
+ setSwitch(rset2);
+ setSwitch(rset3);
+ setSwitch(set4);
+ setSwitch(set5);
+ setSwitch(set6);
+ setSwitch(rset7);
+ setSwitch(set8);
+}
+
+void rsetX(){
+ setSwitch(set1);
+ setSwitch(set2);
+ setSwitch(set3);
+ setSwitch(rset4);
+ setSwitch(rset5);
+ setSwitch(rset6);
+ setSwitch(set7);
+ setSwitch(rset8);
+}
+
+void setY(){
+ setSwitch(set1);
+ setSwitch(rset2);
+ setSwitch(set3);
+ setSwitch(set4);
+ setSwitch(rset5);
+ setSwitch(set6);
+ setSwitch(rset7);
+ setSwitch(rset8);
+}
+
+void rsetY(){
+ setSwitch(rset1);
+ setSwitch(set2);
+ setSwitch(rset3);
+ setSwitch(rset4);
+ setSwitch(set5);
+ setSwitch(rset6);
+ setSwitch(set7);
+ setSwitch(set8);
+}
+
+void setModeR(){
+ swInitial();
+ setRotation();
+ rsetRotation();
+ setRotation();
+ setRotation();
+ swInitial();
+}
+
+void setModeX(){
+ swInitial();
+ setX();
+ rsetX();
+ setX();
+ setX();
+ swInitial();
+}
+
+void setModeY(){
+ swInitial();
+ setY();
+ rsetY();
+ setY();
+ setY();
+ swInitial();
+}
+
+void enableOutput(){
+ swInitial();
+ setSwitch(enableVout);
+ swInitial();
+}
+
+void disableOutput(){
+ swInitial();
+ setSwitch(disableVout);
+ swInitial();
+}
+
+// Start connection
+void initialization(){
+ pc.baud(921600);
+ startSPI(); // Start SPI connection
+ setModeR();
+ disableOutput();
+ enableOutput();
+ enableOutput();
+}
+
+
+int main(){
+ // Variable for main function
+ char buf[16]; // Buffer for the command from PC
+ int val; // Value from command
+
+ // Start system
+ initialization();
+ // Infinite loop: listen to serial command
+ while(1) {
+ if (pc.readable()) {
+ //Command format: Start Mode Submode VALUe enD S F F FFFF D
+ pc.gets(buf, 16);
+ //pc.printf("Get buf: %s\n",buf);
+ if ((buf[0] == 'S')&&(buf[7] == 'D')) {
+ //Mode switch
+ switch(buf[1]) {
+ //set axis mode
+ case 'm':
+ // Submode switch
+ switch(buf[2]) {
+ case 'r':
+ setModeR();
+ break;
+ case 'x':
+ setModeX();
+ break;
+ case 'y':
+ setModeY();
+ break;
+ default:
+ break;
+ }
+ //Output enable
+ case 'o':
+ // Submode switch
+ switch(buf[2]) {
+ case 'T':
+ enableOutput();
+ break;
+ case 'F':
+ disableOutput();
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+}
\ No newline at end of file
diff -r 000000000000 -r 4e9491b0ed04 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Aug 20 21:21:22 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/b9ad9a133dc7 \ No newline at end of file