Welcome to EnviroDIY, a community for do-it-yourself environmental science and monitoring. EnviroDIY is part of WikiWatershed, a web toolkit designed to help citizens, conservation practitioners, municipal decision-makers, researchers, educators, and students advance knowledge and stewardship of fresh water. New to EnviroDIY? Start here

RTC Interrupt

Home Forums Mayfly Data Logger RTC Interrupt

Tagged: ,

This topic contains 3 replies, has 2 voices, and was last updated by  Shannon Hicks 2 years, 5 months ago.

  • Author
    Posts
  • #1547

    Ole
    Participant

    I just got my Mayfly yesterday and totally love it so far.
    I’m trying to use the interrupt from the clock to control an event but I have not been successful in detecting the interrupt.

    I’ve been using the “interrupts” example from the Sodaq_DS3231.h library but it isn’t working.
    Looking at the Mayfly schematic, it appears the interrupt output from the rtc chip is on pin A7 of the Mayfly. Is that correct?

    I don’t know much about interrupts in general, but I assume I need to change the code to listen on the right pin.
    All my attempts to edit the program have been unsuccessful so far.
    Does anyone know how I could get this to work properly?

    I appreciate any advice – thanks.


    //Interrupts for Battery management/saving using MCU power down mode. /INT from DS3231 is connected to INT0 of MCU.

    #include <avr/sleep.h>
    #include <Wire.h>
    #include "Sodaq_DS3231.h"

    static uint8_t prevSecond=0;

    void setup ()
    {
    /*Initialize INT0 for accepting interrupts */
    PORTD |= 0x04;
    DDRD &=~ 0x04;

    Serial.begin(57600);
    Wire.begin();

    rtc.begin();
    attachInterrupt(0, INT0_ISR, FALLING);

    //Enable Interrupt
    rtc.enableInterrupts(EveryMinute); //interrupt at EverySecond, EveryMinute, EveryHour
    // or this
    //rtc.enableInterrupts(18,4,0); // interrupt at (h,m,s)
    }

    void loop ()
    {

    DateTime now = rtc.now(); //get the current date-time
    if((now.second()) != prevSecond )
    {
    //print only when there is a change in seconds
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.date(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println(' ');
    }
    prevSecond = now.second();
    rtc.clearINTStatus();

    }

    //Interrupt service routine for external interrupt on INT0 pin conntected to /INT
    void INT0_ISR()
    {
    //Keep this as short as possible. Possibly avoid using function calls

    Serial.println(" External Interrupt detected ");
    }

  • #1548

    Shannon Hicks
    Keymaster

    The Mayfly has 3 hardware interrupts, D2, D3, and D10. Since the first two are part of the serial UART, that only leaves D10 as the only available hardware interrupt. On the Mayfly v0.3 board, the RTC is connect to A7, so you have to use a “pin change interrupt” library to handle an interrupt from something other than one of the hardware pins. This can also be helpful if you’re looking for a trigger signal on any input pin.

    The SODAQ pin change interrupt library works great for this: https://github.com/SodaqMoja/Sodaq_PcInt

    You can also read more information about how SODAQ handles the interrupts on the Mbili, which is similar to the Mayfly. https://support.sodaq.com/interrupts/

    I’m working on some sample Mayfly code for handling the pin change interrupts, I can hopefully post it soon, but the SODAQ links should help you in the meantime.

  • #1549

    Ole
    Participant

    Thanks for the info.
    I’ll look into that for sure.

    Would it be possible to cut the trace between them and run a jumper to D10?

    • #1550

      Shannon Hicks
      Keymaster

      Yes, if you’d prefer to use the hardware D10 interrupt, just cut the trace and solder a jumper over to the D10 pin on the header row. Then you can use “INT2” as the interrupt.

You must be logged in to reply to this topic.