秋月電子八潮店の初売りで購入したお楽しみ袋に入っていた7セグメントLED。
今後、何かに利用したいので動作確認してみました。2桁ですがピンは9本しかないので、ダイナミック点灯で表示するようです。実際に配線しながら調べてみると、アノードコモンで両端にある端子が左右それぞれのコモン端子になっていました。中の7ピンが左右共通になっている7セグメントの端子です。
LEDを見るとドットがついているのですが、7ピンしかないので点灯する方法がありません。どうやら、背面のピンが実装されていない部分にドット表示用の端子が付くようです。
さて、ここまで分かれば利用するのは難しくありません。前回のLCDのように、PIC16F819をこの7セグLEDのドライバにしてArduinoやAVRから利用できるようにしたいと思います。
まずは、PIC単体で7セグLEDをダイナミック点灯させてみます。
ダイナミック点灯は左右の7セグメントを高速で交互に点灯させるので、コモン端子のオンオフが必要です。この切り替えにトランジスタを使います。コモンを直接PICにつないで給電のオンオフをすればトランジスタは必要ありませんが、PIC16F819の最大供給電流はPORTA全体で100mA、1ピン最大25mAなので1つのピンで7つのセグメントに給電するのは負荷が心配です。なので通常は電源から直接給電します。
アノードコモンのセグメントなので定番のPNPトランジスタ2SA1015を使います。実はこのトランジスタもお楽しみ袋に入っていました。ラッキー。
回路は以下のようにしました。
PNPトランジスタなので、接続されているRA0とRA1ピンの電圧をLOWにするとLEDに通電します。トランジスタに付いている10KΩの抵抗はスイッチング動作を安定させるものです。配線は多めですが、難しいものではないのでブレッドボードでも構築できます。
プログラムはこちらです。
newmain.c
このプログラムはPIC16F819を内部クロック8MHzで動作させています。ダイナミック点灯は、PICのタイマー0で左右のコモン端子への通電を切り替えて実現します。タイマー0の割り込みの間隔は10.24msにしました。
次はこのPICにATtiny85から表示データを送れるようにします。
ダイナミック点灯は割り込み処理なのでメインルーチンの処理は軽く、外部からの信号はポーリングで処理できそうです。具体的にはRB0を監視してATtiny85から信号がきたらRA2でデータを受信します。プログラムは次のようになりました。
newmain.c
プログラムでは1バイトのデータを受け取ると、そのまま16進数(00〜FF)で表示するようになっています。10進数表示(00〜99)にしたい場合はプログラムを
lseg = byte >> 4; rseg = byte & 0xf;
↓
lseg = byte / 10; rseg = byte % 10;
とするといいでしょう。
こちらのプログラムはPIC16F819を外部クロック20MHzで動かすことを前提にしています。というのはPIC16F819を最終的にワンタイム書き込みのPIC16C712に置き換えたいからです。PIC16C712は内部クロックがないので、外部からクロックを供給する必要があります。なのでPIC16F819にも外部クロックをつけました。
外部クロックにはこれを使います。
セラロックです。なんだか「あんたのバラード」とか「燃えろいい女」とか聞こえてきそうなネーミングですが、セラミック発振子です。水晶振動子よりも安価でコンデンサー内蔵なので使いやすいのですが、精度か少し落ちます。でも今回のような回路にはこれで十分ですね。
ATtiny85のスケッチはこちらです。
ATtiny85PIC_7seg.ino
ひたすら0〜FFのデータを送り続けるだけの簡単なものです。このスケッチも今までと同様ATTinycoreを使ってコンパイルしています。クロックは内部クロック1MHzで動作させました。
PICとの接続は、
ATtiny85 − PIC
ピン3 − RB0
ピン4 − RA2
となります。
ここまで出来たのですぐにワンタイムタイプのPICへ書き込みたかったのですが、簡単ではありませんでした。
詳しくはまた後日に。
※コメント投稿者のブログIDはブログ作成者のみに通知されます