秋月電子 電光掲示板用シールド(1枚)

作業履歴

更新日
2012/12/17公開開始


2012/12/31 電光掲示板シールドの製作。

Arduinoマイコンなど必要最小限の部品を実装する。


実装後、電光掲示板モジュールを接続、USBケーブルを接続し、5Vの電源を供給する。
Arduinoライターを接続して、準備完了。ライター側にコンデンサ1個、抵抗2個を実装すれば本体基板毎に実装する必要ないな。
次のバージョンから対応して、部品の削減、作業時間の短縮を図る。
arm22さんのexampleで動作確認。
スケッチを書き込んだ後、Autoresetが働かない。暫定処置として、電源を入れなおし、正常動作することを確認した。


dotmatrixled20121231.pdeで16x16ドットフォントを表示するスケッチを作成。


2013/01/02 東雲フォントの組み込み作業を行う。
電光掲示板モジュール1枚(32x16ドット)、ATMEGA328を使用しているので半角フォントを実装することにしよう。
半角1文字は、8x16ドット=128ドットで構成されている。1ドットあたり、1ビット割り当てるとして、128ドット÷1ドット/ビット=128ビット=16バイトのデータが必要。
ATMEGA328は、32kBのFlash memoryを内蔵しているので32kB÷16=最大2048文字格納可能だ。
ただし、ブートローダーおよびスケッチのサイズを考慮していないので実際に格納できる文字数は2048文字より少ない。
東雲フォントデータをダウンロードする。(参考文献2))
東雲フォントのライセンスは、Public Domainで自由に改変しても良いし、再配布してもよい。
東雲フォントは、2つのファイルで構成されている。

1)shinonome-0.9.11-src.tar.bz2
縦12、14、16、18ドットのフォントデータで構成されている。
さらに下記フォルダに分かれ、各フォントを”@”と”.”で表現している。
たとえば、”¥”という文字は、下記で表現している。

   1 @.....@.
   2 @.....@.
   3 .@...@..
   4 .@...@..
   5 .@...@..
   6 ..@.@...
   7 ..@.@...
   8 @@@@@@@.
   9 ...@....
  10 @@@@@@@.
  11 ...@....
  12 ...@....
  13 ...@....
  14 ...@....
  15 ........
  16 ........
hankaku Shinonome 16dot font for JISX 0201, 1976 JIS0201で規定されている、半角アルファベット、数字、ひらがな、カタカナ文字
kanjic Shinonome 16dot font for JISX 0208, 1983/1990 JIS0208で規定されている、全角アルファベット、数字、ひらがな、カタカナ、漢字
latin1 Shinonome 16dot font for ISO 8859-1 ISO8859-1で規定されている、半角アルファベット、数字、欧米フォント
mincho Shinonome 16dot font for JISX 0208, 1983/1990, Mincho Style


2)shinonome-0.9.11p1.tar.bz2
1)のデータをバイナリで表現したのが、この圧縮ファイルだ。
”@”を1b、”.”を0bと表現し、各行ごとにHexデータとして表現している。
たとえば、”¥”という文字は、下記で表現している。

   1 00
   2 80
   3 80
   4 40
   5 40
   6 20
   7 20
   8 10
   9 10
  10 08
  11 08
  12 04
  13 04
  14 02
  15 02
  16 00
ファイル名 説明 サイズ 形式
shnm8x16a.bdf -Shinonome-Gothic-Medium-R-Normal--16-150-75-75-C-80-ISO8859-1 8x16 ISO8859-1
shnm8x16ab.bdf -Shinonome-Gothic-Bold-R-Normal--16-150-75-75-C-80-ISO8859-1 8x16 ISO8859-1
shnm8x16abi.bdf -Shinonome-Gothic-Bold-I-Normal--16-150-75-75-C-80-ISO8859-1 16x16 ISO8859-1
shnm8x16ai.bdf -Shinonome-Gothic-Medium-I-Normal--16-150-75-75-C-80-ISO8859-1 16x16 ISO8859-1
shnm8x16r.bdf -Shinonome-Gothic-Medium-R-Normal--16-150-75-75-C-80-JISX0201.1976-0 8x16 JISX0201
shnm8x16rb.bdf -Shinonome-Gothic-Bold-R-Normal--16-150-75-75-C-80-JISX0201.1976-0 8x16 JISX0201
shnm8x16rbi.bdf -Shinonome-Gothic-Bold-I-Normal--16-150-75-75-C-80-JISX0201.1976-0 16x16 JISX0201
shnm8x16ri.bdf -Shinonome-Gothic-Medium-I-Normal--16-150-75-75-C-80-JISX0201.1976-0 16x16 JISX0201


2013/01/04 東雲フォントデータをヘッダーファイルに変換する。
Arduinoで使用するため、bdfファイルをヘッダーファイルに変換する秀丸マクロを作成した。
1)shinonome8x16.mac
shnm8x16a.h
shnm8x16ab.h
shnm8x16abi.h
shnm8x16ai.h
shnm8x16r.h
shnm8x16rb.h
shnm8x16rbi.h
shnm8x16ri.h

