迷走の果て・Tiny Objects

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

ArduinoにRTC-8564をつなぐ(2)回路をちょこっと変更

バックアップ用の電気二重層コンデンサの減りがやたらと早い、半日と持たない。
どうにもおかしいと思ってたら、理由がわかりました。

RTCのCLKOUTを直接ArduinoのD2入力につないだのが原因です。
Arduino の電源をオフにするとRTCのCLKOUTから入力保護用のダイオードを通して電流が流れていたようです。
ATmega日本語データシートの44ページから引用します。
ATmega入力保護回路

RTCのTimerを使ってINTピンから割り込みをかければいいのでしょうが、Timerを後で使う余地を残しておきたいのと、スケッチ書き換えがちょっと面倒(汗)なので、手持ちにあった2N7000を使いました。
Arduino_RTC接続回路2
スポンサーサイト

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

Arduinoに秋月のRTCモジュールをつないでみました。
だいぶ前に買ったものの、少しPSoC1で試したままで放置してました。

デジット6行16桁LCDの一番上の行に日時を表示してやろうと思い、引っ張り出してきました。
動作画像arduino

先ずは実験。
プルアップ抵抗に無駄に金属皮膜使ってますが、使わなくなった実験基板から外したものです、カーボンで充分、なおRTCモジュールのプルアップ抵抗は使いません。
丸い部品はデジットで買った電気二重層コンデンサです。
Arduino_RTC接続写真

一応、回路図。
Arduino_RTC接続回路

ArduinoにRTC-8564をつなぐのは、既に多くの方がネット上で公開されてます。
今回はこちらの記事を主に参考にさせていただきました。
回路図でRTCのCLKOUTからArduinoのD2につないでるのは割り込みでRTCを読み込むためです。
CLKOUTを1Hzに設定し、両エッジで割り込みをかけます。0.5秒ごとに割り込みがかかります。
1秒ごとにしないのは時間表示のコロンを1秒間隔で点滅させたいからです。

シリアルモニタの出力。
()内の数字は曜日です、0が日曜、1が月曜・・・・です。
0.5秒で割り込みをかけてるので同じ表示が二回出てます。
割り込み処理での表示

日時の設定はシリアルモニタから行います。
たとえば2016年4月29日、13時25分15秒に設定したければ
160429132515
と打ち込みます。RTC-8564の設定には曜日データも送る必要がありますが、Zeller の公式で求めます。
こちらの記事を参考にしました。


と、ここまで淡々と書いてきましたが、不慣れなArduino に苦手な割り込み処理を使ったものだから、悪戦苦闘させられました。
RTC-8564とはI2C接続ですからWireライブラリを使うのですが、Wireライブラリで割り込みを使ってるようで、1Hzクロックの割り込み処理内でWireライブラリを使ったらハングしました。当初理由がわからず、あちこち検索して何とか解決できました。
他にも訳のわからんトラブルに見舞われましたが、どうにか動いてるようです。

スケッチはあちこちの記事からの合体みたいなもので、変数名のつけ方が無茶苦茶だし、スパゲッティプログラムだし・・・。
今整理中です。

16桁6行7セグメントLCDを試す(6)アドレスの調査

間違いがあるかもしれません、念のため。

セグメントアドレスの調査の追加。
アドレス解析2
白文字がアドレス、黄文字はそのアドレスのdpビットに割り付けられていることを示します。

私の場合、一番上の行から順に
row1
row2
row3
row4
row5
row6
と呼ぶことに決めました。以前はデータシートのCS番号で呼んでたんですが、ややこしいので変更しました。

各行のアドレスの振り方ですが
row3 と row6 は素直に左から右です。
row4 は変態的^^;;なアドレス配置。
row5 は何故か(18,19)から始まり(30,31)、(0,1)・・・・(16,17)となってます(10進表記)

これを調べるのにスケッチを書きました。

シリアルモニタからコマンドを打ち込みます。
-(マイナス)で全画面クリア
行(1桁)、アドレス(2桁)、データ(2桁)の5桁の数値を入れると対応するセグメントが表示されます。
下の例ではクリアした後
11115と打ち込んでます。
1行目、アドレスは11、データは15という意味です。(10進表記)
segmentcheck_serialmonitor.jpg

するとこうなるわけです。
セグメントチェック画面

続きを読む »

16桁6行7セグメントLCDを試す(5)

説明が手抜きです、悪しからず^^;;

7セグメントパターンを作成しました。
動作画像キャラクタ表示

エクセルを使った簡単なパターンエディタで作成。間に合わせですが手計算ではやってられません。
セグメントパターン作成画面


条件付き書式を使います。
エクセル条件付き書式


セグメントaをMSBとし、以下順にb、c、dp、f、g、e、dと並べてます。
セグメントマップ


Arduinoとの接続、シリアルモニタを使うので配置変更。
Arduinoとの接続

続きを読む »

16桁6行7セグメントLCDを試す(4)

