1: 2012-08-22 (水) 03:16:40 yuji ソース 現: 2020-12-26 (土) 15:07:42 yuji ソース
Attached file: pins_arduino.h, Attached file: ATmegaBOOT_168.c, Attached file: Makefile.168p, Attached file: avrdude.conf, Deleted an attach file: pins_arduino.h at 2012-08-22 (水) 13:46:06, Deleted an attach file: ATmegaBOOT_168.c at 2018-09-20 (木) 13:27:27, Deleted an attach file: Makefile.168p at 2018-09-20 (木) 13:27:38 at 2021-04-28 (水) 08:36:22, Deleted an attach file: avrdude.conf at 2021-04-28 (水) 12:55:08 at 2022-07-11 (月) 15:09:58, Deleted an attach file: ATmegaBOOT_168P_piramp_16mhz.hex at 2022-07-11 (月) 15:16:42, Deleted an attach file: ATmegaBOOT_168P_piramp_8mhz.hex at 2022-07-11 (月) 15:16:53, Deleted an attach file: usbio_pins_arduino.zip at 2022-10-18 (火) 10:13:25, Deleted an attach file: piramp_pins_arduino.zip at 2022-10-18 (火) 10:14:13, Deleted an attach file: optiboot.zip at 2022-10-27 (木) 09:30:13 at 2022-10-27 (木) 12:39:46, Deleted an attach file: piramp_usbio.zip at 2025-03-07 (金) 15:38:42
Line 1: Line 1:
-*Arduinoって [#f6134257] +* Arduino [#f6134257] 
-Arduino(アルドゥイーノ)は,AVRを搭載した基板,Arduino言語とそれの統合開発環境から構成されるシステムのことらしい。~ +[[Arduino(アルドゥイーノ)>https://www.arduino.cc/]]は,ATMEL社のAVRチップ(ATmega8, ATmega168, ATmega328P,ATmega32u4,ATmega2560など)を搭載したボードと,Arduino言語とそれらを使用して開発するための統合開発環境(IDE)から構成されるシステムのことらしい。
-イタリアの人が,当時入手可能であった他の学生向けのロボット制御用のデバイスよりも,安価なプロトタイピング・システムを製造することを目的にスタートしたようだ。+
-最近まで知らなかったんだけど便利らしいんで,試しに自分の作成した基板で試してみた。+[[イタリアのIDII>https://interactionivrea.org/en/index.asp]]で学んでいたHernando Barragán氏が修士論文のテーマとして,「電子回路のハードウェアを抽象化して,より一般的な人がソフトウェアを開発できるようにすること」を研究していた。実際に研究時に開発したものが後にArduinoというプラットフォームとなったようだ。~ 
 +当時のハードウェアや開発ツールに比べて,できるだけ安価にすることがポイントだったらしい。~ 
 +Hernando Barragán氏の論文は[[ここで>http://people.interactionivrea.org/h.barragan/thesis/thesis_low_res.pdf]]読むことが出来る。 
 + 
 +その後,Hernando Barragán氏の論文アドバイザーだったMassimo Banzi氏が他の4人の人と''かってに''ビジネスとして立ち上げたのがArduinoプロジェクト。~ 
 +Hernando Barragán氏には相談もなく,彼は参加もしていない。よりによって教育者の立場にある者が,生徒の成果を自分のビジネスに利用したということになる。 
 + 
 +ハードウェアの情報は公開されていて,誰でも機能が同じボードを作成することが出来る。実際に[[Arduino>https://www.arduino.cc/]]のオリジナルボード以外にも,多くの互換ボードが市販されている。 
 + 
 +現在では入門用IoT機器の定番として扱われるようになり,世界的に人気になっているみたい。 
 + 
 +最近(2012年)まで知らなかったんだけど便利らしいんで,Arduinoボードのプログラムの開発用ソフトウェアであるArduino IDEを,自作したAVRチップが乗ったボードのプログラム開発に使用できるかどうか試してみた。
**ハードウェア [#h2692f87] **ハードウェア [#h2692f87]
-これは自分で作成したATmega168pが乗った基板を使用する。+[[Arduinoのオフィシャルボード>https://www.arduino.cc/en/hardware]]として販売されているArduinoボードには,後述の[[Arduinoボード・スペック>./#p656e9d4]]のような物がある。
-ポートの使用方法が違うんで,それはソフトウェアで何とかする。+ 
 +ATmega168PA-20AUやATmega328-20AUとFT232BLを実装した自作のボードがあるのだが,Arduinoオフィシャルボードとは,CPU(Arduinoボードでは使われていないATmega168P,ATmega328を使っている)が違っていたり,ポートの使用方法(LEDはPB0など),I/O仕様,コネクタ仕様などが違っている。~ 
 + 
 +Arduino IDEからプログラムをボードのCPUに書き込む時には,ソフトウェア的にはUART経由で書き込む。自作のボードはFTDIのUSB-UARTコンバーターチップを実装しているんで,PCからは仮想COMポートでアクセスする。~ 
 +これはArduinoオリジナルボードと同じ構成になっている。~
**ソフトウェア [#rb6dfdc9] **ソフトウェア [#rb6dfdc9]
-Arduinoの統合開発環境は,クロスプラットフォームで動作するJavaアプリケーションで,エディタ,コンパイラ,基板へのファームウェア転送機能などを含んでいる。+''[[Arduino IDE>https://www.arduino.cc/en/software/#ide]]''はArduinoボード用のクロスプラットフォームで動作する統合開発環境で,エディタ・コンパイラ・ボードへのプログラム転送機能・各種ライブラリ・サンプルプログラムなどを含んでいるALL IN ONEツール。
-実際には,コンパイラは[[AVR-GCC:http://www.nongnu.org/avr-libc/user-manual/index.html]]で,基板へ書き込むのには[[avrdude:http://www.nongnu.org/avrdude/]]が使われている。+ 
 +コンパイラは[[AVR-GCC:http://www.nongnu.org/avr-libc/user-manual/index.html]]で,ボードへプログラムを書き込むツールには[[avrdude:http://www.nongnu.org/avrdude/]]といった,ATMEL AVR開発時に使われる一般的なツールが使われている。~ 
 +
 +プログラミングスタイルはC/C++言語風の構文で,Arduinoのボード向けに最適化されているみたい。~ 
 +ちなみに,Arduinoではプログラムのことを''スケッチ''と呼んでいる。~ 
 + 
 +[[arduino-cli>https://github.com/arduino/arduino-cli]]という,コマンドラインで使用できるツールがいつからかリリースされている。~ 
 +これはArduino IDEの機能のスケッチの構築・コンパイル・アップロード・ライブラリやボードの管理などをコマンドライン環境で行える。~ 
 + 
 +*** Arduino IDEのインストール [#l10a36d2] 
 +[[Arduinoのサイト:https://www.arduino.cc/en/software]]から[[Arduino IDE version1.0.1のWindows版>https://downloads.arduino.cc/arduino-1.0.1-windows.zip]](2012/05/21リリース)をダウンロードしてインストールした。更新を繰り返して今はversion1.8.19を使用している。~ 
 + 
 +09/14/2022にメジャーアップデートとなるArduino IDE 2.0.0がリリースされた。~ 
 +実行環境がそれまでのJavaから[[Electron>https://www.electronjs.org/ja/]]に変更されている。~ 
 + 
 +現在は,[[1系の最終版version1.8.19>https://downloads.arduino.cc/arduino-1.8.19-windows.zip?_gl=1*owp70o*_ga*MjAzMTk1NDIxNS4xNjU2MjkzMDQx*_ga_NEXN8H46L5*MTY1NzUyMTQxNy4zLjEuMTY1NzUyMTc1Ny42MA..]]と[[2系の最新版version2.3.6>https://downloads.arduino.cc/arduino-ide/arduino-ide_2.3.6_Windows_64bit.zip]]のzipファイルがリリースされている。~ 
 + 
 +インストールはダウンロードしたzipファイルを好きなディレクトリに解凍するだけでインストール出来る。~ 
 +ディレクトリの中のarduino.exeをダブルクリックすれば起動出来る。~ 
 +#ref(arduinoide.png,,50%) 
 + 
 +Windows版のArduino IDE 1.0.1では,avr-gccにはWinAVR-20081205((Arduino IDEをインストールする前からWinAVR-20100110を使っているのだが,あまり気にしないことにした。)) 
 +が使われていた。~ 
 + 
 +またArduino IDE 1.8.19では,avr-gccにver7.3.0が使われている。~ 
 + 
 +&shiftnote(); 
 + 
 +*** ボードマネージャーでボード情報ファイルの追加する [#ab3a1e26] 
 +自作ボード用のプログラムを作るために,Arduino IDEで自作のボードを扱えるようにしてみた。~ 
 + 
 +以前は下記のようにファイルを追加・編集作業で対応していたが,現在はボードマネージャーのURLに追加することで,ボードマネージャーを使ってボード情報をインストール出来るようにしている。~ 
 + 
 +まあ,自分以外には使う人はいないが・・・~ 
 + 
 +この方法でボード情報ファイルを追加する場合は,ファイル>環境設定で設定画面を開き,「追加のボードマネージャのURL」のところに,~ 
 + https://github.com/yueno0730/avr-board/releases/download/Release/package_avr-board_index.json 
 +を追加する。~ 
 + 
 +Arduino IDEを再起動してツール>ボード>ボードマネージャーを開くと,そこからInstallボタンを押すと自作ボード用のファイルをインストール出来た。~ 
 + 
 +なので,これ以降のめんどうな作業が必要なくなった ;) 
 + 
 +*** ボードマネージャーを使わないでファイルを追加する場合 [#ff384ae6] 
 +もし,ボードマネージャーを使わないで自作ボードをArduino IDEで使えるようにするには,以下の手順でファイルの編集・追加をする。~ 
 + 
 +Arduino IDEをインストール場所の下にあるディレクトリのいくつかのファイルの編集・追加を行う。~ 
 + <ArduinoIDEインストール>\hardware\arduino\avr 
 +また,以前からArduino IDEをインストールして使用していてバージョンアップをした場合は,~ 
 + %LocalAppData%\Arduino15\packages\arduino\hardware\avr\1.8.5(1.8.6)\ 
 +このディレクトリにあるファイルやディレクトリを編集・追加する必要がある。ここはキャッシュとして使われていて,こちらが優先して使用されるようだ。~ 
 + 
 +- ''boards.txt''の編集~ 
 +''hardware\arduino\boards.txt''のmenu.cpu=Processorの行の下あたり(バージョン1.0.1だと先頭)に以下を追加した。~ 
 +#code(text,nonumber){{ 
 +############################################################## 
 + 
 +piramp8.name=Yuji's AVR Board(8MHz) 
 + 
 +piramp8.vid.0=0x0403 
 +piramp8.pid.0=0x6001 
 + 
 +piramp8.upload.tool=avrdude 
 +piramp8.upload.protocol=avrdude 
 +piramp8.upload.maximum_size=14336 
 +#piramp8.upload.maximum_size=15872 
 +piramp8.upload.maximum_data_size=1024 
 +piramp8.upload.speed=19200 
 +#piramp8.upload.speed=57600 
 + 
 +piramp8.bootloader.low_fuses=0xc2 
 +piramp8.bootloader.high_fuses=0xdf 
 +piramp8.bootloader.extended_fuses=0xf8 
 +#piramp8.bootloader.extended_fuses=0xfc 
 +piramp8.bootloader.file=atmega/ATmegaBOOT_168P_piramp_8mhz.hex 
 +#piramp8.bootloader.file=optiboot/optiboot_piramp_8mhz.hex 
 +piramp8.bootloader.unlock_bits=0x3F 
 +piramp8.bootloader.lock_bits=0x2F 
 + 
 +piramp8.build.mcu=atmega168p 
 +piramp8.build.f_cpu=8000000L 
 +piramp8.build.board=AVR_PIRAMP8 
 +piramp8.build.core=arduino 
 +piramp8.build.variant=piramp 
 + 
 +############################################################## 
 + 
 +piramp16.name=Yuji's AVR Board(16MHz) 
 + 
 +piramp16.vid.0=0x0403 
 +piramp16.pid.0=0x6001 
 + 
 +piramp16.upload.tool=avrdude 
 +piramp16.upload.protocol=avrdude 
 +piramp16.upload.maximum_size=14336 
 +#piramp16.upload.maximum_size=15872 
 +piramp16.upload.maximum_data_size=1024 
 +piramp16.upload.speed=19200 
 +#piramp16.upload.speed=115200 
 + 
 +piramp16.bootloader.low_fuses=0xcf 
 +piramp16.bootloader.high_fuses=0xdf 
 +piramp16.bootloader.extended_fuses=0xf8 
 +piramp16.bootloader.file=atmega/BOOT_168P_piramp_16mhz.hex 
 +#piramp16.bootloader.file=optiboot/optiboot_piramp_16mhz.hex 
 +piramp16.bootloader.unlock_bits=0x3F 
 +piramp16.bootloader.lock_bits=0x2F 
 + 
 +piramp16.build.mcu=atmega168p 
 +piramp16.build.f_cpu=16000000L 
 +piramp16.build.board=AVR_PIRAMP16 
 +piramp16.build.core=arduino 
 +piramp16.build.variant=piramp 
 + 
 +############################################################## 
 + 
 +usbio8.name=Yuji's USBIO Board(8MHz) 
 + 
 +usbio8.vid.0=0x0403 
 +usbio8.pid.0=0x6001 
 + 
 +usbio8.upload.tool=avrdude 
 +usbio8.upload.protocol=avrdude 
 +usbio8.upload.maximum_size=28672 
 +#usbio8.upload.maximum_size=32256 
 +usbio8.upload.maximum_data_size=2048 
 +usbio8.upload.speed=19200 
 +#usbio8.upload.speed=57600 
 + 
 +usbio8.bootloader.tool=avrdude 
 +usbio8.bootloader.low_fuses=0xc2 
 +usbio8.bootloader.high_fuses=0xd8 
 +#usbio8.bootloader.high_fuses=0xde 
 +usbio8.bootloader.extended_fuses=0xff 
 +usbio8.bootloader.file=atmega/ATmegaBOOT_328_usbio_8mhz.hex 
 +#usbio8.bootloader.file=optiboot/optiboot_usbio_8mhz.hex 
 +usbio8.bootloader.unlock_bits=0x3F 
 +usbio8.bootloader.lock_bits=0x2F 
 + 
 +usbio8.build.mcu=atmega328 
 +usbio8.build.f_cpu=8000000L 
 +usbio8.build.board=AVR_USBIO8 
 +usbio8.build.core=arduino 
 +usbio8.build.variant=usbio 
 + 
 +############################################################## 
 +}} 
 +#でのコメントのところは,後述のoptibootを使う場合それぞれにコメントを入れ替える。~ 
 +- ''programmer.txt''の編集~ 
 +''hardware\arduino\programmers.txt''ファイルの先頭へ以下を追加した。~ 
 +#code(text,nonumber){{ 
 +avrisp2.name=AVR ISP2 old one 
 +avrisp2.communication=serial 
 +avrisp2.protocol=stk500v2 
 + 
 +yujiisp.name=Yuji Ueno's ISP Cable 
 +yujiisp.communication=par 
 +yujiisp.protocol=yuji 
 +}} 
 +この追加はbootloaderを書き込む時に使用するROMライターを指定する時に使われる。~ 
 +手持ちの古いAVR ISP(V2プロトコル版にしてある)やパラレルポートISPケーブル(今のPCじゃ使えない)を使用出来るようにするため。~ 
 +必要な場合,追加しておく。~ 
 +- ''variants''ディレクトリに追加~ 
 +''hardware\arduino\variants\piramp''ディレクトリを作成して,その中へ~ 
 +&ref(piramp_pins_arduino.zip);の中にあるpins_arduino.hをコピーする。~ 
 +同様に,''hardware\arduino\variants\usbio''ディレクトリを作成して,その中へ~ 
 +&ref(usbio_pins_arduino.zip);の中にあるpins_arduino.hをコピーする。~ 
 +これは自作ボードでATmega168P/ATmega328のPB6,PB7やポートの機能違いを吸収するため。~ 
 +- ''avrdude.conf''に追加(バージョン1.0.1のみ)~ 
 +''hardware\tools\avr\etc\avrdude.conf''ファイルに,自作のAVRライター用の定義とCPU定義を追加しておく。~ 
 +Arduino IDE 1.0.1用:&ref(avrdude.conf);~ 
 +Arduino IDE バージョン1.0.1だと,avrdude.confにATmega168P用の定義はあったが,ATmega328用の定義がなかったので追加している。~ 
 +''バージョン1.8.19なんかの新しいバージョン''では,avrdudeはversion6.3になっていてavrdude.confも問題ないのでこの作業は必要ない。~ 
 + 
 +&shiftnote(); 
 + 
 +*** bootloaderについて [#zecfbe10] 
 +Arduinoの直接の機能ではないが,Arduino IDEからプログラム(スケッチ)をボードのFlash ROMに専用AVR Writerを使わず書き込むには,Arduino IDEからスケッチをコンパイルしたオブジェクトをボードに書き込む機能を持った''bootloaderを自作のボードに書き込んでおく必要がある。''~ 
 + 
 +ビルド済みのbootloaderもArduinoのパッケージに含まれているんだけど,ATmega168PやATmega328に対応していない事やオンボードLEDのポートが違うということもあり,同じような機能のbootloader((stk500(avrisp)もどきで,簡単なモニター機能を入れてある))を前から使用していたので,それをそのまま使っている。~ 
 + 
 +''bootloaderをボードのCPUのFlash ROMエリアに書き込むには,AVRISP等の専用AVRライターを使う必要がある''。~ 
 + 
 +bootloaderを書き込んだ後は,シリアルポートからFlash ROMにプログラムを書き込める。(Arduino IDEからも書き込める。)~ 
 +一般的に販売されているArduinoボードは,このようなbootloaderが書き込み済みで販売されている。 
 + 
 +- 自前のbootloaderを使う~ 
 +''hardware\arduino\avr\bootloaders\atmega''ディレクトリに以下のzipファイルを解凍してファイルをコピーする。~ 
 +&ref(piramp_usbio.zip);~ 
 +- optibootを使う~ 
 +こちらのbootloaderはArduinoボードにも採用されている[[optiboot>https://github.com/Optiboot/optiboot]]を,自作ボード用にビルドしたもの。~ 
 +&ref(optiboot.zip);~ 
 +サイズが512byteに収まっているので,ユーザープログラムの最大サイズが大きくなる利点がある。~ 
 + 
 +bootloaderを書き込んだら[[bootloaderエリアをロックビットを使ってプロテクトしておく>/開発/AVR/bootloaderのプロテクト]]。~ 
 + 
 +bootloaderはArduino IDEからも書き込むことが出来る。IDEのツール>マイコンボードで基板を選んで,ツール>書き込み装置で専用Writer(AVR ISP等を選択)を指定して,ツール>ブートローダーを書き込むで,avrdudeを使って書き込むことが出来る。~ 
 + 
 +*** 注意点 [#s3b90aa1] 
 +スケッチを書き込む時はボードをリセットしbootloaderを立ち上げる必要がある。~ 
 + 
 +この目的のために市販されているArduinoボードは,USB-UARTコンバーターのDTR信号とCPUのResetピン間に0.1uFのコンデンサーを実装して,DTR信号でCPUのリセットを行えるようなハードウェアになっている。~ 
 + 
 +''自作のボードにはリセット・スイッチもこのような回路も無いため,6pin ISPコネクタのRST端子とGNDをショートさせて手動でリセットさせる。''~ 
 +数秒後にユーザープログラムが立ち上がるまでにArduino IDEからプログラムを書き込む必要がある。(この操作が少しめんどくさい。) 
 + 
 +また自作のボードでCPUクロックが8MHzのボードは内蔵RC発振器を使っている。16MHzのボードではX'talを搭載している。~ 
 +AVRの内蔵RC発振器の周波数精度は±10%とあまり精度が良くない。このため8MHzのボードではArduino IDEからプログラムをブートローダーを使って書き込む時に,低いbaudrateを使うようにする必要がある。~ 
 + 
 +*** Arduino IDEでblinkプログラムを試して見る [#yc98b968] 
 +自作ターゲットボードをPCのUSBポートに接続する。~ 
 +Arduino IDEを起動して,「ツール>マイコンボード」から自作のボードを選択する。~ 
 +「ツール>シリアルポート」で,ボードのCOMポートを設定する。 
 + 
 +「ファイル>スケッチの例>01.Basics>Blink」を開く。~ 
 +Arduino IDE 1.0.1の場合は,以下のように~ 
 + int led = 13; 
 +  ↓ 
 + int led = LED_BUILTIN; 
 +変更する。 
 + 
 +ツールアイコンの左から2番めにある→を押す。~ 
 +これでソースコードがビルドされボードのユーザープログラム領域に書き込まれる。(この時タイミングよく手動のリセットが必要) 
 + 
 +プログラムが書き込まれた後,しばらくするとボード上のLEDが1秒毎に点滅した。 
 + 
 +これで,自作のボードのプログラム作成にArduino IDEが使えることがわかった。 
 + 
 +* Arduino IDEを使ってみて [#vd1abfce] 
 +Arduino IDEは,ソースコードを編集する機能(エディター)とオブジェクトをターゲット基板に書き込むI/Fが主な機能になっている。~
-プログラミングスタイルは,C言語/C++風の構文で,AVRの基板向けに最適化されているみたい。ちなみに,Arduinoではプログラムのことをスケッチと呼んでいる。+また,Arduino言語と呼ばれているdefineで定義したマクロを使用して,多少プログラムが書きやすくなるように工夫をしている。~
-***Arduino IDEのインストール [#l10a36d2] +さらに多くのユーザーが開発したプログラムをソースコード・ライブラリという形で簡単に利用できることが,Arduino IDEが人気になった大きな理由と思う。~
-[[Arduinoのサイト:http://arduino.cc/en/]]のDounloadから[[Arduino 1.0.1のWindows版:http://arduino.googlecode.com/files/arduino-1.0.1-windows.zip]]をダウンロードする。~ +
-適当なディレクトリで解凍すればセットアップは完了。~ +
-Windows版のArduino 1.0.1はavr-gccにはWinAVR-20081205が使われている。すでにWinAVR-20100110を入れてあるんだけど,気にしないでおく。+
-なぜか,MinGWをインストールしていて,CPLUS_INCLUDE_PATH環境変数を設定しているとArduinoでコンパイルがうまく行かなくなっちゃうので,CPLUS_INCLUDE_PATH環境変数を削除した。+しかし,使い慣れたエディターとAVR-GCCやmakeツールなどを使っても同様にプログラム開発は行えるので,時々Arduino IDEを使うという感じではある。~
-***いくつかのファイルの変更 [#ab3a1e26] +AVRチップメーカーのATMEL社から,以前から純正の統合開発環境である[[AVR Studio>../../AVR/開発環境/AVRstudio]]がリリースされている。現在はATMEL社を買収したMicrochip社から[[Microchip Studio&gt;https://www.microchip.com/en-us/tools-resources/develop/microchip-studio]]としてリリースされている。~
-arduino-1.0.1\hardware\arduino\boards.txtの先頭に以下を追加, +
-&nbsp;##############################################################+
- piramp8.name=Yuji's PIRAMP Board(8MHz)+統合開発環境が好きな場合は,こちらを使うのも良いかも。~
- piramp8.upload.protocol=stk500 +** Arduino IDE 1.8.5でコンパイルエラー [#zaec480d] 
- piramp8.upload.maximum_size=14336 +Arduino IDEのバージョン1.8.5を使っている時,プログラムをコンパイルしてみるとエラーが出て失敗した。
- piramp8.upload.speed=19200+
- piramp8.bootloader.low_fuses=0xc2 +エラー直前の処理が''ctags''だったので,ctagsを単独で動かすと,appendモードについてのエラーが出ていた。 
- piramp8.bootloader.high_fuses=0xdd + ctags: append mode is not compatible with tags to stdout 
- piramp8.bootloader.extended_fuses=0xf8 +%HOME%/.ctagsを確認すると, 
- piramp8.bootloader.path=atmega + --append=yes 
- piramp8.bootloader.file=ATmegaBOOT_168P_piramp_8mhz.hex + --recurse=yes 
- piramp8.bootloader.unlock_bits=0x3F + --langmap=PHP:+.inc 
- piramp8.bootloader.lock_bits=0x0F+ --php-kinds=cfd 
 +になっていた。しょうがないんで, 
 + --append=no 
 + --recurse=yes 
 + --langmap=PHP:+.inc 
 + --php-kinds=cfd 
 +に変更。~ 
 +これで無事コンパイル出来るようになった。
- piramp8.build.mcu=atmega168p +** Arduino言語について [#z226258f]
- piramp8.build.f_cpu=8000000L +
- piramp8.build.core=arduino +
- piramp8.build.variant=piramp+
-&nbsp;##############################################################+[[Arduino言語の日本語リファレンス&gt;http://www.musashinodenpa.com/arduino/ref/]]を参照。
- piramp16.name=Yuji's PIRAMP Board(16MHz)+- setup()
 +setup()は,ボードの電源を入れたときやリセットしたときに,最初に一度だけ実行される。~ 
 +変数やピン端子の設定・初期化や,ライブラリの準備などに使用する。~ 
 +setup()は,省略できない。 
 +- loop()~ 
 +loop()は,実行したいプログラムを書いときます。~ 
 +loopという名前のとおり,この部分は繰り返し実行される。~ 
 +loop()は,省略できない。
- piramp16.upload.protocol=stk500 +*** main()は無いの? [#p7c3956c] 
- piramp16.upload.maximum_size=14336 +''arduino-1.0.1\hardware\arduino\cores\arduino\main.cpp''を覗いてみると, 
- piramp16.upload.speed=19200+ #include <Arduino.h> 
 +  
 + int main(void) 
 + { 
 +  init(); 
 +  
 + #if defined(USBCON) 
 +  USBDevice.attach(); 
 + #endif 
 +  
 +  setup(); 
 +  
 +  for (;;) { 
 +  loop(); 
 +  if (serialEventRun) serialEventRun(); 
 +  } 
 +  
 +  return 0; 
 + } 
 +となっていた。(バージョン1.0.1)~ 
 +なので,setup()とloop()を書き忘れると,エラーとなるわけです。
- piramp16.bootloader.low_fuses=0xcf +それでは,init()はどこに書かれているかというと,''arduino-1.0.1\hardware\cores\arduino\wiring.c''にありました。~ 
- piramp16.bootloader.high_fuses=0xdd + void init() 
- piramp16.bootloader.extended_fuses=0xf8 + 
- piramp16.bootloader.path=atmega +  // this needs to be called before setup() or some functions won't 
- piramp16.bootloader.file=ATmegaBOOT_168P_piramp_16mhz.hex +  // work there 
- piramp16.bootloader.unlock_bits=0x3F +  sei(); 
- piramp16.bootloader.lock_bits=0x0F+  
 +  // on the ATmega168, timer 0 is also used for fast hardware pwm 
 +  // (using phase-correct PWM would mean that timer 0 overflowed half as often 
 +  // resulting in different millis() behavior on the ATmega8 and ATmega168) 
 + #if defined(TCCR0A) && defined(WGM01) 
 +  sbi(TCCR0A, WGM01); 
 +  sbi(TCCR0A, WGM00); 
 + #endif 
 +  
 +  // set timer 0 prescale factor to 64 
 + #if defined(__AVR_ATmega128__) 
 +  // CPU specific: different values for the ATmega128 
 +  sbi(TCCR0, CS02); 
 + #elif defined(TCCR0) && defined(CS01) && defined(CS00) 
 +  // this combination is for the standard atmega8 
 +  sbi(TCCR0, CS01); 
 +  sbi(TCCR0, CS00); 
 + #elif defined(TCCR0B) && defined(CS01) && defined(CS00) 
 +  // this combination is for the standard 168/328/1280/2560 
 +  sbi(TCCR0B, CS01); 
 +  sbi(TCCR0B, CS00); 
 + #elif defined(TCCR0A) && defined(CS01) && defined(CS00) 
 +  // this combination is for the __AVR_ATmega645__ series 
 +  sbi(TCCR0A, CS01); 
 +  sbi(TCCR0A, CS00); 
 + #else 
 +  #error Timer 0 prescale factor 64 not set correctly 
 + #endif 
 +  
 +  // enable timer 0 overflow interrupt 
 + #if defined(TIMSK) && defined(TOIE0) 
 +  sbi(TIMSK, TOIE0); 
 + #elif defined(TIMSK0) && defined(TOIE0) 
 +  sbi(TIMSK0, TOIE0); 
 + #else 
 +  #error Timer 0 overflow interrupt not set correctly 
 + #endif 
 +  
 +  // timers 1 and 2 are used for phase-correct hardware pwm 
 +  // this is better for motors as it ensures an even waveform 
 +  // note, however, that fast pwm mode can achieve a frequency of up 
 +  // 8 MHz (with a 16 MHz clock) at 50% duty cycle 
 +  
 + #if defined(TCCR1B) && defined(CS11) && defined(CS10) 
 +  TCCR1B = 0; 
 +  
 +  // set timer 1 prescale factor to 64 
 +  sbi(TCCR1B, CS11); 
 + #if F_CPU >= 8000000L 
 +  sbi(TCCR1B, CS10); 
 + #endif 
 + #elif defined(TCCR1) && defined(CS11) && defined(CS10) 
 +  sbi(TCCR1, CS11); 
 + #if F_CPU >= 8000000L 
 +  sbi(TCCR1, CS10); 
 + #endif 
 + #endif 
 +  // put timer 1 in 8-bit phase correct pwm mode 
 + #if defined(TCCR1A) && defined(WGM10) 
 +  sbi(TCCR1A, WGM10); 
 + #elif defined(TCCR1) 
 +  #warning this needs to be finished 
 + #endif 
 +  
 +  // set timer 2 prescale factor to 64 
 + #if defined(TCCR2) && defined(CS22) 
 +  sbi(TCCR2, CS22); 
 + #elif defined(TCCR2B) && defined(CS22) 
 +  sbi(TCCR2B, CS22); 
 + #else 
 +  #warning Timer 2 not finished (may not be present on this CPU) 
 + #endif 
 +  
 +  // configure timer 2 for phase correct pwm (8-bit) 
 + #if defined(TCCR2) && defined(WGM20) 
 +  sbi(TCCR2, WGM20); 
 + #elif defined(TCCR2A) && defined(WGM20) 
 +  sbi(TCCR2A, WGM20); 
 + #else 
 +  #warning Timer 2 not finished (may not be present on this CPU) 
 + #endif 
 +  
 + #if defined(TCCR3B) && defined(CS31) && defined(WGM30) 
 +  sbi(TCCR3B, CS31); // set timer 3 prescale factor to 64 
 +  sbi(TCCR3B, CS30); 
 +  sbi(TCCR3A, WGM30); // put timer 3 in 8-bit phase correct pwm mode 
 + #endif 
 +  
 + #if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D) /* beginning of timer4 block for 32U4 and similar */ 
 +  sbi(TCCR4B, CS42); // set timer4 prescale factor to 64 
 +  sbi(TCCR4B, CS41); 
 +  sbi(TCCR4B, CS40); 
 +  sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequency-correct PWM mode 
 +  sbi(TCCR4A, PWM4A); // enable PWM mode for comparator OCR4A 
 +  sbi(TCCR4C, PWM4D); // enable PWM mode for comparator OCR4D 
 + #else /* beginning of timer4 block for ATMEGA1280 and ATMEGA2560 */ 
 + #if defined(TCCR4B) && defined(CS41) && defined(WGM40) 
 +  sbi(TCCR4B, CS41); // set timer 4 prescale factor to 64 
 +  sbi(TCCR4B, CS40); 
 +  sbi(TCCR4A, WGM40); // put timer 4 in 8-bit phase correct pwm mode 
 + #endif 
 + #endif /* end timer4 block for ATMEGA1280/2560 and similar */ 
 +  
 + #if defined(TCCR5B) && defined(CS51) && defined(WGM50) 
 +  sbi(TCCR5B, CS51); // set timer 5 prescale factor to 64 
 +  sbi(TCCR5B, CS50); 
 +  sbi(TCCR5A, WGM50); // put timer 5 in 8-bit phase correct pwm mode 
 + #endif 
 +  
 + #if defined(ADCSRA) 
 +  // set a2d prescale factor to 128 
 +  // 16 MHz / 128 = 125 KHz, inside the desired 50-200 KHz range
 +  // XXX: this will not work properly for other clock speeds, and 
 +  // this code should use F_CPU to determine the prescale factor. 
 +  sbi(ADCSRA, ADPS2); 
 +  sbi(ADCSRA, ADPS1); 
 +  sbi(ADCSRA, ADPS0); 
 +  
 +  // enable a2d conversions 
 +  sbi(ADCSRA, ADEN); 
 + #endif 
 +  
 +  // the bootloader connects pins 0 and 1 to the USART; disconnect them 
 +  // here so they can be used as normal digital i/o; they will be 
 +  // reconnected in Serial.begin() 
 + #if defined(UCSRB) 
 +  UCSRB = 0; 
 + #elif defined(UCSR0B) 
 +  UCSR0B = 0; 
 + #endif 
 + }
- piramp16.build.mcu=atmega168p 
- piramp16.build.f_cpu=16000000L 
- piramp16.build.core=arduino 
- piramp16.build.variant=piramp 
- ##############################################################+AVRマイコンを使用するプログラムを作成する場合,ポートの入出力方向の設定,クロック速度の設定,割込処理の設定など・・・,AVRマイコンの動作を決定する各種設定を行うためのプログラムが必要になります。~ 
 +sbi()関数は,レジスタの任意のビットを有効にするためのgccで定義されているマクロです。
-arduino-1.0.1\hardware\arduino\programmers.txtへ追加 +Arduino IDEで開発を行う時には,これらをユーザーに負担にならないように,あらかじめ用意してある。
- avrisp.name=AVR ISP2 +
- avrisp.communication=serial +
- avrisp.protocol=stk500v2+
-arduino-1.0.1\hardware\arduino\variants\pirampディレクトリと,その中へpins_arduino.hを作成する。これは,ATmega168pのPB6,PB7を使えるようにするため。+* Arduinoボード・スペック [#p656e9d4] 
 +オフィシャルでリリースされているArduinoボードのスペック。~ 
 +|            |Arduino Uno |Arduino Leonardo |Arduino Due |Arduino MEGA 2560 |Arduino MEGA ADK|h 
 +|外観      |&ref(uno.png,,8%);|&ref(leonardo.png,,14%);|&ref(due.png,,10%);|&ref(mega2560.png,,10%);|&ref(adk.png,,12%);| 
 +|特徴        |人気        |Arduino UNOの廉価版&br;USBはCPU内蔵|動作電圧が3.3V|ATmega2560で,Flash ROM大きい|USBでAndroid端末に接続| 
 +|価格        |2520円      |2100円          |4980円      |4910円            |6420円          | 
 +|CPU        |ATmega328P  |ATmega32u4      |AT91SAM3X8E |ATmega2560        |ATmega2560      | 
 +|Clock      |16MHz|16MHz|84MHz|16MHz|16MHz| 
 +|Flash ROM|32KB&br;(内0.5KBはbootloader用)|32KB&br;(内4KBはbootloader用)|512KB|256KB&br;(内8KBはbootloader用)|256KB&br;(内8KBはbootloader用)| 
 +|SRAM        |2KB|2.5KB|96KB|8KB|8KB| 
 +|EEPROM      |1KB|1KB|-|4KB|4KB| 
 +|デジタルI/Oピン|14本&br;(内6本はPWM出力)|20本&br;(内7本はPWM出力)|54本&br;(内12本はPWM出力)|54本&br;(内15本はPWM出力)|54本&br;(内15本はPWM出力)| 
 +|PWMピンNo  |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11, 13|2〜13|2〜13,44〜46|2〜13,44〜46| 
 +|LEDピンNo  |13          |13              |13          |13                |13              | 
 +|Analog入力  |6本        |12本            |12本        |16本              |16本            | 
 +|Analog出力  |-      |-          |2本          |-            |-          | 
 +|動作電圧    |5V          |5V              |3.3V        |5V                |5V              | 
 +|電源電圧    |7-12V&br:(6-20V) |7-12V&br;(6-20V)      |7-12V&br;(6-20V)  |7-12V&br;(6-20V)|7-12V&br;(6-20V)| 
 +|電源        |USB or 外部電源(2.1mmプラグ)|USB or 外部電源(2.1mmプラグ)|USB or 外部電源(2.1mmプラグ)|USB or 外部電源(2.1mmプラグ)|USB or 外部電源(2.1mmプラグ)| 
 +#br 
 +|            |Arduino Ethernet|Arduino Mini|LilyPad Arduino|LilyPad Arduino USB|Arduino Micro|h 
 +|外観        |&ref(ethernet.png,,12%);|&ref(mini.png,,12%);|&ref(lilypad.png,,10%);|&ref(lilypadusb.png,,8%);|&ref(micro.png,,8%);| 
 +|特徴    |イーサネットポート付&br;USB-シリアルドライバチップ無し|ブレッドボード用&br;USB-シリアルドライバチップ無し|ウェアラブルデバイス用&br;USB-シリアルドライバチップ無し|USB接続|Adafruitと共同開発| 
 +|価格        |5030円          |2995円      |2195円        |2495円            |2260円      | 
 +|CPU        |ATmega328      |ATmega168 or ATmega328|ATmega168V or ATmega328V|ATmega32u4|ATmega32u4| 
 +|Clock      |16MHz          |16MHz      |8MHz          |8MHz              |16MHz        | 
 +|Flash ROM  |32KB&br;(内0.5KBはbootloader用)|32KB&br;(内2KBはbootloader用)|16KB&br;(内2KBはbootloader用)|32KB&br;(内4KBはbootloader用)|32KB&br;(内4KBはbootloader用)| 
 +|SRAM        |2KB            |2KB        |1KB            |2.5KB              |2.5KB        | 
 +|EEPROM      |1KB            |1KB        |512B          |1KB                |1KB          | 
 +|デジタルI/Oピン|14本&br;(内4本はPWM出力)|14本&br;(内6本はPWM出力)|14本&br;(内6本はPWM出力)|9本&br;(内4本はPWM出力)|10本&br;(内7本はPWM出力)| 
 +|PWMピンNo|3, 5, 6, 9, 10, 11 |3, 5, 6, 9 10, 11|3, 5, 6, 9, 10, 11|3, 9 ,10, 11, 13|3, 5, 6, 9, 10, 11, 13| 
 +|LEDピンNo  |9              |13          |13            |13                |13          | 
 +|Analog入力  |6本            |8本        |6本            |4本                |12本        | 
 +|Analog出力  |-          |-      |-        |-            |-      | 
 +|動作電圧    |5V              |5V          |2.7-5.5V      |3.3V              |5V          | 
 +|電源電圧    |7-12V&br;(6-20V)|7-9V        |2.7-5.5V      |3.8-5V            |7-12V&br;(6-20V)| 
 +|電源        |Ethernet (PoE) モジュール or FTDI ケーブル/USBシリアルコネクター|外部電源(5Vピン or 9Vピン)|USB or 外部電源|micro USB or 3.7V LiPoバッテリー|USB or 外部電源| 
 +#br 
 +|            |Arduino Nano    |Arduino Pro Mini |Arduino Pro  |Arduino Fio    |Arduino Esplora|h 
 +|外観        |&ref(nano.png,,8%);|&ref(promini.png,,12%);|&ref(pro.png,,12%);|&ref(fio.png,,12%);|&ref(esplora.png,10%);| 
 +|特徴    |Arduino Duemilanoveと同等で小さい&br;ブレッドボード用|製品組込用&br;USB-シリアルドライバチップ無し|製品組込用&br;USB-シリアルドライバチップ無し|ワイヤレスアプリケーション用&br;SparkFun生産|オンボードセンサー実装| 
 +|価格        |4200円          |1895円          |1995円        |2495円          |-        | 
 +|CPU        |ATmega168 or ATmega328P|ATmega328P|ATmega168 or ATmega328P|ATmega328P|ATmega32u4| 
 +|Clock      |16MHz          |8MHz            |8MHz or 16MHz  |8MHz          |16MHz          | 
 +|Flash ROM  |16KB or 32KB&br;(内4KBはbootloader用)|16KB&br;(内2KBはbootloader用)|16KB or 32KB&br;(内2KBはbootloader用)|32KB&br;(内2KBはbootloader用)|32KB&br;(内4KBはbootloader用)| 
 +|SRAM        |1KB or 2KB      |1KB              |1KB or 2KB    |2KB            |2.5KB          | 
 +|EEPROM      |512B or 1 KB    |512B            |512B or 1KB  |1KB            |1KB            | 
 +|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6本はPWM出力)|14本&br;(内6本はPWM出力)|14本&br;(内6本はPWM出力)|-  | 
 +|PWMピンNo  |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11|-      | 
 +|LEDピンNo  |13              |13              |13            |13              |-        | 
 +|Analog入力  |8本            |6本              |6本          |8本            |-        | 
 +|Analog出力  |-          |-          |-        |-          |-        | 
 +|動作電圧    |5V              |3.3V or 5V      |3.3V or 5V    |3.3V            |5V            | 
 +|電源電圧    |7-12V&br;(6-20V)|3.35-12V or 5-12V|3.35-12V or 5-12V|3.35-12V    |-        | 
 +|電源        |Mini-B USB or 外部電源|FTDIケーブル or ブレイクアウトボード|USB or 外部電源 or JSTコネクター|FTDIケーブル or ブレイクアウトボード|USB| 
 +#br 
 +|            |Arduino R4 Minima|Arduino R4 WiFi |h 
 +|外観        |&ref(Uno_R4_minima.png,,8%);|&ref(Uno_R4_wifi.png,,8%);| 
 +|特徴        |CPUをRenesas製48MHz Arm Cortex-M4にして高速化した。|CPUをRenesas製48MHz Arm Cortex-M4にして高速化し,Wi-Fiモジュール(ESP32)を搭載したUno。| 
 +|価格        |3530円          |5280円          | 
 +|CPU        |R7FA4M1AB3CFM#AA0|R7FA4M1AB3CFM#AA0&br;ESP32-S3-MINI-1-N8| 
 +|Clock      |48MHz            |48MHz            | 
 +|Flash ROM  |256KB            |256KB            | 
 +|SRAM        |32KB            |32KB            | 
 +|EEPROM      |8KB              |8KB              | 
 +|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6本はPWM出力)| 
 +|PWMピンNo  |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11| 
 +|LEDピンNo  |13              |13              | 
 +|Analog入力  |6本(14bit ADC)  |6本(14bit ADC)  | 
 +|Analog出力  |1本              |1本              | 
 +|動作電圧    |5V              |5V/3.3V          | 
 +|電源電圧    |6-24V            |6-24V            | 
 +|電源        |USB-TypeC or 外部電源|USB-TypeC or 外部電源|

  • 開発/AVR/Arduino のバックアップ一覧
  • 開発/AVR/Arduino のバックアップ差分(No. All)
    • 1: 2012-08-22 (水) 03:16:40 yuji
    • 現: 2020-12-26 (土) 15:07:42 yuji
      • Attached file: pins_arduino.h, Attached file: ATmegaBOOT_168.c, Attached file: Makefile.168p, Attached file: avrdude.conf, Deleted an attach file: pins_arduino.h at 2012-08-22 (水) 13:46:06, Deleted an attach file: ATmegaBOOT_168.c at 2018-09-20 (木) 13:27:27, Deleted an attach file: Makefile.168p at 2018-09-20 (木) 13:27:38 at 2021-04-28 (水) 08:36:22, Deleted an attach file: avrdude.conf at 2021-04-28 (水) 12:55:08 at 2022-07-11 (月) 15:09:58, Deleted an attach file: ATmegaBOOT_168P_piramp_16mhz.hex at 2022-07-11 (月) 15:16:42, Deleted an attach file: ATmegaBOOT_168P_piramp_8mhz.hex at 2022-07-11 (月) 15:16:53, Deleted an attach file: usbio_pins_arduino.zip at 2022-10-18 (火) 10:13:25, Deleted an attach file: piramp_pins_arduino.zip at 2022-10-18 (火) 10:14:13, Deleted an attach file: optiboot.zip at 2022-10-27 (木) 09:30:13 at 2022-10-27 (木) 12:39:46, Deleted an attach file: piramp_usbio.zip at 2025-03-07 (金) 15:38:42

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 2311, today: 1, yesterday: 3