|
|
View previous topic :: View next topic |
Author |
Message |
Ttelmah
Joined: 11 Mar 2010 Posts: 19554
|
|
Posted: Thu Jan 26, 2023 4:06 am |
|
|
You don't compile it, you just include it. It is a library, not a program.
Have code with your processor setup, fuses etc., then #include it, and
use a function from it. The functions in it are all the standard C math.h
functions. log, exp, sin, cos etc..
Beware though that FP maths is very slow on a basic PIC, very bulky,
aqnd limited in accuracy.
There are also more efficient implementations, or you might be better
to use fixed point approximations.
Last edited by Ttelmah on Thu Jan 26, 2023 4:13 am; edited 1 time in total |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Thu Jan 26, 2023 4:11 am |
|
|
Ttelmah wrote: | You don't compile it, you just include it. It is a library, not a program.
Have code with your processor setup, fuses etc., then #include it, and
use a function from it. The functions in it are all the standard C math.h
functions. log, exp, sin, cos etc.. |
what i mean is : when i compile the program that pcm programmer gave me, it open the math.h (i've found one on internet) and says there is many errors in there. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19554
|
|
Posted: Thu Jan 26, 2023 4:15 am |
|
|
You don't 'use one from the internet', you use the one that comes with the
compiler.....
Some of the stuff inside math.h, is tightly optimised for the compiler, not
'generic' code. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Thu Jan 26, 2023 4:19 am |
|
|
Ttelmah wrote: | You don't 'use one from the internet', you use the one that comes with the
compiler.....
Some of the stuff inside math.h, is tightly optimised for the compiler, not
'generic' code. |
yes, but when i use the library from compiler it says "undefined identifier --atan"
the lines where the error come from are these :
accel_xangle = 57.295*atan((float)accel_yout/ sqrt(pow((float)accel_zout,2)+pow((float)accel_xout,2)));
accel_yangle = 57.295*atan((float)-accel_xout/ sqrt(pow((float)accel_zout,2)+pow((float)accel_yout,2))); |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19554
|
|
Posted: Thu Jan 26, 2023 4:29 am |
|
|
You need to check it is loading the correct file.
atan is there. Line 1609 in the current file.
Sounds as if you are possibly loading the wrong file from somewhere, or
the file you have has got corrupted.
Remember the #include needs to be before you use it.
What is on the lines immediately in front of these?.
The compiler has a 'habit', where there is a fault in a previous line,
of reporting a completely different fault a couple of lines later. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Thu Jan 26, 2023 4:38 am |
|
|
Ttelmah wrote: | You need to check it is loading the correct file.
atan is there. Line 1609 in the current file.
Sounds as if you are possibly loading the wrong file from somewhere, or
the file you have has got corrupted.
Remember the #include needs to be before you use it.
What is on the lines immediately in front of these?.
The compiler has a 'habit', where there is a fault in a previous line,
of reporting a completely different fault a couple of lines later. |
there is these lines after :
Code: |
void Get_Accel_Angles()
{
accel_xangle = 57.295*atan((float)accel_yout/ sqrt(pow((float)accel_zout,2)+pow((float)accel_xout,2)));
accel_yangle = 57.295*atan((float)-accel_xout/ sqrt(pow((float)accel_zout,2)+pow((float)accel_yout,2)));
}
//--------------------------------------------------
void Calibrate_Gyros()
{
int16 x = 0;
gyro_xout_offset_1000sum = 0;
gyro_yout_offset_1000sum = 0;
gyro_zout_offset_1000sum = 0;
|
in fact, the problem might be the file because when i open it, it doesn't display anything, like if the file is empty. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Jan 26, 2023 4:50 am |
|
|
You may have a bootleg compiler, and it's missing files, or has corrupted files. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Thu Jan 26, 2023 4:54 am |
|
|
PCM programmer wrote: | You may have a bootleg compiler, and it's missing files, or has corrupted files. |
MATH.h seems to be the only file empty, i have verifyed many others. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Thu Jan 26, 2023 5:19 am |
|
|
PCM programmer wrote: | You may have a bootleg compiler, and it's missing files, or has corrupted files. |
I just received another math.h from another PC and i works ^^.
The thing is that the PIC use 84% ROM could i try to put the gyroscopes functions in commentary to save some space's memory? or the accel need to have gyro values as reference? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19554
|
|
Posted: Fri Jan 27, 2023 2:15 am |
|
|
That was the point about my warning:
Quote: |
Beware though that FP maths is very slow on a basic PIC, very bulky,
and limited in accuracy.
There are also more efficient implementations, or you might be better
to use fixed point approximations.
|
Note the word 'bulky'.
Now there are more efficient implementations of atan. I posted a set in
the code library a while ago. Slightly less accurate, but several times
faster, and smaller than the standard functions.
What is needed, depends on what values your code requires. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Fri Jan 27, 2023 5:46 am |
|
|
Ttelmah wrote: | That was the point about my warning:
Quote: |
Beware though that FP maths is very slow on a basic PIC, very bulky,
and limited in accuracy.
There are also more efficient implementations, or you might be better
to use fixed point approximations.
|
Note the word 'bulky'.
Now there are more efficient implementations of atan. I posted a set in
the code library a while ago. Slightly less accurate, but several times
faster, and smaller than the standard functions.
What is needed, depends on what values your code requires. |
Okay i'll check that. And i wll search what atan and the other mathematic function do exactly. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Fri Jan 27, 2023 3:14 pm |
|
|
Ttelmah wrote: | That was the point about my warning:
Quote: |
Beware though that FP maths is very slow on a basic PIC, very bulky,
and limited in accuracy.
There are also more efficient implementations, or you might be better
to use fixed point approximations.
|
Note the word 'bulky'.
Now there are more efficient implementations of atan. I posted a set in
the code library a while ago. Slightly less accurate, but several times
faster, and smaller than the standard functions.
What is needed, depends on what values your code requires. |
By the way i've got one more question, do you think that i can reduce the delay of the values's refreshing? I mean, in the main, after the functions there is a delay of 2 seconds, if i reduce it will the microcontrolleur be able to do the mathematics functions fast enough? im wondering if the micro could do it faster without any problems. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9249 Location: Greensville,Ontario
|
|
Posted: Fri Jan 27, 2023 3:26 pm |
|
|
Without seeing 'main()', I don't know WHY there's a 2 second delay.
It might be necessary between module reads ??? or more than likely an easy 'cheat' to just have the LCD screen update once every 2 seconds, so numbers don't change on the screen ??
I use the RTC 1Hz interrupt to 'trigger' my LCD screen updates for most projects. That way the PIC can do 'other things'. code like 'delay_ms(2000)' forces the PIC to do NOTHING until the delay has finished. |
|
|
AKA TENDO
Joined: 25 Jan 2023 Posts: 47
|
|
Posted: Fri Jan 27, 2023 4:27 pm |
|
|
temtronic wrote: | Without seeing 'main()', I don't know WHY there's a 2 second delay.
It might be necessary between module reads ??? or more than likely an easy 'cheat' to just have the LCD screen update once every 2 seconds, so numbers don't change on the screen ??
I use the RTC 1Hz interrupt to 'trigger' my LCD screen updates for most projects. That way the PIC can do 'other things'. code like 'delay_ms(2000)' forces the PIC to do NOTHING until the delay has finished. |
There is no lcp or any other display, in the main there is only functions that get gyro and accel values so i dont know. My friend tried to put 1500 ms and it worked! . But i gues the delay is for allowing the pic to do the mathematics operations.But i dont dare to reduce more the delay just in case of the pic lag |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9249 Location: Greensville,Ontario
|
|
Posted: Fri Jan 27, 2023 5:24 pm |
|
|
The PIC like every other computer with just one ALU, can only do ONE operation at a time.
It cannot do ANYTHING 'inside' of a delay_ms(xxxx). it literally just decrements a counter (or two) wasting time, until the count is zero.
Again, would have to see main() to understand WHY there's an inline delay. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|