RTC interrupt does not wake up my Arduino


hi everyone!
i'm using ds1337 real time clock generate interrupts wake arduino sleep mode. isn't working out me. when tested external interrupt without sleep mode, in basic program when interrupt occurs works fine. put in sleep mode , try wake external interrupt doesn't happen.

i'm using ds1337 library found here: https://github.com/sridharrajagopal/dsrtclib

'write alarm' function didn't work me used 'getregister' function set alarm myself based on datasheet.
right i'm stuck. don't have idea i'm doing wrong i'm asking me.

thank in advance,

xdinozzox

p.s. code:

code: [select]
#include <dsrtclib.h>
#include <wire.h>
#include <avr/power.h>
#include <avr/sleep.h>

// definition register addresses
#define al1reg1 0x07
#define al1reg2 0x08
#define al1reg3 0x09
#define al1reg4 0x0a

#define al2reg1 0x0b
#define al2reg2 0x0c
#define al2reg3 0x0d

#define conreg 0x0e
#define stareg 0x0f

/*
  ds1339 rtc example
  tests , examples common rtc library features.
  shows basic functions (reading , setting time/alarm values), converting , forth between epoch seconds , calendar dates,
  , using alarm interrupts.

  don't let 'binary sketch size' throw you; example file , print statements add lot of overhead.

*/

int ledpin =  6;        // led on pin 6
int int_pin = 3;        // interrupt pin
int int_number = 1;     // int1

ds1339 rtc = ds1339(int_pin, int_number);

void isr(){   // isr function
  detachinterrupt(int_number);
  rtc.setregister(stareg, b00000000); // reseting alarm flag
}

void entersleep(){  // function entering sleep mode
  digitalwrite(ledpin, low);
  attachinterrupt(int_number, isr, falling);
 
  set_sleep_mode(sleep_mode_pwr_save);
 
  sleep_enable();
 
  sleep_mode();
 
  sleep_disable();
  power_all_enable();
}

/* ----------------- { set } ---------------------------- */
void setup(){               
  pinmode(int_pin, input);           
  //digitalwrite(int_pin, high);
 
  pinmode(ledpin, output);           
  digitalwrite(ledpin, low);         
 

  //enable deep sleeping
  //set_sleep_mode(sleep_mode_pwr_down);
  //sleep_enable();

  serial.begin(9600);               
  serial.println ("dsrtclib tests");

  rtc.start();                       // make sure rtc running
 
  if(!rtc.time_is_set()){            // set time if not already   
    serial.print("clock not set. ");
    set_time();
  }
 
  // warning if osc not working
  if(!rtc.time_is_set()){
    serial.println("clock did not set! check oscillator working.");
  }
 
  delay(100);
 
  // set alarm '2' every minute (at 00 sec)
  attachinterrupt(int_number, isr, falling);
  //rtc.setregister(0x07, b10000000);
  rtc.setregister(al2reg1, b10000000);
  rtc.setregister(al2reg2, b10000000);
  rtc.setregister(al2reg3, b10000000);
  rtc.setregister(conreg, b00011110);
}

/* ----------------- { main program} ---------------------------- */
void loop(){
 
  digitalwrite(ledpin, high);
  delay(100);
 
  entersleep();
 
}

/* ----------------- { functions set , print time - not problem atm } ---------------------------- */
void set_time()
{
    serial.println("enter date , time (yyyymmdd hh:mm:ss)");
    int year, month, day, hour, minute, second;
    int result = read_date(&year, &month, &day, &hour, &minute, &second);
    if (result != 0) {
      serial.println("date not in correct format!");
      return;
    }
   
    // set epoch
    rtc.setseconds(second);
    rtc.setminutes(minute);
    rtc.sethours(hour);
    rtc.setdays(day);
    rtc.setmonths(month);
    rtc.setyears(year);
    rtc.writetime();
    read_time();
}

void read_time()
{
  serial.print ("the current time ");
  rtc.readtime(); // update rtc library's buffers chip
  printtime(0);
  serial.println();

}

void printtime(byte type)
{
  // print formatted string of current date , time.
  // if 'type' non-zero, print alarm value (seconds thru dow/month only)
  // function assumes desired time values present in rtc library buffer (e.g. readtime() has been called recently)

  if(!type){
    serial.print(int(rtc.getmonths()));
    serial.print("/"); 
    serial.print(int(rtc.getdays()));
    serial.print("/"); 
    serial.print(rtc.getyears());
  }
  else{
    //if(rtc.getdays() == 0) // day-of-week repeating alarm have dayofweek *instead* of date, print that.
    {
      serial.print(int(rtc.getdayofweek()));
      serial.print("th day of week, ");
    }
    //else
    {
      serial.print(int(rtc.getdays()));
      serial.print("th day of month, ");     
    }
  }
 
  serial.print("  ");
  serial.print(int(rtc.gethours()));
  serial.print(":");
  serial.print(int(rtc.getminutes()));
  serial.print(":");
  serial.print(int(rtc.getseconds())); 
}

int read_int(char sep){
  static byte c;
  static int i;

  = 0;
  while (1){
    while (!serial.available())
    {;}

    c = serial.read();
    // serial.write(c);
 
    if (c == sep){
      // serial.print("return value is");
      // serial.println(i);
      return i;
    }
    if (isdigit(c)){
      = * 10 + c - '0';
    }
    else{
      serial.print("\r\nerror: \"");
      serial.write(c);
      serial.print("\" not digit\r\n");
      return -1;
    }
  }
}

int read_int(int numbytes){
  static byte c;
  static int i;
  int num = 0;

  = 0;
  while (1){
    while (!serial.available())
    {;}

    c = serial.read();
    num++;
    // serial.write(c);
 
    if (isdigit(c)){
      = * 10 + c - '0';
    }
    else{
      serial.print("\r\nerror: \"");
      serial.write(c);
      serial.print("\" not digit\r\n");
      return -1;
    }
    if (num == numbytes){
      // serial.print("return value is");
      // serial.println(i);
      return i;
    }
  }
}

int read_date(int *year, int *month, int *day, int *hour, int* minute, int* second){
 
  *year = read_int(4);
  *month = read_int(2);
  *day = read_int(' ');
  *hour = read_int(':');
  *minute = read_int(':');
  *second = read_int(2);

  return 0;
}


i believe want change

attachinterrupt(int_number, isr, falling);
to
attachinterrupt(1, isr, low);


Arduino Forum > Using Arduino > Programming Questions > RTC interrupt does not wake up my Arduino


arduino

Comments

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support