How to communicate with multiple I2C devices within one session?

조회 수: 1 (최근 30일)
Raptrick
Raptrick 2016년 3월 31일
댓글: Raptrick 2016년 4월 1일
Hello All,
On my board there are two I2C devices: an ADC and a DAC. They are connected via one I2C bus and there are no base address conflicts. Via an Aardvark adapter and the ICT, I want to communicate with the devices within one session. What is the best way to create two I2C –object instances?
dac = i2c('aardvark',0,16);
adc = i2c('aardvark',0,76);
fopen(dac)
fopen(adc)
%write DAC
fwrite(dac,[bias 00 00])
%write control register of adc: not continuous, convert v1 v2 v3 v4
fwrite(adc,[1 95])
%write trigger register to start
fwrite(adc,[2 17])
for i=1:4
fwrite(adc,0); status = ['status : ' dec2bin(fread(adc,1))]
pause(0.5)
disp(status)
end
fclose(dac),delete(dac)
fclose(adc),delete(adc)
Doing it is similair to GPIB session with multiple instruments . However it generates an error:
Error using i2c/fopen (line 82)
Unsuccessful open: Cannot connect to the device. Possible reasons are another
application is connected, a driver is missing or the device is not available.
Error in aardvarktest2 (line 24)
fopen(adc)
Communication to each device separately is successful . But two devices in one session does not work. Anyone an idea how to communicate with two I2C devices in one session?
  댓글 수: 1
Raptrick
Raptrick 2016년 4월 1일
For those of you who are interested: I got a nice hint from support. When the I2C object is open it is possible to modify the remote address. The code looks like this:
% base address of i2c devices
dac = 16;
adc = 76;
% make one i2c object for multiple ic's
ics = i2c('aardvark',0,0);
fopen(ics);
% select remote address of dac and write dac
ics.remoteaddress = dac;
fwrite(ics,[bias 250 00]);
% select remote adress of adc write and control register to config
ics.remoteaddress = adc;
fwrite(ics,[1 95]);
% write register to trigger conversion
fwrite(ics,[2 17]);
% poll status register of adc
for i=1:4
fwrite(ics,0); status = ['status : ' dec2bin(fread(ics,1))];
disp(status)
pause(0.5)
end
% close and delete
fclose(ics),delete(ics)
This works.
Patrick

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Instrument Control Toolbox Supported Hardware에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by