Arduinoのコンパイラについて(本家との差分)

今までその構成上全く興味がなく手を出していなかったArduinoですが、ふとした事から使ってみる機会ができたので少々調べつつ使ってみることにしました。と言っても正規の品ではなく、中華の互換ボードです。それ故に素のMCUを半田付けしただけの基板だと思ってブートローダの書き込みとか色々と準備していたのですが、百聞は一見に如かずで使ってみたらブートローダは書き込み済みであっさりと動かす事ができてしまったので肩透かしを食らった感じです。

それはそうと、調べている時に分かった事なのですが、使用しているコンパイラ(avr-gcc)がATMEL(Microchip)から出ている物と異なる事が分かりました。Arduino自体がATmega168/328なので関係ない部分なのですが、以前ATtiny10の為に自前でコンパイルした経緯がある自分にとっては何とも言い難い差分だったので気になりました。本家の方はATtiny10に対応したコンパイラを出しているのです。GCC本家側に反映されていない部分なので仕方がないのかもしれませんが。

あぁ、それと、Arduinoに付属のavrdudeはlibusb0のみに対応です。libusb1には対応していません。まっ、ブートローダを直接書き込もうとしない限り気にしなくても良い部分ではありますが。

今更、Arduinoを使って何をするのかですが……、いきなり飽きてしまいました。どうしてやりましょう。

Arduino版 avr-gcc の対応MCU
Known MCU names:
avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1
avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 at90s1200
attiny11 attiny12 attiny15 attiny28 at90s2313 at90s2323 at90s2333
at90s2343 attiny22 attiny26 at90s4414 at90s4433 at90s4434 at90s8515
at90c8534 at90s8535 ata5272 attiny13 attiny13a attiny2313 attiny2313a
attiny24 attiny24a attiny4313 attiny44 attiny44a attiny84 attiny84a
attiny25 attiny45 attiny85 attiny261 attiny261a attiny461 attiny461a
attiny861 attiny861a attiny87 attiny43u attiny48 attiny88 attiny828
at86rf401 at43usb355 at76c711 atmega103 at43usb320 attiny167 at90usb82
at90usb162 ata5505 atmega8u2 atmega16u2 atmega32u2 attiny1634 atmega8
ata6289 atmega8a ata6285 ata6286 atmega48 atmega48a atmega48pa atmega48p
atmega88 atmega88a atmega88p atmega88pa atmega8515 atmega8535 atmega8hva
at90pwm1 at90pwm2 at90pwm2b at90pwm3 at90pwm3b at90pwm81 at90pwm161
ata5790 ata5795 atmega16 atmega16a atmega161 atmega162 atmega163
atmega164a atmega164p atmega164pa atmega165 atmega165a atmega165p
atmega165pa atmega168 atmega168a atmega168p atmega168pa atmega169
atmega169a atmega169p atmega169pa atmega32 atmega32a atmega323
atmega324a atmega324p atmega324pa atmega325 atmega325a atmega325p
atmega325pa atmega3250 atmega3250a atmega3250p atmega3250pa atmega328
atmega328p atmega329 atmega329a atmega329p atmega329pa atmega3290
atmega3290a atmega3290p atmega3290pa atmega406 atmega64rfr2
atmega644rfr2 atmega64 atmega64a atmega640 atmega644 atmega644a
atmega644p atmega644pa atmega645 atmega645a atmega645p atmega649
atmega649a atmega649p atmega6450 atmega6450a atmega6450p atmega6490
atmega6490a atmega6490p atmega64rfr2 atmega644rfr2 atmega16hva
atmega16hva2 atmega16hvb atmega16hvbrevb atmega32hvb atmega32hvbrevb
atmega64hve at90can32 at90can64 at90pwm161 at90pwm216 at90pwm316
atmega32c1 atmega64c1 atmega16m1 atmega32m1 atmega64m1 atmega16u4
atmega32u4 atmega32u6 at90usb646 at90usb647 at90scr100 at94k m3000
atmega128 atmega128a atmega1280 atmega1281 atmega1284 atmega1284p
atmega128rfa1 atmega128rfr2 atmega1284rfr2 at90can128 at90usb1286
at90usb1287 atmega2560 atmega2561 atmega256rfr2 atmega2564rfr2
atxmega16a4 atxmega16a4u atxmega16c4 atxmega16d4 atxmega32a4
atxmega32a4u atxmega32c4 atxmega32d4 atxmega32e5 atxmega16e5 atxmega8e5
atxmega32x1 atxmega64a3 atxmega64a3u atxmega64a4u atxmega64b1
atxmega64b3 atxmega64c3 atxmega64d3 atxmega64d4 atxmega64a1 atxmega64a1u
atxmega128a3 atxmega128a3u atxmega128b1 atxmega128b3 atxmega128c3
atxmega128d3 atxmega128d4 atxmega192a3 atxmega192a3u atxmega192c3
atxmega192d3 atxmega256a3 atxmega256a3u atxmega256a3b atxmega256a3bu
atxmega256c3 atxmega256d3 atxmega384c3 atxmega384d3 atxmega128a1
atxmega128a1u atxmega128a4u