2)shinonome16.mac
shnmk16.h
shnmk16b.h
shnmk16bi.h
shnmk16i.h

3)shinonome16min.mac
shnmk16min.h
shnmk16minb.h
shnmk16minbi.h
shnmk16mini.h

また、AkiMatrix.cppに8x16ドットフォントを表示する関数を追加した。

void AkiMatrix::bitBlt8(uint8_t pos, const uint8_t *src)

第1引数は、半角文字を表示する場所。
LEDマトリックスを横に4分割し、左から右へ0、1、2、3と指定する。
第2引数は、8x16サイズのフォントデータのポインタ。

動作確認用にサンプルスケッチ(dotmatrixled20130104.pde)を作成。


2012/01/05 電光掲示板シールド、横スクロール、縦スクロール表示のスケッチを作成
横スクロールに対応したスケッチを作成(dotmatrixled2013010502.pde)


縦スクロールに対応したスケッチを作成(dotmatrixled2013010503.pde)


2012/01/06 Arduino UNO + 温湿度シールド + 電光掲示板用シールドを組み合わせる。
シリアルで受信したデータを表示するスケッチを記述した。(dotmatrixled20130106.pde)
仕様は、下記のとおりで7セグLEDシールドと同じにした。

通信速度:9600bps, 8N1
1バイト目:2バイト目以降に受信する総バイト数(バイナリ)
2バイト目〜:アスキー文字列で記載。

例1)0x04 0x31 0x32 0x33 0x34
4バイト受信、表示する文字列は、1234

応用例としてArduino UNO + 温湿度シールド + 電光掲示板用シールドを組み合わせて、温度→湿度→現在時刻→気圧を表示するものを作成スケッチ(rtc_dht22_mpl115a2_20130106.pde)を作成した。
LEGOを使用してフレームを作成。
なかなかの出来。

















2013/01/07 AkiMatrixバージョン005に対応する。
掲示板でAkiMatrixについて聞かれているので最新版のAkiMatrixバージョン005にパッチをあてて、動作確認をした。

arms22さん提供のサンプルスケッチおよび当方が作成したスケッチは問題なく動作することを確認した。
hello_matrix.pde
hello_2009.pde
dotmatrixled20121231.pde
dotmatrixled20130106.pde

2013/01/07 電光掲示板シールドのシリアル通信仕様を変更した。
シリアル通信の仕様を変更した。(dotmatrixled20130107.pde)

通信速度:9600bps, 8N1
1バイト目:2バイト目以降に受信する総バイト数(バイナリ)
2バイト目:モード(00:8x16ドット、表示固定モード)
3バイト目〜:アスキー文字列で記載。

例1)0x04 0x00 0x31 0x32 0x33 0x34
4バイト受信、表示する文字列は、1234

2013/01/08 電光掲示板シールドのシリアル通信仕様を変更した。
さらに仕様を変更しました。(dotmatrixled2013010804.pde)

通信速度:9600bps, 8N1

受信規定:
1バイト目:2バイト目以降に受信する総バイト数(バイナリ)
2バイト目:モード
0x01:横スクロールモード設定
0x10:8x16ドット、表示固定モード
0x11:8x16ドット、横スクロールモード

3バイト目〜:設定情報もしくは、コード(文字情報)

例1)0x04 0x10 0x31 0x32 0x33 0x34
4バイト受信、表示固定モード、文字列は、1234

送信規定:
データの受信が完了し、設定情報もしくは、表示する文字データの更新が完了すると、0x01を返す。

8x16ドットのフォント情報を持つヘッダーファイルshnm8x16r.hは、合計222文字です。
222文字x16バイト/文字=3552バイト使用しています。
なお、現在のスケッチサイズは、7452バイトです。

ATMEGA328のプログラム容量が32kBですので、32kB−7452=25316バイトの空き容量があります。
全角文字データを入れるとすると、
25316÷32バイト=約791文字組み込みができそうです。
16x16ドットに対応するスケッチに拡張することなどを考えると、約500文字程度を追加で組み込めると想定しといたほうがいいかもしれません。
WikipediaによるとJIS漢字コードの第1水準漢字は、2965文字、非漢字は、1183文字と膨大な量です。
まずは、全角アルファベット、数字、ひらがな、かたかな、記号を対応させようかな。

2013/01/09 電光掲示板に表示する文字をJISX0201コード、標準、太字、イタリックに対応。
どの文字を対応させるか迷っていましたが、JISX0201コードで書体を4種類もたせることに決めました。
漢字やひらがなを組み込もうか迷いましたが、結局どの文字を選ぶべきか決められませんでした。

組み込んだ文字の種類、容量、ヘッダーファイル名は以下のとおりです。

コード 書体 文字数 容量 ヘッダーファイル名
JISX0201 標準・標準 222文字 3552バイト shnm8x16r.h
JISX0201 太字・標準 222文字 3552バイト shnm8x16rb.h
JISX0201 太字・イタリック 222文字 7104バイト shnm8x16rbi.h
JISX0201 標準・イタリック 222文字 7104バイト shnm8x16ri.h


通信仕様を変更しました。(dotmatrixled2013010903.pde)

通信速度:9600bps, 8N1

