ããã«ã¡ã¯ãENGããŽã§ãã
Arduinoç°å¢ã«ãããŠWireã©ã€ãã©ãªã䜿çšããŠRTCã¢ãžã¥ãŒã«ã«æå»ã®æžã蟌ã¿ãšèªã¿èŸŒã¿ãã§ããŸããSeeeduino XIAOã䜿ã£ãŠã·ãªã¢ã«ã¢ãã¿ããæå»èšå®ã®é»æãéåºãçŸåšæå»ã確èªããæ¹æ³ã«ã€ããŠãŸãšããŸããã
RTCæå»ã®ããã¯ã¢ãããè¡ãæå»ããŒã¿ãä¿æããæ¹æ³ã«ã€ããŠããŸãšããŠããŸãã
Seeeduino XIAOã䜿ã£ãŠåäœç¢ºèªãè¡ã£ãããšãäžèšãªã³ã¯ã«ãŸãšããŠããŸãã
Seeeduino XIAOã§åŠã¹ããœããéçºãšæšæºã©ã€ãã©ãªã®äœ¿ãæ¹
RTCã¢ãžã¥ãŒã«ã®æå»ããŒã¿ã®æŽæ°
RTCã¢ãžã¥ãŒã«ã¯RX8900ãæèŒããAE-RX8900ïŒç§æé»åïŒäœ¿çšããŠããŸããæž©åºŠè£åçºæ¯åšïŒDTCXOïŒãå èµããŠããé«ç²ŸåºŠã§æå€§ã§æå·®13ç§ã§æå»ã管çã§ããŸããæå»ããŒã¿ã¯I2Céä¿¡ïŒWireã©ã€ãã©ãªïŒã䜿çšããããšã§ååŸããããšãã§ããŸãã
RX8900çšã®ã©ã€ãã©ãªã¯éå»èšäºã§ç޹ä»ãããã®ã䜿çšããŠããŸãã
Arduinoã§RTCã䜿çšããŠãã¡ã€ã«ç®¡çãšAPIã®å®è£ ãã
å šäœã®æ§æ

Seeeduino XIAOãšAE-RX8900ïŒRTCïŒãçµã¿åãããé ç·äŸã瀺ããŠããŸããI2Cã®SCLãšSDAã¯ãã«ã¢ããããå¿ èŠããããŸããAE-RX8900ã¢ãžã¥ãŒã«å ã§ãã«ã¢ããæµæãæå¹ã«ãããš10kΩã§ãã«ã¢ããããããšãã§ããŸãã
RX8900ã¢ãžã¥ãŒã«ã¯1ç§çµéïŒå€æŽå¯èœïŒããæ¯ã«/INTãåºåããããæå»ãæŽæ°ãããã¿ã€ãã³ã°ãååŸããããšãã§ããŸãã
RX8900ã¢ãžã¥ãŒã«ã®ïŒãã³ïŒVBATïŒã¯æå»æ å ±ãããã¯ã¢ãããããå Žåã«é»æ°äºéå±€ã³ã³ãã³ãµãªã©ã®ããã¯ã¢ãã黿ºãæ¥ç¶ããŸããD1ã¯Seeeduino XIAOã®é»æºãåããå Žåã«ããã¯ã¢ãã黿ºããSeeeduino XIAOã«é»æºããã€ãã¹ããªãããã«æ¥ç¶ããŠããŸãã
R3ã¯C1ã®ã€ã³ããŒãã³ã¹ãäœããªã£ãŠããåºéïŒé»è·ã空ã®ç¶æ ïŒã«çºçããçªå ¥é»æµé²æ¢ã®ããå®è£ ããŠããŸããRTCãžã®æå»æžã蟌ã¿ã¯ã·ãªã¢ã«ã¢ãã¿ã«ãã黿ã®éä¿¡ã§è¡ããŸãã
æå»ããŒã¿æžã蟌ã¿ã®é»æ

