• 締切済み

RTCで取得した値をLCDに表示したい

H8SX/1655に接続したRTCからの値をLCDに表示させて 時計を作りたいんですけど、値の受け渡しの方法がいまいちわかりません>< 言語は、C言語を使ってHEWでプログラムを作っています・・・ LCDの1列目と2列目に文字は、表示できました。 RTCの使い方が、わかるサイトとか教えてもらえると幸いです。。。。

みんなの回答

noname#137556
noname#137556
回答No.3

ANo.2 の補足について 内蔵の I2C インターフェイスを使うなら,初期化(レジスタの設定)が必要です。 ポートを直接操作しても出来なくはないですが,面倒なだけです。 rtc_write から rtc_write を呼んだりしていますが,大丈夫なのでしょうか? 読んできたデータはどこかに保存されているのでしょうか? ↓前掲のアプリケーションノートのソースコードです。 http://japan.renesas.com/support/downloads/download_results/C2009701-C2009800/an_rjj06b0790_h8sx_iic.jsp 参考にしてください。

全文を見る
すると、全ての回答が全文表示されます。
noname#137556
noname#137556
回答No.2

基本的には,I2C デバイス上のアドレスを指定して, そこのデータを読み書きします。 I2C の概要は↓が分かりやすいでしょうか。 http://wiki.livedoor.jp/yamamaya_com/d/I2C%A5%D0%A5%B9%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%E8%A4%A6 どこのアドレスに何があるかは,RTC のデータシートやマニュアルを参照してください。 http://www.epsontoyocom.co.jp/product/RTC/set03/rtc8564je_nb/ マイコン側は,内蔵の I2C バスインターフェイスを使うことになると思います。 アプリケーションノートが出ているので,参考にしてください。 http://documentation.renesas.com/jpn/products/mpumcu/apn/rjj06b0790_h8sxap.pdf

TTaruruTT
質問者

お礼

ありがとうございます^^ I2Cの概要が、ものすごくわかりやすかったです。

TTaruruTT
質問者

補足

ここに書いてある内容をもとにプログラムを組んでみました。 /**************************ここからRTC***********************************/ //STARTコンディション void start(void) { P1.DR.BIT.B6 = 1;//SDA=1 P1.DR.BIT.B7 = 1;//SCL=1 if(P1.DR.BIT.B7 = 1) { P1.DR.BIT.B6 = 0;//SDA=1 } } //STOPコンディション void stop(void) { P1.DR.BIT.B7 = 1;//SCL=1 P1.DR.BIT.B6 = 0;//SDA=0 if(P1.DR.BIT.B7 = 1) { P1.DR.BIT.B6 = 1;//SDA=1 } } //データビットはSCLが1レベルの間に確定される。 //RTCからLCDへ書き込むアドレスとデータ void rtc_write(unsigned char address , unsigned char data) { //Write用アドレス0xA2 P1.DR.BIT.B7=0xA2; rtc_write(0x02 , 0x01);//秒 rtc_write(0x03 , 0x01);//分 rtc_write(0x04 , 0x01);//時 rtc_write(0x05 , 0x17);//日 rtc_write(0x06 , 0x03);//曜日 rtc_write(0x07 , 0x01);//月 rtc_write(0x08 , 0x7DB);//年 } //RTCの読み込むアドレスとデータ void rtc_read(unsigned char address) { //Read用アドレス0xA3 P1.DR.BIT.B7=0xA3; rtc_read(0x02); rtc_read(0x03); rtc_read(0x04); rtc_read(0x05); rtc_read(0x06); rtc_read(0x07); rtc_read(0x08); } //I/Oポートの初期化 void port_init() { PH.DDR=0xff;//PHを出力に設定LCD P1.DDR=0x00;//P1を入力に設定スイッチ、RTC } //LCDに表示 void main(void) { void start(); void rtc_read(); void rtc_write(); initLCD(); cur_pos(0,0); print_lcd(rtc_read); while(1) {} } RTCに関するところだけですけど・・・ これだと、LCRにわけのわからない文字が表示されちゃいます>< これは、表示する形が違うためなんでしょうか? LCDに表示するプログラムの部分は、print_lcd();の中身です。 読み込んだ値をそのまま入れただけなんですけど・・・ 何か、アドバイスをください。。。

全文を見る
すると、全ての回答が全文表示されます。
noname#137556
noname#137556
回答No.1

RTC そのものというより,RTC にアクセスするための I/F, 例えば IIC とか SPI とかの使い方がわからない,ということなのでしょうか? RTC の型式や I/F の種類,具体的にどこが分からないのかを,補足したほうが良いと思います。

TTaruruTT
質問者

補足

