MATLAB Answers

I2C object creation in Simulink

4 views (last 30 days)
Hi,
im trying to create an i2c object in simulink for reading an sensor. In Matlab every thing works fine and i can read the data out of the sensor :
mpu_6050 = i2c('aardvark',0,hex2dec('68'));
fopen(mpu_6050);
fwrite(mpu_6050,65);
y = fread(mpu_6050,1);
fclose(mpu_6050);
When i try to add an Matlab-Function-Block to Simulink:
function y = mpu6050_read()
mpu_6050 = i2c('aardvark',0,hex2dec('68'));
fopen(mpu_6050);
fwrite(mpu_6050,65);
y = fread(mpu_6050,1,'*char');
fclose(mpu_6050);
end
i will get this error:
The 'i2c' class does not support code generation.
Is it really not possible to use the i2c class in simulink or do i have to use it in another way?
Regards V.Sadiku

  2 Comments

Kaustubha Govind
Kaustubha Govind on 9 May 2013
Would you like to simply use your Simulink model for simulation within the MATLAB environment, or do you also intend to generate standalone C/C++ code from it?
Valmir Sadiku
Valmir Sadiku on 10 May 2013
I want only use the Simulink model only for simulation, that's why i don't understand this error message.

Sign in to comment.

Accepted Answer

Kaustubha Govind
Kaustubha Govind on 10 May 2013
The MATLAB Function block always generates C-code from the MATLAB code for faster execution. If you intend to run the block only for simulation, you can continue to use functions unsupported for code-generation by declaring them as extrinsic functions. I don't think fopen, fwrite, fread and fclose are supposed for code-generation either, so please declare all of them as extrinsic. You will also need to pre-allocate the output of fread, 'y', as described in this previously answered question.

  3 Comments

Valmir Sadiku
Valmir Sadiku on 13 May 2013
Thank you a lot, now it works fine :-)
Valmir Sadiku
Valmir Sadiku on 13 May 2013
Now i have an additional question: I would use it with the Windows Real Time Target, is it possible? It would be very nice if i can use it or it exits any workaround for that!
Regards V.Sadiku
Kaustubha Govind
Kaustubha Govind on 13 May 2013
I would recommend creating a new question for this to make sure other experts see this. I would guess that this is not possible, because coder.extrinsic is meant for execution within the MATLAB environment only. Targets like Real-Time Windows Target create a standalone binary that runs outside the MATLAB environment (in this case, a Real-Time Windows kernel, I believe). The only workaround is to create your own C implementation of that functionality and call it using coder.ceval.

Sign in to comment.

More Answers (0)


Translated by