RTCã«æå»ããŒã¿ãæžã蟌ãããã®é»æãèªäœããŠæ§æããŸãã黿ã¯ã·ãªã¢ã«ã¢ãã¿ã䜿çšããããæåã³ãŒãã«ãªããŸããæåã³ãŒãã«ãªãããïŒãã€ãããŒã¿ã«ãªããŸãã
äŸãã°æã®éšåã«10æãæå®ããå Žåã¯10ãã·ãªã¢ã«ã¢ãã¿ã«å ¥åããŸããã·ãªã¢ã«éä¿¡ã®ããŒã¿ã¯0x31ã0x30ã®2ãã€ãããŒã¿ã«å€æãããŠããŸããé»æã®æ§æãšå 容ããŸãšããŠããŸãã
| å 容 | 説æ |
|---|---|
| ãããïŒåºå®ïŒ | æåã³ãŒãã§ã¹ã¿ãŒãã衚ãããSïŒå€§æåïŒãæå®ããŸãã |
| 幎 | 幎ã®äž2æ¡ãæå®ããŸãã2021幎ãªã21ãæå®ããã RTCã2099幎ãŸã§å¯Ÿå¿ããŠãããã99ãæå€§å€ãšãªãã |
| æ | 1æãã12æãæå®ããŸãã 1æã®å Žåã¯01ã®ããã«2æ¡ã®æåã«ãªãããã«æå®ããŸãã |
| æ¥ | 1ïœ31æ¥ãæå®ããŸãã éåžžããåŸãªãæ¥ãæå®ãããšRTCã®åäœã®ä¿èšŒãã§ããªããªããŸãã äŸïŒïŒæã®æ¥æå®ã§31æ¥ãªã© |
| æ | 0æãã23æãæå®ããŸãã 1æã®å Žåã¯01ã®ããã«2æ¡ã®æåã«ãªãããã«æå®ããŸãã |
| å | 0åãã59åãæå®ããŸãã 5åã®å Žåã¯05ã®ããã«2æ¡ã®æåã«ãªãããã«æå®ããŸãã |
| ç§ | 0ç§ãã59ç§ãããŠããŸãã 5ç§ã®å Žåã¯05ã®ããã«2æ¡ã®æåã«ãªãããã«æå®ããŸãã |
| ææ¥ | æ¥ææ¥ïŒ00ãæææ¥ïŒ01ãç«ææ¥ïŒ02ãæ°Žææ¥ïŒ03 æšææ¥ïŒ04ãéææ¥ïŒ05ãåææ¥ïŒ06 |
| ãšã³ãïŒåºå®ïŒ | æåã³ãŒãã§ãšã³ãã衚ãããEïŒå€§æåïŒãæå®ããŸãã |
äŸïŒ2021幎3æ21æ¥10æ30å30ç§-åææ¥ãæå®ããå Žå
S21032110303006E
ãšé»æãã·ãªã¢ã«ã¢ãã¿ã«å
¥åããŠéä¿¡ããŸãã
é»ææ§æã«åŸããªãå Žåã¯RTCã®ããŒã¿ã®æŽæ°ãåãä»ããªãããã«ããŠããŸãã
黿ã®åä¿¡åŠç