このLCDはデジットで手に入れましたが、共立エレショップでも扱ってます。
共立エレショップ:16桁×6行 7セグメント液晶ディスプレイ
簡易資料(PDF)がダウンロードできますし、動画もあります。
さてこの動画ですが、上の行から順に左から右へと表示されていきますが、8秒辺りで4行目を表示する際に、左から5番目のセグメントが表示され、そこから左へ表示が進んでいるのがわかります。ちょっと変です。

前回までは全セグメントの表示と消去が出来るだけでした。基本的な接続が出来るようになっただけで、意味のある表示をさせるためにはさらに調べる必要があります。
7セグメントですから7ビット必要です。HT1621のメモリは4ビット単位ですから、メモリは2つで一組になります。
データシートから引用します。

セグメントマップ

「メモリ番地は画面左側が下位になっています。」
とあります、一番左の7セグメントのアドレスが0、1で次が2、3・・・一番右が30、31(10進表記)となっているはずなのですが、一部に違いがありました。
上から4行目と5行目はそのようになっていません。
4行目を調べた結果です。
アドレス解析
白文字がアドレスです。
上に書いた動画のちょっと変な部分と一致します。

これではやりにくいので、4行目と5行目にアクセスするときにはアドレステーブルを作って変換することにしました。

CSと表示行の対応関係

今実験しているスケッチから引用します。
変数のつけ方がデタラメなんでわかりにくいですが、CS3が上から4行目(下から3行目)、CS2が上から5行目(下から2行目)です。

const int addrCS2[] = {18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
};
const int addrCS3[] = {8, 9, 6, 7, 4, 5, 2, 3, 0, 1, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 30, 31, 28, 29, 26, 27, 24, 25, 22, 23
};

次はセグメントパターンを作って何とか数字の表示までいきたいです。

16桁6行7セグメントLCDを試す(3)Arduinoにつないでみる

動作画像arduino

今まではPSoC1で試してたのですが、Arduinoにつないでみました。

続きを読む »

16桁6行7セグメントLCDを試す(2)簡単な解説編

digit7seg16x6LCD表
デジットで買った6行7セグメントLCDには HT1621 というコントローラが6個のってます。
4ビットのメモリーが32個あるので、128ビットです、各ビットが各セグメントに対応しています。
各HT1621が各行をコントロールしてます。

データシートにある基本的な接続方法です。
HT1621ApplicationCircuits_20160416175015ab8.jpg

これが6個並んでるわけですが、RD は使っていません、WR と DATA は並列に繋がってます。CS は各 HT1621 から出てます。
ホストコントローラとの接続は下図のようになります。
デジット6行LCD接続回路

RD を使ってないのでホスト側から一方的に書き込むだけです。

データ書き込みタイミング。連続書き込みが出来るようなのですが、まだ試していません。
HT1621WriteMode_20160416175019846.jpg

まず3ビットの Mode ID を送ってからアドレス、データを送ります。
ModeID.jpg

注意すべきはアドレスは6ビットです、メモリは32個だから5ビットと思ってたのですが、上位互換のためでしょうか?
Mode ID 3ビット、アドレス6ビット、データ4ビットですから13ビットになります。(連続書き込みでない場合)

コマンド書き込みタイミング。これも連続書き込みが出来るようなのですが、試していません。
HT1621CommandMode_20160416175016432.jpg
コマンドは9ビットです。Mode ID は3ビットですから12ビット送ることになります。(連続書き込みでない場合)

先の記事にも書いたことですが、このLCDを使うのには初期化が必要です。
デジットの説明書では「SYS_EN」コマンドと「LCD_ON」コマンドを送るとありますが、私の場合はさらに「BIAS」コマンドの 4 commons option コマンドを送る必要がありました。
再度のせておきます。
HT1621BIAS.jpg

16桁6行7セグメントLCDを試す(1)

先の記事の続きです。
全セグメント表示が出来るようになりました。
動作画像全セグメント表示OK

実は当初、下の写真のように7セグメントの a と f がどうにも表示できませんでした。
ちなみにバックライトは点灯させなくても表示は見られます。バックライトは5Vで87mA、4.5Vだと54mAほど流れます。
動作画像af出ず

初期化が問題でした。
デジットの説明書では
「SYS_EN」コマンドと「LCD_ON」コマンドを送る必要があるとなってますが、私の場合はこれだけではダメでした、上の写真のように全セグメントの表示が出来ませんでした。
データシートから引用しますが、「BIAS」コマンドの 4 commons option コマンドを送る必要がありました。
「BIAS 1/2」、「BIAS 1/3」のどちらも試してみましたが、違いがわかりません。
これに気付くのに数時間かかってしまいました。
HT1621BIAS.jpg

16桁6行7セグメントLCDを試す(予定)

数日前、デジットに行ったらこんなもん、売ってました、入り口すぐのところに。大きいので目立ちます。
つい手を出してしまいました(汗)600円也。
digit7seg16x6LCD表

digit7seg16x6LCD裏

16桁6行の7セグメントLCD。HT1621というコントローラを6個つんでます。HOLTEK製です、HOLTEKといえばHT7750というDCDCコンバータをよく使いました。

簡単な説明書が入ってるんだけど、後は自分で何とかしなきゃなりません。
データシートを探したら何とaitendoさんがHT1621を扱ってました。データシートはこちら

