IN-12b ニキシー管8桁表示ユニット ユーザーデータの表示はでけた

Stwrawberry Linux の Da Vinci マイコンボード。Arduino IDE で開発中です。とりあえず表示フォーマットは決めんといかんのですが時計表示の基本部分は実装済み。今回はユーザーデータの表示を追加です。テストでは、awk スクリプトで乱数をテキストファイルに出力したものを編集して準備。Tera Term からファイルの送信でマイコンへ流し込みして表示させました。

ATmega32u4 の USB-シリアルもしくは I/O ポートのシリアルから受信したデータのうち、’0′ ~ ‘9’ 数字, ‘ ‘ スペース, ‘.’ ピリオド, だけで構成されるデータの場合はニキシー管に表示させます。その後一定時間放置すると時計表示に戻る仕様です。

20130902101000

Tera Term のシリアルポートの設定で、送信遅延 1ms で動作は確認(別途マイコンから連続送信のテストは予定)。ニキシー管のダイナミック点灯に 1 管あたり 1ms 使うので 8桁表示に 8ms かかります。なので実際にデータ送信していただく際には送信後の表示待ちディレイを 10ms 程度空けていただくような感じで説明書に記載かなと。というところです。

lN-12b ニキシー管8桁表示ユニットの頒布準備1

2013-08-31 15.50.43

午前中にお医者さんと髪切りに、そのついでに午後から日本橋へ行くことにしました。目的は、IN-12b ニキシー管8桁表示ユニットの頒布に備えて部材集めです。

  • Strawberry Linux さんとこの Da Vinci 32U/ATMEGA32U4 のボード 10 枚(Arduino 互換とそうじゃないのが混ざってますが… 購入)
  • 抵抗、コンデンサ類

を中心に購入。RTC-8564 のリアルタイムクロックモジュールと、ピンヘッダ、ピンソケットを秋月で、半導体関係は RS の通販で購入。あと足りないのは、11mm のジュラコンスペーサー 1袋くらいですかね。とりあえず 10 セット分の部材確保は出来そうです。

2013-08-31 21.04.17

買い忘れがあると痛いので買い物メモなるものを作成するわけですが、今回の手順は以下のとおり

  • KiCad の回路エディタから部品表を CSV 出力する
  • CSV ファイルをエクセルで読み込んで、体裁整える
  • エクセルのセルを必要な分コピーして、Evernote のノートに貼る
  • Evernote のノート画面で CTRL+SHIFT+C でチェックボックスを付けてサーバー同期させる
  • スマホの Evernote も同期させる

あとは、スマホでチェック付けたらいいので安心です。

IN-12b ニキシー管8桁表示ユニット目先の Todo

[X]RTC-8564NB のクラスをスクラッチ作成
[ ]世界変動率?の表示 → 表示フォーマットと既知の数値確認
[X]カンマ表示確認
[X]USB ケーブル差されたら Serial を有効にする
[ ]カソードポイズニング防止のために全て表示させる処理
[ ]時計の表示方法をまとめる
[X]日時設定の方式 → シリアル経由、単体でも設定出来る必要性 → マイコン基板にボタン無し
[ ]明さ調整 → ディマー必要? → 時刻範囲を保存するというのはありか?
[X]一定時間操作されない場合の挙動 → 時計を表示する
[ ]プログラム更新の方式
[ ]EEPROM に保存する内容

他にもありますが、仕様が決まってません。というステータスですね。がんばります。

IN-12b ニキシー管8桁表示ユニットのマイコン側基板のアートワーク出来ました

2013-08-25 13.29.22

IN-12 ニキシー管をマウントする基板は既に出来て手元にあるわけですが、マイコン側の基板のアートワークがやっと終りました。大きさはニキシー管をマウントする基板と同じ 200mm x 36mm の大きさです。20ピンのコネクタのところにロングタイプなヘッダーと、基板同士が接触しないようにスペーサーで間を空けてやれば基板重ねられます。

20130825121600

基板の左側に、ニキシー管のアノード側回路や K155ID1。中央部分に 5V – 180V DC/DC コンバータ。残りの部分にリアルタイムクロックモジュールとマイコンモジュールを入れました。とりあえず、必要最低限のものだけが入っているという状態です。

この基板とニキシー管の基板あわせてハンダ付け箇所 400 程度なのでそんなに時間かけずに作成可能かと思います。今後は AVR マイコンのプログラミングに移行してまいります。

IN-12b ニキシー管8桁表示ユニットの回路整理ほぼ終り

IN-12_controlCircuit