受信規定:
1バイト目:2バイト目以降に受信する総バイト数(バイナリ)
2バイト目:モード
bit0:表示固定モード
bit1:横スクロールモード
bit4:1:標準(8x16)、0:イタリック(16x16)
bit5:1:標準、1:太字
bit7:JISX0201

3バイト目〜:設定情報もしくは、コード(文字情報)

例1)0x04 0xB1 0x31 0x32 0x33 0x34
4バイト受信、標準・標準書体、表示固定モード、文字列は、1234

送信規定:
データの受信が完了し、設定情報もしくは、表示する文字データの更新が完了すると、0x01を返す。
WikipediaASHさんの解説ページによると、JISX0201文字コード表は、0x21−7E、0xA1−0xDFのようだ。
作成したヘッダーファイルに比べ文字コードの割り当てが少ない。
オリジナルの東雲フォント、bdfファイルを見直そう。

2013/01/10 電光掲示板のスケッチがひと段落つく。
オリジナルの東雲フォント、bdfファイルを見直し、各文字コードで冗長な箇所は削ることにしました。
以下のように、ヘッダーファイルを12個に分けました。
ヘッダーファイル名 文字コード 書体 ドットサイズ サポートするコード番号 サイズ
shnm_0201_BI.h JIS X0201 太字・イタリック 16x16 0xa1 - 0xdf 2016バイト
shnm_0201_BS.h JIS X0201 太字・標準 8x16 0xa1 - 0xdf 1008バイト
shnm_0201_SI.h JIS X0201 標準・イタリック 16x16 0xa1 - 0xdf 2016バイト
shnm_0201_SS.h JIS X0201 標準・標準 8x16 0xa1 - 0xdf 1008バイト
shnm_8859_BI.h ISO8859-1 太字・イタリック 16x16 0xa1 - 0xff 3040バイト
shnm_8859_BS.h ISO8859-1 太字・標準 8x16 0xa1 - 0xff 1520バイト
shnm_8859_SI.h ISO8859-1 標準・イタリック 16x16 0xa1 - 0xff 3040バイト
shnm_8859_SS.h ISO8859-1 標準・標準 8x16 0xa1 - 0xff 1520バイト
shnm_Ascii_BI.h ASCII code 太字・イタリック 16x16 0x20 - 0x7e 3040バイト
shnm_Ascii_BS.h ASCII code 太字・標準 8x16 0x20 - 0x7e 1520バイト
shnm_Ascii_SI.h ASCII code 標準・イタリック 16x16 0x20 - 0x7e 3040バイト
shnm_Ascii_SS.h ASCII code 標準・標準 8x16 0x20 - 0x7e 1520バイト

電光掲示板モジュール用のスケッチがひと段落つきました。(dotmatrixled2013011001.pde)
全部組み込み、コンパイルをかけるとスケッチサイズは、29830bytesになりました。

また、ホスト用にArduinoを1枚用意し、定期的に表示データを出力するスケッチ(dotmatrixledtest2013011001.pde)を作成し動作確認をしました。

2013/01/14 ドラえもん、ふしぎサイエンスを定期購読する。
大晦日に放送されていたドラえもんの映画を家族でみていた時です。
ドラえもん、ふしぎサイエンスのCMがながれました。
奥さんにおもしろそうだねと話を振ると、奥さんも書店でこのシリーズを見たことがあり、気になっていたようです。
現在、ドラえもんに夢中な上の子に、科学を体験をさせてあげるのに良いきっかけになりそうだねーと話をしていました。
映画の内容より、ふしぎサイエンスの内容が気になりはじめました。
iPadで検索していると、定期購読するとのび太のタケコプターがもらえるようです。しかも、締め切りが年内です。
このチャンスを逃がすわけには行かないと、10冊18510円を小学館のウェブサイトから注文しました。

そして、正月休みがおえ、昨日、合計7冊送られてきました。
左上がのび太のヘリコプターの箱です。


今日は、爆弾低気圧の影響により外は雪が降っており、ドラえもんサイエンスに取り掛かるのに良い日取りです。
Vol.1をあけ、ドラえもんのヘリコプターを上の子と組み立てます。
部品点数は思ったより少なめですが、ネットのレビューを見ると半田付けの箇所が外れやすいようですので注意しながら、組み立てます。


出来上がりました。
ドラえもんは、プラスティック素材なのかと思いましたが、実際は、発泡スチロールでした。



最初、危なっかしくハンドルを回していた上の子ですが、徐々にコツをつかんでき、上手にドラえもんを飛ばしていました。何より、楽しそうにハンドルを回していましたので買ってあげ、よかったです。

本体書籍の解説記事がよくできています。コンパクトにまとめられていますが、夢中で読んでしまいました。

2013/01/14 WebClientで苦労する。
電光掲示板のスケッチはできあがり、自由自在に電光掲示板が光るようになりました。
さて、何の情報を表示させようとかといいますと、頓挫していたシンプルAPI for Embeddedを使ったアプリケーションを作成しようと思っています。
シンプルAPI for Embeddedは、E-0010〜E-0014で紹介しているようなサービスを提供するWeb API群です。

