IN-12B ニキシー管ダイナミック点灯のテスト、主にゴースト対策

2013-07-30 16.20.42

先日作ったユニバーサル基板に Arduino UNO を接続しました。これからダイナミック点灯の基本部分作製のためです。

今回の処理は、ATMEGA328P のタイマー割り込み2 を使用して定期的に割り込み発生させてカウンターをカウントアップ。そのカウンターを見ながら約 1ms 毎にニキシー管を点灯させるようプログラミング。

最初は表示する桁を切り替えるだけの単純な処理をコーディングしました。その結果ゴーストが発生します。 3 のゴーストや 7 のゴーストなどがわかりやすいですかね。このときのアノードの電圧はどうなっているのか測ってみたのが次のハードコピー

b0us

水色は、アノードのスイッチのパルス、黄色はニキシー管のアノード電圧です。ニキシー管表示中は一瞬 180V 程度かかって 150V 程度で安定しますが、次の桁の処理にいってもアノード電圧は 0V になりません。電荷たまっているのでゆっくり下っていくようです。

これを改善するために、表示する桁を切り替える処理にニキシー管のアノードを OFF にして消灯させるブランキングタイムというものを設けてみます。テストプログラムで試しに 1ms のうち 800μs 点灯させた後アノードを OFF にしてみました。

b200us

このブランキングタイムによって、ニキシー管消灯したときの電圧の降下が早くなり、一瞬ですが 0V に近いところまで下ります。ここまでくればゴーストはほぼ心配なくなるものと思われます。

2013-07-30 16.49.01

写真ではわかりにくいですがゴーストの基本的な対応は出来ました。

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 と思いますが、今回はこうしています。

ニキシー管 IN-12 のアノードの金属板に違いがあるのを見付ける

2013-07-26 17.15.05

ちょっと整理とかしてたりしてますといろいろ発見あるものです。今回は、写真のように金属板の色違いです。真空管なら、管の内側に塗られたゲッターで駄目とか判断出来たりするのもありますが、ニキシー管なのでなんでしょう?

2013-07-26 17.15.52

横から見ても色違うということで材質違いと思われ。どちらも全く問題ないので良いのですが見た目揃ってるほうが当然いいです。ということで、 100個くらいしかないわずかな在庫を選別することになりました。

側面の製造年月見ても関連性ないし…

IN-9 バーグラフ表示ネオン管

P-0001

IN-9 バーグラフ表示のネオン管です。流れる電流によって光る範囲が伸びたり縮んだりします。表示領域は最大 100mm でそのときに必要な電流は 10mA です。電流値に連動したリニア表示です。

Welcart で、商品詳細の出力位置をカートに入れるボタンより下に出す

以前の記事で商品詳細ページに在庫数を表示するという修正をご紹介させていただきました。私のところでは Twenty Ten というテーマのまま運用しています関係上 Welcart の掲示板を見てもなかなか一発で回答に着かないことが多いです。今回修正したかった内容は、商品の説明文の表示位置を、「カートに入れる」ボタンよりも下に表示したくなったというものです。調査の結果、前回同様 single_item.php を修正すればいけそうということで、コードの修正したところうまい具合にいけたので OK です。

wordpress のディレクトリ/wp-content/plugins/usc-e-shop/templates/ のファイルを修正しているので、更新やパッチを当てた場合は、この作業も都度しなければなりません。これは注意ですね。ここらへんの表示位置などはカスタマイズ対応されるといいですね。

$ cat single_item.php.patch
*** single_item.php.orig        2013-07-25 14:48:18.541764200 +0900
--- single_item.php     2013-07-25 14:52:15.426313200 +0900
*************** if(usces_sku_num() === 1) { //1SKU
*** 28,34 ****
        $html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
        $html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
        $html .= '</div>'."\n";
!       $singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . '</div>'."\n";
        $html .= apply_filters('single_item_stock_field', $singlestock);
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
--- 28,34 ----
        $html .= '<div class="field_name">' . apply_filters('usces_filter_sellingprice_label', $usces_sellingprice, __('selling price', 'usces'), usces_guid_tax('return')) . '</div>'."\n";
        $html .= '<div class="field_price">' . usces_the_itemPriceCr('return') . '</div>'."\n";
        $html .= '</div>'."\n";
!       $singlestock = '<div class="field">' . __('stock status', 'usces') . ' : ' . esc_html(usces_get_itemZaiko( 'name' )) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
        $html .= apply_filters('single_item_stock_field', $singlestock);
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
*************** if(usces_sku_num() === 1) { //1SKU
*** 37,43 ****
                $html .= '</div>'."\n";
        }

!       $html .= $content."\n";
        $html .= '</div><!-- end of exp -->'."\n";
        $html .= usces_the_itemGpExp('return');
        $html .= '<div class="skuform" align="right">'."\n";
--- 37,43 ----
                $html .= '</div>'."\n";
        }

