MicrocontrollerKit`
MicrocontrollerKit`

MicrocontrollerEmbedCode

MicrocontrollerEmbedCode[sys,μc,p]

p を使ってマイクロコントローラ μc に系のモデル sys を埋め込む.

詳細とオプション

  • MicrocontrollerEmbedCodeはマイクロコントローラ指定 μc を使うための sys についてソースコードを生成し, それをコンパイルし,結果の機械コードを μc に埋め込む.
  • MicrocontrollerCodeDataオブジェクトも生成され,それを使ってさまざまな特性を得ることができる.
  • システムモデル sys には離散時間のTransferFunctionModelStateSpaceModelAffineStateSpaceModelNonlinearStateSpaceModel,またはSystemsConnectionsModelが使用できる.
  • マイクロコントローラ μc は以下の主キーを持つ連想として与えられる:
  • "Target"ターゲット名
    "Inputs"入力チャンネル
    "Outputs"出力チャンネル
  • 可能な入出力チャンネル指定:
  • cnametypetype として設定されるチャンネル cname
    cname<|"Type"type|>type として設定されるチャンネル cname
    cname<|"Type"type,s1v1,|>その他の指定
    typecnametype に対して固有
    <|"Type"type,|> または Automatic-><|"Type"type,|>cnametype に対して固有
  • μc のその他の可能なキー:
  • "ADC"A/D変換指定
    "ClockFrequency"マイクロコントローラのシステムクロックの周波数
    "I2CAddress"I2Cスレーブデバイスとして動作する場合のI2Cアドレス
    "Microcontroller"コードを生成する対象であるマイクロコントローラ
    "OperatingVoltage"マイクロコントローラの動作電圧
    "Serial"シリアル通信指定
    "SerialOverUSB"Serial over USB指定
    "SlaveSelect"SPIスレーブデバイスとして動作する場合のスレーブ選択ピン
    "Timer"タイマまたはカウンタの数
  • コードを直接ソースコードに差し込むための μc のキー:
  • "IncludeFiles"インクルードするファイル
    "Definitions"マクロの定義
    "Declarations"関数宣言
    "Utilities"ユーティリティ関数・変数
    "Initializations"プログラムの初期化
    "Loop"各サンプリング時点で実行する
    "PreLoop""Loop"の前に実行する
    "PostLoop""Loop"の後に実行する
    "UntimedLoop"プロセッサが解放されているときに繰り返し実行する
  • プログラミングメカニズム p は連想で指定される.
  • p に使用できるキーには以下のようなものがある:
  • "BaudRate"コードを埋め込むボーレート
    "ConnectionPort"外部プログラマが接続されるポート
    "ExternalProgrammer"使用する外部プログラマ
    "ProgrammerName"使用するプログラマ
    "ProgrammerConfigurationName"使用するプログラマ設定
    "ProgrammerConfigurationInstallation"プログラマ設定ソフトウェアの場所
    "ProgrammerInstallation"プログラマソフトウェアの場所
  • p が文字列の場合,外部プログラマはシリアルポート p に接続されると想定される.
  • MicrocontrollerEmbedCode[sys,μc,p,specs]はその他の指定を与えるのに使用できる.
  • 指定 specs は連想であり,キーには以下が使用できる:
  • "CleanIntermediate"True一時ファイルを削除するかどうか
    "CompileOptions"Automaticコンパイラに渡すオプション
    "CompilerInstallation"Automaticコンパイラソフトウェアの場所
    "CompilerName"Automatic使用するコンパイルコマンド
    "CreateBinary"Automatic機械コードを作成するかどうか
    "I2C"{}外部I2Cデバイス指定
    "IncludeDirectories"{}インクルードパスに加えるディレクトリ
    "Language"Automaticソースコードの言語
    "Libraries"{}実行ファイルの構築に使用するライブラリ
    "SPI"{}外部SPIデバイス指定
    "WorkingDirectory"Automatic一時ファイルが生成されるディレクトリ