対象シンプルAPI for Embeddedのアドレスは、http://emaken.com/sae/system/ymd.phpです。
phpは、以下4行です。

   1 <?php
   2   $today = date("Y/m/d");
   3     print("<data>$today</data>");
   4 ?>
ブラウザで確認したところ、<data>2013/01/15(Tue)</data>と表示されてます。

続いて、arduino UNO + ethernetshieldで動作確認します。
次にWebClientアプリで動作確認してみます。
こんな感じでソケット通信します。

client.println("GET /sae/system/ymd.php HTTP/1.1");
client.println();

しかし、アクセスエラーで期待したデータが返ってきません。
Wiresharkでパケットをダンプ、解析、テストをした結果、Host情報も送信すると動作するようになりました。

client.println("Host: emaken.com");

受信したデータを確認すると、<data>と</data>間に期待してない数字、16が表示されています。(12行目)

Arduinoの受信データ

   1 connecting...connected
   2 HTTP/1.1 200 OK
   3 Date: Mon, 14 Jan 2013 15:30:03 GMT
   4 Server: Apache
   5 X-Powered-By: PHP/5.2.17
   6 Vary: Accept-Encoding
   7 Content-Type: text/html
   8 Transfer-Encoding: chunked
   9 
  10 6
  11 <data>
  12 16
  13 2013/01/15(Tue)</data>
  14 0
  15 
  16 
  17 disconnecting.

<data>の前に6という数字(10行目)があるのも気になりました。
chunkedというヘッダーの表示が気になりTransfer-Encoding: chunkedをググると、原因がわかりました。

スケッチを以下のように修正したところ、期待通りの結果を返すようになりました。
client.println("GET /sae/system/ymd.php HTTP/1.0");

P.S.
記事を書いているとき、ふと縦長の電光掲示板のスケッチも作成したくなりました。
いずれ機会を作り、インプリ作業をしたいですね。

2013/01/16 Processingでネットワーク処理し、電光掲示板にデータを送る。
PC周辺機器に電光掲示板に使うのもいいかなと思い、制御用のソフトを作ってみようと思いました。
Windowsだけではなく、ほかのOSにも対応させたいとここ数週間、考えてました。
キーワード検索するとなんとProcessingで書いたスケッチを実行ファイルを生成できるようです!
もちろんProcessingの環境を用意する必要ありません。
しかもWindowsだけではなく、Linux、さらにMAC用も実行ファイルを生成できます。

実行ファイル形式の作り方。
1)File -> Export Applicationを選択。


2)生成したプラットフォームを選択。


3)完了。私のPCは、Win32ですので、64bits版は生成できません。


ちなみにLinuxは、実行ファイルを生成できました。
MAC OS Xは、実行ファイルを生成できましたが、実行権限を与える必要があります。

exeファイルが存在し、ダブルクリックするとアプリケーションが実行できました。


今回の接続図です。


図は、Cacooサイトで作成しました。
Cacooは、成松さんがブログで最近紹介したWebサービスでした。
アイコンが色々そろっているのでそれを利用するとクールな図が出来上がります。

今回作成するアプリケーションの流れは、以下のとおりです。
1)WinPCからemaken.comのsimple API for embeddedサービスを利用するため、httpアクセス
2)emaken.comは、Web API処理し、WinPCへレスポンス
3)WinPCは、受信したデータを処理し、電光掲示板モジュールへ送信。
4)電光掲示板モジュール側でデータ表示。

昨日、作成したArduino + EthernetShieldの代わりに、Windows PCがWeb APIのリクエスト、受信処理を行います。

2013/01/17 COMポートを選択できるようにしました。
Processingのスケッチに機能を追加します。

1)COM選択ボタンの追加
Processingには、標準で、ボタンライブラリがありません。
ググってみると、javaのAWTで対応しているページを発見しました。
Processingでは、javaのライブラリも併用できるのですね。勉強になります。
サンプルスケッチもあり、早速コピペ&コンパイル作業&テスト。あっさり、疑問点が解消されました。
このサンプルを使って、昨日作成したスケッチに機能追加しようと思いますが、先ほどのページでcontrolP5というライブラリも紹介されています。
リンクをたどるとボタンが意外に、チェックボックス、リストなどGUIの基本部品、exampleがそろっています。
後者のcontrolP5のライブラリを使い、機能追加しました。

そのほか、
2)例外の対応
3)frameRateの値を変更しCPU使用率を下げること
4)30秒に1回、Web APIをアクセスし、文字データを更新するようにしました。

下記が実行画面です。もっと格好良いデザインにしたかったのですが、なかなか難しいものです。


2013/01/19 ドラえもんのタケコクプターを直す。
下の子が、ケーブルを引っ張ったためケーブルが切れてしまったので、修理しました。
分解し、半田ごてで修理。
上の子は、興味深々の様子でこの作業を見てました。


その後、上の子と一緒にLEDライトを組み立てました。
ドラえもんの足を組み立てる箇所が思ったより難しく、手こずりました。
組み立て後、雑誌の説明の通り、ファンにいきをかけますがなかなか回りません。
ドライヤーで風を当てるとようやくドラえもんの手足、体が動き、LEDも点滅するようになりました。


