GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
SDカードの書き込み時のタイムスタンプは、サポートしてますか?----------フォーラム上でRTCの設定が話題になっていることが多いようですが、GR-SAKURA スケッチV2.03において、現状が分からないので、ここで質問します。SDカード記録時のタイムスタンプはサポートしていますか?------以前のスケッチV1.08では、RTCに正しい時刻をセットしておくとSDカードで新ファイルをOPENすると正しいタイムスタンプが記録されておりました。(上書きすると最終日時がスタンプされた)
現在 V2.03に移行している最中でこの問題にぶつかりました。
RTC自体は、正常に動いています。「マイコンで電子工作: GR-SAKURAのRTCを使う」 の題で Kaz Kinoshita さんのホームページを参考にして、若干の手直しをして、動作させています。(本人の許可を得ていないのでURLは省略します。)
SDメモリカードは、arduino仕様に従い、書き換えたところ、書き込みにも成功しています。ただし、タイムスタンプが、常に、2000年1月1日のままです。
タイムスタンプは、まだサポートされていないのか、それとも何かコツがあるのか教えてください。
ワレハイさん、すみません。以下のサンプルをご参照ください。スケッチリファレンスのサンプルもタイムスタンプ付きにした方がいいかもしれないですね。
いつもこちらのサイトを参考にしています。
#include <Arduino.h>
#include <SD.h>
#include <RTC.h>
RTC_TIMETYPE t;
void dateTime(uint16_t* date, uint16_t* time);
void setup(){
Serial.begin(9600);
while(!Serial.available()); // wait to press key
Serial.read(); //dummy
rtc_init();
t.year = 15;
t.mon = 9;
t.day = 25;
t.weekday = RTC_WEEK_WEDNESDAY;
t.hour = 0;
t.min = 1;
t.second = 0;
rtc_set_time(&t);
if(!SD.begin()){
Serial.println("Card failed, or not present.");
while(1);
}
SdFile::dateTimeCallback( &dateTime );
File file = SD.open("sample.txt", FILE_WRITE);
if(file){
//Write
Serial.println("Success to open sample.txt and write hello.");
file.println("Hello, my SD");
file.close();
} else {
Serial.println("Failed to open file.");
void loop(){
void dateTime(uint16_t* date, uint16_t* time)
{
rtc_get_time(&t);
*date = FAT_DATE(t.year+2000, t.mon, t.day);
*time = FAT_TIME(t.hour, t.min, t.second);
Okamiya さん いつも早い回答ありがとうございます。
おかげさまで、SDカード、タイムスタンプ V2.03で うまく動作しました。
ワレハイ。
RTC(タイムスタンプ)について、再び質問です。不具合かもしれません。
(前回のresでうまくいったように書きましたが。)
rtc_get_time(&t);で取得した 時間(t.hour)の値が、
11時の次が、52時になる現象が出ています。
同様に、21時が61時になっていることがあるようです。
連続して実験していませんので、不確かな実験ですが、
時計としては、時間数値から40の引き算で対処できますが、
タイムスタンプがうまく記録されません。
40のずれは、RTCレジスタBCD桁の3bit目が立っているようにも見えます。
61時のような、あり得ない時刻は、PC上のタイムスタンプでは空欄になりますので
確認できませんが、保存されたファイル内の数値データや、モニターしているシリアルデータから
この現象を確認しています。
RTCデータ取得の際に下記のように毎回書き直すことにより、タイムスタンプも正常になります。
t.hour=t.hour%40;
(追記:一見うまくいったようにみえましたが、これを実行すると時計としては、進まなくなるようです。
hourだけを再設定しないとダメですね。)
現象が出ているプログラムが長いので、文章での質問となりましたが、
こころあたりがあればアドバイス願います。
必要であれば、次回プログラムを送ります。
すみません、おそらく24時間モードでPMビット(bit6)が不定にも関わらず読み込み、10桁BCDをHEX変換していますね。
例えば13時の場合、0b00010011が期待値なのですが、bit6が不定のために0b01010011を読んで53時にしてしまっていると思います。
恐れ入りますが、RTC.cppのint rtc_get_time(RTC_TIMETYPE* time)内にある、time->hourのところを以下のようにして試していただけないでしょうか?
time->hour = BCD2HEX(0x3f & RTC.RHRCNT.BYTE);
それからすみません、別途Matsuuraさんから報告されている、カウントモードレジスタの初期値が設定されず、うるう年などが考慮されない設定になることがある問題もありますので、ワレハイさんご確認をもって、2.04としてV-upしたいと思っています。
あ、すみません。うるう年などを考慮するカレンダーモードはRX63Nにはありませんでした。
Okamiya さんからのアドバイス(RTC.cpp 内の1行、0x3fでマスクするプログラム)で修正したところ、うまくいきました。
モニタしている時計のRead値も問題なく、またSD書き込み時のタイムタンプもOKです。ありがとうございました。
ご確認誠にありがとうございました。
他の案件も踏まえてV2.04へアップしたいと思います。