サービスホットライン
6
マイクロコントローラプログラミング
MCUのプログラミングとPCのプログラミングには大きな違いがあります。C言語ベースのMCU開発ツールはますます普及していますが、効率的なプログラムコードを作成し、アセンブリ言語の使用を好む設計者にとって、アセンブリ言語は依然として最も簡潔で効果的なプログラミング言語です。
MCUプログラミングの基本的なフレームワークはほぼ同じと言えるでしょう。一般的には、初期化部分(これはMCUプログラミングとPCプログラミングの最大の違いです)、メインプログラムループ本体、割り込みハンドラの3つの部分に分けられ、それぞれについて以下のように説明します。
1. 初期化:すべてのMCUプログラムの設計において、初期化は最も基本的かつ重要なステップであり、一般的に以下の内容が含まれます。
すべての割り込みをマスクし、スタックポインタを初期化する。初期化処理では、一般的に割り込みが発生しないようにする必要があります。
システムのRAM領域をクリアして、メモリを表示します。必ずしも必要ではない場合もあるが、信頼性と一貫性の観点から、特に予期せぬエラーを防ぐためには、良いプログラミング習慣を身につけることを推奨する。
IOポートの初期化:プロジェクトのアプリケーション要件に従って、該当するIOポートの入出力モードを設定してください。入力ポートについては、プルアップ抵抗またはプルダウン抵抗を設定する必要があります。出力ポートについては、不要なエラーを防ぐために、初期出力レベルを設定する必要があります。
割り込み設定:プロジェクトで使用する必要のあるすべての割り込みソースはオンにし、割り込みのトリガー条件を設定する必要があります。一方、使用しない冗長な割り込みはオフにする必要があります。
他の機能モジュールの初期化:使用する必要のあるMCUのすべての周辺機能モジュールについて、プロジェクトアプリケーションの要件に応じて適切な設定を行う必要があります。例えば、UART通信の場合は、ボーレート、データ長、検証方法、ストップビット長を設定する必要があります。プログラマタイマーの場合は、クロックソース、分周比、リロードデータを設定する必要があります。
パラメータの初期化:MCUのハードウェアとリソースの初期化が完了したら、次のステップはプログラムで使用する変数とデータの初期化です。この部分の初期化は、特定のプロジェクトとプログラム全体の構成に合わせて設計する必要があります。EEPROMを使用してプロジェクトの事前データを保存しているアプリケーションの場合、初期化中に関連データをMCUのRAMにコピーして、プログラムのデータアクセス速度を向上させ、システムの消費電力を削減することをお勧めします(原則として、外部EEPROMにアクセスすると電源の消費電力が増加します)。
2. メインプログラムのループ本体:ほとんどのMCUは長時間連続動作するため、そのメインプログラムは基本的にループ構造で設計されています。複数の動作モードを持つアプリケーションの場合、複数のループ本体が存在し、ステータスフラグによって切り替えられます。メインプログラム本体は、一般的に以下のモジュールで構成されます。
計算手順:計算プログラムは一般的に時間がかかるため、割り込み処理、特に乗算や除算の処理には断固として反対します。
リアルタイム要件が低い、またはまったくないプログラムを処理する。
転送手順を表示:主に外部LEDおよびLCDドライバを使用するアプリケーションを対象としています。
3. 割り込みハンドラ:割り込みプログラムは、外部からの突発的な信号の検出、ボタンの検出と処理、タイミングカウント、LEDディスプレイのスキャンなど、高いリアルタイム性が求められるタスクやイベントを処理するために主に使用されます。
通常、割り込みプログラムはコードをできるだけ簡潔かつ短く保つべきです。リアルタイム処理を必要としない機能については、割り込み処理でトリガーフラグを設定し、メインプログラムが特定の処理を実行します。これは、すべての割り込みにタイムリーに応答する必要がある低消費電力・低速のMCUにとって特に重要です。
4. 異なるタスクボディの配置に関して、異なるMCUは異なる処理方法を採用しています。
例えば、低速・低消費電力のMCU(Fosc=32768Hz)アプリケーションの場合、このようなプロジェクトは携帯機器であり、通常のLCDディスプレイを使用することを考慮すると、キー押下への応答とディスプレイ応答には高いリアルタイム性能が求められるため、一般的にはタイミング割り込みを使用してキー押下アクションとデータ表示を処理します。一方、Fosc>1MHzアプリケーションなどの高速MCUの場合、MCUはこの時点でメインプログラムループ本体を実行するのに十分な時間があるため、対応する割り込みでさまざまなトリガーフラグを設定し、すべてのタスクをメインプログラム本体に配置して実行します。
5. MCUプログラミングにおいて、特に注意すべき点の1つは次のとおりです。
割り込み処理とメインプログラム本体で、同じ変数やデータが同時にアクセスまたは設定されるのを防ぐ必要があります。効果的な防止策としては、そのようなデータの処理をモジュールにまとめて、トリガーフラグを判定することで、データに対する関連操作を実行するかどうかを決定する方法があります。他のプログラム本体(主に割り込み処理)では、データの処理が必要な箇所でのみトリガーフラグを設定します。これにより、データの実行が予測可能かつ一意に行われることが保証されます。
7
エンジニアによるマイクロコントローラプログラミングの概要
1、要約する習慣を身につけましょう。要約は、自分の学習内容をまとめるだけでなく、学習プロセスを復習し、より深く理解することにもつながります。また、同じ間違いを二度と繰り返さないようにするのにも役立ちます。
2、プログラムを作成する前に、まずプロジェクトの内容を十分に理解し、全体像を把握し、大まかな枠組みを策定する必要があります。どのような構成にするか、そして最も合理的な構成は何かを慎重に検討することが非常に重要です。どのモジュールを最初に作成するか、そのモジュールの具体的な手順、各関数の命名規則、他のモジュールとの連携などを分析する必要があります。紙に重要な手順を書き留めておくことをお勧めします。
3、C言語でモジュール型プログラミングを行うには、まず各モジュールを分割し、モジュールごとにプログラミングを行い、実行順序を決定し、その順序に従って実行し、前のモジュールが正常に完了したら次のモジュールを記述する必要があります。ヘッダーファイルについては、モジュールの記述が完了した後にヘッダーファイルを記述します。
4、警告が表示されたら無視しないでください。それはプログラムに何らかの不合理な点があることを意味します。その原因を理解し、解決策を見つける必要があります。原因を探す際は、具体的に調べてください。インターネットでこの分野の情報を検索したり、他の人にアドバイスを求めたりすることができます。例えば、別のプロジェクトのメイン関数がこのプロジェクトに追加されていたり、関数名が重複していたりする場合があります。また、実験的な現象を分析し、段階的に進めていく必要がある場合もあります。ポートを定義する際に、間違ったインターフェースが選択されていた可能性もあります。どうしても解決できない場合は、休憩を取ってじっくり考えるのも良いでしょう。どんなに単純な問題でも、間違いがある可能性があるので注意が必要です。
マイクロコントローラアプリケーションの開発においては、コード使用効率、耐干渉性能、マイクロコントローラの信頼性といった問題が依然として課題となっています。そこで今回は、マイクロコントローラ開発において習得すべき基本的なスキルをいくつかまとめました。
8
マイクロコントローラ開発スキル
1.プログラムのバグを減らす方法
プログラムのバグを減らす方法については、まずシステム運用中に考慮すべき以下の範囲外管理パラメータを検討する必要があります。
-
物理的パラメータ:これらのパラメータは主にシステムの入力パラメータであり、励起パラメータ、取得処理中の動作パラメータ、および処理終了時の結果パラメータが含まれます。
-
リソースパラメータ:これらのパラメータは主に、システム内の回路、デバイス、機能ユニットのリソースであり、メモリ容量、記憶ユニットの長さ、スタッキング深度などが含まれます。
-
アプリケーションパラメータ:これらのアプリケーションパラメータは、マイクロコントローラや機能ユニットの適用条件としてよく現れます。プロセスパラメータ:システム動作中に規則的に変化するパラメータを指します。
2.C言語プログラミングコードの効率を向上させる方法
マイクロコントローラの開発と応用において、マイクロコントローラプログラミングにC言語を使用することは必然的な流れです。C言語でプログラミングする際に最大限の効率性を得るには、使用するCコンパイラに精通しておくことが最善です。まず、各C言語コンパイルに対応するアセンブリ言語ステートメントの行数をテストし、効率性を明確に把握しましょう。今後のプログラミングでは、コンパイル効率が最も高いステートメントを使用します。Cコンパイラはそれぞれ異なるため、コンパイル効率も異なります。組み込みシステム向けの優れたCコンパイラのコード長と実行時間は、同じ機能をアセンブリ言語で記述した場合と比べてわずか5~20%長くなるだけです。
開発期間が短い複雑なプロジェクトでは、C言語を使用できますが、前提条件として、MCUシステムのC言語とCコンパイラに精通している必要があります。Cコンパイルシステムがサポートするデータ型とアルゴリズムに特に注意してください。C言語は最も一般的な高級言語ですが、MCUメーカーによってC言語コンパイルシステムが異なり、特に一部の特殊機能モジュールの動作において違いが生じます。そのため、これらの特徴を理解していないと、デバッグ中に多くの問題が発生し、アセンブリ言語よりも実行効率が低下する可能性があります。
3.マイクロコントローラの耐干渉問題を解決する方法干渉を防ぐ最も効果的な方法は、干渉源を取り除き、干渉経路を遮断することですが、これはしばしば困難であるため、マイクロコントローラの耐干渉能力が十分かどうかを確認するしかありません。ハードウェアシステムの耐干渉能力を向上させる一方で、ソフトウェアによる耐干渉は、その柔軟な設計、ハードウェアリソースの節約、および高い信頼性から、ますます注目を集めています。
マイクロコントローラの干渉で最もよく見られる現象はリセットです。プログラムの暴走に関しては、ソフトウェアトラップやウォッチドッグを用いることで、プログラムをリセット状態に戻すことができます。したがって、マイクロコントローラのソフトウェアが干渉に対抗するために最も重要なことは、リセット状態を適切に処理することです。
一般的に、マイクロコントローラにはリセットの原因を特定するために使用できるフラグレジスタがいくつかあります。さらに、RAMに独自のフラグを埋め込むこともできます。プログラムがリセットされるたびに、これらのフラグを判断することで異なるリセット原因を特定できます。また、異なるフラグに基づいて対応するプログラムに直接ジャンプすることもできます。これにより、プログラムは継続的に実行され、ユーザーはプログラムの使用中にリセットされたことに気づかないようになります。
4.マイクロコントローラシステムの信頼性をテストする方法マイクロコントローラシステムの設計が完了すると、マイクロコントローラシステム製品ごとに異なるテスト項目と方法が存在するが、必ずテストしなければならない項目がいくつかある。
- マイクロコントローラのソフトウェア機能の完全性をテストする
- 電源オン/オフテスト
- 老化テスト
- ESDやEFTなどのテスト
場合によっては、人体使用時に発生する可能性のある損傷をシミュレートすることもできます。例えば、マイクロコントローラシステムの接点ポートを人体や衣服の生地で意図的にこすり、帯電防止性能をテストします。また、高出力の電動ドリルをマイクロコントローラシステムの近くで使用し、電磁干渉に対する耐性をテストします。
要約すると、シングルチップマイクロコンピュータはコンピュータ開発と応用において重要な側面となっている。シングルチップマイクロコンピュータの応用における重要な意義は、従来の制御システム設計の考え方と設計手法を根本的に変革することにある。
従来、アナログ回路やデジタル回路で実現する必要があった機能のほとんどは、マイクロコントローラを用いたソフトウェア方式で実現できるようになった。このようにソフトウェアがハードウェアに取って代わる制御技術は、マイクロ制御技術とも呼ばれ、従来の制御技術における革命と言える。
さらに、開発および応用プロセスにおいては、より幅広い用途に利用できるよう、スキルを習得し、効率性を向上させる必要がある。
9
チップ動作概要
チップ上での動作は主に、チップ内のレジスタに対する操作です。チップ内のレジスタはそれぞれ固有のアドレスをメモリ上にマッピングしており、操作はそのアドレスに対して行われます。チップの動作を理解するには、まずタイミング図を確認し、対応するレジスタを理解し、それらの動作原理を把握し、必要なポート(プログラムで識別可能)を定義し、書き込み操作手順と読み出し操作手順を作成する必要があります。
チップへのデータの書き込み方法、データの読み出し方法、そしてどのポートを通してデータを入力または読み出しするか(これが最も重要な点です)。
バスを介してチップを接続する場合、まずバスのプロトコルを理解する必要があります。I2Cバスに接続されたチップは、主にこのバスを介してチップを制御します。
1、格子内の 1 つの 74hc595 は列選択に使用され、他の 2 つは色選択に使用されます。格子はダイオードの集合に相当します。
ダイオードは、片方の端子に高レベル、もう片方の端子に低レベルが印加された場合にのみ点灯します。ただし、どちらの端子を選択するかによって、点灯する色が異なるだけです。
タイマーの動作モードの選択:上位4ビットでタイマーT1を、下位4ビットでT0を設定します。次に、各モードの最後の2桁で動作モードを設定します。2つのタイマーを設定する場合は、OR(|)を使用するように注意してください。割り込みを使用する場合は、割り込みに入った後にクリアすべきタイマーをクリアするように注意してください。
2、シリアルポートトランシーバー:ボーレートは通常モード2(初期値への自動再読み込み)に設定されます。デバイスによってデータ処理能力が異なるため、ボーレートの設定は主に低速デバイスへの対応と相互通信を目的としています。割り込みフラグビットはソフトウェアでクリアする必要があります。シリアルポート割り込みを設定する際は、送信または受信のどちらで発生した割り込みであっても、割り込み機能に入る可能性があるため、割り込み機能の設定に注意してください。(一般的には、ホストコンピュータまたはスレーブコンピュータとして、機能を設定します。)
割り込みを使用して送信する場合、最初に割り込みに入る方法を考える必要があります。そのため、まず一度送信してから割り込みに入る必要があります。一度に送信できるのは1バイトのみで、次のビットはTIがセットされた後にのみ送信できます。
3、Pcf8591ad変換には4つの入力チャンネルがあります。pcf8591を読み取る際、選択されたチャンネルの電圧が読み取られます。変換されたデータはチップに格納され、その後読み出されます。読み取り時には、まずチップのアドレスを書き込み、次にデバイスのサブアドレス(0x40|チャンネル番号)を書き込み、最後に読み取ったデータを書き込みます。
4、DA変換は、まずデバイスアドレスをチップに書き込み、次にサブアドレス(0x40)を書き込み、最後に変換対象のデジタル値を書き込むという手順で行われます。デバイスアドレスチップの情報について説明します。
5、LCDディスプレイの場合、データが書き込まれて表示されると、その後は更新されずに常に表示されたままになります。変更したい場合は、再度入力するしかありません。
6、ds1302クロックチップの場合、データ読み出し時は8クロック目の立ち下がりエッジで最初のデータが読み出され、データ書き込み時は次の出力の準備が行われます。プログラムの書き込み方法と戻り値の位置に注意してください。
7、Ds1302では、まずレジスタを指定してから、そこにデータを書き込みます。チップデータ上のレジスタはアドレスを示します。(書き込み保護プログラムについてはまだよく理解できていません。常に書き込みが行われているのに、なぜ書き込み保護が有効になっているのでしょうか?)
(前の投稿によると、初期化後にフラグを設定できるとのことです。このフラグがあれば、初期化は不要です。ただし、電源が切れるとMCUのRAMはこのフラグを保存できないため、DS1302のRAMにフラグを保存し、電源投入後にフラグを読み取る必要があります。私も初心者で、最近DS1302を使おうと思っています。これが正しいかどうか分からず、まだ実装していません。もっと詳しく教えてください。)
8、後で忘れてしまう場合に備えて、初期化手順を書き留めておくのが最善です。読み書き時に最下位ビットと最上位ビットのどちらが先に操作されるかに注意を払う必要がある場合もあります。これはタイミング図に基づいて判断できます。
9、赤外線トランシーバーは、受信時に、2つの立ち下がりエッジ間の時間に基づいて、ハイレベルかローレベルかを判断します。プログラムを作成する際は、まずタイマーを使用して時間を測定し、それを保存してから、バイナリに変換します(このプログラムの書き方については、さらに詳しく調べてみてください。非常に参考になります)。
10、ステッピングモーター:主にスイッチング用途に使用されます。ステッピングモーターのトルクは回転速度の増加に伴って減少します。主に工作機械で加工される部品の自動供給に使用されます。また、より高い精度が求められる制御箇所にも使用できます。
ステッピングモーターは、電気パルス信号を角度変位または直線変位に変換するオープンループ制御素子です。過負荷状態でない場合、モーターの速度と停止位置はパルス信号の周波数とパルス数のみに依存し、負荷変動の影響を受けません。ステッピングドライバーがパルス信号を受信すると、ステッピングモーターを「ステップ角」と呼ばれる固定角度で設定された方向に回転させます。回転は固定角度で段階的に行われます。パルス数を制御することで角度変位を制御し、正確な位置決めを実現できます。同時に、パルス周波数を制御することでモーターの回転速度と加速度を制御し、速度制御を実現できます。
11、サーボモーター: (サーボモーター) は、サーボシステム内の機械部品の動作を制御するモーターを指します。モーターを補助する間接伝達装置です。サーボモーターは、速度と位置精度を非常に正確に制御でき、電圧信号をトルクと回転速度に変換して制御対象を駆動できます。サーボモーターのローター速度は入力信号によって制御され、迅速に応答できます。自動制御システムではアクチュエータとして使用され、電気機械時定数が小さく、直線性が高く、始動電圧が低いなどの特性があります。受信した電気信号をモーターシャフト上の角変位または角速度出力に変換できます。DC サーボモーターと AC サーボモーターの 2 つのカテゴリに分けられます。主な特徴は、信号電圧がゼロのときに回転せず、トルクが増加するにつれて回転速度が一定速度で減少することです。DC モーター: 範囲が広く、すべて小型車に搭載されています。
免責事項:この記事は「国際電子商取引情報」からの転載です。この記事は著者の個人的な見解を示すものであり、サッコマイクロおよび業界の見解を示すものではありません。転載および共有のみを目的としており、知的財産権の保護を支持します。転載の際は、出典と著者を明記してください。著作権侵害が疑われる場合は、削除いたしますのでご連絡ください。
会社の電話番号:+86-0755-83044319
ファックス番号:+86-0755-83975897
Eメール:1615456225@qq.com
QQ: 3518641314 李マネージャー
QQ: 332496225 邱マネージャー
住所:深圳市龍華新区民治大道1079号 占濤科技ビルC棟809室




粤公网安备44030002007346号