7セグLEDを使う

いよいよ7セグLEDを使う時がきた。
7セグLEDを使えば、0から9までの数字(あとドット)を表示させることができるのだ!
温度計には無くなてはならないものと言っていい。

購入した7セグLEDは、赤色で3桁表示するもので、C-533SRという型のものだ。
7セグメントLED表示器 超高輝度赤色3文字(3桁)(カソードコモン)C−533SR: LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販

7セグには足が12本付いていて、どこから手を付けていいか全くわからない。
今回はこんな流れでやってみようと計画を立てる。

  • 7セグの各配線の意味を調べる
  • 1セグメント点灯させてみる
  • マイコンから数字を表示させてみる

7セグの足(各配線)はどうなっているのか

3桁表示できる7セグなので3つの7セグがくっついている。
まずは、各配線の意味を調べるためにデータシートを見てみることにした。
http://akizukidenshi.com/download/ds/paralight/C-533SR.pdf

分かるような分からないような…集中して何度も確認してみた。
どうやら各セグメント(数字を構成する各LED)ごとに、AからGまでのアルファベットが割り当てられている。
そのアルファベットの下には数字が書いてあるので、配線の順番ということだろう。

f:id:happytar0:20121226233158p:plain
f:id:happytar0:20121226233206p:plain

アルファベットを各配線に割り当てるとこうなる。

f:id:happytar0:20121226233205p:plain

1セグメント点灯させる

続いて1セグメントだけ点灯させてみることにした。
図でいうと左上の「F」の箇所だ。
ちなみに、DIG1〜3にはカソードコモンなのでGNDを接続する。

データシートを見るとVf1.8〜2.2で、最大20mAまで流せるようだ。
以前と同じ240Ωの抵抗をそのまま使うことにした。

無事に左上が点灯したところ
f:id:happytar0:20121225003048j:plain

マイコンから数字を表示させる

次はマイコンに接続し、数字を表示させることにした。
ここからが勝負の時だ…。

トランジスタを間に挟んで接続する予定だったが、
とりあえず動作確認のためにマイコンと一桁(8本)直結させることにした。

ATMEGA328Pの最大電流量は200mAなので、各セグメントに10mAずつ流しても十分に足りると考えた。

マイコンには、PB0〜7まで各セグメントA〜Gを接続。
こうすることでマイコンから制御する際に分かりやすくなるとのこと。

指定セグメントを点灯させるには、LEDと同じように指定ポートのビットを立てるだけだ。

各セグメントを順番に点灯させるコードはこちら
pontago/avr-7SegLedTest · GitHub

0〜9の数字と.(ドット)を順番に表示させるコードはこちら
pontago/avr-7SegLedNum · GitHub

無事に数字を表示させることができた。
f:id:happytar0:20121225030559j:plain

数字を表示させただけでも嬉しくなってしまった。
たいした事をしてなくてもその気になってしまうのだから危険だ。
そろそろトランジスタと温度センサーの出番なので気は抜けない。

ATMEGA328Pを使う

LED点灯を試すためにATTINY2313を一番最初に買ったのだけど、
7セグLEDを使うためには少しポート数が足りなくなってきた。
思い切ってATMEGA328Pを買うことにした。

ただ単純にATTINYと置き換えればいいと思っていたがそうは問屋が卸さない。
割り当てられているポートの順番なども違うようで、
ATTINYと比べながら置き換えていく必要があるようだ。

流れとしてはこんな感じだ。

  • 三端子レギュレータを使って5V降圧した電源を使う
  • ATMEGAにプログラマを接続して認識させる
  • 以前作ったLED点灯回路・プログラムをそのまま流用し、動作を確認する

プログラマとATMEGAを接続する

各ポートに接続する配線については、以前に接続したことがあるATTINYを参考にした。

また、下記のサイトも見ながら試行錯誤してみた。
始めるAVR

各ポートの用途はデータシートを参考に。
http://akizukidenshi.com/download/mcu/avr/attiny2313.pdf
http://akizukidenshi.com/download/mcu/avr/atmega48-88-168-328_A_P_PA.pdf