本家の対応MCU
Known MCU names:
avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1
avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny
at90s1200 attiny11 attiny12 attiny15 attiny28 at90s2313 at90s2323
at90s2333 at90s2343 attiny22 attiny26 at90s4414 at90s4433 at90s4434
at90s8515 at90c8534 at90s8535 ata5272 attiny13 attiny13a attiny2313
attiny2313a attiny24 attiny24a attiny4313 attiny44 attiny44a attiny84
attiny84a attiny25 attiny45 attiny85 attiny261 attiny261a attiny461
attiny461a attiny861 attiny861a attiny87 attiny43u attiny48 attiny88
attiny828 at86rf401 at43usb355 at76c711 atmega103 at43usb320 attiny167
at90usb82 at90usb162 ata5505 atmega8u2 atmega16u2 atmega32u2 attiny1634
atmega8 atmega8a ata6285 ata6286 ata6289 atmega48 atmega48a atmega48pa
atmega48p atmega88 atmega88a atmega88p atmega88pa atmega8515 atmega8535
atmega8hva at90pwm1 at90pwm2 at90pwm2b at90pwm3 at90pwm3b at90pwm81
at90pwm161 ata5790 ata5795 atmega16 atmega16a atmega161 atmega162
atmega163 atmega164a atmega164p atmega164pa atmega165 atmega165a
atmega165p atmega165pa atmega168 atmega168a atmega168p atmega168pa
atmega169 atmega169a atmega169p atmega169pa atmega32 atmega32a atmega323
atmega324a atmega324p atmega324pa atmega325 atmega325a atmega325p
atmega325pa atmega3250 atmega3250a atmega3250p atmega3250pa atmega328
atmega328p atmega329 atmega329a atmega329p atmega329pa atmega3290
atmega3290a atmega3290p atmega3290pa atmega406 atmega64rfr2
atmega644rfr2 atmega64 atmega64a atmega640 atmega644 atmega644a
atmega644p atmega644pa atmega645 atmega645a atmega645p atmega649
atmega649a atmega649p atmega6450 atmega6450a atmega6450p atmega6490
atmega6490a atmega6490p atmega64rfr2 atmega644rfr2 atmega16hva
atmega16hva2 atmega16hvb atmega16hvbrevb atmega32hvb atmega32hvbrevb
atmega64hve at90can32 at90can64 at90pwm161 at90pwm216 at90pwm316
atmega32c1 atmega64c1 atmega16m1 atmega32m1 atmega64m1 atmega16u4
atmega32u4 atmega32u6 at90usb646 at90usb647 at90scr100 at94k m3000
atmega128 atmega128a atmega1280 atmega1281 atmega1284 atmega1284p
atmega128rfa1 atmega128rfr2 atmega1284rfr2 at90can128 at90usb1286
at90usb1287 atmega2560 atmega2561 atmega256rfr2 atmega2564rfr2
atxmega16a4 atxmega16a4u atxmega16c4 atxmega16d4 atxmega32a4
atxmega32a4u atxmega32c4 atxmega32d4 atxmega32e5 atxmega16e5 atxmega8e5
atxmega32x1 atxmega64a3 atxmega64a3u atxmega64a4u atxmega64b1
atxmega64b3 atxmega64c3 atxmega64d3 atxmega64d4 atxmega64a1 atxmega64a1u
atxmega128a3 atxmega128a3u atxmega128b1 atxmega128b3 atxmega128c3
atxmega128d3 atxmega128d4 atxmega192a3 atxmega192a3u atxmega192c3
atxmega192d3 atxmega256a3 atxmega256a3u atxmega256a3b atxmega256a3bu
atxmega256c3 atxmega256d3 atxmega384c3 atxmega384d3 atxmega128a1
atxmega128a1u atxmega128a4u attiny4 attiny5 attiny9 attiny10 attiny20
attiny40