RTCの型番は、RTC-8564NBを使っています。 今は、I2Cを使ってマイコンに接続しています。 が、I2Cの使い方がよくわかりません>< SCLとSDAを接続して、プログラムのほうでどうやったら この2線から時間が取得できるのでしょうか? ちぐはぐな質問ですみません。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • H8/3052でRTCを使うには

    H8/3052でRTC-8564NBを使った時計を作ろうと思っているのですが、接続するピンと通信方法が判りません。 そもそもH8/3052はI2Cに対応していないようなのですが、上のRTCを使うことは不可能なのでしょうか。

  • RTCで読み取った時刻がある時間になったときに,ある関数を読み込みたい

    RTCで読み取った時刻がある時間になったときに,ある関数を読み込みたいのですが, どのようにプログラムを書けばいいのでしょうか? ご回答をよろしくお願いいたします. プログラム言語はC言語で,PICは16F876を使用しています. 下記のようにrtc_data_read()関数で使用しているminが0分または05分のときにadc_solar()関数を読み出したいのですが, 下記のプログラムでは初期時刻を59分に設定しているのに,05分となり,時刻が変化してもずっと05分のままになってしまいます. また,ポインタを使用してみましたが,コンパイルエラーが出てしまいます. void Normal(void) { while(flg==0){ rtc_data_read(); if((min=0) || (min=5)){ adc_solar(); } } }

  • LCDの表示位置とプログラムについて

    LCDについて質問します。 以下のURLにLCDは1行に40文字まで表示でき、41~64文字目は未実装と書いてありました。 参考URL:http://elm-chan.org/docs/lcd/hd44780_j.html では、41文字目(DDRAMアドレスで0x28)以降にプログラムで文字を表示させようとしたら どうなるのでしょうか? どなたか知っている人がいたら教えてください。

  • dspicによるlcd表示

    dspicをもちいてC言語により゛しlcd表示のプログラミンクを作成中ですが、"abcdefg"を印字予定が”チトナネノフヘ”と出力されます。 dspicの初心者です宜しく教授願います。

  • 16×2キャラクタLCDへの文字表示について

    16×2キャラクタLCDへの文字表示について質問です. CGRAMアドレス:0xffの塗りつぶしの四角を表示させたいのですが, '■'が'β'になって表示されてしまいます. どのような方法をとれば■が表示できるでしょうか. 開発言語はC,環境はMPLAB X IDE,XC8コンパイラ. 対象デバイスはPIC18F4553です. 御回答の程よろしくお願いいたします.

  • LCDの文字

    H8とLCDを使って文字の表示をしたいですが,なかなかできません。数字とアルファベットは何とか表示できましたが,カタカナは表示できないです。これはハードの問題ですか?ご存知の方はいらっしゃいますか? LCDはSC1602BSLBです。

  • PICを使用してのLCD制御について

    PIC(16F877A)を使用してLCDの制御を行っています。 LCDに表示を行ってから、(カーソルと呼ぶのでしょうか?)黒の■が2行目でチカチカと点滅をしていて、邪魔だなと感じるのですが、点滅させない方法があるのでしょうか? もしあるのであれば、教えて頂けますか? PICのプログラムはC言語を使用しています。 ご回答、アドバイスをよろしくお願いします。

  • VBA 最上行にMaxの値、それ以下の行には0表示

    VBAの勉強を始めて間がなく知識も乏しいため、なんとか(とりあえずでも)エクセル関数を使って出来ないものかと考えていましたが、難しそうです。 F列にあいうえお…わをん等のランダム文字列が入っています。 H列には1か0が入っています。 (少ないときは5000行、多い時で10000行のデータ量です) F列が例えば、あ、か、さ、た、な、は、ま、や、ら、わ、の時 最上行のH列にMAXの値(1か0しかないですが)を表示し、それ以下の行にはすべて0と表示させたいです。(H列の値を書き換えたい) F列が、あ、か、さ、た、な、は、ま、や、ら、わ、以外の文字列のときは元の値のままを表示です。 どうか、よろしくお願いします。 F G H --------------- あ   0 あ   1 あ   0 あ   0 あ   0 --------------- か   0 か   0 --------------- さ   1 さ   1 さ   0 さ   1 ↓ F G H --------------- あ   1 あ   0 あ   0 あ   0 あ   0 --------------- か   0 か   0 --------------- さ   1 さ   0 さ   0 さ   0

  • LCDへの命令

    この画像の16文字×2行のLCDに次の命令を送るプログラムを教えてください。 1)画面の表示を消去する 2)カーソルを1行目8文字目に移動し、文字Aを表示する。  カーソルを2行目7文字目に移動し、文字Bを3個表示する 3)カーソルを2行目先頭へ移動する 4)1234+5678を計算し、その結果を使ってLCDに1234+5678=?????と表示する。   ?????は計算結果の数字で置き換える。 似たような命令もありますが、お願いします。

  • エクセルで横方向でのソート、または条件を満たすセルの値を表示する関数ありますか?

    A,B,C,D,E列に文字列が入っており、 F列にはA~Eの中で先頭文字が(1)のセルの値を表示 G列にはA~Eの中で先頭文字が(2)のセルの値を表示 H列にはA~Eの中で先頭文字が(3)のセルの値を表示 I列にはA~Eの中で先頭文字が(4)のセルの値を表示 J列にはA~Eの中で先頭文字が(5)のセルの値を表示 させたいのですが、F~J列にはどんな関数を入れれば良いでしょうか? 横行でのソートをするのと同じ意味になると思うのですが、 先頭文字順に拾い出したいのです。 よろしくお願いします。