マイクロコントローラへのプログラムのアップロード
ソースコードが生成され,コンパイルされて機械コードができたら,それをマイクロコントローラにアップロードする必要がある.フラッシュメモリにプログラムを入れるために,マイクロコントローラはプログラミングピンと呼ばれるピンをいくつか用いる.これらのプログラミングピンは外部プログラマと呼ばれるデバイスを通してPCと接続される.プログラマと呼ばれるソフトウェアが外部プログラマを通してマイクロコントローラ上にプログラムをアップロードする.
デフォルト設定を使用する場合は,プログラムをアップロードするようにツールチェーン全体を指定する必要はない.例えば,Arduino Unoについては,外部プログラマと,その延長線上で考えて,ボードそのものが接続される接続ポートを指定すれば十分である.
Needs["MicrocontrollerKit`"]sys = NonlinearStateSpaceModel[{{Which[x > 0, 0, True, 1]}, {x}}, {x}, {}, {Automatic}, Automatic, SamplingPeriod -> 1];MicrocontrollerEmbedCode[sys, <|"Target" -> "ArduinoUno", "Outputs" -> 13 -> "Digital"|>, <|"ConnectionPort" -> "/dev/cu.usbmodem14101"|>]MicrocontrollerEmbedCode[sys, <|"Target" -> "ArduinoUno", "Outputs" -> 13 -> "Digital"|>, <| "ProgrammerName" -> "avrdude", "ExternalProgrammer" -> "arduino", "ConnectionPort" -> "/dev/cu.usbmodem14101"|>]Adafruit Trinketは外部プログラマとしてUSBtiny USBプログラマを使用する.
MicrocontrollerEmbedCode[sys, <|"Target" -> "AdafruitTrinket5V", "Outputs" -> 1 -> "Digital"|>, <|"ExternalProgrammer" -> "usbtiny"|>]スタンドアロンのマイクロコントローラにアップロードするためには,電源が適切に接続されていると同時に,プログラミングピンが外部プログラマに接続されていなければならない.
以下にusbaspプログラマを使ってATmega168をプログラムする接続を示す.
MicrocontrollerEmbedCode[sys, <|"Target" -> "ATmega168A_28PDIP", "Outputs" -> 15 -> "Digital"|>, <|"ExternalProgrammer" -> "usbasp"|>]Arduino Unoは外部プログラマとして使用することもできる.Arduino IDEから「File」▶「Examples」▶「Arduino ISP」▶「Arduino ISP」を選び,それをArduinoにアップロードする.これでArduinoボードはAVRISP (AVR In System Programmer)となる.マイクロコントローラのプログラミングピンを以下に示すようにArduinoのピンに接続すると,ボードがマイクロコントローラにアップロードする準備が整う.
MicrocontrollerEmbedCode[sys, <|"Target" -> "ATmega168A_28PDIP", "Outputs" -> 15 -> "Digital"|>, <|"ExternalProgrammer" -> "avrisp", "ConnectionPort" -> "/dev/cu.usbmodem14101", "BaudRate" -> 19200|>]| "ProgrammerName" | 使用するプログラマ |
| "ProgrammerInstallation" | プログラマソフトウェアの場所 |
| "ProgrammerConfigurationName" | 使用するプログラマ設定 |
| "ProgrammerConfigurationInstallation" | プログラマ設定ソフトウェアの場所 |
| "ExternalProgrammer" | 使用する外部プログラマ |
| "ConnectionPort" | 外部プログラマが接続されるポート |
| "BaudRate" | コードをアップロードするボーレート |
| "f" | プログラマフラグ f |
p = <|"ProgrammerName" -> "avrdude", "ProgrammerInstallation" -> FileNameJoin[{$RootDirectory, "Applications", "Arduino.app", "Contents", "Java", "hardware", "tools", "avr", "bin"}], "ConnectionPort" -> "/dev/cu.usbmodem14101"|>;MicrocontrollerEmbedCode[sys, <|"Target" -> "ArduinoUno", "Outputs" -> 13 -> "Digital"|>, p]lfile = CreateFile[FileNameJoin[{$TemporaryDirectory, "mclog.txt"}]];p = <|"v" -> "", "l" -> lfile, "ConnectionPort" -> "/dev/cu.usbmodem14101"|>;MicrocontrollerEmbedCode[sys, <|"Target" -> "ArduinoUno", "Outputs" -> 13 -> "Digital"|>, p]Pane[Framed[Import[lfile], Background -> ColorData["Atoms", "Sc"]], {550, 250}, Scrollbars -> True]