IN12_displayPanel

上の回路のとおり、Strawberry Linux のマイコンボード Da Vinch with Arduino bootloader というやつと、秋月さんで買える RTC-8564NB のリアルタイムクロックモジュール。あとは、ニキシー管用の 180V DC/DC とアノード側、カソード側の回路です。ハンダ付けもざっくり400ヶ所くらいなので、工作規模的にも問題ないんじゃないでしょうか。

以前の回路から削除されたのは AquesTalk Pico とアンプ回路です。しゃべらすのは個別に追加して下さい。

ニキシー管の輝度調整に、CdS 追加するかもですがほぼ終りと言ったところです。ということで、これから基板のアートワークへ移行したいと思います。

Strawberry Linux ダ・ヴィンチ32U with Arduino Bootloader のメモ

2013-08-03 09.50.29

これは、Arduino 互換ボードの一種です。ATMega32u4 というチップ搭載されています。このチップ元を辿ると AT90USB163 などの系統で元々は ISP か FLIP で書き込むタイプのマイコンです。特徴は USB のインタフェースが付いてることですかね。Arduino 本家では Leonardo や Micro が相当する製品になります。

今回は Arduino ブートローダー書き込み済みのものを購入してみて、しばらく使ってみた印象を少しだけ。

USBシリアルの仮想ポートが2つ

ブートローダー実行中と、通常稼動時で COM ポート番号が変化します。最初はドライバの設定(inf ファイルの場所を指示)しなきゃいけませんが、ブートローダーは8秒くらいで終了しちゃうので、COM ポート 2つ設定するという認識が無いとあせりました。

boards.txt の書き換え必要

Arduino IDE で開発を行なう場合は下記エントリを、arduinoのディレクトリ\hardware\arduino\boards.txt に追加します。

davinci.name=Da Vinci 32U
davinci.upload.protocol=avr109
davinci.upload.maximum_size=28672
davinci.upload.speed=57600
davinci.upload.disable_flushing=true
davinci.bootloader.low_fuses=0xff
davinci.bootloader.high_fuses=0xd8
davinci.bootloader.extended_fuses=0xcb
davinci.bootloader.path=caterina
davinci.bootloader.file=davinci.hex
davinci.bootloader.unlock_bits=0x3F
davinci.bootloader.lock_bits=0x2F
davinci.build.mcu=atmega32u4
davinci.build.f_cpu=16000000L
davinci.build.vid=0x1774
davinci.build.pid=0x8032
davinci.build.core=arduino
davinci.build.variant=leonardo

Serial クラス使用時の注意

本家の Guide to the Arduino Leonardo and Micro に細かいことが書かれていますが、USBシリアル使うとき

Serial.begin(9600);
while(!Serial) ;

のようにコーディングしてね、とサンプルが記述されています。この場合 PC 側で Arduino IDE のシリアルモニタ、もしくは Tera Term などの端末ソフトを立ち上げて COM ポートをオープンしないとこの while ループから抜けません。これすなわち PC 接続が条件となっちゃうイヤなパターンなのです。

マイコン単体でも稼動させたいけど、必要な時に USB 差してマイコンに指示を送りたいなどどうすればいいのでしょうかね。私は暫定的に

  // USB ポートのアドレスが変った
  if(udaddrOld != UDADDR) {
    Serial1.println("USB Serial changed");
    udaddrOld = UDADDR;
    if(UDADDR == 0) {
      Serial.end();
    } else {
      Serial.begin(9600);
    }
  }

のような方法で、Serial.end(), Serial.begin() するようにはしています。このとき while(!Serial); は書きません。プログラミング上は Serial.available() でデータ有る無しの判定で済ませています。CPU と USB 部分は別れているので、USB ケーブルの抜き差しするときなどは、30秒から1分程度放置して、32u4 側のエンドポイントがタイムアウトのような形でリセットされるとうまく行くことが多いように思われます。これは Arduino UNO みたいに常時稼動する USBシリアルと決定的に違うところなのであきらめています。

Arduino IDE からのアップロードにしょっちゅう失敗する

ブートローダー起動されたら仮想COMポート番号も変化するのですが、USBシリアルのところはいろいろタイミングとかあるのかして、Arduino IDE から 2~3回書き込みすると次からは書き込みエラーとなって駄目なことが多いです。

こうなるとお手上げなので、Arduino IDE 終了、USBケーブル抜く。マイコン電源 OFF/ON で対応。結構最悪な操作ですな。

結構クセあります。また、このボードは USB 給電と外部給電をセパレートしていないので、組込み時には設計上の注意必要です。