2013/01/20
朝、上の子がドラえもんの付録を持ってきて、これを組み立てようとせがんできます。
3号のタイムマシンをとりだして箱から開けます。


号を重ねる毎に、部品点数が減っています。。。組み立ての難易度を下げているのか?
上の子を手伝い、一緒に組み立てた後、動作確認のため、子供と一緒に外に出かけます。
日のあたる場所をさがし、パネルを太陽に当てると、くるくるタイムマシンが回り始めます。
太陽は偉大だなと改めて感心しつつ、上の子に仕組みを教えてあげます。
上の子は、パネルに手をかざすとタイムマシンは止まり、離すと動くことを理解できたようです。
家に帰ると、上の子は、奥さんに一所懸命仕組みを説明してました。


望遠鏡も作りました。
対象物をうまく捕まえることができません。
暖かくなってきたら、月を見たいですね。



2013/01/22 電光掲示板モジュールのバグをとる。
Processingとの組み合わせで電光掲示板モジュールのテストをしているときに見つけたバグ。
1.8x16の文字データを横スクロール、5バイト未満で受信したとき、前回の表示文字の一部が表示される。
2.文字データが指定した長さより1つ長く表示される。

2013/01/23 Atmega328のヒューズビットを勉強する。
boards.txtにあるヒューズビットについて調べました。

疑問点がいくつか。

・BODの設定が3.3V用になっている。3.3Vでも動作しそう。
・BOOTSZの設定は、bootloaderの領域を指しているのか?
・水晶振動子の場合もLow power crystalでいいのか?

#################################################
uno.name=Arduino Uno
uno.upload.protocol=stk500
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05

uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
################################################


Extended Fuse Byte or ATmega328/328P

Extended Fuse Byte Bit No Description Default value unoの設定
(boards.txt)
- 7 - 1 0
- 6 - 1 0
- 5 - 1 0
- 4 - 1 0
- 3 - 1 0
BODLEVEL2 2 Brown-out Detector trigger level 1(unprogrammed) 1
BODLEVEL1 1 Brown-out Detector trigger level 1(unprogrammed) 0
BODLEVEL0 0 Brown-out Detector trigger level 1(unprogrammed) 1

(doc8271.pd, Table28-6より転載)

BODLEVEL Fuse Coding

BODLEVEL 2:0 Fuses Min. Vbot Typ Vbot Max Vbot Units 備考
111 BOD Disabled
110 1.7 1.8 2.0 V
101 2.5 2.7 2.9 Unoの設定
100 4.1 4.3 4.5
011 Reserved
010
001
000

(doc8271.pdf, Table 29-13より転載)


Fuse High Byte or ATmega328/328P

High Fuse Byte Bit No Description Default Value Unoの設定
(boards.txt)
RSTDISBL 7 External Reset Disable 1(unprogrammed)
RESETピン 1:有効、0:無効
1
DWEN 6 debugWIRE Enable 1(unprogrammed)
オンチップデバッグ
0:有効、1:無効
1
SPIEN 5 Enable Serial Program and Data Downloading 0 (programmed, SPI programming enabled)
0:ISP書き込み許可、1:禁止
0
WDTON 4 Watchdog Timer Always On 1(unprogrammed)
1:通常、0:常時ON
1
EESAVE 3 EEPROM memory is preseverd through the Chip Erase 1(unprogrammed),EEPROM not reserved
チップイレーズ時、EEPROMを
1:消去、0:保持
1
BOOTSZ1 2 Select Boot Size 0(programmed) 1
BOOTSZ0 1 Select Boot Size 0(programmed) 1
BOOTRST 0 Select Reset Vector 1(unprogrammed) 0


Boot Size Configuration, ATmega328/328P

BOOTSZ1 BOOTSZ0 Boot size Pages Application
Flash
Section
Boot
Loader
Flash
Section
End
Application
Section
Boot Reset Address
(Start Boot Loader Section)
1 1 256 words 4 0x0000 - 0x3EFF 0x3F00 - 0x3FFF 0x3EFF 0x3F00 Unoの設定
1 0 512 words 8 0x0000 - 0x3DFF 0x3E00 - 0x3FFF 0x3DFF 0x3E00
0 1 1024words 16 0x0000 - 0x3BFF 0x3C00 - 0x3FFF 0x3BFF 0x3C00
0 0 2048words 32 0x0000 - 0x37FF 0x3800 - 0x3FFF 0x37FF 0x3800

(doc8271.pdf, Table27-13より転載)


Fuse Low Byte

Low Fuse Byte Bit No Description Default Value Unoの設定
CKDIV8 7 Divide clock by 8 0(programmed) 1
CKOUT 6 Clock output 1(unprogrammed) 1 0(programmed):CLKOピンにシステムクロックを出力。
SUT1 5 Select start-up time 1(unprogrammed) 1
SUT0 4 Select start-up time 0(programmed) 1
CKSEL3 3 Select Clock source 0(programmed) 1
CKSEL2 2 Select Clock Source 0(programmed) 1
CKSEL1 1 Select Clock Source 1(unprogrammed) 1
CKSEL0 0 Select Clock Source 0(programmed) 1

