上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
開発/AVR/Arduino
をテンプレートにして作成
資料室
開発/AVR/Arduino をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
*Arduinoって
[[Arduino(アルドゥイーノ)>https://www.arduino.cc/]]は,...
[[イタリアのIDII>https://interactionivrea.org/en/index.as...
Hernando Barragán氏の論文は[[ここで>http://people.interac...
その後,Hernando Barragán氏の論文アドバイザーだったMassim...
ハードウェアの情報は公開されていて,誰でも機能が同じボー...
現在では入門用IoT機器の定番として扱われるようになり,世界...
最近まで知らなかったんだけど便利らしいんで,Arduinoの開発...
**ハードウェア
[[Arduinoのオフィシャルボード>https://www.arduino.cc/en/h...
ATmega168PA-20AUとFT232BLを実装した自作のボードがあるんで...
オフィシャルボードとは,CPU(Arduinoでは使われていないATm...
Arduino IDEからプログラムを書き込む時には,ソフトウェア的...
**ソフトウェア
''Arduino IDE''と呼ばれる統合開発環境はクロスプラットフォ...
下回りには,コンパイラが[[AVR-GCC:http://www.nongnu.org/a...
~
プログラミングスタイルはC/C++言語風の構文で,Arduinoのボ...
***Arduino IDEのインストール
[[Arduinoのサイト:https://www.arduino.cc/en/software]]か...
09/14/2022にメジャーアップデートとなるArduino IDE 2.0.0が...
適当なディレクトリに解凍(現在はversion1.8.19を使用してい...
Windows版のArduino 1.0.1では,avr-gccにはWinAVR-20081205...
なぜかMinGWをインストールしていてCPLUS_INCLUDE_PATH環境変...
&shiftnote();
***いくつかのファイルの変更
自作のボードをArduino IDEから使えるように,いくつかのファ...
zipファイルを解凍したディレクトリにある((もし以前からArdu...
########################################################...
piramp8.name=Yuji's AVR Board(8MHz)
piramp8.vid.0=0x0403
piramp8.pid.0=0x6001
piramp8.upload.tool=avrdude
piramp8.upload.protocol=arduino
piramp8.upload.maximum_size=14336
piramp8.upload.speed=19200
piramp8.bootloader.low_fuses=0xc2
piramp8.bootloader.high_fuses=0xdf
piramp8.bootloader.extended_fuses=0xf8
piramp8.bootloader.file=atmega/ATmegaBOOT_168P_piramp_8m...
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=arduino
piramp16.upload.maximum_size=14336
piramp16.upload.speed=19200
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.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=arduino
usbio8.upload.maximum_size=28672
usbio8.upload.maximum_data_size=2048
usbio8.upload.speed=19200
usbio8.bootloader.tool=avrdude
usbio8.bootloader.low_fuses=0xc2
usbio8.bootloader.high_fuses=0xd8
usbio8.bootloader.extended_fuses=0xff
usbio8.bootloader.file=atmega/ATmegaBOOT_328_usbio_8mhz....
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
########################################################...
''hardware\arduino\programmers.txt''ファイルの先頭へ以下...
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を書き込む時に使用するライターを指定する...
''hardware\arduino\variants\piramp''ディレクトリを作成し...
同様に,''hardware\arduino\variants\usbio''ディレクトリを...
これは自作ボードでATmega168P/ATmega328のPB6,PB7やポートの...
''hardware\tools\avr\etc\avrdude.conf''ファイルに,自作の...
Arduino IDE 1.0.1用:&ref(avrdude.conf); ATmega168P用の定...
''バージョン1.8.19なんかの新しいバージョン'':avrdudeはve...
&shiftnote();
***bootloader
Arduinoの直接の機能ではないが,Arduino IDEからプログラム...
ビルド済みのbootloaderもArduinoのパッケージに含まれている...
''bootloaderをボードのCPUのFlash ROMエリアに書き込むには...
一般的に販売されているArduinoボードは,このようなbootload...
''hardware\arduino\avr\bootloaders\atmega''ディレクトリに...
&ref(piramp_usbio.zip);~
こちらは自作のbootloaderではなくArduinoボードにも採用され...
&ref(optiboot.zip);~
サイズが512byteに収まっているので,ユーザープログラムの最...
''既にbootloaderが書き込んである市販ボードではこの作業は...
bootloaderを書き込んだら[[bootloaderエリアをロックビット...
bootloaderはArduino IDEからも書き込むことが出来る。IDEの...
*** 注意点
スケッチを書き込む時はボードをリセットしbootloaderを立ち...
この目的のために市販されているArduinoボードは,USB-シリア...
''自作のボードにはリセット・スイッチもこのような回路も無...
数秒後にユーザープログラムが立ち上がるまでにArduino IDEか...
また自作のボードでCPUクロックが8MHzのボードは内蔵RC発振器...
AVRの内蔵RC発振器の周波数精度は±10%とあまり精度が良くない...
*** Arduino IDEでblinkプログラムを試して見る
まず,ターゲットのボードをPCのUSBポートに接続する。~
Arduino IDEを起動して,「ツール>マイコンボード」からYuji'...
「ツール>シリアルポート」で,ボードのCOMポートを設定する。
「ファイル>スケッチの例>01.Basics>Blink」を開く。~
Arduino IDE 1.0.1の場合は,以下のように~
int led = 13;
↓
int led = LED_BUILTIN;
変更する。
ツールアイコンの左から2番めにある→を押す。~
これでソースコードがビルドされボードのユーザープログラム...
プログラムが書き込まれた後,しばらくするとボード上のLEDが...
これで,自作のボードのプログラム作成にArduino IDEが使える...
* Arduino IDEはどうか?
Arduino IDEは,ソースコードを編集する機能(エディター)と...
また,Arduino言語と呼ばれているdefineで定義したマクロを使...
また,多くのユーザーが開発したプログラムをソースコード・...
しかし,AVR-GCCと使い慣れたエディターやmakeツールでも同様...
また,AVRチップメーカーのATMEL社から純正の統合開発環境のA...
現在はATMEL社を買収したMicrochip社から[[Microchip Studio>...
** Arduino IDE 1.8.5でコンパイルエラー
Arduino IDE 1.8.5でコンパイルしてみると,エラーが出て失敗...
エラー直前の処理が''ctags''だったので,ctagsを単独で動か...
ctags: append mode is not compatible with tags to stdout
%HOME%/.ctagsを確認すると,
--append=yes
--recurse=yes
--langmap=PHP:+.inc
--php-kinds=cfd
になっていた。しょうがないんで,
--append=no
--recurse=yes
--langmap=PHP:+.inc
--php-kinds=cfd
に変更。~
これで無事コンパイル出来るようになった。
** Arduino言語について
[[Arduino言語の日本語リファレンス>http://www.musashinoden...
- setup()~
setup()は,ボードの電源を入れたときやリセットしたときに,...
変数やピン端子の設定・初期化や,ライブラリの準備などに使...
setup()は,省略できない。
- loop()~
loop()は,実行したいプログラムを書いときます。~
loopという名前のとおり,この部分は繰り返し実行される。~
loop()は,省略できない。
*** main()は無いの?
''arduino-1.0.1\hardware\arduino\cores\arduino\main.cpp''...
#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()を書き忘れると,エラーとなるわけで...
それでは,init()はどこに書かれているかというと,''arduino...
void init()
{
// this needs to be called before setup() or some funct...
// work there
sei();
// on the ATmega168, timer 0 is also used for fast hard...
// (using phase-correct PWM would mean that timer 0 ove...
// resulting in different millis() behavior on the ATme...
#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 wave...
// note, however, that fast pwm mode can achieve a freq...
// 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 th...
#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 th...
#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 corr...
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D...
sbi(TCCR4B, CS42); // set timer4 prescale factor to 64
sbi(TCCR4B, CS41);
sbi(TCCR4B, CS40);
sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequ...
sbi(TCCR4A, PWM4A); // enable PWM mode for comparator ...
sbi(TCCR4C, PWM4D); // enable PWM mode for comparator ...
#else /* beginning of timer4 block for ATMEGA1280 and AT...
#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 corr...
#endif
#endif /* end timer4 block for ATMEGA1280/2560 and simil...
#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 corr...
#endif
#if defined(ADCSRA)
// set a2d prescale factor to 128
// 16 MHz / 128 = 125 KHz, inside the desired 50-200 KH...
// XXX: this will not work properly for other clock spe...
// this code should use F_CPU to determine the prescale...
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; d...
// here so they can be used as normal digital i/o; they...
// reconnected in Serial.begin()
#if defined(UCSRB)
UCSRB = 0;
#elif defined(UCSR0B)
UCSR0B = 0;
#endif
}
AVRマイコンを使用するプログラムを作成する場合,ポートの入...
sbi()関数は,レジスタの任意のビットを有効にするためのgcc...
Arduino IDEで開発を行う時には,これらをユーザーに負担にな...
* Arduinoボード・スペック
オフィシャルでリリースされているArduinoボードのスペック。~
| |Arduino Uno |Arduino Leonardo |Arduino Due ...
|外観 |&ref(uno.png,,8%);|&ref(leonardo.png,,14%);|&...
|特徴 |人気 |Arduino UNOの廉価版&br;USBはCP...
|価格 |2520円 |2100円 |4980円 ...
|CPU |ATmega328P |ATmega32u4 |AT91SAM3X8E ...
|Clock |16MHz|16MHz|84MHz|16MHz|16MHz|
|Flash ROM|32KB&br;(内0.5KBはbootloader用)|32KB&br;(内...
|SRAM |2KB|2.5KB|96KB|8KB|8KB|
|EEPROM |1KB|1KB|-|4KB|4KB|
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|20本&br;(内7...
|PWMピンNo |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11, 13|2...
|LEDピンNo |13 |13 |13 ...
|Analog入力 |6本 |12本 |12本 ...
|Analog出力 |- |- |2本 ...
|動作電圧 |5V |5V |3.3V ...
|電源電圧 |7-12V&br:(6-20V) |7-12V&br;(6-20V) |7-...
|電源 |USB or 外部電源(2.1mmプラグ)|USB or 外部...
#br
| |Arduino Ethernet|Arduino Mini|LilyPad Ardui...
|外観 |&ref(ethernet.png,,12%);|&ref(mini.png,,12%...
|特徴 |イーサネットポート付&br;USB-シリアルドライバチ...
|価格 |5030円 |2995円 |2195円 ...
|CPU |ATmega328 |ATmega168 or ATmega328|ATm...
|Clock |16MHz |16MHz |8MHz ...
|Flash ROM |32KB&br;(内0.5KBはbootloader用)|32KB&br;...
|SRAM |2KB |2KB |1KB ...
|EEPROM |1KB |1KB |512B ...
|デジタルI/Oピン|14本&br;(内4本はPWM出力)|14本&br;(内6...
|PWMピンNo|3, 5, 6, 9, 10, 11 |3, 5, 6, 9 10, 11|3, 5, 6,...
|LEDピンNo |9 |13 |13 ...
|Analog入力 |6本 |8本 |6本 ...
|Analog出力 |- |- |- ...
|動作電圧 |5V |5V |2.7-5.5V ...
|電源電圧 |7-12V&br;(6-20V)|7-9V |2.7-5.5V ...
|電源 |Ethernet (PoE) モジュール or FTDI ケーブル/...
#br
| |Arduino Nano |Arduino Pro Mini |Arduino ...
|外観 |&ref(nano.png,,8%);|&ref(promini.png,,12%);...
|特徴 |Arduino Duemilanoveと同等で小さい&br;ブレッドボ...
|価格 |4200円 |1895円 |1995円 ...
|CPU |ATmega168 or ATmega328P|ATmega328P|ATmega16...
|Clock |16MHz |8MHz |8MHz or ...
|Flash ROM |16KB or 32KB&br;(内4KBはbootloader用)|16K...
|SRAM |1KB or 2KB |1KB |1KB or 2...
|EEPROM |512B or 1 KB |512B |512B or ...
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6...
|PWMピンNo |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11|3, 5,...
|LEDピンNo |13 |13 |13 ...
|Analog入力 |8本 |6本 |6本 ...
|Analog出力 |- |- |- ...
|動作電圧 |5V |3.3V or 5V |3.3V or ...
|電源電圧 |7-12V&br;(6-20V)|3.35-12V or 5-12V|3.35-12V...
|電源 |Mini-B USB or 外部電源|FTDIケーブル or ブレ...
#br
| |Arduino R4 Minima|Arduino R4 WiFi |h
|外観 |&ref(Uno_R4_minima.png,,8%);|&ref(Uno_R4_wi...
|特徴 |CPUをRenesas製48MHz Arm Cortex-M4にして高速...
|価格 |3530円 |5280円 |
|CPU |R7FA4M1AB3CFM#AA0|R7FA4M1AB3CFM#AA0&br;ESP3...
|Clock |48MHz |48MHz |
|Flash ROM |256KB |256KB |
|SRAM |32KB |32KB |
|EEPROM |8KB |8KB |
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6...
|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 外部電源|
終了行:
*Arduinoって
[[Arduino(アルドゥイーノ)>https://www.arduino.cc/]]は,...
[[イタリアのIDII>https://interactionivrea.org/en/index.as...
Hernando Barragán氏の論文は[[ここで>http://people.interac...
その後,Hernando Barragán氏の論文アドバイザーだったMassim...
ハードウェアの情報は公開されていて,誰でも機能が同じボー...
現在では入門用IoT機器の定番として扱われるようになり,世界...
最近まで知らなかったんだけど便利らしいんで,Arduinoの開発...
**ハードウェア
[[Arduinoのオフィシャルボード>https://www.arduino.cc/en/h...
ATmega168PA-20AUとFT232BLを実装した自作のボードがあるんで...
オフィシャルボードとは,CPU(Arduinoでは使われていないATm...
Arduino IDEからプログラムを書き込む時には,ソフトウェア的...
**ソフトウェア
''Arduino IDE''と呼ばれる統合開発環境はクロスプラットフォ...
下回りには,コンパイラが[[AVR-GCC:http://www.nongnu.org/a...
~
プログラミングスタイルはC/C++言語風の構文で,Arduinoのボ...
***Arduino IDEのインストール
[[Arduinoのサイト:https://www.arduino.cc/en/software]]か...
09/14/2022にメジャーアップデートとなるArduino IDE 2.0.0が...
適当なディレクトリに解凍(現在はversion1.8.19を使用してい...
Windows版のArduino 1.0.1では,avr-gccにはWinAVR-20081205...
なぜかMinGWをインストールしていてCPLUS_INCLUDE_PATH環境変...
&shiftnote();
***いくつかのファイルの変更
自作のボードをArduino IDEから使えるように,いくつかのファ...
zipファイルを解凍したディレクトリにある((もし以前からArdu...
########################################################...
piramp8.name=Yuji's AVR Board(8MHz)
piramp8.vid.0=0x0403
piramp8.pid.0=0x6001
piramp8.upload.tool=avrdude
piramp8.upload.protocol=arduino
piramp8.upload.maximum_size=14336
piramp8.upload.speed=19200
piramp8.bootloader.low_fuses=0xc2
piramp8.bootloader.high_fuses=0xdf
piramp8.bootloader.extended_fuses=0xf8
piramp8.bootloader.file=atmega/ATmegaBOOT_168P_piramp_8m...
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=arduino
piramp16.upload.maximum_size=14336
piramp16.upload.speed=19200
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.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=arduino
usbio8.upload.maximum_size=28672
usbio8.upload.maximum_data_size=2048
usbio8.upload.speed=19200
usbio8.bootloader.tool=avrdude
usbio8.bootloader.low_fuses=0xc2
usbio8.bootloader.high_fuses=0xd8
usbio8.bootloader.extended_fuses=0xff
usbio8.bootloader.file=atmega/ATmegaBOOT_328_usbio_8mhz....
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
########################################################...
''hardware\arduino\programmers.txt''ファイルの先頭へ以下...
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を書き込む時に使用するライターを指定する...
''hardware\arduino\variants\piramp''ディレクトリを作成し...
同様に,''hardware\arduino\variants\usbio''ディレクトリを...
これは自作ボードでATmega168P/ATmega328のPB6,PB7やポートの...
''hardware\tools\avr\etc\avrdude.conf''ファイルに,自作の...
Arduino IDE 1.0.1用:&ref(avrdude.conf); ATmega168P用の定...
''バージョン1.8.19なんかの新しいバージョン'':avrdudeはve...
&shiftnote();
***bootloader
Arduinoの直接の機能ではないが,Arduino IDEからプログラム...
ビルド済みのbootloaderもArduinoのパッケージに含まれている...
''bootloaderをボードのCPUのFlash ROMエリアに書き込むには...
一般的に販売されているArduinoボードは,このようなbootload...
''hardware\arduino\avr\bootloaders\atmega''ディレクトリに...
&ref(piramp_usbio.zip);~
こちらは自作のbootloaderではなくArduinoボードにも採用され...
&ref(optiboot.zip);~
サイズが512byteに収まっているので,ユーザープログラムの最...
''既にbootloaderが書き込んである市販ボードではこの作業は...
bootloaderを書き込んだら[[bootloaderエリアをロックビット...
bootloaderはArduino IDEからも書き込むことが出来る。IDEの...
*** 注意点
スケッチを書き込む時はボードをリセットしbootloaderを立ち...
この目的のために市販されているArduinoボードは,USB-シリア...
''自作のボードにはリセット・スイッチもこのような回路も無...
数秒後にユーザープログラムが立ち上がるまでにArduino IDEか...
また自作のボードでCPUクロックが8MHzのボードは内蔵RC発振器...
AVRの内蔵RC発振器の周波数精度は±10%とあまり精度が良くない...
*** Arduino IDEでblinkプログラムを試して見る
まず,ターゲットのボードをPCのUSBポートに接続する。~
Arduino IDEを起動して,「ツール>マイコンボード」からYuji'...
「ツール>シリアルポート」で,ボードのCOMポートを設定する。
「ファイル>スケッチの例>01.Basics>Blink」を開く。~
Arduino IDE 1.0.1の場合は,以下のように~
int led = 13;
↓
int led = LED_BUILTIN;
変更する。
ツールアイコンの左から2番めにある→を押す。~
これでソースコードがビルドされボードのユーザープログラム...
プログラムが書き込まれた後,しばらくするとボード上のLEDが...
これで,自作のボードのプログラム作成にArduino IDEが使える...
* Arduino IDEはどうか?
Arduino IDEは,ソースコードを編集する機能(エディター)と...
また,Arduino言語と呼ばれているdefineで定義したマクロを使...
また,多くのユーザーが開発したプログラムをソースコード・...
しかし,AVR-GCCと使い慣れたエディターやmakeツールでも同様...
また,AVRチップメーカーのATMEL社から純正の統合開発環境のA...
現在はATMEL社を買収したMicrochip社から[[Microchip Studio>...
** Arduino IDE 1.8.5でコンパイルエラー
Arduino IDE 1.8.5でコンパイルしてみると,エラーが出て失敗...
エラー直前の処理が''ctags''だったので,ctagsを単独で動か...
ctags: append mode is not compatible with tags to stdout
%HOME%/.ctagsを確認すると,
--append=yes
--recurse=yes
--langmap=PHP:+.inc
--php-kinds=cfd
になっていた。しょうがないんで,
--append=no
--recurse=yes
--langmap=PHP:+.inc
--php-kinds=cfd
に変更。~
これで無事コンパイル出来るようになった。
** Arduino言語について
[[Arduino言語の日本語リファレンス>http://www.musashinoden...
- setup()~
setup()は,ボードの電源を入れたときやリセットしたときに,...
変数やピン端子の設定・初期化や,ライブラリの準備などに使...
setup()は,省略できない。
- loop()~
loop()は,実行したいプログラムを書いときます。~
loopという名前のとおり,この部分は繰り返し実行される。~
loop()は,省略できない。
*** main()は無いの?
''arduino-1.0.1\hardware\arduino\cores\arduino\main.cpp''...
#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()を書き忘れると,エラーとなるわけで...
それでは,init()はどこに書かれているかというと,''arduino...
void init()
{
// this needs to be called before setup() or some funct...
// work there
sei();
// on the ATmega168, timer 0 is also used for fast hard...
// (using phase-correct PWM would mean that timer 0 ove...
// resulting in different millis() behavior on the ATme...
#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 wave...
// note, however, that fast pwm mode can achieve a freq...
// 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 th...
#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 th...
#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 corr...
#endif
#if defined(TCCR4A) && defined(TCCR4B) && defined(TCCR4D...
sbi(TCCR4B, CS42); // set timer4 prescale factor to 64
sbi(TCCR4B, CS41);
sbi(TCCR4B, CS40);
sbi(TCCR4D, WGM40); // put timer 4 in phase- and frequ...
sbi(TCCR4A, PWM4A); // enable PWM mode for comparator ...
sbi(TCCR4C, PWM4D); // enable PWM mode for comparator ...
#else /* beginning of timer4 block for ATMEGA1280 and AT...
#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 corr...
#endif
#endif /* end timer4 block for ATMEGA1280/2560 and simil...
#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 corr...
#endif
#if defined(ADCSRA)
// set a2d prescale factor to 128
// 16 MHz / 128 = 125 KHz, inside the desired 50-200 KH...
// XXX: this will not work properly for other clock spe...
// this code should use F_CPU to determine the prescale...
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; d...
// here so they can be used as normal digital i/o; they...
// reconnected in Serial.begin()
#if defined(UCSRB)
UCSRB = 0;
#elif defined(UCSR0B)
UCSR0B = 0;
#endif
}
AVRマイコンを使用するプログラムを作成する場合,ポートの入...
sbi()関数は,レジスタの任意のビットを有効にするためのgcc...
Arduino IDEで開発を行う時には,これらをユーザーに負担にな...
* Arduinoボード・スペック
オフィシャルでリリースされているArduinoボードのスペック。~
| |Arduino Uno |Arduino Leonardo |Arduino Due ...
|外観 |&ref(uno.png,,8%);|&ref(leonardo.png,,14%);|&...
|特徴 |人気 |Arduino UNOの廉価版&br;USBはCP...
|価格 |2520円 |2100円 |4980円 ...
|CPU |ATmega328P |ATmega32u4 |AT91SAM3X8E ...
|Clock |16MHz|16MHz|84MHz|16MHz|16MHz|
|Flash ROM|32KB&br;(内0.5KBはbootloader用)|32KB&br;(内...
|SRAM |2KB|2.5KB|96KB|8KB|8KB|
|EEPROM |1KB|1KB|-|4KB|4KB|
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|20本&br;(内7...
|PWMピンNo |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11, 13|2...
|LEDピンNo |13 |13 |13 ...
|Analog入力 |6本 |12本 |12本 ...
|Analog出力 |- |- |2本 ...
|動作電圧 |5V |5V |3.3V ...
|電源電圧 |7-12V&br:(6-20V) |7-12V&br;(6-20V) |7-...
|電源 |USB or 外部電源(2.1mmプラグ)|USB or 外部...
#br
| |Arduino Ethernet|Arduino Mini|LilyPad Ardui...
|外観 |&ref(ethernet.png,,12%);|&ref(mini.png,,12%...
|特徴 |イーサネットポート付&br;USB-シリアルドライバチ...
|価格 |5030円 |2995円 |2195円 ...
|CPU |ATmega328 |ATmega168 or ATmega328|ATm...
|Clock |16MHz |16MHz |8MHz ...
|Flash ROM |32KB&br;(内0.5KBはbootloader用)|32KB&br;...
|SRAM |2KB |2KB |1KB ...
|EEPROM |1KB |1KB |512B ...
|デジタルI/Oピン|14本&br;(内4本はPWM出力)|14本&br;(内6...
|PWMピンNo|3, 5, 6, 9, 10, 11 |3, 5, 6, 9 10, 11|3, 5, 6,...
|LEDピンNo |9 |13 |13 ...
|Analog入力 |6本 |8本 |6本 ...
|Analog出力 |- |- |- ...
|動作電圧 |5V |5V |2.7-5.5V ...
|電源電圧 |7-12V&br;(6-20V)|7-9V |2.7-5.5V ...
|電源 |Ethernet (PoE) モジュール or FTDI ケーブル/...
#br
| |Arduino Nano |Arduino Pro Mini |Arduino ...
|外観 |&ref(nano.png,,8%);|&ref(promini.png,,12%);...
|特徴 |Arduino Duemilanoveと同等で小さい&br;ブレッドボ...
|価格 |4200円 |1895円 |1995円 ...
|CPU |ATmega168 or ATmega328P|ATmega328P|ATmega16...
|Clock |16MHz |8MHz |8MHz or ...
|Flash ROM |16KB or 32KB&br;(内4KBはbootloader用)|16K...
|SRAM |1KB or 2KB |1KB |1KB or 2...
|EEPROM |512B or 1 KB |512B |512B or ...
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6...
|PWMピンNo |3, 5, 6, 9, 10, 11|3, 5, 6, 9, 10, 11|3, 5,...
|LEDピンNo |13 |13 |13 ...
|Analog入力 |8本 |6本 |6本 ...
|Analog出力 |- |- |- ...
|動作電圧 |5V |3.3V or 5V |3.3V or ...
|電源電圧 |7-12V&br;(6-20V)|3.35-12V or 5-12V|3.35-12V...
|電源 |Mini-B USB or 外部電源|FTDIケーブル or ブレ...
#br
| |Arduino R4 Minima|Arduino R4 WiFi |h
|外観 |&ref(Uno_R4_minima.png,,8%);|&ref(Uno_R4_wi...
|特徴 |CPUをRenesas製48MHz Arm Cortex-M4にして高速...
|価格 |3530円 |5280円 |
|CPU |R7FA4M1AB3CFM#AA0|R7FA4M1AB3CFM#AA0&br;ESP3...
|Clock |48MHz |48MHz |
|Flash ROM |256KB |256KB |
|SRAM |32KB |32KB |
|EEPROM |8KB |8KB |
|デジタルI/Oピン|14本&br;(内6本はPWM出力)|14本&br;(内6...
|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 外部電源|
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