スポンサーサイト

ATtiny10環境をそろえる(GCC)

前回はライターでしたが、ソフト面で必要とするコンパイラを準備します。といっても、ATMELから Atmel AVR Toolchain 3.4.1 for Windows というのが出ているので、これをインストールすれば終わりなんですね………。

それじゃ面白くないでしょ!!

Toolchainのページにコンパイル時に使用したソースコードが置いてある事が分かり、自分で作って見る事にしました(基本、GCCにパッチをあてたものなので公開してるんですよね)。可能であれば64bit版を作成したいところですし…。と気軽に考えていたのが間違いでした。コンパイラをコンパイルした事がなかったので、コンパイラのコンパイルに多くの難所が存在する事を知りませんでした。なので、できあいの物をインストーラでインストールする事をおすすめします。しかし、ToolchainはWinAVR時代には機能毎にbinとutilsに分かれていて使いやすかったのですが、今は両方いっしょくたにしてbinに入っているようです。基本機能をcygwinですましている私にとって、余分なものにパスを通すのは気が引けますが。

ここからは avr-gcc と関連するツールについての作成奮闘の追憶です。

AVRは8bit品しか興味がないので、avr32はパスします。avr側のソースコードは、binutils, gcc, avr-libc それと パッチ集、コンパイル(ビルド)用のシェルスクリプトがおいてあります。これをReadmeの通りに実行すればよさそうだけど、シェルスクリプトを読み解く事ができず、どんな方法でコンパイルして何処にインストールされるのか、そもそもコンパイル環境は何なのか読み解く事ができませんでした。とにかくやってみるかと思い、ATMELのサイトからDLしたファイルを使って、シェルスクリプトは使わずに各モジュールのReadmeとconfigureのhelpを参考にいつも通りcygwin上でmingw(i686-w64-mingw32)でコンパイルしてみました。しかし、いきなりコンパイルエラー発生です。ソースコード中の何かに問題がありそうな内容でした。cygwin上のmingwを使ったのがまずかったのかと思い、無難にLinux(Ubuntu)で挑戦してみましたが、やはりエラーをはき出します。msys上でのmingwでも試してみましたが同じ結果。これにはまいりました。

ここまでくると、そもそも置かれていたソースコードを使うのでよかったのか? と疑問が沸いてきました。そこで、パッチはそのまま使うとして、それぞれのベースコードを各サイトから取得してきて、パッチをあててmsysでコンパイルしてみる事にしました。しかし、途中でエラーが出てコンパイル完了せずです。しかたがないので、エラー部分を手動で修正して何とかbinutilsはコンパイル出来ました。次はGCCです。これもベースコードを取得してきてパッチをあててコンパイルしてみました。コンパイルは比較的すんなりと行きそうな雰囲気だったのですが…ここで最大級の問題に直面してしまいました。なんと、msysが "Couldn't commit memory for cygwin heap" というエラーを表示して止まってしまうのです。ググってもググっても最終的な解決策が書いてある所はなく、Window用の avr-gcc のコンパイルを諦めようかと何度も思ってしまいました。因みに、この時点でLinux上ではbinutilsとGCCをコンパイルできています。

このmsys(mingw)を使っているにも関わらず、"cygwin"のヒープが問題と言っている事象は本当に意味不明です。msysの初期バージョンがcygwinで作られていたという話しを何処かで読んだ気もしたので、Web上にあったcygwinの対策(レジストリ値の書き換え)等を行ってみましたが、問題は解決しませんでした。ほとほと参っている時に、すzさんのblogに気になる事が書いてあった気がしてその部分を探し出して見たところ、すzさんも同様の現象におちいり、この部分にかんしては流されて(ギブアップされて?)ました。