RTC-8564NB をニキシー管8桁表示ユニットに接続

2013-08-04 17.57.54

この記事、Wordpress-3.6-ja 更新失敗した後の動作確認でポストしているテスト投稿記事です。

ジャンクボックスを探しまして、リアルタイムクロックモジュールを発掘。Sparkfun など都合3つ出てきたわけですが唯一 5V 動作可能なのが秋月さんで買える RTC-8564NB のリアルタイムクロックモジュールでした。ということで、早速ブレッドボードに差しまして即席の配線を行ない動作確認。これは動作 OK でした。

8桁ユニット的には世界線変動率も出せるようにしたほうが良いのでしょうかと思うものの管が違うのでそれっぽく表示というところでしょうか。どんな感じで表示させるのが良いかよくわからないですが調べて実装してみたいです。

ストロベリー・リナックスの「ダ・ヴィンチ32U with Arduino Bootloader」のピン番号わかりにくいので一覧作成

Da Vinci 32Uピン配置

Arduino IDE で使う digitalWrite() などのピン番号の位置が純正の Arduibo Micro と違うので一覧作成。よそのサイトのほうが正確か…

PD0 が 3、 PD1 が 2 が正解とのコメントがありました。一覧表逆になっています。注意下さい。

今回は arduino-1.0.5\hardware\arduino\variants\leonardo\pins_arduino.h 参照して作成

ストロベリー・リナックスの「ダ・ヴィンチ32U with Arduino Bootloader」でタイマー割り込みの確認

2013-08-03 09.50.29

IN-12 ニキシー管8桁表示ユニットのマイコンをどうしようかと日本橋ウロウロしてまして見つけたのがこれです。お値段も 1,260円なり。これなら、マイコンと PC と USB シリアル出来て 32ピン 600mil 幅の大きさです。シリアル通信は Arduino Leonard 同様 Serial クラスが USB, Serial1 クラスが I/O ポート使うらしく、シリアル2ポートはありがたいし、USB シリアル接続してもボードリセットかからないのもよろしい感じです。 Arduino Micro というのがほぼ同じものに見えます。電源回路内蔵されてたりと部品はちょっと多い目についているのですが 2800円くらいなのが微妙なところ。

正直言いますと ARM マイコンボード(評価用)のほうが安いのあったのですが、地味に大きかったりしたのと開発環境構築と開発に時間かかりそうだったので使い慣れてる AVR マイコンにしました。また、このボードはポリスイッチ1個外してしまえば USB からの 5V 切れそうなので、そういう改造も楽そうなのであります。

データシート見まして8ビットカウンタは MEGA328 と変わらんかなということで、早速コーディングして割り込み版 LED チカチカを作成。1ms 毎にポートをパタパタさせたのを測定。500Hz と出ているので正解です。(波形立ち上がり後 1ms で立ち下げ、また 1ms 後に立ち上がりなので1サイクル合計 2ms かかっているため 500Hz です)

あとは、シリアル通信のライブラリが問題なく動けば楽出来るので今後そっちのほうを確認していきます。

#include

boolean led01 = false;

ISR(TIMER0_COMPA_vect) {

if(led01 == false) {
led01 = true;
digitalWrite(13, HIGH);
} else {
led01 = false;
digitalWrite(13, LOW);
}
// set interrupt mask
TIFR0 |= (1<

IN-12B ニキシー管8桁表示基板(開発用)の製作

2013-07-29 14.27.21

とりあえずユニバーサル基板にアノードのドライブ回路と、74141 のデコーダーを載せるべく製作。先日仕上がった IN-12 ニキシー管マウント基板も接続して 74141互換IC と 74HC595 差す前の事前配線チェックまでやったところ。ユニバーサル基板の誤配線なく大丈夫でしたしプリント基板のほうも OK でした。

IN-12_controlCircuit

回路図の修正もはいっています。TLP627-4 のフォトカプラ買えないわけではないですがトランジスタのスイッチに置き換え。これに伴ない、74HC138 3to8 デコーダーが使えなくなるので 74HC238 に置き換えたいところですが、74HC238 が無かったので 74HC595 のシフトレジスタに変更しました。

ATMEGA328P は Arduino 互換にしました。開発時は Arduino UNO 使う予定。

MPSA92 のコレクタにニキシー管の電流制限抵抗をわざわざ付けていますが、本来でしたらニキシー管用 DC/DC の出力に電流制限抵抗1本入れておけば OK と思いますが、今回はこうしています。