aitendoさんの説明に「32x4ビットディスプレイRAM内蔵」とあります。
説明書の記述の意味がこれでわかりました。

これでなんとなく動かせそうな気がしてきました、あくまで気がしてきただけです^^;;;

digit7seg16x6LCD説明書下部

さてコントローラのデータシートと格闘しなければ・・・。

MAX291 スイッチトキャパシタローパスフィルタを試す(3)

よく使うPSoC1でもスイッチトキャパシタフィルタを使った正弦波発振回路は出来ます。
過去に何度か試しました。

PSoCを使った正弦波発振回路の実験
PSoCを使った正弦波発振回路の実験・続き
久々にPSoCを使った正弦波発振回路の実験

MAX291を手に入れたのはPSoC1との違いを見たかったから。

過去のPSoC1による実験記録、ただしクロックは出力の80倍、クロック低減用のフィルタはつけないので単純比較は出来ないけど、
MAX291に比べてノイズフロアが高いですね。
100HzLPF4.png

MAX291 スイッチトキャパシタローパスフィルタを試す(2)

一部変更しました。
MAX660のコンデンサを220μFに。
レベル調整のため半固定抵抗に変更。
出力に間に合わせ(汗)のフィルタ追加。
MAX291_OSC回路2

実験の様子です。お菓子の空き缶を使った簡易シールドボックスに入れてます。商用電源の60Hzとその高調波を出来るだけ拾わないようにするためです。

MAX660のコンデンサC3とC4を220μFにしました、その結果、負電圧のリプルは500mVp-pから50mVp-p程度に低減しました。
MAX291_OSC実験の様子

先の実験では無いはずの2次高調波が出ていました。
入力の矩形波はデューティ比50%で2次高調波がほとんど無いことは確認済みです。
ということはMAX291による歪ということになります。
データシートから引用します。
MAX291_歪

2次高調波として-72dBほど出るようです、ちょっと残念。

入力レベルによって変動があるようなので、VR1で入力レベルが2Vp-p程度になるように調整しました。
MAX291_歪2

さらにありあわせの部品でLPFをつけました。カットオフは約150Hzです。

あれこれやった結果の100Hzスペクトル。
前に比べて改善が見られます。出力フィルタを2次にすればさらに改善されるでしょうけど、スイッチトキャパシタフィルタの出力にさらにアナログフィルタをつけるのはなんか面倒な・・・。
100Hz出力フィルタ追加

MAX291 スイッチトキャパシタローパスフィルタを試す(1)

MAX291は8次のスイッチトキャパシタローパスフィルタです。特性はバターワースです。
今現在(2016/04/13)オークションで入手できます。
クロックの1/100がカットオフ周波数になります。

今回、これを使った正弦波発生回路を試してみました。
MAX291_OSC原理
クロックの1/100の方形波をMAX291に入力します。MAX291で高調波をカットすれば正弦波が得られるというわけです。

回路図です。パスコンは省略してます。
ここではMAX291を2つ使い、74HC74を使って90度位相のずれた方形波を入力しています。出力には90度位相のずれた正弦波が得られます。
このために74HC390で25分周しています。
抵抗やコンデンサは手持ちを使いました、ちゃんと検討したわけではありません。
負電源にはMAX660を使いましたが、コンデンサの容量が小さいためか500mVp-p程度のリプルがのっています。もうちょっと大きくするつもりです。
電源は5Vですが、2.5V程度に下げても動作しました。当然振幅は小さくなりますが。
MAX291_OSC回路


続きを読む »

 | HOME | 

文字サイズの変更

プロフィール

edy

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

ブリッジドT発振回路(3)光るランプ Oct 16, 2017
ダイソーのかぼちゃで電飾 Oct 08, 2017
ブリッジドT発振回路(2)オペアンプとっかえひっかえ Oct 07, 2017
ブリッジドT発振回路(1) Oct 02, 2017
AD587を使った基準電源【追加有り】 Oct 01, 2017
DABPを使った発振回路(5)ランプの特性、分圧抵抗を変更、コンデンサを変更。 Sep 24, 2017
DABPを使った発振回路(4)ランプ変更(修正版) Sep 18, 2017
DABPを使った発振回路(3)LEDからランプ制御へ Sep 09, 2017
DABPを使った発振回路(2) Sep 03, 2017
DABPを使った発振回路 Aug 27, 2017

全記事表示リンク

全ての記事を表示する

ブログリンク

リンク

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

月別アーカイブ

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  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)
電子工作 (420)
HX711 (2)
ACS712 (6)
数学 (6)
パソコン (12)
PLC (14)
未分類 (39)
ブログ関係 (20)
スカイプ (37)
ロボット (1)
LTSpice (8)
OCXO (0)
arduino (32)
maxima (1)
フランクリン発振回路 (3)
GPS (3)
DTMF (1)
Linux (1)
KOMAINO (7)

タグリスト

最近のコメント

最近のトラックバック

メールフォーム

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

検索フォーム

アクセス

RSSリンクの表示

フリーエリア

FC2Ad

まとめ

Template by たけやん