ã·ãªã¢ã«ã¢ãã¿ã®éä¿¡ã䜿çšããããSerial.begin()ãã³ãŒã«ããŠããå¿ èŠããããŸããã·ãªã¢ã«ã¢ãã¿ã§éä¿¡ããæåãåä¿¡ããããã«Serial.read()ã䜿ããŸãã
void setup() {
Serial.begin(115200);
}
void loop() {
while( Serial.available()){
rxseeeduino.buf[rxseeeduino.wp] = Serial.read();
if( ++rxseeeduino.wp >= RING_SZ ){ //次ã«ããŒã¿ãå
¥ããå ŽæãæŽæ°
rxseeeduino.wp = 0;
}
}
RxDataChk(); //黿ãã§ãã¯
}
Serial.available()ã§ã·ãªã¢ã«éä¿¡ããŒã¿ãåä¿¡ããŠããããšã確èªã倿°ã«äžæä¿ç®¡ããŠããŸããRxDataChk()ã§äžæä¿ç®¡ãã黿ãæå¹ãã®å€æãè¡ã£ãŠããŸãã
/* Data Rx check function add */
void RxDataChk(){
if( rxsz >= sizeof(rtcset) ){ //黿ã®é·ãåã®ããŒã¿ãåä¿¡ããã
adrs = &rtcset.header;
for(uint8_t i=0; i< sizeof(rtcset); i++ ){ //rtcsetã«ããŒã¿ãç§»ã
*adrs = rxseeeduino.buf[rxseeeduino.rp];
adrs++;
if(++rxseeeduino.rp >= RING_SZ ){
rxseeeduino.rp = 0;
}
}
if( rtcset.header == HEADER && rtcset.headend == END){ //ããããŒãšãšã³ãã確èª
rxoutcnt = 0;
RtcSetChk(); //RTCããŒã¿ãçæããŠæžã蟌ã
}
}
else{
if( ++rxoutcnt >= 10 ){ //åä¿¡ã¿ã€ã ã¢ãŠã
rxoutcnt = 0;
rxseeeduino.rp = rxseeeduino.wp;
}else{
delay(10);
}
}
}
RxDataChk()ã¯é»æãåä¿¡ãããšããŒã¿ã倿°rtcsetã«ç§»ãããããŒãšãšã³ãã確èªããŸããåä¿¡ããŒã¿ãããŒã¿é·ã«ãªããã«äžå®æéïŒ100msïŒçµéãããšã¿ã€ã ã¢ãŠããšã¿ãªããŠãªã³ã°ãã€ã³ã¿ã®å€ãæŽæ°ããŠããŒã¿ãç Žæ£ããŸãã
/* Rtc Data Set function add */
void RtcSetChk(){
dateTime settim;
settim.year = AscBin(rtcset.tim[0]) * 10 + AscBin(rtcset.tim[1]); //yearã®äŸ
settim.week = 1 << AscBin(rtcset.tim[13]); //weekã·ããã§ããŒã¿ãæžã蟌ãïŒRTCã®ä»æ§ïŒ
if( ( settim.year > 99 ) ||
( settim.month > 12 || settim.month == 0 ) ||
( settim.day > 31 || settim.day == 0 ) ||
( settim.hour > 23 ) ||
( settim.minute > 59 ) ||
( settim.second > 59 ) ||
( AscBin(rtcset.tim[13]) > 6 )){// ç¯å²å€
//åŠçãªã
}
else{
RX8900.setDateTime(&settim); //RTCã«ããŒã¿ãæžã蟌ã
}
}
æåã³ãŒããåä¿¡ããããRTCã«æžã蟌ãããŒã¿ããã€ããªããŒã¿ã«å€æããå¿ èŠããããŸããyearã®ããŒã¿ã21幎ã®å Žåãèãããšæåã³ãŒããšããŠ0x32ã0x31ã®2ãã€ããšãªããŸãã
ãããã®å€ããã€ããªã«å€æãããš0x32ã¯2ã«ãªã0x31ã¯1ã«ãªããŸãããã€ããªããŒã¿ã§21ãæ§æããããã«1ãã€ãç®ã®ãã€ããªå€æå€ã10åããŠããŸããææ¥ãé€ãä»ã®ããŒã¿ãåæ§ã«å€æããŸãã
ææ¥ã®ããŒã¿ã¯RTCã¢ãžã¥ãŒã«ã®ä»æ§äžããããç«ã£ãŠããç®æã«ãã£ãŠææ¥ãå€å®ãããããããã·ããã§æžã蟌ãããŒã¿ãçæããŠããŸãã
RTCããŒã¿ã®ç¯å²ãã§ãã¯ãè¡ã£ãŠåé¡ããªããã°RTCã¢ãžã¥ãŒã«ã«ããŒã¿ãæžã蟌ã¿ãŸãã
ããã¯ã¢ããæéã¯ïŒ

RX8900ã®ããŒã¿ã·ãŒãã確èªãããšæ¶è²»é»æµã¯æå€§ã§1.4uAã§ããæå»ããŒã¿ãä¿æã§ããæå°ã®é»å§ã1.6Vãšãªã£ãŠããŸãããŸãFOUTåºåã¯OFFãåæã«ããŠããŸãã
黿°äºéå±€ã³ã³ãã³ãµ1Fã§äœæéããŒã¿ãä¿æã§ãããã«ã€ããŠæ€èšããŸããäžèšèšäºã«èãæ¹ããŸãšããŠããŸãã黿°äºéå±€ã³ã³ãã³ãµã®æŒã黿µã¯åèèšäºã®9.26uAãæ¡çšããŠèšç®ããŸãã
黿°äºéå±€ã³ã³ãã³ãµã®éé»å®¹éã«ããããã¯ã¢ããæéã®èãæ¹
黿°äºéå±€ã³ã³ãã³ãµã®æŒã黿µã¯9.26uAã§RTCã¯æå€§ã§1.6uAãå¿ èŠã«ãªãã®ã§åèš10.66uAãæ¶è²»ãããããšã«ãªããŸããé»å§ã3.3Vãã1.6Vã«ãªããŸã§ã®ããã¯ã¢ããæéãæ±ããŸãã$$s = \frac{1\times1.7}{10.66\times10^{-6}}= 159474ç§ = 2657å = 44æé$$
ææªãªæ¡ä»¶ã§44æéçšåºŠã®ããã¯ã¢ãããå¯èœã«ãªããŸãã黿°äºéå±€ã³ã³ãã³ãµã¯æž©åºŠç¹æ§ã«ãã£ãŠæŒã黿µã容éãå€åããããšããããŸããã宀枩çšåºŠã«èšçœ®ããå Žåã«ãããŠéåžžææªãªã±ãŒã¹ã«ãªãå¯èœæ§ã¯ããªãäœããšèããŠããã§ãããã
åäœç¢ºèª

黿ºãå ¥ãããšåæã®æ¥ä»ãã·ãªã¢ã«ã¢ãã¿ã«è¡šç€ºãããŠ1ç§ããšã«æŽæ°ãããŠããŸããã黿ã«ãã£ãŠæ¥ä»ãæŽæ°ããŠéä¿¡ãããšå€æŽããæ¥æãæŽæ°ããŠããŸãã
æŽæ°ããæ¥æã¯é»æºã®USBãæããŠé»æºãOFFããåŸã«åã³é»æºãONããŠã·ãªã¢ã«ã¢ãã¿ã§RTCã®æå»ã確èªãããšé»æ°äºéå±€ã³ã³ãã³ãµã«ããããã¯ã¢ããã«ããããŒã¿ãä¿æãããŠããŸããã
ãœãŒã¹ã³ãŒãå šäœ
ãœãŒã¹ã³ãŒãã¯èšäºäœææç¹ã«ãããŠåäœç¢ºèªã§ããŠããŸããã䜿çšããŠããã©ã€ãã©ãªã®æŽæ°ã«ããåäœãä¿èšŒã§ããªããªãå¯èœæ§ããããŸãããŸãããœãŒã¹ã³ãŒãã䜿çšããããšã«ãã£ãŠçããäžå©çãªã©ã®äžåã®è²¬ä»»ãè² ããããŸããåèè³æãšããŠã䜿ããã ããã
#include <Wire.h>
#include "RX8900.h"
#define RING_SZ 256
#define HEADER 'S'
#define END 'E'
struct RING_MNG{
uint8_t wp;
uint8_t rp;
uint8_t buf[RING_SZ];
};
struct TIMESET{
byte header;
byte tim[14];
byte headend;
};
// application use
const byte INT_PIN = 0;
dateTime tim;
uint8_t temp;
dateTime date = {0, 30, 20, 1, 2, 10, 20}; //åæå€-ç§ïŒå-æïŒææ¥ïŒæ¥ïŒæïŒå¹Ž
TIMESET rtcset;
RING_MNG rxseeeduino;
byte rxoutcnt;
/*** Local function prototypes */
void RxDataChk();
void RtcSetChk();
byte AscBin(byte asc);
void setup() {
pinMode(INT_PIN, INPUT_PULLUP); //RX8900ã®æå»æŽæ°å²ã蟌ã¿ãåããDI
Serial.begin(115200);
//RX8900.begin(); //åæå€ãæå®ããªãå Žå(2020/10/01/00:00:00)
RX8900.begin(&date); //åæå€ãæå®ããå Žå
}
void loop() {
while( Serial.available()){
rxseeeduino.buf[rxseeeduino.wp] = Serial.read();
if( ++rxseeeduino.wp >= RING_SZ ){ //次ã«ããŒã¿ãå
¥ããå ŽæãæŽæ°
rxseeeduino.wp = 0;
}
}
RxDataChk(); //黿ã®ãã§ãã¯
if (digitalRead(INT_PIN)) {
if(rtcmode == RTC_MODE_TYP::RTC_RX_END ){
rtcmode = RTC_MODE_TYP::RTC_IDLE;
}
}else{
if(rtcmode == RTC_MODE_TYP::RTC_IDLE){
rtcmode = RTC_MODE_TYP::RTC_RX;
}
}
switch(rtcmode ){
case RTC_MODE_TYP::RTC_IDLE:
//åŠçãªã
break;
case RTC_MODE_TYP::RTC_RX:
RX8900.getDateTime(&tim);
Serial.print("20");
if(tim.year < 10){
Serial.print('0');
}
Serial.print(tim.year);
Serial.print("/");
if(tim.month < 10){
Serial.print('0');
}
Serial.print(tim.month);
Serial.print("/");
if(tim.day < 10){
Serial.print('0');
}
Serial.print(tim.day);
Serial.print("/");
if(tim.hour < 10){
Serial.print('0');
}
Serial.print(tim.hour);
Serial.print("ïŒ");
if(tim.minute < 10){
Serial.print('0');
}
Serial.print(tim.minute);
Serial.print("ïŒ");
if(tim.second < 10){
Serial.print('0');
}
Serial.print(tim.second);
Serial.print(" ");
switch (tim.week)
{
case SUN:
Serial.print("SUN");
break;
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
default:
Serial.print("NG");
break;
}
Serial.print(" TemperatureïŒ");
RX8900.getTemp(&temp);
Serial.print(((float)temp * 2 - 187.19)/ 3.218);
Serial.println("deg");
rtcmode = RTC_MODE_TYP::RTC_RX_END;
break;
case RTC_MODE_TYP::RTC_RX_END:
//ã¿ã€ã ã¢ããã§ç°åžžãæ€åºããå Žåã®åŠç
break;
}
}
/* Data Rx check function add */
void RxDataChk(){
int rxsz;
uint8_t sz;
uint8_t allsz;
uint8_t *adrs;
uint8_t rp = rxseeeduino.rp;
rxsz = rxseeeduino.wp - rxseeeduino.rp; //åä¿¡ããŒã¿æ°ã®ç®åº
if( rxsz < 0 ){
rxsz = rxsz + RING_SZ;
}
if( rxsz >= sizeof(rtcset) ){
adrs = &rtcset.header;
for(uint8_t i=0; i< sizeof(rtcset); i++ ){ //rtcsetã«ããŒã¿ãç§»ã
*adrs = rxseeeduino.buf[rxseeeduino.rp];
adrs++;
if(++rxseeeduino.rp >= RING_SZ ){
rxseeeduino.rp = 0;
}
}
if( rtcset.header == HEADER && rtcset.headend == END){
rxoutcnt = 0;
RtcSetChk(); //RTCããŒã¿ãçæããŠæžã蟌ã
}
}
else{
if( ++rxoutcnt >= 10 ){ //åä¿¡ã¿ã€ã ã¢ãŠã
rxoutcnt = 0;
rxseeeduino.rp = rxseeeduino.wp;
}else{
delay(10);
}
}
}
/* Rtc Data Set function add */
void RtcSetChk(){
dateTime settim;
settim.year = AscBin(rtcset.tim[0]) * 10 + AscBin(rtcset.tim[1]);
settim.month = AscBin(rtcset.tim[2]) * 10 + AscBin(rtcset.tim[3]);
settim.day = AscBin(rtcset.tim[4]) * 10 + AscBin(rtcset.tim[5]);
settim.hour = AscBin(rtcset.tim[6]) * 10 + AscBin(rtcset.tim[7]);
settim.minute = AscBin(rtcset.tim[8]) * 10 + AscBin(rtcset.tim[9]);
settim.second = AscBin(rtcset.tim[10]) * 10 + AscBin(rtcset.tim[11]);
settim.week = 1 << AscBin(rtcset.tim[13]);
if( ( settim.year > 99 ) ||
( settim.month > 12 || settim.month == 0 ) ||
( settim.day > 31 || settim.day == 0 ) ||
( settim.hour > 23 ) ||
( settim.minute > 59 ) ||
( settim.second > 59 ) ||
( AscBin(rtcset.tim[13]) > 6 )){// ç¯å²å€
//åŠçãªã
}
else{
RX8900.setDateTime(&settim);
}
}
/* Ackãâ Bin change function add */
byte AscBin(byte asc){
byte ret;
ret = asc - 0x30;
if( ret < 0){
ret = 0;
}
return ret;
}
RTC(RX8900)ã®APIã®ãœãŒã¹ãã¡ã€ã«ã¯äžèšèšäºã®ãœãŒã¹ã³ãŒãå šäœã§ã確èªãã ããã
Arduinoã§RTCã䜿çšããŠãã¡ã€ã«ç®¡çãšAPIã®å®è£ ãã
é¢é£ãªã³ã¯
Arduinoã®ã©ã€ãã©ãªã䜿ã£ãŠåäœç¢ºèªãè¡ã£ãããšãäžèšãªã³ã¯ã«ãŸãšããŠããŸãã
Arduinoã§åŠã¹ããã€ã³ã³ã®ãœããéçºãšæšæºã©ã€ãã©ãªã®äœ¿ãæ¹
Seeeduino XIAOã§åŠã¹ããœããéçºãšæšæºã©ã€ãã©ãªã®äœ¿ãæ¹
ESP32-WROOM-32Eã§åŠã¹ããœããéçºãšæšæºã©ã€ãã©ãªã®äœ¿ãæ¹
Raspberry Pi Picoã§åŠã¹ããœããéçº
åºå
ãã€ãã¹ã4幎é£ç¶1äœãç²åŸããå®çžŸãæã€å®è·µåã®ããã°ã©ãã³ã°ã¹ã¯ãŒã«

æåŸãŸã§ãèªãã§ããã ãããããšãããããŸããã


å€ã®10ïŒ30ããç¿æ¥ã®8ïŒ30ãŸã§ã®12æéã«ãããŠã®ããããªé»æºã®å€åã¯3.28Vâ3.10Vã§ãããèããæž©åºŠå€åãªã©ãªãéã4æ¥çšåºŠã®ããã¯ã¢ãããå¯èœã§ãããšèšããŸãã