(doc8271.pdf Table28-9より転載)

Start-up Times for the External Clock Selection

Power Conditions Start-up Time form Power
down and Power state
Additional Delay fom
Reset (Vcc=5.0V)
SUT 1..0
BOD Enabled 6CK 14CK 00
Fast rising power 6CK 14CK + 4.1ms 01
Slowly rising power 6CK 14CK + 65ms 10
Reserved 11 Unoの設定

(doc8271.pdf Table9-16より転載)

Device Clocking Options Select

Device Clocking Option CKSEL3..0
Low Power Crystal Oscillator 1111 - 1000
Unoで使用
Full Swing Crystal Oscillator 0111 - 0110 フルスイング、クリスタルで動作
0.4-20MHzで動作
CKSEL0でクロックの立ち上がりを規定(Table9-6)
Low Frequency Crystal Oscillator 0101 - 0100 外部32.768kHzクリスタルで動作
Internal 128kHz RC Oscillator 0011 内部128kHz発信回路で動作
Calibrated Internal RC Oscillator 0010 内部RC発信回路でクロックを生成
7.3 - 8.1MHzで動作
External Clock 0000 外部発信器で動作
0 - 20MHz
Reserved 0001

(doc8271.pdf, Table9-1より転載)


Low Power Crystal Oscillator Operating Modes

Frequency Range
(MHz)
Recommended Range for
Capactitos C1 and C2(pF)
CKSEL3..1
0.4 - 0.9 - 100
0.9 - 3.0 12 - 22 101
3.0 -8.0 12 - 22 110
8.0 - 16.0 12 - 22 111 Unoで使用

(doc8271.pdf Table 9 -3より転載)


Start-up Times fo the Low Power Crystal Oscillator Clock Selection

Oscillator Source/
Power Conditions
Start-up Time from
Power-down and
Power-save
Additional Delay
from Reset
(Vcc=5.0V)
CKSEL0 SUT1..0
Ceramic resonator, fast rising power 258CK 14CK + 4.1ms 0 00
Ceramic resonator, slowly rising power 258CK 14CK + 65ms 0 01
Ceramic resonator, BOD enabled 1K CK 14CK 0 10
Ceramic resonator, fast rising power 1K CK 14CK + 4.1ms 0 11
Ceramic resonator, slowly rising power 1K CK 14CK + 65ms 1 00
Crystal Oscillator, BOD enabled 16K CK 14CK 1 01
Crystal Oscillator, fast rising power 16K CK 14CK + 4.1ms 1 10
Cyrstal Oscillator, slowly rising power 16K CK 14CK + 65ms 1 11


2013/02/24 電光掲示板(1枚)、時計機能の追加、通信仕様の変更
久しぶりに電光掲示板(1枚)のファームウェアの機能追加をしました。

動作確認です。
1)arduino-1.0.3\arduino.exeを実行
2)Arduinoproject\3.AkiMatrix\dotmatrixled20130224\dotmatrixled20130224.pdeで動作確認。
3)マイコンボードは、Arduino UNOを選ぶ。

次に、通信仕様を変更しました。(dotmatrixled2013022403.pde)

通信速度:9600bps, 8N1

受信規定:
1、2バイト目:5バイト目以降に受信する総バイト数(バイナリ)
3.4バイト目:モード
bit0:表示固定モード
bit1:横スクロールモード
bit4:1:標準、1:太字
bit5:1:標準(8x16)、0:イタリック(16x16)
bit8:ISO8859
bit9:JISX0201
bit12:時計モード
bit15:設定

5バイト目〜:設定情報もしくは、コード(文字情報)

時計モードの場合、
5バイト目:時間(バイナリ)
6バイト目:分(バイナリ)
7バイト目:秒(バイナリ)

時計機能は、タイマ1割り込みを使い、0.5秒毎に”:”を表示、非表示することで秒を刻みます。

例1)0x00 0x04 0x00 0x11 0x31 0x32 0x33 0x34
4バイト受信、標準・標準書体、表示固定モード、文字列は、1234

例2)0x00 0x07 0x00 0x12 0x31 0x32 0x33 0x34 0x35 0x36 0x37
4バイト受信、標準・標準書体、表示固定モード、文字列は、1234

例1)0x00 0x03 0x10 0x00 0x12 0x31 0x56
4バイト受信、時計モード、時刻情報は、12:31:56

残りのFlashの空き容量が84バイトになりました。

Processingのアプリも作成しました。



2013/02/25 RTC8564をバッテリバックアップ回路を検討する。
電光掲示板モジュールの使い方として、PC周辺機器として使うことを第一のターゲットとしている。
今日は、スタンドアローンとしての使い方を検討してみる。
構成としては、以下の通りだ。
電光掲示板←→電光掲示板シールド←→RTC8564 + コンデンサ ←→Arduino UNO

RTC8564 + コンデンサでバックアップの方法は、いろいろな方がすでにやっていらっしゃる。
O−Familyさんのページを参考にブレッドボードで回路を組んだ。