Linuxではコンパイル出来ている事、msysを使うとヒープが…と言ってくる事から、やはり原因はmsysにありそうという事で、msys関連を徹底的にググっているうちに "Couldn't commit memory for cygwin heap" 問題に対応したという文章に出会いました。notabs.orgというサイトです。MinGWをコンパイルされているサイトかな? win-build-env-005.7zで対応されてますが、肝心のmsys-1.0.dllはmsys-for-xgcc-build-001.7zというのに入っているのと同じです。気になる部分はいろいろとありますが、試す価値ありと思い、msysのウィンドウを閉じて、今使用しているmsys-1.0.dllをリネームしておき、このmsys-1.0.dllをコピーして再度msysウィンドウを起ち上げました。これといって何も起こらなかったので、コンパイルを再開してみたら、何か良い感じです。結構時間がかかりましたが、GCCのコンパイルが完了してしまいました。どういった改良がされているのか全く分かりませんが、コンパイルするのはgccの方なのでできあがった物には影響は無いだろうと判断し、コンパイル続行です。

今度はavr-libcのコンパイルでしたが、これまた…パッチが足りません。もうこの状況になれてしまった自分がなんだかな~と思いながら対策しようとしたのですが、結構難しいです。何気に今あるパッチのファイル名でググってみると、なんと crossavr-libc なるプロジェクト(?)があり、gitでパッチを取得できるではありませんか。それもATMELには無かったパッチまであります!! 試しに他のパッチもググってみると crossavr-binutils, crossavr-gcc なるものが存在するではありませんか!!! これらをゲットして既存のファイル部分は差分が無かったので、無いファイルを追加して……このパッチにも若干問題があったので修正して全部コンパイルし直してみるとうまく生成できました。試しにWindowsのコンソール(CMD.exe)にmake.exeを実行するにあたって、msysのbinだけにパスを通してATtiny2313用に以前作成していたプロジェクトをコンパイルしたところ、msys環境下以外だとDLLファイルが足りないと言われてしまったのでbinフォルダ内にMinGWのDLLを入れた所、無事コンパイル出来き、更に実機に書き込んでみたところ、無事動きました。MinGWのDLLも何とかしたかったのですが、何回かチャレンジしてダメだったので、これでよしとしました。気が向いたら再チャレンジするかも…。それと、64bit版でのコンパイルも気が向いたら…。

追加・修正を加えたパッチは【物置】に置きました。
また、コンパイルの手順を下記します(テキストをパッチファイルと一緒に入れてもいます)。

$ unzip ./avr-patches.zip

