Shuttle K45 改造 自作デジタル時計
2009年9月 ※2013/02 ページデザイン変更 「Shuttle K45 改造 レベルメータ+デジタル時計」で組み込んだキット物のデジタル時計を自作の物に置き換えました。時刻合わせなどの設定はAVR-CDCによるシリアル通信で操作できるようにしたので、PCのケースを空けなくて済みます。基板上のスイッチでも操作できます。 7セグを使ったデジタル時計の製作はありふれています。ここでは部品数を少なく、小さく作ることをテーマとしました。ポイントは7セグの電流制限抵抗を省略したことです。 このページでは7セグ4桁デジタル時計の回路図、部品一覧、プログラムのソースを公開しています。シリアル通信で制御するためのWindowsアプリもソースごと公開しています。 2009/11 追記: 時計とは関係無しに、7セグ/LEDのダイナミックドライブ(パルス点灯)のパラメータの決め方を知りたい人には、この記事の後半が参考になるかもしれません。 |
【関連記事】 Shuttle K45 改造 レベルメータ+デジタル時計 …これが事の始まりです。ただし今回、レベルメータは関係ありません。 今から始めるAVR #2 ATtiny2313 7セグ4桁ボード〜そこ(7セグ)んとこ、詳しく …7セグ/LEDのダイナミックドライブの原理について解説しています。 AVR USB接続の周辺機器をPCから操作する〜仮想COMポート〜 …AVR-CDCを使ってLCDカレンダー時計を制御しています。 雑談:Shuttle K45 マザーボードのコンデンサを交換した (2010/09 追記) …コンデンサが膨張、破裂して壊れたマザーボードの修理方法を解説しています。 【関連リンク】 Shuttle K45 …最近K45の販売が終了し、同等のケースKP10が発売されました。 AVR-CDC …PCに仮想COMポートを作るモジュールです。 |
製作物紹介 | ||
K45に組み込んだ自作デジタル時計(7セグ時計)をWindowsアプリから操作している様子です。 両側のレベルメータは今回の製作と関係ありません。(レベルメータの記事はこちら→「PCオーディオレベルメーターの製作」)
制御部(緑の基板)と表示部(7セグ)。 黒いケーブルはUSBコネクタへつながっている。 シリアル通信で制御しなくても時計は単独で動作する。 PCに組み込まず単品の時計として使えるということで、その場合必要なのは基板の右半分だけ。とても小さい。 23時13分はATtiny2313に引っかけて。 左: 「Shuttle K45 改造 レベルメータ+デジタル時計」でチラリと書いた7セグソケットがこれ。IC用ピンソケットを利用。高さ15mm。このときはUEWを使わず配線し、楽しくも大変な目にあった。よい思い出なので作り直さずそのまま再利用した。それで途中からリボンケーブル継ぎ足しになっている。 右: この7セグ時計はUSB接続で使う物だが、PC内蔵のためケーブルの先はマザーボード上のUSBコネクタ(ピンヘッダ)に差せるようにしてある。ただし開発中はこれだと不便だったので、ミニUSB-Bコネクタに変換して使っていた。 K45内部。左写真・真ん中の基板がこれまで使用していた秋月の「PIC16F57マイコンデジタル時計キット Ver.3(卓上型)」。それを今回製作した7セグ時計に置き換えた(右写真)。 左のレベルメータ基板上にあるオーディオケーブル接続コネクタの向きが悪く、7セグ時計基板の設置で少々困った。レベルメータ製作時、このコネクタを後ろに向けるか横に向けるか迷った末に後ろ向きにしたのだが、読みが外れたようだ。 おまけ: 秋月の時計キットが本来の表示部を付けて動作する様子。 全力で光!光!光! 制御ボードと表示ボードを接続するコネクタのオス/メスは説明書と逆にしてあります。制御ボードの高さを低くするためです(背が高いとK45のケース天板にぶつかる可能性がある)。電解コンデンサやクリスタルを倒してあるのもそのためです。 |
ハードウェアの説明 | ||||||
基板の構成 全体で25x15穴(72x47mm)の片面基板に収まっています。 赤線を境に左側がAVR-CDC、右側が7セグ時計の制御部で、ここで真っ二つに切り離してもそれぞれ独立して動作します。これらは電源ラインと通信線だけでつながっています。 電源は+5V、USBバスパワーで使います。PCの電源を切ってもUSBからの給電は途切れないので、時計は動作し続けます。 また、この時計は通信と関係無しでも動作するよう作ってあり、時刻合わせなどを操作するボタンが付いています。 K45のスリムドライブベイから出し入れするには高さ15mm以内に収める必要があります。実はベイからの出し入れにこだわらなくてもケースを開けてメンテナンスすればよいのですが、それでも全体の背を低くしないとケース天板にぶつかります。このような事情から、部品選びと取り付けには一工夫が必要です。 一番背が高い部品、電解コンデンサは倒します。実装面積が広く取られるので向きと位置でまた悩みます。コストが数十円ほど上がりますが、背が低いタイプを使った方がよいかも知れません。 時計の表示部を付けるピンヘッダはL型を使い、ソケットを横から差せるようにします。また、小さくまとめるため2列タイプにします。 AVR-CDCについて ATtiny2313を使っています。「AVR USB接続の周辺機器をPCから操作する〜仮想COMポート〜」で製作したものと同じです。USBのD+線からプルダウンしている1MΩの抵抗は省略しました。 シリアル通信の機能が欲しいだけならCDC-232でよいのですが、”my K45”の今後のさらなる拡張を考え、CDC-IOにしています。…拡張計画は未定です。 7セグ時計について 今回の製作テーマ「部品数を少なく、小さく作る」はここに掛かってきます。以下、ポイントを説明します。AVRはこちらもATtiny2313を使っています。その他部品個々の詳細は割愛します。 ■デジトラを使う 7セグをダイナミックドライブするのに、桁数分のトランジスタを使います。トランジスタの使い方として、ベース電流を制限する抵抗と、ベース−エミッタ間に渡す抵抗が付きものなので、1桁につきトランジスタ+抵抗2個が必要となります。 部品数を減らすため、ここにデジトラ(デジタルトランジスタ)を使いました。あらかじめ抵抗2個が内蔵されたトランジスタです。デジトラの大きさは2SC1815などのトランジスタより頭が若干小さいので、見た目に配置の窮屈さが軽減されます。 ■発振器を使う AVR内蔵のクロック供給源はRC発振回路で構成されていて、温度や電圧の変化に弱く(=精度が悪く)、時計には使えません。精度が要求される場合は水晶発振子(いわゆるクリスタル)を使います。さらに、時計のように一層正確さが求められる場合は発振器を使います。 クリスタルを使うには数十pFのコンデンサ(負荷容量)が2個付きものです。一方、発振器にコンデンサは不要なので部品数を減らすことができます。 ところが発振器は発振回路を内蔵している分、8ピンICほどの大きさになり(8ピンのICソケットに刺さる)、クリスタル+コンデンサ2個の場合と実装面積は大して変わりません。…が、嬉しいことにクリスタルと同じ大きさの発振器があったりします。ここではそれを使いました。 基板表面の写真で見比べてみてください。AVR-CDCではクリスタル+コンデンサ2個を使っています。7セグ時計ではクリスタル発振子と同サイズの発振器を使っています。 ■電流制限抵抗を省略する 7セグ(LED)をスタティック点灯させるときは電流制限抵抗が必要ですが、その抵抗値でダイナミックドライブすると明るさが落ちるので、ダイナミックドライブのときは抵抗値を小さく見積もります。 さらに進めて、ダイナミックドライブで7セグをパルス点灯させれば電流制限抵抗を省略することもできます。もちろんパルス点灯可能な条件下で使用することが前提ですし、上手くやるにはソフトウェアで工夫が必要です。 ここでは8個の抵抗(セグメントA-G,DPの分)が省略できました。 ■操作スイッチの必要性 この時計をシリアル通信による制御のみで使うなら操作スイッチは不要です。また、PCに内蔵する物なのでスイッチを付けても普段は操作できません。しかし何らかの理由でAVR-CDCが使用不能となっても、時計のメンテナンスはできるようにスイッチを付けました。 タクトスイッチは案外大きい部品です。基板上で3x4穴を占めます。小型化を考えて1個で済ませたいところですが、操作性の面から2個付けました。滅多に使用しないスイッチであっても、使用せざるを得ない状況(非常事態)であればこそ操作性は大切だろう、という考えです。 回路図 7セグ時計の回路図です。AVR-CDCについては「AVR USB接続の周辺機器をPCから操作する〜仮想COMポート〜」を参照してください。
使用する7セグがアノードコモンかカソードコモンかで制御ボードが違います。デジトラ(トランジスタ)をPNP型にするかNPN型にするかの違いです。LEDボードの回路自体は7セグのタイプによらず同じです。 今回、カソードコモン用のハードを製作していません。回路図に間違いはないと思いますが、動作検証していない点をご了承ください。 LEDボードで7セグの配線が面倒だと思うので、UEW(ポリウレタン線)を使って楽をしましょう。 詳しくは「今から始めるAVR #3 ATtiny2313 7セグ4桁ボード〜製作、動作チェック」を参照してください。 制御ボードではクロックの供給源を発振器としています。「OSC」はオシレータ(発振器)のことです。発振器のクロック出力をATtiny2313のPA0に接続します。PA1は空きます。 クリスタル(発振子)を使う場合はコンデンサ2個を付けた上でATtiny2313のPA0,PA1に接続します。 デジトラの代わりにトランジスタ+抵抗2個でも構いません。代替えの回路を参考にしてください。上記リンク先の「7セグ4桁ボード」と同じ回路です。 |
ソフトウェアの説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||
ダウンロード
プログラムの説明 AVR-CDC(USB-COM変換モジュール) AVR-CDCのサイトから「CDC-IO」のファイルをダウンロードして、ATtiny2313用の.hexファイルを(AVR-CDCの)ATtiny2313に書き込みます。 7セグ時計のファームウェア Seg7ClockCom Seg7ClockCom_A.hex または Seg7ClockCom_K.hex を(7セグ時計の)ATtiny2313に書き込みます。 「A」はアノードコモンの7セグ用、「K」はカソードコモンの7セグ用です。 解凍して出てくるSeg7ClockComフォルダはAVR Studioのプロジェクトフォルダです。 アノードコモン用とカソードコモン用の切り替えは、Seg7ClockCom.cの先頭付近にある、
今回、カソードコモン用のハードを製作していないため、ファームもカソードコモン用の方は動作検証していません。ご了承ください。 【注意】 このhexファイルは制御ボードの発振器が11.776MHzであるとしてビルドしています。異なるクロックの発振器(またはクリスタル発振子)で製作する場合、ボーレート(シリアル通信の速度)の設定やスイッチ押下のチャタリング回避タイミングなどを変更し、ビルドしなおす必要があります。 7セグ時計を制御するWindowsアプリ Seg7ClockControler インストール作業はありません。Seg7ClockControler.exe実行でアプリが起動します。操作方法はmanual.htmlを読んでください(後述の説明文を抜粋したもの)。 解凍して出てくるSeg7ClockControler_VS2008proj.zipはVisual Studio 2008 Exp.EditionのC#のプロジェクトフォルダを圧縮したものです。 7セグ時計の機能 この時計は多くの機能を取り入れないことにしました。表示するのは時刻のみで、カレンダー機能はありません。アラームやタイマー機能もありません。 機能
12時間制では午後に4桁目のDPが点灯します(例:昼の1時「 1.00.」、夜の1時「 1.00」)。
プログラム内容 時計のプログラム(アルゴリズム)自体は何も特別なことがなく、誰が組んでも同じようなものになります。0.5秒ないし1秒を計って加算し、秒、分、時と繰り上げていくだけです。 ここでは今回製作した時計独自の内容について説明します。 ■操作方法の判定 シリアル通信で制御するかスイッチで操作するかを判定します。電源投入時またはリセット時にどちらかのスイッチを押していればスイッチ操作モードになります。スイッチが共にオフであればシリアル通信モードで動作します。 スイッチ操作モードではシリアル通信で信号を送信しても無反応です。シリアル通信モードではスイッチを操作しても無反応です。 ■7セグのパルス点灯 7セグ(LED)をダイナミックドライブするとLED 1つ1つはパルス点灯で光ることになります。今回の製作では電流制限抵抗なしにパルス点灯させようとしています。パルス点灯の条件を守らずにLEDをドライブすると、大きめの電流が想定時間以上流れてLEDが焼けてしまうので、安全にパルス点灯できる条件に収まるようプログラムで点灯周期を調節する必要があります。後述。 ■時刻更新のエフェクト 何か面白いことを1つ入れたくて実装しました。メーター機器のように数字がスクロールして入れ替わります。スクロール中の文字パターンは基本フォントから計算して合成しています。 7セグ時計をシリアル通信で制御するアプリ 動作環境: ここで製作した7セグ時計がAVR-CDCとともに内蔵されていて、.NET Framework 3.5がインストールされているPC 開発環境: WindowsXP / Visual Studio 2008 Express Edition - C# 「AVR USB接続の周辺機器をPCから操作する〜仮想COMポート〜」で公開している同内容のアプリを流用しました。 Windowsのレジストリは使いません。インストール/アンインストール作業もありません。 Seg7ClockControler.exe実行で上記ダイアログ画面が起動します。 1.COMポート選択 AVR-CDCを接続して出現したCOMポートを選択して[接続]ボタンを押します。 接続すると[解除]表示に変わります。 2.時間設定 「現在の時刻」のチェックで、PCのシステム時刻が表示されます。[時刻をセットする]ボタンで、7セグ時計がこの時刻に設定されます。 「任意の時刻」をチェックすると、PCのシステム時刻と関係なく自由な時刻を7セグ時計にセットすることができます。 いずれにしても「秒」は7セグで表示されませんが、時計内部では設定されています。 3.時間制 12時間制/24時間制/30時間制で表示できます。 リストボックスから選択決定すると、自動的に7セグ時計に反映されます。 4.明るさ 7セグの明るさを「明るい」「暗い」の2段階で変更します。 バーをスライドさせると直ちに7セグ時計の明るさが変化します。 5.更新エフェクト 「分」の更新時に数字がスクロールするエフェクトの「あり/なし」を設定します。 チェックを入れるとエフェクト「あり」に設定されます。設定は自動的に7セグ時計に反映されます。 6.アプリ終了 設定が完了したらアプリを終了してOKです。ずっと起動しておく必要はありません。 7.その他 バージョン表示をクリックしてみてください。特に意味はありませんが。 1.で「COMnのオープン失敗.」と表示される場合(WindowsXPの例) Windowsのデバイスマネージャを開き、「ポート(COMとLPT)」から対象とする「通信ポート(COMn)」を選択して右クリック。無効をクリック→有効をクリック。そして手順1.からやり直してください。 これでもまだCOMnに接続できない場合、PCを再起動して手順1.からやり直してください。 スイッチによる操作 ATtiny2313のPD0に接続したスイッチをswL、PD1の方をswRとします。どちらかのスイッチを押しながらATtiny2313を電源投入またはリセットするとスイッチ操作モードで時計が起動します。このとき表示は「 0.00」で、2桁目のDPが点滅し、時計は動作しています。 ■時刻合わせの手順 時計表示中 ↓swL押下 「 0 00.」 4桁目のDPが点灯。swR押下で「分」を合わせる。 (例:27回押して「27分」にする 「 0 27.」) ↓swL押下 「 0.27」 2桁目のDPが点灯。swR押下で「時」を24時間制で合わせる。 (例:14回押して「14時」にする 「14.27」) ↓swL押下 「24 」 時間制を設定する。swR押下ごとに24→30→12→24→30→…と変化する。 (例:1回押して「30時間制」にする 「30 」) ↓swL押下 時計表示に戻る (例:「14.27」 2桁目のDPが点滅し、時計が動作している。) スイッチ操作モードでは明るさは「明るい」、時刻更新エフェクトは「あり」に設定され、変更はできません。時計として使えるだけの操作に絞っています。 |
部品について |
ここでは7セグ時計の部品について説明します。 AVR-CDCの製作については「AVR USB接続の周辺機器をPCから操作する〜仮想COMポート〜」を参照してください。 発振器 マイコン内蔵の発振器は不正確なので時計の製作には使いません。外付け部品を使います。時計目的ではより正確さが求められるので、発振子より発振器がお勧めです。 マイコンに発振子をつなぐとき、それはマイコン内蔵の発振回路に接続していることになります。一方、発振器は発振回路込みの部品で、こちらの方がより正確なクロックを発生させます。 時計の製作では如何にして正しい1秒(ないし0.5秒)を計るかが重要です。マイコンは動作クロックを分周してカウントし、これで1秒を計ります。ということで発振器は速さより、分周しやすいクロックかどうかで選びます。 超高精度で有名なクリスタル発振器KTXO-18Sがあります。しかしこの部品は大きいので小型の時計を目指すには向きません。ここでお勧めしたいのが秋月で売っている11.776MHzの発振器です。 ※(2011/04追記) 現在では販売されていないようです。 ・様々な2のべき乗(2^n)を組み合わせても割りきれる →AVRの動作クロックを決める分周とカウンタの比較値を決める分周の組み合わせの幅が広い。 ・小さい →よくあるクリスタル発振子と同じ大きさ。 ・安い →5個100円。KTXO-18Sは1個200円。クリスタル発振子でも安くて1個40〜50円。 今回製作した時計は11.776MHzの8分周 11.776 / 8 = 1.472MHzで動作しています。これより遅いと7セグの点灯で問題が出る可能性があると製作記事に書きました。発振器でも発振子でも、どれを選ぶにしろ、AVRの動作クロックがこれより高くなるものを選んだ方がよいでしょう。 (発振子) 発振器で製作することを勧めますが、発振子でも製作できます。部品一覧表で「4MHz以上」としているのは、1.4MHz以上で適当にということです。それを分周せずにAVRの動作クロックとします。精度の点から、セラミック発振子(セラミック振動子とも。村田製作所の製品名ではセラロック)ではなくクリスタル発振子を使ってください。 クリスタルに付けるコンデンサは15pF〜22pFでよいと思います。詳しくはATtiny2313のデータシートを参照してください。 7セグLED K45に組み込むなら外形の高さ12.8mmサイズの7セグを使います。これ以上大きいとスリムドライブベイの高さに収まりません。大きさを気にせず作るなら好みで自由に選んでください。 7セグは4桁分必要です。1桁の7セグを4個でも、2桁組みの7セグを2個でも、4桁組みの7セグでも、どれでも構いません。当然ですがアノードコモンとカソードコモンを混ぜて4桁ではいけません。アノードコモンかカソードコモンか揃えて4桁分用意してください。 7セグの配線にはUEW(ポリウレタン線)がお勧めです。これも用意しましょう。 ちなみに秋葉原では鈴商が7セグを豊富に扱っています。大小各色様々です。 赤色の7セグは格安セットで販売されていることもあります。通販や店頭で探してみてください。 デジタルトランジスタ コレクタ電流を稼ぎたいので、ベース電流の制限抵抗が小さいRN2205/RN1205を選んでいます。 この時計では部品数削減、小型化のためにデジトラを使っています。どうしてもデジトラでないといけない、というわけではありません。回路図の代替え回路を参考にしてください。 代替え回路のR1は2.2kΩか4.7kΩ、R2は10kΩ〜47kΩのどれでもよいでしょう。 ピンヘッダ/ピンソケット この時計をK45に組み込むものとして部品一覧表にお勧めの形状を書きました。最低12ピンあればピン数や形状が違ってもよいです。PCに組み込まず卓上時計として製作するなら、大きさや形は何でもよいです。もちろん制御部とLED部を同一基板上に作ればコネクタはいりません。 |
部品名 | 部品番号 | 値 | 個数 | 参考価格/備考 |
AVR(マイコン) | U | ATtiny2313 | 1 | 100円(秋月電子) |
発振器 | OSC | (11.776MHz) | 1 | 5個100円(秋月電子) |
積層セラミックコンデンサ | C1 | 0.1uF [104] | 1 | 10個100円 |
タクトスイッチ | SW1,SW2 | -- | 2 | 10個180円 (千石電商 店頭価格) |
7セグLED | LED1-LED4 | -- | 4桁分 | 1個100円など |
ピンヘッダ(制御ボード側) | CN | 2x7 L型 | 1 | 長いものを折って使う |
ピンソケット(LEDボード側) | CN | 2x7 | 1 | 同じサイズがなければ 長いものを切って使う |
発振器の代わりに | ||||
クリスタル発振子 | -- | 4MHz以上 | 1 | 1個50〜200円程度 |
(積層)セラミックコンデンサ | -- | 22pFなど | 2 | 1個20円 |
7セグがアノードコモンの場合 | ||||
デジタルトランジスタ | Tr1-Tr4 | RN2205 | 4 | 10個100円(鈴商) |
RN2205の代わりに | ||||
トランジスタ(PNP型) | Tr | 2SA1015 | 4 | 20個100円(秋月電子) |
抵抗 | R1 | 2.2kΩ [赤赤赤金] | 4 | 1個5円/100個100円 |
抵抗 | R2 | 47kΩ [黄紫橙金] | 4 | 1個5円/100個100円 |
7セグがカソードコモンの場合 | ||||
デジタルトランジスタ | Tr1-Tr4 | RN1205 | 4 | 10個100円(鈴商) |
RN1205の代わりに | ||||
トランジスタ(NPN型) | Tr | 2SC1815 | 4 | 20個100円(秋月電子) |
抵抗 | R1 | 2.2kΩ [赤赤赤金] | 4 | 1個5円/100個100円 |
抵抗 | R2 | 47kΩ [黄紫橙金] | 4 | 1個5円/100個100円 |
◆ ◆ ◆ |
K45のスリムドライブベイにレベルメータとデジタル時計を付けようと考えたのが 2008年7月でした。そのときはすぐに完成させたくてキット物の時計を使いました。 AVRの勉強を始めたのは7セグでデジタル時計を作るためでした。 あれから一年。一番最初の目的だった自作のデジタル時計を組み込むことができ、 気持ちがスッキリしました。最高です。 |
(C) 『昼夜逆転』工作室 | [トップページへ戻る] |