なお、このRTC8564は、ラジオペンチさんのページのよると1ヶ月13.8秒程度進むそうだ。
rtc8564_20110728.pdeをArduino UNOに書き込んで動作確認してみる。
電源を一度きったりしても、時刻情報を保持してくれているようだ。

2013/02/26 電光掲示板シールド(1枚)、ソフトUARTに対応化
起床後、RTC8564の動作確認したところ、時刻情報を保持していた。
引き続きテストをする。

下記構成を検討する。

電光掲示板←→電光掲示板シールド←→温湿度、気圧、RTC、EEPROMシールド(E-0042) ←→Arduino UNO←→PC←→Yahoo! RSS

現行、電光掲示板シールドは、ハードUARTのみ対応している。
現行シールドは、ピン番号0と1にアサインしているため、Arduino UNOと通信する場合、Arduino UNOもハードUARTを使用する必要がある。
Arduino UNOのハードUARTを使用するとPCとUSB(UART)通信できなくなってしまう。
この問題を解消するために電光掲示板シールドとArduino UNO間の通信は、ソフトUARTで行うことにした。
ソフトUARTに対応させるためにコードを追加したが、案の定、Flashの容量をオーバーしてしまった。
とりあえず、フォントデータを削り、Flash容量を増やすことにした。削除したフォントデータは、EEPROMへ移動させたい。

ソフトUARTへの対応は思ったより簡単にできた。(dotmatrixled2013022601.ino)
Arduino UNOのソフトの作りこみにとりかかる。(softserial20130121.ino)

2013/02/27 美咲フォントを試す。
TLで美咲フォントについてツィートしている方がいた。
なつかしいと思い、ググると、X11形式でフリーで公開していることを知った。
ドットマトリックスLEDで表示させるとどうなるのか興味がわいて、今日試してみた。

4x8、半角サイズの数字。


カタカナ。十分、認識できる。


8x8の全角フォント。色々な記号を表示してみる。


アルファベットもOK。8x8サイズで十分。


漢字は、さすがにつらい。


テストをした後、美咲フォント製作の経緯を読む。
なんと、8x8サイズのフォントデータではなく、7x7で表現しているのか。

恵理沙フォント!これも懐かしい。
恵理沙フォントでググるとエアーバリアブルさんが記事にしている。ポータブル音楽再生機器にも使われていたフォントなのか。
野田篤司さんは、秋月のLCD液晶で漢字を表示させている。
UNIX用に10x8サイズのX11形式のファイルを公開されている方もいた。
bdfファイルを開くと16ビットx8行構成でフォントデータが表現されているが、実際に使用されているのは16ビット中上位8ビットのようだ。
実質8x8ドットで表示できそうだ。

2013/02/27 - 03/10 SoftSerialの対応の続き、バッテリーバックアップ付き時計機能
ソフトシリアルでArduino本体と電光掲示板シールドは通信を行っているのだが、通信速度が速いとデータを落としてしまうことがわかった。
9600bps、4800bpsで通信を行うとデータ化けをしてしまうが、1200bpsでは、2週間以上かけてテストをしたが、データを落としてしまうことはなさそうだ。

電光掲示板の基本的な使い方として時計機能をやはり実装しておきたい。
現状、PCと接続していれば、PCのローカル時計情報を電光掲示板シールドに送れば時刻がセットされる。
ただし、電光掲示板の電源はPCのUSBからとっているため、PCの電源をきってしまうと時刻情報がリセットされてしまう。

2月25日には、PCで時刻を設定した後は、USB電源から5Vを直接給電しておきたいので、RTCをバッテリバックアップで保存できるようにした。
このときは、電気二重層コンデンサ、1F,5.5V(SE-5R5-D105VY)とショットキーダイオードを使って実験し、おおむね良好な結果を得られた。
その後、調べるとCR2032を使った方がよりやすく、寿命も長く、バッテリーバックアップを実現できることがわかった。
エージング試験をしたところ、問題なくバックアップできているようだ。

softserial2013030101.ino

2013/03/11-12 サポートする東雲フォントを決める。
Atmega328のフラッシュサイズが32kバイトのため、使用するフォントの種類を絞り込んだ。
今回、使用するフォントは、8種類にした。

まず、0x80未満のアスキーコード。
ヘッダーファイル名:shnm_Ascii_BI.h
サイズ:3040bytes
フォントタイプ:太字、斜体
データパターン:0004010121314161


ヘッダーファイル名:shnm_Ascii_SI.h
サイズ:3040bytes
フォントタイプ:標準、斜体
データパターン:0004011121314161


ヘッダーファイル名:shnm_Ascii_BS.h
サイズ:1520bytes
フォントタイプ:太字、斜体
データパターン:0004012121314161


ヘッダーファイル名:shnm_Ascii_SS.h
サイズ:1520bytes
フォントタイプ:標準、標準
データパターン:0004013121314161


続いて、0x80-0xffのJISX0201コード

ヘッダーファイル名:shnm_0201_BI..h
サイズ:2016bytes
フォントタイプ:太字、斜体
データパターン:00040201b1b2b3b4


ヘッダーファイル名:shnm_0201_SI.h
サイズ:2016bytes
フォントタイプ:標準、斜体
データパターン:00040211b1b2b3b4


