ArduinoはIDEでスケッチをコンパイル(ベリファイ)して、TanukinoなどのArduino互換ボードへUSB経由のシリアル通信で書き込んで実行します。
あまり知られていないのですが、コンパイルするとHEXファイルが生成されます。
アップロードすると、このHEXファイルをAVRに書き込まれているブートローダーが受信して、フラッシュメモリに書き込み、実行されます。
ここで、HEXファイルをAVRライタで直接AVRに書き込むとどうなるでしょう?
なんということでしょう。ブートローダー無しでそのまま動いてしまいます。
つまりArduinoの開発環境で、Arduinoのブートローダーが書き込まれていない素のAVRで動作するアプリが作れるのです。
試しに、4x4x4LedCubeのHEXファイルを書き込んでみたところ、無事動作しました。
さすがにシリアル通信はブートローダー内のルーチンを利用しているので、動作しないかもしれません。
ブートローダーのソースを見て見ましたが、追いかけ切れません。
試してみるのが手っ取り早いので、やってみました。
AVRライタで書き込んだATMega168をTanukinoに差し込んで電源を入れてみました。
この通り、問題なくシリアル通信ができました。

というわけで、試用版のコンパイラとは異なりサイズ制限の無い開発環境になりました。
Arduinoの標準や寄贈ライブラリや、山のようにある作例スケッチのオマケ付きです。
AVRはATMega8,168,328などに限られますが、秋月価格で200円、230円、250円なので、I/Oポートも沢山あるし、どんどん利用していこうと思います。
7セグ8桁(16I/O)なんて簡単に実現できますね。配線が大変ですが。
シリアル入力の表示器でも作ろうかな。きっと誰かが作っているでしょうね。
あまり知られていないのですが、コンパイルするとHEXファイルが生成されます。
アップロードすると、このHEXファイルをAVRに書き込まれているブートローダーが受信して、フラッシュメモリに書き込み、実行されます。
ここで、HEXファイルをAVRライタで直接AVRに書き込むとどうなるでしょう?
なんということでしょう。ブートローダー無しでそのまま動いてしまいます。
つまりArduinoの開発環境で、Arduinoのブートローダーが書き込まれていない素のAVRで動作するアプリが作れるのです。
試しに、4x4x4LedCubeのHEXファイルを書き込んでみたところ、無事動作しました。
さすがにシリアル通信はブートローダー内のルーチンを利用しているので、動作しないかもしれません。
ブートローダーのソースを見て見ましたが、追いかけ切れません。
試してみるのが手っ取り早いので、やってみました。
AVRライタで書き込んだATMega168をTanukinoに差し込んで電源を入れてみました。
この通り、問題なくシリアル通信ができました。

というわけで、試用版のコンパイラとは異なりサイズ制限の無い開発環境になりました。
Arduinoの標準や寄贈ライブラリや、山のようにある作例スケッチのオマケ付きです。
AVRはATMega8,168,328などに限られますが、秋月価格で200円、230円、250円なので、I/Oポートも沢山あるし、どんどん利用していこうと思います。
7セグ8桁(16I/O)なんて簡単に実現できますね。配線が大変ですが。
シリアル入力の表示器でも作ろうかな。きっと誰かが作っているでしょうね。
7セグメント+小数点で8つの出力ポートが
必要です。
ダイナミック点灯するので、各桁ごとに1つの
出力ポート必要です。
というわけで8桁だと16のポートが必要です。
Arduinoは20ポートあるので余裕です。
これをシンク(カソード)とします。
桁を仮に8桁(アノード)としますと、
1から8桁として1桁のA以降
1-A,2-B,3-C,4-D,5-E,6-F,7-G,8-dpを
渡りで配線します。
(1本)これを抵抗に通して9pinに繋ぎます。
残ったA,B,C,D,E,F,G,Dpを
それぞれ渡り配線にします。
(8本)A,B,C,D,E,F,G,Dp これを抵抗に通して
1~8pinに繋ぎます。
一方桁は1~8pinに繋ぎます。
セグメントドライブはポート値を0にして
セグメント出力をOUTにします。
(表示しないセグメントはINにしたままです)
桁ドライブはポート値を1にしてOUTにします。
桁とセグメントが合致した場合は、
桁を優先して1にして替わりに
9pinを0にしてOUTにします。
以上を一定時間ごとにスキャンしますと表示できます。
(120Hz以上にするとちらつきにくい、
ちらつきが見えるときはもっと早くして下さい)
これはマキシム方式と言われています。
これですね。目から鱗ですね。
これだとI/O本数が節約できますね。
http://www.maxim-ic.com/images/appnotes/1880/DI217Fig02.gif
デジット側は直結です。
アセンブラのコードはあるのですが、スケッチにはありません。
誰か書いてくれないかなー?
2×N×(N-1)個のLEDを制御できる「GuGaplexing」を発見。
AVR-GCCのソースがあった。
http://ednjapan.rbi-j.com/issue/2009/2/23/2523
これを解凍すると
「led_multiplex_9_common.jal」
「led_multiplex_9.jal」
「16f886_led_multiplex_9.jal」
と言うファイルになって、
ライブラリーと16f648aのソースになります。
http://www.casadeyork.com/jalv2/archive/jalv24m.zip
からコンパイラのソースを持って来ると
コンパイルできますが、
AVRではなくてPICなんです。
何かAVRは難しくて・・
の所を
16f648aにすると換えられたと思います。
以前はPICが多かったのですが、最近はAVRばかりです。
AVRはアセンブラの勉強をしていないので、BASCOMなどがメインでしたが、今後はArduinoでなんとかなりそうです。
ブレッドボードで3本で6LEDから実験してみようと思っています。