MATLAB Answers

Ahmad
0

BeagleBoard I/O Pins code generation

Asked by Ahmad
on 5 Jun 2012
Latest activity Commented on by Franziska on 3 Dec 2013
Hi,
Is there any way, using BeageBoard as hardware Target, one can create a simulink model that uses I/O pins on the BeagleBoard? I know there is an Embedded Coder BeagleBoard example but it doe not use any I/O pins (Analog and Digital.)
Thanks,
Ahmad.

  0 Comments

Sign in to comment.

2 Answers

Answer by Michael Lundgren on 5 Oct 2012
 Accepted Answer

I just posted an example to File Exchnge (search for BeagleBoard GPIO) that illustrates how to access GPIO pins on the BeagleBoard. I took the liberty of using the code above for GPIO output. However, reading the GPIO pin was more involved. I used "popen" call instead of "system" as "system" call does not return any output aside from a success code.
By the way, using the example posted by Murat here, one can do a lot of things. Making Linux calls from a Simulink model opens a lot of doors. By using the same logic, one can control built-in LEDs on the board or read the USER push button status.
Note however that the method outlined here is not very fast. I was able to implement a blinking LED using a 50 ms sample time. Just don't expect very fast response. Also be careful with the GPIO pins as they are 1.8V. Most sensors out there use +5V logic lvels. Use a voltage divider circuit to interface these sensor to a GPIO pin configured as input. You can also use a logic level shifter. Sparkfun sells one for $3.

  0 Comments

Sign in to comment.


Answer by Murat Belge on 6 Jun 2012

The MATLAB R2012a release has a downloadable support package for BeagleBoard (installed by executing "targetinstaller" on the MATLAB command line). There are Simulink blocks for Video Capture, Video Display, Audio Capture/Display and UDP Send/Receive. There are no GPIO blocks as of yet. It is possible to use GPIO pins for digital Input/Output using the Embedded MATLAB function block. Let me know what exactly you are trying to do.

  5 Comments

@Murat Belge,
Can you please send out an example for GPIO programming with simulink. I would really appreciate your help as I am analysing analog signals to simulink model
Below is the code that you can paste into an Embedded MATLAB Function block to use a GPIO pin as an output. Using a GPIO pin as an input is very similar.
function fcn(u)
%#codegen
% This MATLAB function shows how to setup and use a GPIO pin as output. The
% function basically issues a number of system calls to do the following:
% 1. Export GPIO pin for use
% 2. Setup GPIO direction as output
% 3. Write the value of input u to the GPIO pin
%
% Note that input should be a boolean scalar. If the value of u is zero the
% GPIO pin goes low. Else GPIO pin goes high.
persistent firstTime;
gpioPin = '139';
coder.extrinsic('disp');
if isempty(firstTime)
firstTime = 0;
if isequal(coder.target, 'rtw')
% Export GPIO pin
cmd = ['echo ', gpioPin, '> /sys/class/gpio/export'];
coder.ceval('system', c_string(cmd));
% Set GPIO pin direction to output
cmd = ['echo out> /sys/class/gpio/gpio', gpioPin, '/direction'];
coder.ceval('system', c_string(cmd));
else
disp('Initialize GPIO pin as output');
end
end
% Set GPIO pin logic level using a system call
if (u > 0)
cmd = ['echo 1 > /sys/class/gpio/gpio', gpioPin, '/value'];
else
cmd = ['echo 0 > /sys/class/gpio/gpio', gpioPin, '/value'];
end
if isequal(coder.target, 'rtw')
coder.ceval('system', c_string(cmd));
else
disp(cmd);
end
end
function str = c_string(str) % Convert MATLAB string to C-string by adding a string termination % character str = [str, 0]; end % code end
Hi, My name is Fatemeh, Thank you for your code.I wanted to ask a question, Do you know how to access to the c code of GPIO block of matlab? my emmail address: fateme_nejatbakhsh@yahoo.com

Sign in to comment.