Visualizzazione post con etichetta RTC. Mostra tutti i post
Visualizzazione post con etichetta RTC. Mostra tutti i post

martedì 19 marzo 2019

Arduino MKR1010 ed allarme ricorsivo con RTCZero e risparmio energetico

Aggiornamento: questo post e' molto simile al precedente

Lo scopo di questo script e' generare ogni 10 secondi un allarme che risvegli dall standby la MKR1010 per effettuare una operazione e poi la riaddormenti in staandy


Una volta in Sleep Mode in consumo e' inferiore a 10 mA ovvero e' sotto la soglia di misura del mio strumento

Con questa configurazione il consumo e' di circa 14 mA

Attenzione : quando viene lanciato il programma il processore va in standby e viene disabilitata la porta USB. Per effettuare un nuovo upload si deve premere il tasto di reset per due volte in modo veloce
--------------------------------------------------------------------------
#include <RTCZero.h>

/* Create an rtc object */
RTCZero rtc;

/* Change these values to set the current initial time */
const byte seconds = 0;
const byte minutes = 00;
const byte hours = 17;

/* Change these values to set the current initial date */
const byte day = 17;
const byte month = 11;
const byte year = 15;

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  rtc.begin();

  rtc.setTime(hours, minutes, seconds);
  rtc.setDate(day, month, year);

  rtc.setAlarmTime(17, 00, 10);
  // Abilita l'allarme quando i secondi sono uguali alla soglia
  rtc.enableAlarm(rtc.MATCH_SS);
  rtc.attachInterrupt(alarmMatch);

  rtc.standbyMode();
}

void loop()
{
  rtc.standbyMode();    // Sleep until next alarm match
}

void alarmMatch()

  // INVERTE LO STATO DEL LED
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  // Setta il nuovo allarme 10 secondi nel futuro
  rtc.setAlarmSeconds((rtc.getSeconds() + 10) % 60);
}

martedì 16 luglio 2013

Real Time Clock DS1302 su Raspberry

Di questo componente esistono molti tutorial su Internet e, cosa abbastanza incredibile, sono spesso molto differenti tra di loro. In alcuni casi viene proposto di rimuovere delle resistenza della schedina dell'RTC, in altri casi l'alimentazione deve essere collegata ai 5 Volts...in questo caso viene presentato l'esempio riportato da questo sito che per il mio caso ha funzionato

La pedinatura e' la seguente

Raspberry     ->  RTC
VCC 3 Volt -> VCC
GND -> GND
GPIO #21/27 -> CLK
GPIO #18 -> DAT
GPIO #17 -> RST

(il sito originale indica di inserire delle resistenze da 10 KOhm su DAT e VCC .. nel mio caso ha funzionato senza necessita' di questi componenti)


per usare questo componente si deve utilizzare il programma rtc-pi.c che si scarica da questo link 

Dato che utilizzo la Raspberry 2 devono essere modificato il file rtc-pi.c come segue
si devono commentare (o cancellare alcune righe) ed inserirne altre; vedi righe evidenziate

---------------------------------------------
#define IO_INPUT    *(gpio+GPIO_SEL1) &= 0xF8FFFFFFL
#define IO_OUTPUT   *(gpio+GPIO_SEL1) &= 0xF8FFFFFFL; *(gpio+GPIO_SEL1) |= 0x01000000L 
//#define SCLK_OUTPUT *(gpio+GPIO_SEL2) &= 0xFFFFFFC7L; *(gpio+GPIO_SEL2) |= 0x00000008L
#define CE_OUTPUT   *(gpio+GPIO_SEL1) &= 0xFF1FFFFFL; *(gpio+GPIO_SEL1) |= 0x00200000L
#define IO_HIGH     *(gpio+GPIO_SET) = 0x00040000L
#define IO_LOW      *(gpio+GPIO_CLR) = 0x00040000L
//#define SCLK_HIGH   *(gpio+GPIO_SET) = 0x00200000L
//#define SCLK_LOW    *(gpio+GPIO_CLR) = 0x00200000L
#define CE_HIGH     *(gpio+GPIO_SET) = 0x00020000L  
#define CE_LOW      *(gpio+GPIO_CLR) = 0x00020000L
#define IO_LEVEL    *(gpio+GPIO_INP) & 0x00040000L


#define SCLK_OUTPUT *(gpio+GPIO_SEL2) &= 0xFF1FFFFFL; *(gpio+GPIO_SEL2) |= 0x00200000L
#define SCLK_HIGH *(gpio+GPIO_SET) = 0x08000000L
#define SCLK_LOW *(gpio+GPIO_CLR) = 0x08000000L
---------------------------------------------
il programma si puo' compilare come

cc -o rtc-pi.c rtc-pi.c
chmod +x rtc-pi

per impostare la data sull' RTC si puo' procedere come (da sudo)
./rtc-pi 20130713173002 (ora 17:30:02 del 13 luglio 2013)

per impostare l'ora del Raspberry riprendendola dall' RTC e' sufficiente
./rtc-pi 

per rendere il sistema funzionante si deve infine mandare in esecuzione automatica il programma ./rtc-pi ad ogni avvio del sistema


Geologi

  E so anche espatriare senza praticamente toccare strada asfaltata