Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 12

Θέμα: DS3231

  1. #1
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή DS3231

    χαιρετω ολη την παρεα....αντιμετωπιζω ενα προβλημα και θα ηθελα την βοηθεια σας
    προκειται να τροφοδοτησω ενα arduino uno με μπαταρια ωστε να παιρνω καθε μια ωρα ενδειξεις και να τις ανεβαζω... επειδή θελω να εχω μικρη καταναλωση χρησιμοποιω τον κωδικα που παραθετω...το προβλημα ειναι οτι το RTC δεν βγαζει τον επεξεργαστη απο τον υπνο οτι αλλαγη κι αν εκανα...
    αν δωσω χειροκινητα ενα παλμο low στο πιν 2 τοτε ξυπνα και εκτελειται το προγραμμα κανονικα...
    το rtc δουλευει κανονικα διοτι το εχω τεσταρει σε αλλη εφαρμογη
    Κώδικας:
    #include <SoftwareSerial.h>
    #include <Wire.h>
    #include <DS3231.h>
    #include <avr/sleep.h>
    #include <avr/power.h>
    
    DS3231 clock;
    RTCDateTime dt;
    
    const byte wakePin = 2;                    // pin used for waking up the Arduino (interrupt 0)
    
    char print_date[16];
    
    DS3231 Clock;                                //define class for DS3231 clock
    byte ADay, AHour, AMinute, ASecond, ABits;    // define clock variables
    bool ADy, A12h, Apm;                        //define clock variables
    
    
    void setup()
    {
        
        // initialize serial port
        Serial.begin(9600);
        Serial.println("...+++++++++...1");                // debugging purposses only
    
        // initialize rtc communication trough i2c port (on A4 and A5)
        Wire.begin();
        Serial.println("...+++++++++...2");                // debugging purposses only
    
        Serial.println("...+++++++++...3");                // debugging purposses only
        // Initialize DS3231
        clock.begin();
        //clock.setDateTime(__DATE__, __TIME__);
        Serial.println("...+++++++++...4");                // debugging purposses only
    
    
        // Disable square wave output (use alarm triggering)
        Wire.beginTransmission(0x68);
        Wire.write(0x0e);
        Wire.write(0b00110111);
        Wire.endTransmission();
        Serial.println("...+++++++++...5");                // debugging purposses only
    
    
        // Disable DS3231 Alarms 1 
        clock.armAlarm1(false);
        clock.clearAlarm1();
        Serial.println("...+++++++++...6");                // debugging purposses only
    
    
        // Put PIN 2 as an Interrupt (0)
        
        pinMode(wakePin, INPUT_PULLUP);
        
        attachInterrupt(digitalPinToInterrupt(wakePin), wakeUp, FALLING);
        
    
        // Define when alarm will wake up arduino
        //________________________________________________________
        clock.setAlarm1(0, 0, 00, 10, DS3231_MATCH_M_S);
        //clock.setAlarm2(0, 0, 00, DS3231_MATCH_M);
        //clock.setAlarm1(0, 0, 0, 0, DS3231_MATCH_S);
        //________________________________________________________
    
    
        Serial.println("...+++++++++...7");                // debugging purposses only
        
        // Test clock
        dt = clock.getDateTime();
        sprintf(print_date, "%02d/%02d/%d %02d:%02d:%02d", dt.day, dt.month, dt.year, dt.hour, dt.minute, dt.second);
        Serial.println(print_date);
        
    }
    
    
    void loop()
    {
        
        Serial.println("go to sleep...");
        delay(100);
        Serial.println("...+++++++++...");
        delay(100);
    
    
        goToSleep();
    
        //-----------------------------
        //ZzZzZzZzZzZzZzZzZzZzZzZzZzZzZzZzZz
        //-----------------------------
    
    
        // point of wakeing up arduino
    
    
        delay(1000);
    
        // Display the date and time
        dt = clock.getDateTime();
        sprintf(print_date, "%02d/%02d/%d %02d:%02d:%02d", dt.day, dt.month, dt.year, dt.hour, dt.minute, dt.second);
        Serial.println(print_date);
        
    
    
        Upload();                        // upload data to ThingSpeak
        
    }
    
    
    // function to upload temperature and relative humidity on thingSpeak IoT site
    void Upload()
    {
        Serial.println(F("Uploading:..."));
    
    
        delay(2000);
        Serial.println(F("Finished uploading!"));
    }
     
    void goToSleep()
    {
        cli();
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);        // setting the sleep mode
        sleep_bod_disable();
        sei();
        sleep_cpu();
        power_usart0_disable();
        power_timer0_disable();
        power_timer1_disable();
        power_timer2_disable();
        //power_twi_disable();
        //power_spi_disable();
        sleep_enable();                            // enables the sleep bit in the mcucr register
        sleep_mode();
    
    
        // The Arduino wake up here
        delay(1000);
        clock.clearAlarm1();                        // Clear the DS3231 alarm (ready for the next triggering)
        
    }
    
    
    // ISR (Interrupt Service Routine) function to wake up the Arduino
    void wakeUp()
    {
        sleep_disable();                            // Just after wake up, disable the sleeping mode
        power_all_enable();
        delay(2000);
        
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη stinger : 26-05-23 στις 22:26

  2. #2
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Το σχηματικό;

    0 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από SProg Εμφάνιση μηνυμάτων
    Το σχηματικό;
    ARDUINO SDA -- RTC SDA
    ARDUINO SCL -- RTC SCL
    ARDUINO 2 PIN ---RTC SQW

    χρησιμοποιω ενα arduino uno

    ο αντικειμενικος σκοπος ειναι καθε μια ωρα να ξυπναει ο επεξεργαστης ωστε να παιρνει μετρησεις και να τις ανεβαζει
    στον κωδικα εχω βαλει δοκιμαστικα 10 δευτερολεπτα ωστα να δω αν δουλευει

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη stinger : 27-05-23 στις 11:46

  4. #4
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Γιατί δε χρησιμοποιείς το παράδειγμα της βιβλιοθήκης της ίδιας αυτούσιο;

    Κώδικας:
    /*
      DS3231: Real-Time Clock. Alarm simple
      Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
      GIT: https://github.com/jarzebski/Arduino-DS3231
      Web: http://www.jarzebski.pl
      (c) 2014 by Korneliusz Jarzebski
    */
    
    
    #include <Wire.h>
    #include <DS3231.h>
    
    
    DS3231 clock;
    RTCDateTime dt;
    boolean isAlarm = false;
    boolean alarmState = false;
    int alarmLED = 4;
    
    
    void alarmFunction()
    {
      Serial.println("*** INT 0 ***");
      isAlarm = true;
    }
    
    
    void setup()
    {
      Serial.begin(9600);
      
      // Initialize DS3231
      Serial.println("Initialize DS3231");;
      clock.begin();
     
      // Disarm alarms and clear alarms for this example, because alarms is battery backed.
      // Under normal conditions, the settings should be reset after power and restart microcontroller.
      clock.armAlarm1(false);
      clock.armAlarm2(false);
      clock.clearAlarm1();
      clock.clearAlarm2();
    
    
      // Manual (Year, Month, Day, Hour, Minute, Second)
      clock.setDateTime(2014, 4, 25, 0, 0, 0);
    
    
      // Set Alarm1 - Every 20s in each minute
      // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
      clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);
    
    
      // Attach Interrput 0. In Arduino UNO connect DS3231 INT to Arduino Pin 2
      attachInterrupt(0, alarmFunction, FALLING);
    
    
      // Setup LED Pin
      pinMode(alarmLED, OUTPUT);
    }
    
    
    void loop()
    {
      dt = clock.getDateTime();
      Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
    
    
      if (isAlarm)
      {
        digitalWrite(alarmLED, alarmState);
        alarmState = !alarmState;
        clock.clearAlarm1();
      } 
    
    
      delay(1000);
    }

    0 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    ο κωδικας που εχω δουλευει σωστα ...αν τον τριγκαρεις manual κανει αυτο που πρεπει...το θεμα ειναι οτι δεν τον τριγκαρει το RTC//
    αν απογοητευτω θα παω σε αλλη λυση η βιβλιοθηκη

    0 Not allowed! Not allowed!

  6. #6
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από stinger Εμφάνιση μηνυμάτων
    ο κωδικας που εχω δουλευει σωστα ...αν τον τριγκαρεις manual κανει αυτο που πρεπει...το θεμα ειναι οτι δεν τον τριγκαρει το RTC//
    αν απογοητευτω θα παω σε αλλη λυση η βιβλιοθηκη
    Εάν εννοείς το κομμάτι του falling interrupt, λογικό είναι να δουλεύει αφού χρειάζεσαι μόνο 2-3 κλήσεις standard συναρτήσεων, το υπόλοιπο του DS βασίζεται σε μία Χ βιβλιοθήκη που έγραψε κάποιος Y.

    Το παράδειγμα που σου δίνει η ίδια η βιβλιοθήκη κάνει ακριβώς αυτό που ζητάς και απ' ότι φαίνεται δεν καλεί τις ίδιες συναρτήσεις (ή καλεί extra) με εσένα. Για να το προσαρμόσεις και να το δοκιμάσεις θέλεις max 2 λεπτά.

    0 Not allowed! Not allowed!

  7. #7
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    /*
    DS3231: Real-Time Clock. Alarm simple
    Read more: http://www.jarzebski.pl/arduino/komp...tc-DS3231.html
    GIT: https://github.com/jarzebski/Arduino-DS3231
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
    */


    #include <Wire.h>
    #include <DS3231.h>


    DS3231 clock;
    RTCDateTime dt;
    boolean isAlarm = false;
    boolean alarmState = false;
    int alarmLED = 13;


    void alarmFunction()
    {
    Serial.println("*** INT 0 ***");
    isAlarm = true;
    }


    void setup()
    {
    Serial.begin(9600);

    // Initialize DS3231
    Serial.println("Initialize DS3231");;
    clock.begin();

    // Disarm alarms and clear alarms for this example, because alarms is battery backed.
    // Under normal conditions, the settings should be reset after power and restart microcontroller.
    clock.armAlarm1(false);
    clock.clearAlarm1();



    // Manual (Year, Month, Day, Hour, Minute, Second)
    // clock.setDateTime(2023, 5, 27, 20, 50, 0);


    // Set Alarm1 - Every 20s in each minute
    // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
    clock.setAlarm1(0, 0, 0, 20, DS3231_MATCH_S);


    // Attach Interrput 0. In Arduino UNO connect DS3231 INT to Arduino Pin 2
    attachInterrupt(0, alarmFunction, FALLING);


    // Setup LED Pin
    pinMode(alarmLED, OUTPUT);
    }


    void loop()
    {
    dt = clock.getDateTime();
    Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));


    if (isAlarm)
    {
    digitalWrite(alarmLED, alarmState);
    alarmState = !alarmState;
    clock.clearAlarm1();
    }


    delay(1000);
    }
    μου εμφανιζει συνεχως στης σειριακη *** INT O ****
    και δεν μου εμφανιζει την ωρα

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη stinger : 27-05-23 στις 21:18

  8. #8
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    EDIT:
    Βλέπω πως έκαναν αλλαγές, αυτό είναι το latest version:

    Κώδικας:
    /*
      DS3231: Real-Time Clock. Alarm simple
      Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
      GIT: https://github.com/jarzebski/Arduino-DS3231
      Web: http://www.jarzebski.pl
      (c) 2014 by Korneliusz Jarzebski
    */
    
    
    #include <Wire.h>
    #include <DS3231.h>
    
    
    DS3231 clock;
    RTCDateTime dt;
    boolean isAlarm = false;
    int alarmLED = 4;
    
    
    void alarmFunction()
    {
      Serial.println("*** INT 0 ***");
      isAlarm = true;
    }
    
    
    void setup()
    {
      Serial.begin(9600);
      
      // Initialize DS3231
      Serial.println("Initialize DS3231");;
      clock.begin();
     
      // Disarm alarms and clear alarms for this example, because alarms is battery backed.
      // Under normal conditions, the settings should be reset after power and restart microcontroller.
      clock.armAlarm1(false);
      clock.armAlarm2(false);
      clock.clearAlarm1();
      clock.clearAlarm2();
      clock.enableOutput(false);
      
      // Manual (Year, Month, Day, Hour, Minute, Second)
      clock.setDateTime(2014, 4, 25, 0, 0, 0);
    
    
      // Set Alarm1 - Every 20s in each minute
      // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
      clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);
    
    
      // Attach Interrput to Arduino Pin 2
      pinMode(2, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(2), alarmFunction, FALLING);
    
    
      // Setup LED Pin
      pinMode(alarmLED, OUTPUT);
    }
    
    
    void loop()
    {
      dt = clock.getDateTime();
      Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
      
      digitalWrite(alarmLED, isAlarm);
      if (isAlarm)
      {
        isAlarm = !isAlarm;
        clock.clearAlarm1();
      }
      
      delay(1000);
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη SProg : 27-05-23 στις 21:39

  9. #9
    Μέλος Το avatar του χρήστη stinger
    Όνομα
    Σπυρος
    Εγγραφή
    Dec 2010
    Περιοχή
    ανδραβιδα
    Μηνύματα
    1.372

    Προεπιλογή

    καλημερα....εκανα τις αλλαγες και ενω πρεπει να μου γυριζει alarm καθε 10 sec μου γυριζει alarm καθε 1 λεπτο...επιπλεο του αλλαξα λιγο και την εμφανιση της ωρας στην σειριακη γιατι δεν φαινοταν
    /*
    DS3231: Real-Time Clock. Alarm simple
    Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
    GIT: https://github.com/jarzebski/Arduino-DS3231
    Web: http://www.jarzebski.pl
    (c) 2014 by Korneliusz Jarzebski
    */

    #include <Wire.h>
    #include <DS3231.h>

    DS3231 clock;
    RTCDateTime dt;
    boolean isAlarm = false;
    int alarmLED = 4;
    char print_date[16];


    //DS3231 Clock; //define class for DS3231 clock
    byte ADay, AHour, AMinute, ASecond, ABits; // define clock variables
    bool ADy, A12h, Apm; //define clock variables


    void alarmFunction()
    {
    Serial.println("*** INT 0 ***");
    isAlarm = true;
    }


    void setup()
    {
    Serial.begin(9600);

    // Initialize DS3231
    Serial.println("Initialize DS3231");;
    clock.begin();

    // Disarm alarms and clear alarms for this example, because alarms is battery backed.
    // Under normal conditions, the settings should be reset after power and restart microcontroller.
    clock.armAlarm1(false);
    clock.armAlarm2(false);
    clock.clearAlarm1();
    clock.clearAlarm2();
    clock.enableOutput(false);

    // Manual (Year, Month, Day, Hour, Minute, Second)
    //clock.setDateTime(2014, 4, 25, 0, 0, 0);


    // Set Alarm1 - Every 20s in each minute
    // setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
    clock.setAlarm1(0, 0, 0, 10, DS3231_MATCH_S);


    // Attach Interrput to Arduino Pin 2
    pinMode(2, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(2), alarmFunction, FALLING);


    // Setup LED Pin
    pinMode(alarmLED, OUTPUT);
    }


    void loop()
    {
    dt = clock.getDateTime();
    sprintf(print_date, "%02d/%02d/%d %02d:%02d:%02d", dt.day, dt.month, dt.year, dt.hour, dt.minute, dt.second);
    Serial.println(print_date);

    digitalWrite(alarmLED, isAlarm);
    if (isAlarm)
    {
    isAlarm = !isAlarm;
    clock.clearAlarm1();
    }

    delay(1000);
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη stinger : 28-05-23 στις 11:26

  10. #10
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Καλημέρα, ανέβασε όλο το κώδικα σου.

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας