マイクロコントローラをプログラミングするためのカスタムアプローチ

この記事では、マイクロコントローラー用のプログラムを作成するための非標準的なアプローチについて説明します。 たとえば、「コードロック」プロジェクトを構築します。 マイクロコントローラーのプログラムは、Horizo​​nt Configuratorビジュアル環境で作成されます。



プロジェクトの簡略化された概略図を次の図に示します。 この図では、電源リードは表示されておらず、LEDはアクチュエータとしても使用されています。 ATmega8マイクロコントローラーがマネージャーとして選択されます。



画像








プロジェクトを実装するには、マイクロコントローラーの4つの出力、つまり「ボタンフィールド0-9」からのデータ入力、「コード保存」ボタンからのデータ入力、「ロック」アクチュエーターを制御するための出力、数字「桁」の入力を確認するための出力を使用する必要があります。



コードを入力するために、可変分周係数を持つ分圧器の形で作られたタイプセットフィールド0-9が使用されます。 係数は次のように選択されます。0を押すと、出力は0ボルト、1–0.5、2–1.0、3–1.5、4–2.0、5–2.5、..、9–4.5、およびフリー状態では5ボルトの電圧を生成します。



画像








「ボタンフィールド0〜9」から電位を測定するために、ADCに関連付けられたマイクロコントローラーの出力を使用しました。これは「PINCO」です。 PINCOピンの電圧を測定するために、ADC_ATmega8AブロックとADC PinCOブロックがキャンバスに追加されました。



画像








ADC_ATmega8Aブロックは、マイクロコントローラーに組み込まれたアナログ-デジタルコンバーターのパラメーターを調整します;設定では、マイクロコントローラーの供給電圧に等しい基準電圧の値を示しました。 したがって、0〜5ボルトの範囲の電圧を測定するようにADCを構成しました。 PINCOマイクロコントローラーのピンの電圧値を取得するために、ADC PinCOブロックを使用しました。 PINCOピンの電圧に比例する0-1023の範囲の離散信号がブロックの出力で受信されます。0ボルトは0に対応し、5ボルトは1023に便利です。私たちにとって便利な値にするには、「分割」および「一定」ブロックを使用しました「。



画像








入力範囲0-1023を90で除算すると、範囲0-11が得られます。範囲0-11です。 さらに、「ボタン0」を押すと値0、1-1、..、9〜9に対応し、自由状態(ボタンが押されていない)では値は11になります。回線の定常状態イベントを修正するには、「遅延」ブロックを使用し、ブロック「平等」。



画像








「遅延」ブロックの出力では、前の作業サイクルで「遅延」ブロックの入力にあった値を取得します。 前のサイクルと現在のサイクルの値が等しい場合、ラインの安定状態を修正します。一方、「等価」ブロックの出力には論理1(true)信号があり、それ以外の場合は0(false)です。 「回線の空き状態」の値11を除外するには、ブロック「less」、定数11、および論理ブロック「And」を使用します。



画像








論理ユニットは、ラインが安定状態にあり、除算器の後の値が11未満の場合、論理ANDブロックの出力に存在します。「キーフィールド0-9」から値を入力する許容速度を制限するには、ノイズ耐性を高め、「コード選択」の速度を制限します。 「遅延」ブロックとそれに必要な「ミリ秒カウンター」ブロックを使用します。



画像








「桁入力」信号の最終生成では、立ち上がりエッジを追跡し、この信号から単一の「桁入力」パルスを形成します。 これを行うには、「RTRIG」ブロックを使用します。



画像








回路を読み取って追加の接続線を減らすために、接続線の「遷移」を追加します。 最初の遷移は「入力された数字」で、2番目は「数字入力信号」です。 LEDを制御する出力は「数字が受け入れられます」、私の回路ではPinB6マイクロコントローラーの出力です。



画像








「入力された数字」および「数字入力信号」信号、および個別の数字を保存する「メモリ」ブロックを使用し、最後に入力された数字を保存するロジックを編成します。 私の場合、「メモリ」という4つのブロックを使用しました。これにより、城のセキュリティが4桁で決定されます。



画像








「文字入力信号」が受信されると、ロジックは次のように機能し、値「入力された数字」がブロック「メモリ1」に書き込まれ、順番にブロック「メモリ1」に含まれていた値がブロック「メモリ2」などに書き込まれます ブロック「メモリ1」〜「メモリ2」には、最後に入力された番号が保存されます。 さらに、ブロック「メモリ1」には入力された最後の数字が、ブロック「メモリ2」には最後から2桁などが格納されます。 入力文字の値に「遷移」を追加します。



画像








ロックコードを保存するには、マイクロコントローラーの不揮発性EEPROMメモリを使用します。 各コード桁は、個別のEEPROMセルに保存されます。 この場合、4つのメモリセルが必要です。 コードを保存するEEPROMセルのアドレスを選択します。プロジェクトでは、セル10、11、12、13を選択しました。



画像








EEPROMセルに保存されている値を読み取るには、「EEPROMバイトの読み取り」ブロックを使用します。



画像








その結果、「ボタンフィールド0-9」から入力された数字とEEPROMセルから取得された数字があり、数字の比較を行い、ロックのアクチュエーターの制御信号を形成します。 このタスクでは、「平等」ブロックと「論理AND」ブロックを使用しました。



画像








この段階では、コードロックのロジックは完全に動作しています。残っているのは、ユーザーに必要なロックコードをEEPROMメモリに個別に保存するためにマイクロコントローラを「教える」ことだけです。 このタスクでは、外部の「コード保存」信号を使用し、この信号を使用してEEPROM記録パルスを生成します。このため、PinD6ロジック入力ブロックとRTRIGブロックを使用し、便宜上、対応する遷移を作成します。



画像








EEPROMにデータを書き込むためのロジックを構築します。すべての信号とデータは既に生成済みです。「EEPROMにバイトを書き込む」ブロックを直接使用して、データをEEPROMに書き込みます。



画像








コードロックのロジックについて説明します。プロジェクトの一般的な見方は次のとおりです。



画像








プロジェクトをまとめる:



画像








プロジェクトをビルドした後、サイズが1450バイトの実行可能* .hexファイルを受け取りました。フラッシュメモリサイズが2 kバイトのマイクロコントローラーを使用できると結論付けました。



プロジェクトのテスト:






All Articles