最初のステップは、選択したマイクロコントローラーのドキュメントをダウンロードすることです。 メーカーのウェブサイトにアクセスして 、 データシートをダウンロードしてください。
最初のページには、MKの主な特徴( ロシア語の説明 )がリストされています。
必要な主なポイント:
- マイクロコントローラーには4 MHzの内部ジェネレーターが含まれていますが、最大20 MHzの周波数の外部クオーツを接続することもできます
- 16フィートのマイクロコントローラをデジタル入力/出力として使用できます
- 2つのアナログコンパレータがあります
- 3つのタイマー
- Ccpモジュール
- USARTモジュール
- 128バイトの不揮発性EEPROM
端子配列:
Vdd-パワー。
Vssは地球です。
これは、MKの作業に最低限必要なものです。
16 MKレッグは引き続き使用可能です。 モジュールで各レッグを使用すると、使用するデジタルポートの最大数が減少することを計算するのは難しくありません。
コンパイラ
以前の記事で書いたように、IDE JALEditを備えたJALコンパイラは最もシンプルで簡単だと考えました。
JALPackをダウンロードしてインストールします。
このパッケージには、必要なすべてのライブラリとその使用例が含まれています。
JALEditを起動します。 マイクロコントローラ用のプログラムの例:16f628a_blink.jalを開き、ソースを損なわないように、すぐに新しいファイル(16f628a_test.jalなど)に保存します。
すべてのコードは4つのブロックに分割できます。
- MKの選択と構成
include 16f628a --
--
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
pragma target MCLR external -- reset externally
--
- 変数、手続き、関数の宣言
alias led is pin_A0
pin_A0_direction = output
- メインサイクルの設定と計算
enable_digital_io() -- \
- 基本アクションMKの無限のサイクル
forever loop
led = on
_usec_delay ( 250000 )
led = off
_usec_delay ( 250000 )
end loop
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
}
- OSC-クロックソース設定
8つの異なる値を取ることができますが、そのうち4つが必要になる場合があります
- INTOSC_NOCLKOUT-内部ジェネレーター(4M Hz)
- HS-外部高周波水晶(8-20 MHz)
- XT =外部クオーツ(200 kHz-4 MHz)
- LP-外部低周波水晶(最大200 kHz)
- WDT-ウォッチドッグタイマー。
このタイマーの主な仕事は、マイクロコントローラーが最後に達したときにマイクロコントローラーを再起動することです。
リブートが発生した場合は、タイムリーにゼロにリセットする必要があります。
したがって、障害が発生した場合、タイマーカウンターはゼロにリセットされなくなり、MKがリセットされます。 便利なこともありますが、現時点では必要ありません。 - PWRTEは次のタイマーです。
有効にすると、電力が目的のレベルまで上昇するまでMKがリセットされます。 - BROWNOUT-電力が通常よりも低下するとMKがリセットされます。
- MCLR-外部リセットMKの可能性のアクティブ化。
この機能をオンにすると、MCLRレッグ(ピン4)に正の電圧がかかるまで、MKは常にカットされます。
MKをリセットするには、ピン4を地面に閉じるボタンを取り付けるだけです。
- LVP-低電圧プログラミング機能の有効化。
有効にすると、1つのデジタル入力がLVPモード(ピン10)に切り替わります。 このレッグに5Vが印加されると、MKはプログラミングモードに入ります。 通常の動作では、MKはこのレッグ(グランドに接続)で0Vを維持する必要があります。
LVPをアクティブにする必要がないため、電圧を上げるプログラマーを使用します。 - CPD-プログラマーによる読み取りからのEEPROMの保護。
- CP-プログラマーによる読み取りからのFLASH(ファームウェア)の保護。
自分の設定を変更します。
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に書き込み、スキームに従ってデバイスを組み立て、すべてが正常に動作することを確認する必要があります。
プログラマー
すべて同じスキーム:
ピン配置を確認します。
- PGD-ピン13
- PGC-ピン12
- MCLR(Vpp)-ピン4
- Vdd-ピン14
- VSS-ピン5
はんだ付け...
はんだ付け不良は、デバイスの動作不能の主な問題の1つです。
私の悪い習慣を繰り返さないでください。ヒンジ取り付けを使用しないでください。
この場合、マウスコネクタに挿入された古いPS / 2マウスのテールが5V電源として使用されました。
コンピューターに接続します。
WinPic800をダウンロードして実行します 。
[設定]-> [ハードウェア]に移動して、プログラマがハングするJDMとポート番号を選択します。
[ ハードウェアテスト]をクリックし、[ デバイスの検出]をクリックします
ファームウェアpic628a_test.hexを開きます
[ 設定 ]タブで、構成ビットが正しく設定されていることを確認できます。必要に応じて、すぐに変更できます。
すべてをプログラムしてから、すべてを検証する
エラーが発生していない場合は、はんだ付けを続けます。
結果
最終スキーム:
プログラマーからは、MCLRの高電圧(12V)のみが干渉します。 プログラマ全体をはんだ付けしないために、1本のワイヤのみをはんだ付けできます...または、プログラマをCOMポートに接続しないでください。 残りのワイヤは干渉しません(接続された電源とグランドははんだ付けを簡単にするだけです)。
MCLRのボタンは自由にはんだ付けできますが、プルアップが必要です。
プログラマーを再接続する場合、抵抗を取り外す必要があります。そうしないと、12Vの電力が供給されます。
作品の結果はビデオで見ることができます。
そのため、マイクロコントローラーには最も簡単なデバイス、LEDフラッシャーがあります。
次に、残りのすべての周辺機器の使用方法を学習する必要がありますが、その詳細については次の記事で説明します。