! //    $html .= $content."\n";
        $html .= '</div><!-- end of exp -->'."\n";
        $html .= usces_the_itemGpExp('return');
        $html .= '<div class="skuform" align="right">'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 50,56 ****
                $html .= "</table>\n";
        }
        if( !usces_have_zaiko() ){
!               $html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</div>'."\n";
        }else{
                $html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
                $html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
--- 50,56 ----
                $html .= "</table>\n";
        }
        if( !usces_have_zaiko() ){
!               $html .= '<div class="zaiko_status">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</div>'."\n";
        }else{
                $html .= '<div style="margin-top:10px">'.__('Quantity', 'usces').usces_the_itemQuant('return') . esc_html(usces_the_itemSkuUnit('return')) . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</div>'."\n";
                $html .= '<div class="error_message">' . usces_singleitem_error_message($post->ID, usces_the_itemSku('return'), 'return') . '</div>'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 63,69 ****
        usces_have_skus();
        $html .= '<h3>' . usces_the_itemName( 'return' ) . '&nbsp; (' . usces_the_itemCode( 'return' ) . ') </h3>'."\n";
        $html .= '<div class="exp clearfix">'."\n";
!       $html .= $content."\n";
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
                $html .= '<div class="field">'."\n";
--- 63,69 ----
        usces_have_skus();
        $html .= '<h3>' . usces_the_itemName( 'return' ) . '&nbsp; (' . usces_the_itemCode( 'return' ) . ') </h3>'."\n";
        $html .= '<div class="exp clearfix">'."\n";
! //    $html .= $content."\n";
        $item_custom = usces_get_item_custom( $post->ID, 'list', 'return' );
        if($item_custom){
                $html .= '<div class="field">'."\n";
*************** if(usces_sku_num() === 1) { //1SKU
*** 117,127 ****
                $html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
                $html .= '</tr>'."\n";
                $html .= '<tr>'."\n";
!               $html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . '</td>'."\n";
                $html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
                $html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
                if( !usces_have_zaiko() ){
!                       $html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . '</td>'."\n";
                }else{
                        $html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
                }
--- 117,127 ----
                $html .= '<span class="price">' . usces_the_itemPriceCr('return') . '</span><br />' . usces_the_itemGpExp('return') . '</td>'."\n";
                $html .= '</tr>'."\n";
                $html .= '<tr>'."\n";
!               $html .= '<td class="zaiko">' . usces_get_itemZaiko( 'name' ) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
                $html .= '<td class="quant">' . usces_the_itemQuant('return') . '</td>'."\n";
                $html .= '<td class="unit">' . usces_the_itemSkuUnit('return') . '</td>'."\n";
                if( !usces_have_zaiko() ){
!                       $html .= '<td class="button">' . apply_filters('usces_filters_single_sku_zaiko_message', esc_html(usces_get_itemZaiko( 'name' ))) . ' 在庫数 ' . usces_the_itemZaikoNum('return') . '</td>'."\n";
                }else{
                        $html .= '<td class="button">' . usces_the_itemSkuButton(__('Add to Shopping Cart', 'usces'), 0, 'return') . '</td>'."\n";
                }
*************** if(usces_sku_num() === 1) { //1SKU
*** 134,139 ****
--- 134,141 ----
        $html .= '</div><!-- end of skuform -->'."\n";
        $html .= apply_filters('single_item_multi_sku_after_field', NULL);
  }
+
+ $html .= "\n".$content."\n";

  $html .= '<div class="itemsubimg">'."\n";
  $imageid = usces_get_itemSubImageNums();

IN-12 ニキシー管用のマウント基板届きました。

2013-07-23 12.33.11

先日、IN-12 ニシキー管のマウント基板のガーバーデータ出来たというのをつぶやきました。その後、基板屋さんにオーダー出したものが届いた次第。ということで、早速基板に IN-12 を差してみたところが上の写真です。これを真っ直ぐにハンダ付けするのは慎重にやらんといけません。一般に頒布して良いものかちょっと心配になってくる。

2013-07-23 12.31.26

とりあえず、スルーホールのランドの大きさも大きめにしておいて正解。最初は私の動作確認用ニシキー管8個を数少ない在庫から拾うとしましょう。しかしながら8桁もありますとアプリケーションどうしたものか悩みますなぁ。

ヘッドホンアンプ出力のリレー回路(スピーカー保護回路)

SpeakerProtect

 

ヘッドホンアンプの出力に取り付けるポップノイズ除けの保護回路です。手持ちの G5V -2  のリレーが 12V のため、電源電圧は 12V にて動作確認しています。

R1 330k の抵抗を通った電流が C1 にたまっていき C1 の電圧があがっていきます。この定数の場合は電源投入後4~5秒でリレーが ON になります。R1 を 470k 程度に大きくするとリレー ON までの時間は7~8秒程度となります。左下のスイッチはリレーを強制的に OFF にするためのスイッチです。

この回路は単純に電源ON後一定時間経ったらリレーを ON させるだけの回路です。正負電源を使うようなアンプの DC オフセット検出や、出力短絡の保護などはありません。

ヘッドホンアンプ基板にアクリル板の天板付けてみた。

2013-07-20 10.57.04

ヘッドホンアンプの基板見てたときに、アクリル板あるしホコリ除けにもならんけど天板付けみようと思い付く。四角切って穴開けだけじゃ寂しいのでピアプロを見てまわって nona さんが描かれた ルカさんの線画を発見 。ダウンロードさせていただき、カッティングのデータ用意して中華レーザーのセットアップしてカッティング。

2013-07-20 11.08.53

この手のものでしたら線画は太めの線と、多少ベタで塗ってるところがあったほうが目立つ印象を受けました。が、いいんじゃないでしょうかということで、基板に付けました。