Hi, Janos
Thanks a lot. I use an external pulldown resistor.
Following your suggestion I changed the line 96 in
Atm128I2CMasterPacketP.nc to "call I2C.init(TRUE)". But the problem still
exists. In Atm128I2CMasterPacketP.nc after the first I2CPacket.write() starts,
the state variable changes into I2C_STARTING. When this operation finishes,the
state does not change. Then the second I2CPacket.write() operation can not
continue. Reasonably, it should send a command to change the state variable. In
the I2C.commandComplet() function of Atm128I2CMasterPacketP.nc, there state
variable is changed. Track the HplAtml128I2CBusP.nc, and find in
I2C.commandComplet() function, AVR_ATOMIC_HANDLER(SIG_2WIRE_SERIAL) signals the
I2C.commandComplet() event.
I don´t know which event calls the I2C.commandComplet() function(in
HplAtml128I2CBusP.nc file).
Jianxin Chen
Date: Wed, 8 Oct 2008 13:15:45 -0500From: [EMAIL PROTECTED]: [EMAIL PROTECTED];
[EMAIL PROTECTED]: Re: [Tinyos-help] I2C communication in tinyos2.0
If you use an external pulldown resistor, you need to change line 96 in
Atm128I2CMasterPacketP.nc to "call I2C.init(TRUE)". By default I2C init is
called with FALSE, assuming no external pulldown.Let me know if it helps.Janos
2008/10/8 songangel <[EMAIL PROTECTED]>
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,.....); } &! nbsp;
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 intoI2C_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? Th! anks a lot! Jianxin Chen
"七件武器,七种完美" 立刻体验!_______________________________________________Tinyos-help
mailing [EMAIL
PROTECTED]://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
_________________________________________________________________
MSN 中文网,最新时尚生活资讯,白领聚集门户。
http://cn.msn.com_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help