最もシンプルなPICマイクロコントローラーをマスターします。 パート1

マイクロコントローラーの選択は通常、必要なタスクのために実行されます。 周辺機器の最小セットを備えた一般的なMKは、PIC16F628Aの学習に適しています。



最初のステップは、選択したマイクロコントローラーのドキュメントをダウンロードすることです。 メーカーのウェブサイトにアクセスしてデータシートをダウンロードしてください。



最初のページには、MKの主な特徴( ロシア語の説明 )がリストされています。



必要な主なポイント:





端子配列:



Vdd-パワー。

Vssは地球です。



これは、MKの作業に最低限必要なものです。





16 MKレッグは引き続き使用可能です。 モジュールで各レッグを使用すると、使用するデジタルポートの最大数が減少することを計算するのは難しくありません。



コンパイラ



以前の記事で書いたように、IDE JALEditを備えたJALコンパイラは最もシンプルで簡単だと考えました。



JALPackをダウンロードしてインストールします。

このパッケージには、必要なすべてのライブラリとその使用例が含まれています。



JALEditを起動します。 マイクロコントローラ用のプログラムの例:16f628a_blink.jalを開き、ソースを損なわないように、すぐに新しいファイル(16f628a_test.jalなど)に保存します。



すべてのコードは4つのブロックに分割できます。



F9(または対応するボタン)を押すと、プログラムは既製のファームウェアにコンパイルされ、使用されるMKリソースの数が表示されます。

コード:58/2048データ:4/208ハードウェアスタック:0/8ソフトウェアスタック:80


コメントを読むと、このプログラムが外部20MHzクオーツを使用するように設計されていることが明らかになります。

まだ持っていないので、構成を処理し、内部ジェネレーターを使用するためのプログラムを書き直します。



構成



異なるマイクロコトローラーには、異なる構成ビットのセットがあります。 データシートの各ビットの目的について学習できます(p。97)。

接続されたライブラリでは、各ビットとその値のそれぞれに読み取り可能な変数が割り当てられ、必要なパラメーターを選択するためだけに残ります。

-- Symbolic Fuse definitions

-- -------------------------

--

-- addr 0x2007

--

pragma fuse_def OSC 0x13 { -- oscillator

RC_CLKOUT = 0x13 -- rc: clkout on ra6/osc2/clkout, rc on ra7/osc1/clkin

RC_NOCLKOUT = 0x12 -- rc: i/o on ra6/osc2/clkout, rc on ra7/osc1/clkin

INTOSC_CLKOUT = 0x11 -- intosc: clkout on ra6/osc2/clkout, i/o on ra7/osc1/clkin

INTOSC_NOCLKOUT = 0x10 -- intosc: i/o on ra6/osc2/clkout, i/o on ra7/osc1/clkin

EC_NOCLKOUT = 0x3 -- ec

HS = 0x2 -- hs

XT = 0x1 -- xt

LP = 0x0 -- lp

}

pragma fuse_def WDT 0x4 { -- watchdog timer

ENABLED = 0x4 -- on

DISABLED = 0x0 -- off

}

pragma fuse_def PWRTE 0x8 { -- power up timer

DISABLED = 0x8 -- disabled

ENABLED = 0x0 -- enabled

}

pragma fuse_def MCLR 0x20 { -- master clear enable

EXTERNAL = 0x20 -- enabled

INTERNAL = 0x0 -- disabled

}

pragma fuse_def BROWNOUT 0x40 { -- brown out detect

ENABLED = 0x40 -- enabled

DISABLED = 0x0 -- disabled

}

pragma fuse_def LVP 0x80 { -- low voltage program

ENABLED = 0x80 -- enabled

DISABLED = 0x0 -- disabled

}

pragma fuse_def CPD 0x100 { -- data ee read protect

DISABLED = 0x100 -- disabled

ENABLED = 0x0 -- enabled

}

pragma fuse_def CP 0x2000 { -- code protect

DISABLED = 0x2000 -- off

ENABLED = 0x0 -- on

}













自分の設定を変更します。

pragma target clock 4_000_000 -- ,

--

pragma target OSC INTOSC_NOCLKOUT --

pragma target WDT disabled --

pragma target PWRTE disabled --

pragma target MCLR external --

pragma target BROWNOUT disabled --

pragma target LVP disabled --

pragma target CPD disabled -- EEPROM

pragma target CP disabled --








ボタンに触れるだけでLEDが点滅



ボタンを押したときにのみLEDが点滅するようにプログラムを変更します。

この問題を解決したら、入力モードと出力モードの両方でデジタルポートを操作する方法を学習します。



デジタル出力



未使用のMKレッグを選択します。 RB5(ピン11)を例にとります。 他の場所では必要ないため、この足には追加の機能はありません。

デジタル出力モードでは、MKは食物または地面を脚に引き付けることができます。

負荷をプラスとマイナスの両方に接続できます。 違いは、いつ、どの方向に電流が流れるかだけです。





最初のケースでは、ユニットが設定されている場合はMCから、ユニットがゼロの場合はMKに電流が流れます。



論理ユニットからLEDを点灯させるために、最初のオプションについて説明します。



脚を流れる電流を制限するために(デジタル入力あたり最大25 mAまたはすべてのポートに200 mA)、電流制限抵抗が取り付けられています。 最も単純な式を使用して、125オームの最小値を計算します。 ただし、制限は必要ないため、500オーム(または最も近い適切な抵抗)の抵抗を使用します。



より強力な負荷を接続するには、さまざまなバージョンのトランジスタを使用できます。



デジタル入力



2番目の未使用のレッグをどこにでも持って行きましょう-RB4(ピン10、ピンアウトで指定されたPGM機能はLVPを指します。

デジタル入力モードでは、マイクロコントローラーは電圧の有無の2つの状態を読み取ることができます。 したがって、ボタンを接続して、1つの状態ではプラスが脚にかかり、2番目の状態ではアースが脚に接続するようにする必要があります。







この実施形態では、抵抗器はプルアップとして使用される。 通常、ブレースには10kΩ抵抗が使用されます。

ただし、プルアップ抵抗は必ずしも必要ではありません。 PORTB(RB0-RB7)のすべてのレッグには、プログラム可能な内部プルアップがあります。 しかし、外部ブレースの使用ははるかに信頼性があります。


接続できるのはボタンだけではなく、覚えておくべき主なことは、MKを流れる電流の制限です。



リセットボタン



外部リセットをアクティブにしたことを忘れるまで、MCLRフット(ピン4)に同様のボタンを追加します。







このボタンを押すと、MKは最初からプログラムを開始します。



ファームウェア



変数をLEDとボタンに割り当てます。



enable_digital_io() -- \

--

alias led is pin_B5 -- RB5

pin_B5_direction = output -- RB5

--

alias button is pin_B4 -- RB4

pin_B4_direction = input -- RB4

led = off --







次に、 led変数に値1または0(オンまたはオフ、trueまたはfalse、その他のエイリアス)を割り当てます。MKを目的の足にプラスまたはマイナスのいずれかでプルし、LEDを点灯および消灯します。ボタン変数を読み取ると、ボタンが押されていない場合は1、ボタンが押されている場合は0。



ここで、必要なアクションを無限ループで記述します(これらのアクションは連続的に実行されます。無限ループがない場合、MKはフリーズします)。



forever loop

led = off --

_usec_delay ( 500000 ) -- 0,5

if Button == 0 then -- ,

led = on --

_usec_delay ( 500000 ) -- 0,5

end if

end loop







遅延は単純と見なされます。

ジェネレータの周波数は4MHzです。 動作周波数は4分の1です:1 MHz。 または、1クロック= 1μs。 500,000μs= 0.5秒



ファームウェアをコンパイルします。

エラー:0警告:0

コード:60/2048データ:4/208ハードウェアスタック:0/8ソフトウェアスタック:80


ここで、このファームウェアをMKに書き込み、スキームに従ってデバイスを組み立て、すべてが正常に動作することを確認する必要があります。



プログラマー



すべて同じスキーム:





ピン配置を確認します。



はんだ付け...





はんだ付け不良は、デバイスの動作不能の主な問題の1つです。

私の悪い習慣を繰り返さないでください。ヒンジ取り付けを使用しないでください。


この場合、マウスコネクタに挿入された古いPS / 2マウスのテールが5V電源として使用されました。


コンピューターに接続します。



WinPic800をダウンロードして実行します



[設定]-> [ハードウェア]に移動して、プログラマがハングするJDMとポート番号を選択します。







[ ハードウェアテスト]をクリックし、[ デバイスの検出]をクリックします







ファームウェアpic628a_test.hexを開きます







[ 設定 ]タブで、構成ビットが正しく設定されていることを確認できます。必要に応じて、すぐに変更できます。







すべてをプログラムしてから、すべて検証する







エラーが発生していない場合は、はんだ付けを続けます。



結果



最終スキーム:







プログラマーからは、MCLRの高電圧(12V)のみが干渉します。 プログラマ全体をはんだ付けしないために、1本のワイヤのみをはんだ付けできます...または、プログラマをCOMポートに接続しないでください。 残りのワイヤは干渉しません(接続された電源とグランドははんだ付けを簡単にするだけです)。





MCLRのボタンは自由にはんだ付けできますが、プルアップが必要です。

プログラマーを再接続する場合、抵抗を取り外す必要があります。そうしないと、12Vの電力が供給されます。






作品の結果はビデオで見ることができます。







そのため、マイクロコントローラーには最も簡単なデバイス、LEDフラッシャーがあります。



次に、残りのすべての周辺機器の使用方法を学習する必要がありますが、その詳細については次の記事で説明します。



All Articles