例題

すべて開くすべて閉じる

  (1)

パッケージをロードする:

Adafruit Trinket 5V上のLEDを半分の輝度で点灯する:

埋め込まれた機械コードのバイト数:

機械コードを生成するためのコンパイルされたソースコード:

スコープ  (37)

デジタル出力  (2)

13番ピンに接続されたLEDを点灯する:

入力がなく,状態出力が2秒ごとに切り換る系のモデル:

これを使って13番ピンのLEDを点滅させる:

パルス出力  (2)

4秒間の各周期で13番ピンを1秒間点灯する:

全体のサンプリング周期とは異なるようにパルスのサンプリング周期を指定する:

アナログ出力  (5)

13番ピンに接続されたLEDを半分の輝度で点灯する:

異なる輝度レベルで点灯する:

アナログ出力はパルス幅変調のピンでのみ使用できる:

出力が適切にスケールされるように必要に応じて範囲を指定する:

LEDを最大輝度で点灯する:

半分の輝度:

正負の値のアナログ信号には,方向のためのピンがもう一つ必要である:

3番ピンのLEDは半分の輝度で光り,4番ピンのLEDは点灯する:

4番ピンのLEDを消す:

4番ピンのLEDを正の値で点灯する:

4番ピンのLEDを負の値で消灯する:おp

希望の波形生成モードを指定する:

アナログ入力  (3)

「A0」に接続されたポテンショメータの値を読み取り,それを使って3番ピンのLEDの輝度を調整する:

異なる電圧基準を使用する:

「AVCC」ピンかけられた5Vの電圧を使用する:

内部基準電圧を使用する:

AREFピンにピンかけられた3.3Vの電圧を使用する:

ADCの入力クロックがプリスケーラを使用するように指定する:

デジタル入力  (3)

8番ピンのボタンを使って3番ピンのLEDを点滅させる:

論理値を使ってLEDを点灯する:

切り替え回数(10秒間に最大5回を想定)を使ってLEDの輝度を設定する:

立ち上がりエッジの数を使う:

立ち下がりエッジの数を使う:

Lowの数を使う:

シリアル(RS-232)通信  (2)

数値データを送受信するマイクロコントローラを設定する:

Arduino Unoにおいてシリアルピンは固有なので,シリアルタイプを直接与えることもできる:

デバイスへのシリアル接続を開く:

データの読み書きのタスクを設定する:

しばらくしたらタスクを削除し,デバイスを閉じる:

送信した値と受信した値を比較する:

使用するリアルタイムのボーレートを指定する:

SPI (Serial Peripheral Interface)通信  (1)

MAX6675熱電対は,データが2バイトであるSPIセンサである: »

バイトから温度を° Cで得るための変換:

7番ピンをSSピンとし,センサをSPIスレーブデバイスとして指定する:

出力はシリアルチャンネル(RS-232)で送信される:

センサを読み取って結果を送信するコードを埋め込む:

Arduinoへの接続を開く:

データを読み取るためのスケジュールされたタスクを設定する:

しばらくしたらタスクを削除し,デバイスを閉じる:

温度のプロット:

I2C (Inter-Integrated Circuit)通信  (1)

MPU6050センサを使って温度を測定する.データは0x41から始まって2つのレジスタに入る: »

センサのアドレスは0x68で,0x6Bの電源管理レジスタは初期化する必要がある:

受信した2バイトを組み立てる関数:

それを温度Cに変換する系のモデル:

温度が25° Cを超えている場合はHighの値を出力するモデル:

温度を読み取り,HighまたはLowの値を出力するモデル全体:

埋め込まれたコードは,温度が25° Cを超えている場合に番ピンのLEDを点灯する:

外部ライブラリ  (1)

場所が既知である外部ライブラリを使用する:

さまざまな段階で呼び出す必要のあるコードとヘッダファイルを指定する:

ライブラリを使うコードを埋め込む:

系のモデル  (6)

2入力1出力の系を埋め込む:

2入力2出力の系を埋め込む:

シリアルの開始,デリミタ,終了バイト:

マイクロコントローラへの接続を開く:

毎周期,入力信号を1つ送り,2つの出力信号を受信するタスクを設定する:

シリアル接続から受け取る実際の速度値と基準速度値を解釈する関数:

しばらくしたらタスクを削除し,デバイスを閉じる:

出力をプロットする:

状態空間方程式を差分方程式として直接指定する:

系を埋め込む:

単振り子の非線形モデルを埋め込む:

系を離散化する:

系を埋め込む:

単振り子のSystemsConnectionsModelを埋め込む:

均衡値が2.525であるジョイスティックで入力トルクのシミュレーションを行う:

系全体:

系を埋め込む:

ターゲットへのシリアル接続を開く:

データと変数を解釈してデータを保存する関数:

0.01秒ごとに値を読み取るようにスケジュールされたタスクを設定する:

しばらくしたらタスクを削除し,接続を閉じる:

シミュレーション結果:

ビットごとの操作を行うモデルを埋め込む:

ターゲット  (2)

外部20 MHzクロックを使い,15番ピンが出力に設定されたATmega328P_28PDIPマイクロコントローラ:

Arduinoをプログラマとして使用する:

15番ピンに接続されたLEDを点滅させるコードを埋め込む:

工場出荷時設定のATmega168A_28PDIPマイクロコントローラ:

物理的ターゲットがない場合  (1)

ハードウェアが接続されていないと,コードは埋め込めない:

接続ポートがNoneと指定されている場合,コードは埋め込まれない:

外部プログラマ  (1)

usbaspプログラマを使ってマイクロコントローラをプログラムする:

タイマ  (1)

マイクロコントローラが使用するタイマを指定する:

特性  (1)

MicrocontrollerCodeDataオブジェクトから利用できる特性のリストを取得する:

特性の値を抽出する:

シリアル接続に関連するすべての特性の値:

その他の指定  (5)

中間ファイルを保存するディレクトリを作成する:

コードを配備し,中間ファイルを保存する:

中間ファイル:

これらを削除する:

デフォルトでは,中間ファイルは削除される:

ディレクトリを削除する:

コンパイラへのパスを指定する:

コンパイラの名前を指定する:

生成されたソースコードは通常C言語である:

(Arduinoスケッチが使用する)Wiring言語を使用する:

ソースコードを生成するが,コンパイルしたりターゲットに埋め込んだりしない:

一般化と拡張  (1)

式で指定された系:

これと同等の系のモデルの指定:

データオブジェクト:

生成されたコードはどちらの場合でも同じである:

考えられる問題  (2)

離散時間の系のモデルだけが埋め込める:

系を離散化する:

離散時間系を埋め込む:

接続モデルにおいて,すべての部分系のサンプリング周期は同じでなければならない:

一つの系を別の系に合致するようにサンプリングし直す:

すべての部分系が同じサンプリング周期である系を埋め込む:

Wolfram Research (2019), MicrocontrollerEmbedCode, Wolfram言語関数, https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html.

テキスト

Wolfram Research (2019), MicrocontrollerEmbedCode, Wolfram言語関数, https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html.

CMS

Wolfram Language. 2019. "MicrocontrollerEmbedCode." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html.

APA

Wolfram Language. (2019). MicrocontrollerEmbedCode. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html

BibTeX

@misc{reference.wolfram_2024_microcontrollerembedcode, author="Wolfram Research", title="{MicrocontrollerEmbedCode}", year="2019", howpublished="\url{https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_microcontrollerembedcode, organization={Wolfram Research}, title={MicrocontrollerEmbedCode}, year={2019}, url={https://reference.wolfram.com/language/MicrocontrollerKit/ref/MicrocontrollerEmbedCode.html}, note=[Accessed: 22-November-2024 ]}