Go Down

### Topic: Implementing Cordic Algorithm in Arduino (Read 4136 times)previous topic - next topic

#### nithesh26

##### Mar 18, 2014, 03:51 am
Can any one please tell me the code to implement Cordic algorithm for Arduino Uno. I'm having the 'C' language program for Cordic Algorithm.

#### jremington

#1
##### Mar 18, 2014, 04:17 am
Google "cordic algorithm c language" for examples.

#### fungus

#2
##### Mar 18, 2014, 02:44 pm

Can any one please tell me the code to implement Cordic algorithm for Arduino Uno. I'm having the 'C' language program for Cordic Algorithm.

You're in luck! The Arduino Uno uses the C++ language.
No, I don't answer questions sent in private messages (but I do accept thank-you notes...)

#### nithesh26

#3
##### Mar 18, 2014, 03:36 pm
what should we use in place of printf command for Arduino?

#4

#### nithesh26

#5
##### Apr 08, 2014, 12:58 am
Hello All,

I had a code for implementing CORDIC algorithm. While I go through it there were lot of errors showing up. Can anyone please help me with this.

#### nithesh26

#6
##### Apr 08, 2014, 12:59 amLast Edit: Apr 08, 2014, 04:55 am by Coding Badly Reason: 1
Hello All,

I had a code for implementing CORDIC algorithm. While I go through it there were lot of errors showing up. Can anyone please help me with this. Thanks in advance.

I'm attaching the code below.

Code: [Select]
`#define M_PI 3.1415926536897932384626#define K1 0.6072529350088812561694int main(int argc, char **argv){    int i;    int bits = 32; // number of bits    int mul = (1<<(bits-2));            int n = bits; // number of elements.    int c;    println("//Cordic in %d bit signed fixed point math\n", bits);    println("//Function is valid for arguments in range -pi/2 -- pi/2\n");    println("//for values pi/2--pi: value = half_pi-(theta-half_pi) and similarly for values -pi---pi/2\n");    println("//\n");    println("// 1.0 = %d\n", mul);    println("// 1/k = 0.6072529350088812561694\n");    println("// pi = 3.1415926536897932384626\n");    println("//Constants\n");    println("#define cordic_1K 0x%08X\n", (int)(mul*K1));    println("#define half_pi 0x%08X\n", (int)(mul*(M_PI/2)));    println("#define MUL %f\n", (double)mul);    println("#define CORDIC_NTAB %d\n", n);        println("int cordic_ctab [] = {");    for(i=0;i<n;i++)    {        c = (atan(pow(2, -i)) * mul);        println("0x%08X, ", c);    }    println("};\n\n");    //Print the cordic function    println("void cordic(int theta, int *s, int *c, int n)\n{\n  int k, d, tx, ty, tz;\n");    println("  int x=cordic_1K,y=0,z=theta;\n  n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n;\n");    println("  for (k=0; k<n; ++k)\n  {\n    d = z>>%d;\n", (bits-1));    println("    //get sign. for other architectures, you might want to use the more portable version\n");    println("    //d = z>=0 ? 0 : -1;\n    tx = x - (((y>>k) ^ d) - d);\n    ty = y + (((x>>k) ^ d) - d);\n");    println("    tz = z - ((cordic_ctab[k] ^ d) - d);\n    x = tx; y = ty; z = tz;\n  }  \n *c = x; *s = y;\n}\n");    }`

cordic-32bit.h

Code: [Select]
`//Cordic in 32 bit signed fixed point math//Function is valid for arguments in range -pi/2 -- pi/2//for values pi/2--pi: value = half_pi-(theta-half_pi) and similarly for values -pi---pi/2//// 1.0 = 1073741824// 1/k = 0.6072529350088812561694// pi = 3.1415926536897932384626//Constants#define cordic_1K 0x26DD3B6A#define half_pi 0x6487ED51#define MUL 1073741824.000000#define CORDIC_NTAB 32int cordic_ctab [] = {0x3243F6A8, 0x1DAC6705, 0x0FADBAFC, 0x07F56EA6, 0x03FEAB76, 0x01FFD55B, 0x00FFFAAA, 0x007FFF55, 0x003FFFEA, 0x001FFFFD, 0x000FFFFF, 0x0007FFFF, 0x0003FFFF, 0x0001FFFF, 0x0000FFFF, 0x00007FFF, 0x00003FFF, 0x00001FFF, 0x00000FFF, 0x000007FF, 0x000003FF, 0x000001FF, 0x000000FF, 0x0000007F, 0x0000003F, 0x0000001F, 0x0000000F, 0x00000008, 0x00000004, 0x00000002, 0x00000001, 0x00000000, };void cordic(int theta, int *s, int *c, int n){  int k, d, tx, ty, tz;  int x=cordic_1K,y=0,z=theta;  n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n;  for (k=0; k<n; ++k)  {    d = z>>31;    //get sign. for other architectures, you might want to use the more portable version    //d = z>=0 ? 0 : -1;    tx = x - (((y>>k) ^ d) - d);    ty = y + (((x>>k) ^ d) - d);    tz = z - ((cordic_ctab[k] ^ d) - d);    x = tx; y = ty; z = tz;  }   *c = x; *s = y;}`

Moderator edit: [code] [/code] tags added.

#### KeithRB

#7
##### Apr 08, 2014, 01:19 am
What does this have to do with arduino?

Arduino hides the main() function - how do expect to send it arguments? Instead arduino uses setup() and loop().

#### nithesh26

#8
##### Apr 08, 2014, 04:56 amLast Edit: Apr 08, 2014, 05:01 am by nithesh26 Reason: 1
I'm new to Arduino. I dont know the commands properly. I have downloaded this code through internet.

#### michinyon

#9
##### Apr 08, 2014, 07:00 am
Well you need to go and understand  setup() and loop() before you will get very far.

All of those println() function calls in your alleged C program  will need to be replaced by Serial.println() to work on the arduino.

#### AWOL

#10
##### Apr 08, 2014, 09:16 am
You'll also need to understand the difference between 16 and 32 bit integers.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.
I speak for myself, not Arduino.

#### nithesh26

#11
##### Apr 08, 2014, 05:17 pm
Arduino hides main ( ). So what should we use in the place of main ( ) ? And also if we use the setup function,should we assign any pin number to that?

#### PaulS

#12
##### Apr 08, 2014, 05:23 pm
Quote
And also if we use the setup function,should we assign any pin number to that?

Yes. You should use the number of the pin that setup() is attached to.

#### KeithRB

#13
##### Apr 08, 2014, 05:43 pm
http://arduino.cc/en/Reference/Setup

http://arduino.cc/en/Reference/Loop

If you want something done once, put it in setup().
If you want it done over and over, put it in loop().

#### robtillaart

#14
##### Apr 08, 2014, 10:15 pmLast Edit: Aug 20, 2015, 09:20 pm by robtillaart
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up