$ wget ftp://ftp.gmplib.org/pub/gmp/gmp-5.1.1.tar.bz2
$ tar jxf ./gmp-5.1.1.tar.bz2
$ cd ./gmp-5.1.1
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.2.tar.gz
$ tar zxf ./mpfr-3.1.2.tar.gz
$ cd ./mpfr-3.1.2
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static --with-gmp=/usr/local/winavr/tool
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
$ tar zxf ./mpc-1.0.1.tar.gz
$ cd ./mpc-1.0.1
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/tool --disable-shared --enable-static --with-gmp=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool
$ make
$ make check
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
$ tar jxf ./binutils-2.22.tar.bz2
$ cd ./binutils-2.22
$ for file in $(find ../avr-patches/binutils/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ mkdir ./build
$ cd ./build
$ ../configure --enable-languages=c --with-mpc=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool --with-gmp=/usr/local/winavr/tool --prefix=/usr/local/winavr/3.4.1 --target=avr
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../


$ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.6.2/gcc-4.6.2.tar.bz2
$ tar jxf ./gcc-4.6.2.tar.bz2
$ cp -r ./gmp-5.1.1 ./gcc-4.6.2/gmp
$ cp -r ./mpfr-3.1.2 ./gcc-4.6.2/mpfr
$ cp -r ./mpc-1.0.1 ./gcc-4.6.2/mpc
$ cd ./gcc-4.6.2
$ for file in $(find ../avr-patches/gcc/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ mkdir ./build
$ cd ./build
$ ../configure --prefix=/usr/local/winavr/3.4.1 --target=avr --program-prefix=avr- --enable-languages=c --with-dwarf2 --enable-doc --disable-shared --disable-libada --disable-libssp --disable-nls --enable-fixed-point --with-gmp=/usr/local/winavr/tool --with-mpc=/usr/local/winavr/tool --with-mpfr=/usr/local/winavr/tool
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.8.0.tar.bz2
$ tar jxf ./avr-libc-1.8.0.tar.bz2
$ cd ./avr-libc-1.8.0/
$ for file in $(find ../avr-patches/avr-libc/ -type f -name "*.patch" | sort); do patch -p0 -i $file; done
$ unset CC
$ ./bootstrap
$ PREFIX=/usr/local/winavr/3.4.1
$ export PREFIX
$ PATH=$PATH:$PREFIX/bin
$ export PATH
$ mkdir ./build
$ cd ./build/
$ ../configure --prefix=/usr/local/winavr/3.4.1 --build=`../config.guess` --host=avr
$ make
$ make install

$ cd ../
$ rm -rf ./build/
$ cd ../

ATtiny10環境をそろえる(USBasp)

今更ですが、ATtiny10を使ってみようかな? と思い、買ってきました。これにともない、ライターも必要となったので(今までのはTDIに対応していません)、ATtiny10に書き込み出来る物の中から、安くてお手軽そうな USBasp + avrdude で組もうと思い、aitendoのAVR-USBasp-Bを買ってきました。

AVR-USBasp-Bのファームウェアは少し古いらしく、TDIでの書き込みに対応していないらしいので、USBaspのサイトから最新(?)のファームウェア(usbasp.2011-05-28.tar.gz 内の usbasp.atmega8.2011-05-28.hex)をDLして来ました。

ファームウェアの書き込みにはAVRライター2号機を使用しました。USBaspはJP3とJP4をショートして書き込みモードにします。書き込みに使用している端子はUSBaspが10ピン、AVRライター2号機が6ピンなので、ブレッドボード用に作ってあったジャンパを使用して繋げ、ChaNさんのavrsp.exe で書き込みました。Readme.txtにヒューズの設定が書いてありました(HFUSE=0xc9 LFUSE=0xef)が、元からこの値だったので書き換えはしていません。

RIMG0469.jpg

その後、USBaspをPCに繋ぎ直してドライバをインストールします。ドライバはどうやらlibusb0を使用しているみたいだったので、zadig.exeを使用してインストールしました。

次に、avrdudeをDLしてこようとUSBaspのサイトからリンクしてあるavrdudeらしきサイトへ飛ぶと、tar.gz形式の圧縮ファイルが置いてありました。解凍して中を見るても実行ファイルらしき物がありません。何かコンパイルしろと言わんばかりのファイルが並んでます。そんな挑発に乗って、ググりもせずにコンパイルしてみました。それも無謀にも64bit版として。最も新しいのは avrdude-5.11svn-20111019.tar.gz でしたが、中途半端な名前が付いていたので、avrdude-5.11.tar.gz を使用する事にしました。

configureをした時にbisonとflexをチェックしていたので、どうやら必要らしいです。なので、cygwinにインストールしておきました。それと、libusb0用のヘッダーとリンクライブラリ、あと、libusb1.0の方も調べてました。自分の環境には両方入ってますが、どっちが必要なのか不明です。

$ ter zxvf ./avrdude-5.11.tar.gz
$ cd ./avrdude-5.11/
$ mkdir ./build
$ cd ./build/
$ ../configure --build=i686-pc-cygwin --host=x86_64-w64-mingw32
$ make

$ x86_64-w64-mingw32-objdump.exe -p ./avrdude.exe | grep dll
DLL Name: libftdi.dll
DLL Name: KERNEL32.dll
DLL Name: msvcrt.dll
DLL Name: msvcrt.dll
5df90 78 __dllonexit
DLL Name: libusb-1.0.dll
DLL Name: libusb0.dll

結構いろいろと必要だったみたいです。自分の環境には入っていたので良いのですが…。取りあえず、exe と同じフォルダにlibftdi.dll, libusb-1.0.dll, libusb0.dllをコピっておきます。

ことある毎に使っているテストボード(ATtiny2313専用)で本当に動くのかテストしてみることにしました。

RIMG0468.jpg

$ ./avrdude.exe -c usbasp -p t2313
avrdude.exe: Warning: cannot open USB device: Function not implemented
avrdude.exe: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

avrdude.exe done. Thank you.

んっ? USBaspを認識してくれてないみたいですね…。怪しいのは libusb-1.0.dll がリンクされていた事。zadig.exe で WinUSBのドライバに切り替えてみて再度挑戦です。

$ ./avrdude.exe -c usbasp -p t2313

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude.exe: Device signature = 0x1e910a

avrdude.exe done. Thank you.

今度はUSBaspを認識して、ATtiny2313から情報を取得してくれたみたいです。しっかし、avrdudeはターゲットを自動認識してくれないんですかね? avrspに慣れている自分にとって、チョッとビックリしました。ま~、これで一先ずUSBaspを使える環境が出来ましたのでよしとしましょう。



作成したavrdude-5.11を物置へ追加しておきました。

遅延SW

かなり訳ありで遅延SWを作る事になった。これはSWを押下してから一定時間たって本来のSWを押下する物。前提として本物のSWは pull-up されている状態でSW押下で GND に接触させる事で Hi/Loを作り出すタイプのSWである事と、つまめる所がある事。後者は…まっ、線出し出来ればOKです。オープンコレクタのトランジスタ(デジトラ)を使っているので、相手の電圧はほぼ関係無しといったところでしょうか。

複数用途を考え、SW押下から数十ms経過後にトランジスタONのパターンと、SW押下時点でトランジスタON→500ms→トランジスタOFF→数十ms→トランジスタON→500ms→トランジスタOFFの2パターンを入れました。あと「数十ms」と書いている所を約10ms間隔で前後できるような仕様です。

作成をさっと済ませたいのと、小さい方が便利なので、今回はAVRを使用しました。ATtiny13Aが手元にあったのでこれ幸いと使用しました。8pinの8bitマイコン。ARM Cortex-M3が載っているFM3とは雲泥の差ですが、チョッとした仕様ならこっちの方が作成は楽です。

当初は手書きだったのだが、blogにアップするということで回路図を清書してみました。

auto_sw_schematic_v100

ブレッドボード上でプログラムのカット&トライを繰り返し、納得のいく動作まで作り込みました。プログラムはこれ以上加える事がないと思うのでこの段階で書き込んだICをそのまま使用して書き込み端子分の基板実装領域を節約する考えです。最悪、書き込みが必要な場合はICソケットを使っているので引っこ抜いてまた書き込めば済むこと。

RIMG0355

RIMG0359

RIMG0357

RIMG0358

RIMG0360

遅延時間は2秒を初期値として±10ms単位で調整可能。調整した時間を直接見る方法なないが、オシロをあてて計測すれば良いだろうといった具合の仕様にしました。

部品を買いに行く時間もなかったので、全てあり合わせで間に合うように作りました。ICもしくはSWの端子を摘むのに苦労しそうだったので、以前購入していたストロベリー・リナックスのマイクロテストクリップを使用する事にしました。この部品が一番高級品(1個660円)です。

作成したソフトを置いておきます。

auto_sw_src_v100.zip

avr-gccのバグではなかったみたいです。

AVRWikiで相談したところ、kkkさんからFuseの設定がおかしいと指摘を頂きました。再度確認してみたら、確かに変な値に設定しています。

[NGケース]
Low: 11001111
High:11-11001
Ext: -----111

この設定ではクリスタル(セラミック振動子)の発振に使う電圧が低電圧の設定になってます。この場合、雑音の影響を受けやすい状態になるみたいです(マニュアルに記載されています)。

以下の様に通常の電圧(全振幅発振器)の設定にすると変な現象(予期しないところに飛んでいた)は一切出なくなりました。幾つかのコードパターンで確認したのでたぶんコレが原因だと思います。

[OKケース]
Low:11000111
High:11-11001
Ext:-----100

Extを変更したのはBOD(低電圧検出)を有効にした為です。

これで当初の回路設計で行ける見込みが付いてきました。
一安心です。
黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ RaspberryPi Linux TRminiWatterPart4 トランジスタ式ミニワッター MPD イーサネットコンバータ OpenOCD buildroot DAC FON2405E FM3ペリフェラル BeagleBoneBlack ODROID-U2 mingw FM3評価ボード library OpenGL FM4 bitbake KiCad 計測 プリアンプ Edison VMware 6P43P ミニワッター 6N6P シングル TL-WR700N 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter