迷走の果て・Tiny Objects

迷走する日々の覚え書きです。自分で分かってることは省略してますので、念のため。

Arduinoでロータリーエンコーダを試す(2)

EX-OR無しで動きました。
quadrature_encoder_schematic3.jpg

ArduinoというかATmegaの内部プルアップ抵抗を使ったのでロータリーエンコーダ以外必要ありません。
quadrature_encoder_photo2.jpg

テスト用のスケッチです、intcountはチャタリングの影響を見るために入れてる変数ですので通常は不要です。
スポンサーサイト

Arduinoでロータリーエンコーダを試す(1)

ロータリーエンコーダは以前PSoCで試したことがあります。Arduinoでやってみようと思ったら以前参考にしたサイトがリンク切れ。
検索して見つけました。

How to use a quadrature encoder

このサイトの記事を基にして、とりあえずこのような回路で実験。ロータリーエンコーダは秋月のと同等品です。
EX-ORを使わずに済ませたいのですが、まずは動かしてみてからです。
quadrature_encoder_schematic2.jpg


ロータリーエンコーダは停止位置から次の停止位置まで回すとスイッチの状態が4回変化します。(注クリック感ありの場合)
quadrature_encoder_output.jpg

実験の様子。
上の行左の数値はスイッチの状態が変化した回数、右はそれを4で割ったもの、すなわ回した回数です。
下の行の数字は割り込み回数。スイッチの状態が変化するたびに割り込みが発生するので、チャタリングが無ければ上の数字と一致するはずですが、実際にはチャタリングがあります。でもソフトでうまい具合に除去できます。ソフトで追いつけないような場合は別でしょうけど。
quadrature_encoder_photo.jpg

スイッチサイエンスI2C接続小型LCDを試す。

ロボットプログラミング教室を手伝うことになったのですが、そこではArduino互換機(Studuino)を使います。
電池動作を考慮してでしょうか、クロック8MHz、VCC=3.3Vとなってます。

実は以前にスイッチサイエンスさんからI2C接続小型LCD搭載ボードを買ったのですが、これが3.3V版なのです。うっかりしてました。
当時は(今も^^;;)VCC=5Vで使ってたので使う機会の無いまま放置してたのですが、ちょうどいいので試してみました。
スイッチサイエンスさんのブログをそのまま試しました。
ArduinoのA2をVCC、A3をGNDとして使うという、私にはちょっと思いつけない方法で接続してます。

こんな風になります。
ここではラジオペンチさんの「外付け部品無しでArduinoの電源電圧を測定する」を使わせていただきました。
ただArduinoの基準電圧(1.1V)は結構ばらつきがあるようで、実測3.34Vなのですが3.29Vと表示されたのでスケッチ内で補正しました。
スタディーノ

このままだとA0からA3が塞がってしまい使いにくいので、ユニバーサル基板の切れ端を使って下の写真のように移動しました。
D13をVCC代わりに使ってます。
スタディーノVCC2

スイッチサイエンスLCD接続回路

Arduino:スケッチ書き込み時のタイミングチャート

あちゃんでいいのv1
スケッチ書き込み時のシリアルアダプタの各入出力をロジックアナライザで調べてみました。
使ったスケッチはおなじみのBlink (いわゆるLチカ)です。
Channel 0はシリアルアダプタのTX出力、1はRX入力、2はDTR出力です。
Channel 0でトリガをかけてます。
Arduino書き込み
まずDTRがLになります、CRによる微分回路でArduinoをリセットします。

0.5秒後に0x30、0x20が送られ、Arduinoは0x14、0x10 を返します。
Arduino書き込み2

さらに0.5秒後に同じく0x30、0x20が送られ、Arduinoは0x14、0x10 を返します。
0.5秒後に書き込みが始まります。その後どういうやり取りがあるのかまでは調べてません、調べても多分私にはわかりません。
ちなみにビットレートは57600bpsでした。

あちゃんでいいのver.1

ウチではびんぼうでいいのをつかってます。
実はあちゃんでいいのも買っていたのですが、うまく動かせず放置してました。買ったのは今販売されてるVer2ではなく初期型、リセットスイッチがありません。
USB-シリアルアダプタをつないでのDTRリセットも出来ませんでした。
理由は単純でDTRリセット用のコンデンサをつけてませんでした^^;;
1番ピンのすぐ近くにランドがあるのを見つけたので0.1μのチップコンデンサをつけたらちゃんと動作するようになりました。
今aitendoさんで売ってるのはリセットスイッチもリセット用コンデンサも付いてます。
DTR_reset.jpg

2つ持ってます、シリアルアダプタとの接続用のピンヘッダはL型に換えてあります。
ケーブルはホットボンドで固定。
あちゃんでいいの

アマゾンで買ったUSB-シリアルアダプタ
USB_シリアル変換基板


あちゃんでいいのv1

ArduinoにRTC-8564をつなぐ(7)Duemilanove vs. Fio

ウチのArduinoはaitendoさんのびんぼうでいいのをつかってます。
1号機のチップはスイッチサイエンスさんのArduino Duemilanove用交換チップ
2号機は同じくスイッチサイエンスさんのArduinoブートローダ書き込み済みATMega328P-PU(内蔵CR発振8MHz版)を使ってます。
1号機のクロックは16MHz、2号機は8MHzです。

先の記事でデジットのLCDを動かしてますが、表示は割り込み処理中に行ってます。
クロックの違いで割り込み処理にどれだけ差が出るのかロジックアナライザで調べてみました。

スケッチをちょっと変更、割り込み処理の最初でD13ピンをHIGH にします、最後でLOW にします。D13を見れば割り込み処理にかかる時間がわかります。
ついでにSCL、SDA、シリアル出力(D2ピン)、デジットLCDのWR 入力(書き込みクロック)も見ました。
digitLCDと接続回路

上がクロック8MHz、下が16MHzです。
Channel0がD13ピン、以下SCL、SDA、シリアル出力(D2ピン)、WRです。
クロック8MHzだと割り込み処理に17.8mS かかってますが、16MHzだと9.77mS です。
ちょっと意外だったのはシリアル出力が終わる前に割り込み処理が終わってることです。
FIFOバッファでも持ってるのか、それともシリアル出力は割り込み処理してるのか、多分割り込み処理してるんでしょう(未確認)

Fio_Duemilanove.jpg

ArduinoにRTC-8564をつなぐ(6)デジット6行16桁7セグメントLCDで日時の表示

先に実験していたデジットの6行16桁7セグメントLCDをつなぎ、日時表示してみました。
digitLCDと繋ぐ3

回路図です。D2ピンを割り込みに使ったので、LCDとの接続を変えました。
digitLCDと接続回路

スケッチですが・・・。
別々に書いたスケッチを無理やり合体させたので、すんなりと動くわけありませんでした。
どうにか表示できるまでにはなった(つもり)ですが、問題が起きるたびに泥縄式に書き換えたのでスパゲッティコードです。
全体を書き換えたほうがいいのかもしれませんが、サーミスタ温度計やらあれこれ乗せてみたいので、当面このままです。

公開はちょっと考え中・・・。

続きを読む »

ArduinoにRTC-8564をつなぐ(5)バニラシールドに組む、スケッチの問題点発覚

RTCをバニラシールドに組んでみました。
が、動きません・・・あせりました。
バニラシールド上に組む

RTC-8564の初期電源投入時にちゃんと対応していなかったのが原因でした。
データシートから引用します。
RTC初期電源投入時の注意

注2にあるように、このままでは32.768KHzがCLKOUTから出力されます。両エッジ割り込みにしているので1秒間に65536回の割り込みがかかってしまいます。

修正したつもりですが、自信なくなってきました。
電気二重層コンデンサをつないだままで実験していたので気付きませんでした。
外して動作確認を繰り返しましたが、まだ何か問題があるかも。



ArduinoにRTC-8564をつなぐ(4)I2Cバスを見る

回路図書き換え。
ArduinoのSDAとSCLはA4とA5に繋がってるだけなんて、昨日まで知りませんでしたよ^^;;
R3からこのようになったようですが、なんせArduino ビギナーなもんで・・・・。
Arduino_RTC接続回路3

さて、ロジックアナライザでI2Cバスを見ました。SDA、SCL及びCLKOUTです。

CLKOUTの両エッジで割り込みがかかってます。
CLK1Hz_20160501215906cdf.jpg

割り込みからI2Cバスがスタートするまで。62μS。
割り込みからスタートコンディションまで

全体のI2Cアクセスが終了するまで。
RTC-8564のレジスタ読み出しアドレスを指定してから、カレンダーデータを読み出してます。
1mSのディレイが入ってます、参考にしたスケッチにあったのでそのままにしてましたが、入れなくても大丈夫だろうと今は外してます。
I2Cstart_stop_20160501215908b65.jpg

カレンダーデータの読み出し。
I2C読み込み

SCL拡大。クロックは100KHzになってますね。
I2Cクロック

ArduinoにRTC-8564をつなぐ(3)

恥ずかしながら、とりあえずのスケッチ。(Arduino IDE 1.6.4)
私のところではどうにか動いてますけど、動作保証はしません、念のため。

いろんなサイトを参考にしましたので、コメントがそのままの場合もあります。
コメントアウトしたままのコードもあります。

初めての場合、年月日時分秒をシリアルモニタから打ち込まないと動作しないかもしれません。
2016年5月1日7時30分00秒なら
160501073000
と入力します。入力データのチェックはやってませんので変なデータを入れると当然表示もおかしくなります。

秒のクリアが出来るようにしました。
*
を入力すると30秒以上なら切り上げ、未満なら切り捨てますが、59分の場合は切り上げしません、処理がややこしくなるので。

こんな風になります。
秒の切り上げ切捨て


 | HOME |  古い日記に行く »

文字サイズの変更

プロフィール

edy

最新記事一覧(サムネイル画像付き)

脈拍センサーMAX30100を試す(5) May 20, 2017
MT3608モジュールを使ったDSO Shell用電源 May 16, 2017
脈拍センサー MAX30100を試す(4)MAX30100_Registers.h を調べる。 May 13, 2017
脈拍センサー MAX30100を試す(3)正常動作?? May 12, 2017
脈拍センサー MAX30100を試す(2)スケッチとライブラリー May 10, 2017
脈拍センサー MAX30100を試す(1) May 08, 2017
Studuino用電池ボックスを作る(2) May 06, 2017
Studuino用電池ボックスを作る May 05, 2017
MT3608モジュールのテスト Apr 30, 2017
BME280モジュールを使った温度・湿度・気圧計(2)DSO Shellを使って動作電流を測る Apr 23, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

このブログをリンクに追加する

月別アーカイブ

05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  12  11  10  09  07  05  04  03  04  03  01  12  11  10  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  04  02  01  12  10  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  05  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  10  09  08  07  06  05  04  03  02  01 

カテゴリ

プログラミング (0)
freescale (1)
AVR (3)
テルミン (16)
緊急警報放送 (3)
78K (1)
PSoC (295)
地上デジタル放送 (2)
電子工作 (399)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (28)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

名前:
メール:
件名:
本文:

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん