Dear all,
In my system a compass is added to MICAz node by I2C communication mode
in tinyos 2.0.
Now I want to obtain the compass output periodically.
The program follows, but I can not obtain the compass output.
In the configuration file
{
......
Compass.Resource -> ATM128I2CMasterC.Resource;
Compass. I2CPacket -> ATM128I2CMasterC.I2CPacket;
}
In the main fie we define
module Compass{
.....
Interface Resource;
Interface I2CPacket<TI2CBasicAddr>
}
In the Timer function we request the resource:
Timer.fire(){
Resource.request();
.....
}
In the resource granted function we read the compass output by I2C as
following
Resource.granted(){
if(call I2CPacket.write(I2C_START,C0,.....)==SUCCESS)
{
// delay(100);
if(call I2CPacket.write(I2C_START,C1,.....)==SUCCESS)
call I2CPacket.read(I2C_START,C1,.....);
}
Resource.release();
}
Even I add the delay(100), it still does not work. When I track the
program, and find the second ``call I2CPacket.write(I2C_START,C1,.....)`` is
not successful.
After careful analysis of the I2C driver, I found in the program
Atm128I2CMasterPacketP.nc, when the I2CPacket.write begins, the variable "
state" changes into
I2C_STARTING. When this function call I2C.sendCommand() function and
finishes, the variable state still is I2C_STARTING. Track the
I2C.sendCommand() in the HplAtm128I2CBusP file and found, there is only one
operation TWCR=current.
It appear weird that there is no event to change the state variabe
in Atm128I2CMasterPacketP.nc. It is evident, after the writing operation is
done, there should exist an operation to change the state. But I can not
find it.
Does anyone give me help?
Thanks a lot!
Jianxin Chen
.
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help