結果的には、こんな感じで接続してみると上手く認識させることができた。
f:id:happytar0:20121224234928j:plain

ATMEGAでLEDを点灯させてみる

試しに以前作った2つのLEDを交互に点灯させる回路を組んでみることにした。
PD3とPD4それぞれにLEDと抵抗を接続した。
プログラムもそのまま同じもので問題ないのだが、
コンパイルする際にATMEGA用に一部Makefileの書き換えが必要になる。

こんな感じでMakefileをATMEGA328P用に書き換えた。

DEVICE     = atmega328p
PROGRAMMER = -c avrispmkII -P usb -p m328p

以前作ったLEDを点滅させる記事はこちら
AVRでLEDを点滅させるプログラム – フタなしカンヅメ

無事に点灯したところ
f:id:happytar0:20121224235240j:plain

三端子レギュレータの問題が解決してからはスムーズに進んで気持ちがいい。
次はいよいよ7セグLEDを使うことになるので、わくわくが止まらない。

12VのACアダプタから5Vに変換

温度計作りを構想してからどのくらい経っただろうか…
なかなか手を付けるタイミングがなく今年が終わろうとしていたのだけど、
意を決してマイコンいじってみることにした。

まずは、今まで電池ボックスを利用していた箇所をACアダプタから電源を確保することにした。
12VのACアダプタを買った理由は、高い電圧を必要とするものでも使い回せそうな気がしたのと、
三端子レギュレータを使ってみたかったのが理由だ。

12Vではマイコンに繋ぐことができないので、5Vほどに降圧する必要がある。
三端子レギュレータはLM7805CVを利用する。これはかなりメジャーなものでよく使われるものらしい。

ACアダプタのDCジャックそのままでは、ブレッドボードに挿すことができないので、
秋月電子で販売されている「ブレッドボード用DCジャックDIP化キット」を使うことにした。

ブレッドボード用DCジャックDIP化キットを組み立てる

このキットには、DCジャック、ブレッドボードに挿すための足、基盤が付属されている。
半田を使って組み立てる必要があるようだ。
半田ごてを使うのは久しぶりな上に、半田する箇所が小さかったので緊張したのだけど、あっさりできた。

しかし、半田した後に基盤を上下逆にしていたことに気づく…これが後々悩む理由になるとは。
本当ならばプラスとマイナスが印刷されている面を上にした方がいい。

三端子レギュレータを使って5Vに降圧

ACアダプタをブレッドボードに挿した後、テスターを使い12Vが出ていることを確認した。
いよいよ三端子レギュレータの出番だ。

型番が印刷されている方を前面と見て、左がIN(12V)、中央がGND、右がOUT(5V)ということらしい。
発振を防ぐために、INとGND間に積層コンデンサ0.33μF、GNDとOUT間に0.1μFを接続する。

わくわくしながらOUTの5Vをテスターで計測してみる…
ん?5Vになってないどころか電圧がふらふらしている。
しかも三端子レギュレータが異常な熱を帯びていて持てないくらいだ。

コンデンサの繋ぎ方が悪いのかと、繋げ方を変えてみるが変化なし。
数日悩んだところで、お手上げ状態なのでマイコン先生に聞いて見ることにした。

三端子レギュレータの謎が解ける

先生に状況を説明している段階で、あることにふと気づいた。
ACアダプタの基盤を逆に半田付けしていたことだ。
どうやらそのせいで、プラスとマイナスも逆転していたらしい。

なんと、INにマイナス、中央にプラスを接続していたのだ…。
話を聞いたところ、これはかなり危ないミスらしい。三端子レギュレータの異常な熱の原因も分かった。
プラマイ逆にしたところ、無事に5Vにすることができた。

なぜテスターで12V測れていたのだろうと考えたところ、
よくよく見るとテスターの左側に「-」の記号が…どうやら「-12V」と表示されていたことに気づかなかったようだ。

f:id:happytar0:20121224234920j:plain

今回はソフトのようにエラーコードを吐かないハードの難しさを思い知ることとなった。
もう少し慎重に進めていきたいと思う。