2009年06月05日

PIC 12F629 で3-State-Buffer

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 12F629 で3-State-Buffer

作成したソフトウエアをプログラムして、ブレッドボード上で火を入れてみて、正常動作が確認できました。

なお、マイコンの出力ポートをハイインピーダンスにするには、入出力切換レジスタを入力側に切り替えることで実現できます。
例えば、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)
        }
    }
}







タグ :12F629

同じカテゴリー(マイコン開発)の記事
Fusion PCBでエレキー
Fusion PCBでエレキー(2020-04-01 19:00)


上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
PIC 12F629 で3-State-Buffer
    コメント(0)