2019.1.2
前へ
次へ
ホームページトップへ戻る


KL5C80A12マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第62回]



●RTCで迷走してしまいました

ND80KL/86本体ボードはDATE$、TIME$を使うためにDS1307を実装しています。
今回の新しいボードでもDS1307を実装するつもりでした。
ただICの数を少なくするためにND80KL/86の回路とは少し異なっています。
余り深く考えずに、そこを変えたために年末から今日まで、DS1307にうまくアクセスできずに無駄な時間を費やしてしまいました。
あれこれ試行錯誤を重ねた結果一応はなんとかなったのですが、まだクリアできない問題が残ってしまいました。
冗長になりますので詳しくは書きませんが、結局のところそれをこれ以上追求するのは、時間の無駄、ということに気が付きました。
今回のボードにはDS1307は実装しない、というのが一番まっとうな考えである、という結論に落ち着きました。

もともとWindows上で実行するUSB接続型のBASICでDATE$、TIME$を使う必要性は無いのではと思います。
新独立化セットでSDカードにログを記録するためにDATE$、TIME$が必要になったのでした。
新独立化セットではDS1307をROM/RAM/RTC回路に実装しています。
そのDS1307を使えば、今回のボードにDS1307を実装する必要はありませんでした。
もっと早くその結論に至るべきでありました。
年初早々に無駄な時間を費やしてしまったことが悔やまれます。

あ。いえ。全く無駄でもありませんでした。
今回DS1307にアクセスするプログラムについて、つっこんで考えてみた結果、現行のDATE$、TIME$にはちょっと問題があることがわかりました。
本当はプログラムを修正すべきなのですが、それにはちょっと手間がかかりそうなので、いずれ次期バージョンアップの際にあらためて考えてみることにします。
とりあえずは既知の問題ということにしておきます。

[DATE$、TIME$の既知の問題]
DATE$、TIME$を設定するときは、
DATE$=”19/01/02”
TIME$=”22:00:00”
のようにDATE$とTIME$はBASIC上では別々のタイミングで実行されます。
しかし実際にDS1307にその値を送るときには、DATE$、TIME$の値をDS1307用のフォーマットに書き換えた年月日時分秒データバッファの値を送信します。
ここで問題なのは、DATE$を実行したときもTIME$を実行したときも、同じように年月日時分秒データが送られてしまうという点です。
たとえばTIME$=”09:00:00”を実行すると年月日時分秒データバッファの時分秒の値は090000になります。
その値は次にTIME$を書き換えるかあるいはPRINT TIME$のようにしてDS1307から値を読み出すまで変わりません。
たとえば10:00:00にDATE$=”19/01/02”を実行すると、DS1307の保持している時刻は10:00:00であるにもかかわらず、日付の書き込みと同時に年月日時分秒データバッファに残っている古い時分秒データの”09:00:00”がDS1307に送られてしまいます。
このことはDATE$、TIME$を設定するときだけに問題になります。
PRINT文などでDATE$、TIME$を読み出すときは問題ありません。

この問題を避けるために、以下のようにしてください。
DATE$、TIME$を設定するときは、先にDATE$を実行してその後に続いてTIME$を設定してください。
DATE$だけを設定しないようにしてください。
TIME$は正しく設定済みでDATE$のみ変更したいときは、次のようなプログラムを実行してください。

10 WK$=TIME$
20 DATE$=”19/01/02”
30 TIME$=WK$

KL5C80A12マイコンボードの製作[第62回]
2019.1.2upload

前へ
次へ
ホームページトップへ戻る