メニュー
▼ アクセス(地図)
▼ Windowsアプリ開発 ▼ マイコン開発 ▼ CGI・PHP制作 |
▼ サイトマップ(全投稿記事)
▼ タイトル(画像一覧) ▼ 事業内容 |
お問い合わせメールフォームが開きます。
2009年06月05日
PIC 12F629 で3-State-Buffer
先日ご紹介した 「FT2232D USB-シリアル2ch変換モジュール」でARM用USB-JTAGデバッガの回路を少し見直してみました。
記事URL: http://micom.hamazo.tv/e1822876.html
ケースに入れた様子: http://micom.hamazo.tv/e1839077.html
3-State-Bufferの74HC125ですが、4回路中2回路しか使用していないことと、小型化するのにピン数が多い事が気になりました。
そこで、8ピンのPICマイコン・12F629を使用して、3-State-Buffer(ex: 74HC125)同等の機能を作ってみました。
PIC内臓のプルアップ抵抗も利用したので、外部抵抗2つが削減できます。
回路図は下記の通りです。
作成したソフトウエアをプログラムして、ブレッドボード上で火を入れてみて、正常動作が確認できました。
なお、マイコンの出力ポートをハイインピーダンスにするには、入出力切換レジスタを入力側に切り替えることで実現できます。
例えば、PICの場合、TRISIO の各bit:1 で該当ポートが入力になります。
データの切換は、ソフト的に行いますので、速度の要求されるデータやクロックラインには使用できません。
今回は内臓の4MHzで動作させていますので、実行時間が1命令1μsecかかり、メイン1周が20命令ほどなので、信号の遅れは最大20μsecほどになります。
ソースコードは下記の通りです。
なお、コンパイラは、SDCCを使用しました。
#include <sdcc-lib.h>
#include <pic12f629.h>
int at 0x2007 __config = _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT;
//----------------------------------------------------------------------------
// 初期化
//----------------------------------------------------------------------------
void Init() {
CMCON = 0x07; // コンパレータ未使用 <-- これ重要!
OPTION_REG = 0x00; // プルアップ許可(bit7=0)
GPIO = 0x00;
WPU = 0x12; // GPIO1/GPIO4 プルアップ
TRISIO = 0x3F; // All GPIO Input mode (Hi-Z)
}
//----------------------------------------------------------------------------
// Main関数
//----------------------------------------------------------------------------
main()
{
Init(); // システムレジスタ初期化
GIE = 0; // 全割り込み禁止
for (;;)
{
// -------- Port A --------
if ((GPIO & 0x02) == 0) // A Output Enable
{
if ((GPIO & 0x01) == 0) // A Input Check
{
GPIO &= ~0x04;
}
else
{
GPIO |= 0x04;
}
TRISIO &= ~0x04; // A Output mode
}
else
{
TRISIO |= 0x04; // A Input mode (Hi-Z)
}
// -------- Port B --------
if ((GPIO & 0x10) == 0) // B Output Enable
{
if ((GPIO & 0x08) == 0) // B Input Check
{
GPIO &= ~0x20;
}
else
{
GPIO |= 0x20;
}
TRISIO &= ~0x20; // B Output mode
}
else
{
TRISIO |= 0x20; // B Input mode (Hi-Z)
}
}
}