ヘッダーファイル名:shnm_0201_BS.h
サイズ:1008bytes
フォントタイプ:太字、標準
データパターン:00040221b1b2b3b4


ヘッダーファイル名:shnm_0201_SS.h
サイズ:1008bytes
フォントタイプ:標準、標準
データパターン:00040231b1b2b3b4



今回、使用するのを見送ったのは、ISO8859-1コード。

ヘッダーファイル名:shnm_8859_BI.h
サイズ:3040bytes
フォントタイプ:太字、斜体
データパターン:00040101b1b2b3b4


ヘッダーファイル名:shnm_8859_BS.h
サイズ:3040bytes
フォントタイプ:標準、斜体
データパターン:00040111b1b2b3b4


ヘッダーファイル名:shnm_8859_BS.h
サイズ:1520bytes
フォントタイプ:太字、標準
データパターン:00040121b1b2b3b4


ヘッダーファイル名:shnm_8859_SS.h
サイズ:1520bytes
フォントタイプ:標準、標準
データパターン:00040131b1b2b3b4


なお時計機能を起動した場合、ASCIIコードの標準、標準フォントで表示するようにしている。
ヘッダーファイル名:shnm_Ascii_SS.h
サイズ:3040bytes
フォントタイプ:標準、標準
データパターン:00031000070A00


電光掲示板スケッチ:dotmatrixled2013031201.ino

2013/03/13 Processing(PC)から時刻情報をRTC8564に更新できるようにした。
バッテリバックアップ回路を積んだRTC8564にしたので、現在時刻をPCからRTC8564に設定できるようにスケッチを更新した。
これで、PCで時刻情報を設定した後、電源を切っても時刻情報を保持できるようになったので安心してスタンドアローン機器として使用することができる。

Processing側のスケッチは前回から変更してません。


Processingのスケッチ:akimatrix2013031401.pde

2013/03/24 ドラえもんふしぎサイエンス Vol.8
今回は、ジャイロを使った実験です。


箱の中身は以下のようなかんじです。
右側の黄色い部分がキーパーツ部品です。
重量感があります。


上の子はドラえもんが静止している様子を楽しく見ていますが、下の子は音に驚いて泣いてしまいました。

2014/03/30 南米カラーの豚の貯金箱を作ってみる。
子供のリクエストに答えて久しぶりに豚の貯金箱を作りました。



縞模様もなかなかいいですね。

2013/03/14-31 電光掲示板、エージング試験
フォントのインプリ作業が一段落した。
やりたいこと、やるべきことは色々あるのだが、なかなか前に進めない。
こういうときは、半田付け作業をしたりしながら、気分転換してみよう。

・シールドの構成
電光掲示板シールドの応用例として、温度、湿度、大気圧、現在時刻をLED表示するものを作成した。
シールドの構成は、以下の写真の通り。
左上:温度、湿度、大気圧シールド
左下:Arduino328
右上:電光掲示板シールド、電光掲示板
右下:バックアップ回路付き時計シールド


測定誤差などを知りたかったのでもう1台作成。
上から見た様子です。


温度表示。0.1度差です。LEGOでフレームを作成しました。


湿度。誤差1%
(5VACアダプタによる)USB給電より、ACアダプタ→LDO経由でセンサに電源を供給した方が誤差が少ないようです。
リップルノイズとか電源ラインにのっているのかな?
Arduinoでセンサーを使用するときは、今後ACアダプタから印加するようにしよう。


さて、次は何をしようか?今月号のインタフェースの特集記事、Bluetooth Low Energyは興味深い内容だな。


2013/04/01-
TLで知ったTechBasicをAppStoreでダウンロードしました。

http APIを使用して、simple APIをたたいて、結果を表示するテストプログラムを作成しました。
簡単にできますね。


お絵かきプログラムも作りました。
ためしにマリオを書いてみました。タイルをタップするたびに色を変える仕様にしました。
色の切り替えがワンテンポ遅いのが気になります。ネイティブアプリにするとレスポンスがよくなるのでしょうか?


2013/04/10 - バッテリーバックアップ対応RTCを作成する。そのほか。
PCレスのスタンドアローンの用途を考えてみました。
時計、温度、湿度、気圧が表示できるディスプレイをまず作成してみました。

まずは、バッテリーバックアップ対応の基板を作ります。
CR2032、RTC8564モジュール、ダイオード2本で出来上がり。



温湿度センサーと大気圧センサーモジュール。


モジュールを作成し、エージングテストをしたところ特に不具合は発生しませんでした。
お知り合いのかたがたに配り、反応を聞いてます。。。

最近、Rasberry Piの激安、お得感に魅力を感じています。ethernetがついたLinuxコンピュータが2950円で購入できるのは非常に魅力的です。
Arduino Ethernet Shield単体だけでも4200円しちゃいます。魅力的だなー。


注文開始からボードの入手まで
2012/11/15 基板設計開始
2012/12/03 JetPCBに注文
2011/12/10 基板到着


免責事項
1)サイトの内容について
ご自身の責任でご利用いただくようお願いします。この内容に直接間接により生じたいかなる損害にも一切保証しませんのでご了承ください。