I2C not working after Sleep | Arduino Compatible Compiler for LabVIEW Discussions | Forum

Avatar

Please consider registering
guest

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —




— Match —





— Forum Options —





Minimum search word length is 4 characters - maximum search word length is 84 characters

sp_Feed Topic RSS sp_TopicIcon
I2C not working after Sleep
August 8, 2016
10:00 pm
Avatar
LDBM
Member
Forum Posts: 11
Member Since:
August 8, 2016
sp_UserOfflineSmall Offline

Hi,

I am trying to write a basic VI that performs some tasks (logging or just writing an RTC value to serial for now). When I power down the Arduino programmatically with the Sleep Mode Power Down vi, I can wake it up fine on INT0 (Pin2), but once I want to resume reading the RTC: nothing.  I suspect the I2C bus has to be re-enabled. This link touches on the topic (search for "Waking I2C" on the page), but I fail to see how to implement the Wire.begintransmission followed by wire.endtransmission with the current API to re-enable I2C communication with the slave (RTC).

    // wake slave up
    Wire.beginTransmission (SLAVE_ADDRESS);
    Wire.endTransmission ();
    
    delay (5);  // give it time to recover
    
    Wire.beginTransmission (SLAVE_ADDRESS);
    bla bla...

Thx

ldbm.

Hardware: Uno, RT1307

PS: is there a way to enable other Arduino sleep modes (where for instance Timer1 on Arduino would still be powered). They are just a different switch while coding directing into the Arduino environment. Thx.

August 9, 2016
2:13 pm
Avatar
Steffan
Admin
Forum Posts: 305
Member Since:
March 12, 2015
sp_UserOfflineSmall Offline

You can use I2C Write Byte with write mode set to "Begin and End".  This will do a beginTransmission(), clock a byte, then endTransmission().  Having the byte clocked should not matter for waking up.

Also, for the Arduino sleep modes, the Compiler only implements SLEEP_MODE_PWR_DOWN but you can make your own APIs by following the help manual to implement other sleep modes if desired.

August 9, 2016
5:20 pm
Avatar
LDBM
Member
Forum Posts: 11
Member Since:
August 8, 2016
sp_UserOfflineSmall Offline

Thx Steffan,

I did try that, but no success yet. I will give it another go.

On some examples, it seems like a good idea to not use the Disable / Enable Interrupt while the main code has awaken, but rather to destroy the Interrupt (on the interrupt Service routine), and re-define the Interrupt before going to sleep. Do you agree ? Or the Disable Enable good enough? Thx.

ldbm.

August 9, 2016
8:58 pm
Avatar
Steffan
Admin
Forum Posts: 305
Member Since:
March 12, 2015
sp_UserOfflineSmall Offline

I dont think you need to destroy and re-define the I2C interrupts if thats what you are referring to.  There is some info here about an I2C slave powering down and waking back up: http://www.gammon.com.au/power

Seems like you should call begin again after wakeup.  Best think to do is write a simple sketch in the Arduino IDE to figure out how to wake it up properly then port it over.

Forum Timezone: UTC 0

Most Users Ever Online: 33

Currently Online:
1 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

John: 18

RTSLVU: 15

Dan6077: 11

Member Stats:

Guest Posters: 0

Members: 80

Moderators: 0

Admins: 3

Forum Stats:

Groups: 1

Forums: 2

Topics: 58

Posts: 289

Newest Members: Travlissah, viktorIcera, HowardClouG, Dianecet, Produktnaodchudzaniex

Administrators: geadmin: 5, filipealtoe: 35, Steffan: 89