CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Problem with error "Improper use of a function identifi

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Saelee



Joined: 16 Oct 2016
Posts: 4

View user's profile Send private message Send e-mail AIM Address

Problem with error "Improper use of a function identifi
PostPosted: Tue Oct 18, 2016 3:56 am     Reply with quote

Hello everybody
I'm newbie for CCS compiler
I try to connect my mpu6050 with pic16f887 and send data to pc by serial port, but I can't compile this code because error "Improper use of a function identifier" in line 12 " while(TRUE) "

please help me solve it


Code:
#include <16F887.h>
#use delay(clock=4000000)
#use I2C(master,sda=PIN_C4,scl=PIN_C3,slow,restart_wdt)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#include "mpu6050.c"

void main()
{
signed int8 A_data[6];
signed int16 Xa=0,Ya=0,Za=0;

   while(TRUE)
   {
   A_data[0]=mpu6050_read(0x3B); //Read X axis(LSB)
   A_data[1]=mpu6050_read(0x3C); //Read X axis(MSB)
   A_data[2]=mpu6050_read(0x3D); //Read Y axis(LSB)
   A_data[3]=mpu6050_read(0x3E); //Read Y axis(MSB)
   A_data[4]=mpu6050_read(0x3F); //Read Z axis(LSB)
   A_data[5]=mpu6050_read(0x40); //Read Z axis(MSB)
   
   Xa=make16(A_data[0],A_data[1]);
   Ya=make16(A_data[2],A_data[3]);
   Za=make16(A_data[4],A_data[5]);
   
   printf("X:%ld  ",Xa);
   printf("Y:%ld  ",Ya);
   printf("Z:%ld  ",Za);
   delay_ms(100);
}
}


I modify code from >> http://www.sonsivri.to/forum/index.php?topic=59978.0
temtronic



Joined: 01 Jul 2010
Posts: 9221
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Oct 18, 2016 4:54 am     Reply with quote

You need to show us this driver code..
#include "mpu6050.c"

as line 12 might be the first access of it.

now general comments

1) Always add 'errors' to the use rs232(...options...) otherwise UART buffer will 'stall' or 'hang' after 2-3 incoming characters...

2) Always compile and run PCM P's 'I2C scanner' program that's in the code library when using I2C devices. It WILL tell you if the PIC can 'see' the I2C device ! This will confirm the hardware is correct !!

3) Most (all) devices require a 'setup' or 'initialization'. At this time, registers will be configured, perhaps a delay for sync, etc. I don't see that in your program, so perhaps the device isn't properly configured?

4) CPU clock is only 4MHz. You should go faster 8,16, ?? so that you can do more in less time., though 4 Megs is a good 'test bench' speed as instructions take 1us each (jumps 2).


Jay
dyeatman



Joined: 06 Sep 2003
Posts: 1933
Location: Norman, OK

View user's profile Send private message

PostPosted: Tue Oct 18, 2016 5:10 am     Reply with quote

If you copied the exact code shown at the link, the MPU6050 library is not
complete. For one thing it is missing the closing brace at the end. I don't
know what other modifications you have made.
_________________
Google and Forum Search are some of your best tools!!!!
Saelee



Joined: 16 Oct 2016
Posts: 4

View user's profile Send private message Send e-mail AIM Address

PostPosted: Tue Oct 18, 2016 5:10 am     Reply with quote

this driver code, I copy from >>http://www.sonsivri.to/forum/index.php?topic=59978.0



Code:
// MPU6050 required Registers

#define W_DATA         0xD0
#define R_DATA         0xD1
#define PWR_MGMT_1     0x6B
#define PWR_MGMT_2     0x6C
#define SMPRT_DIV      0x19
#define CONFIG_R       0x1A
#define GYRO_CONFIG    0x1B
#define ACCEL_CONFIG   0x1C
#define ACCEL_XOUT_H   0x3B
#define ACCEL_XOUT_L   0x3C
#define ACCEL_YOUT_H   0x3D
#define ACCEL_YOUT_L   0x3E
#define ACCEL_ZOUT_H   0x3F
#define ACCEL_ZOUT_L   0x40
#define TEMP_OUT_H     0x41
#define TEMP_OUT_L     0x42
#define GYRO_XOUT_H    0x43
#define GYRO_XOUT_L    0x44
#define GYRO_YOUT_H    0x45
#define GYRO_YOUT_L    0x46
#define GYRO_ZOUT_H    0x47
#define GYRO_ZOUT_L    0x48

void mpu6050_write(int add, int data)
{
         i2c_start();
         i2c_write(W_DATA);
         i2c_write(add);
         i2c_write(data);
         i2c_stop();
 
}
     
int16 mpu6050_read(int add){
         int retval;
         i2c_start();
         i2c_write(W_DATA);
         i2c_write(add);
         i2c_start();
         i2c_write(R_DATA);
         retval=i2c_read(0);
         i2c_stop();
         return retval;
}
 
void mpu6050_init(){
         mpu6050_write(PWR_MGMT_1,  0x80);
         delay_ms(100);
         mpu6050_write(PWR_MGMT_1,  0x00);
         delay_ms(100);
         mpu6050_write(CONFIG_R,    0x01);
         delay_ms(10);
         mpu6050_write(GYRO_CONFIG, 0x00);
Saelee



Joined: 16 Oct 2016
Posts: 4

View user's profile Send private message Send e-mail AIM Address

PostPosted: Tue Oct 18, 2016 5:21 am     Reply with quote

Hi jay and dyeatman

now I can compile it !!!!

thank you very much sir. Laughing
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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