« AVR入門 | トップページ | AVRのためのPIC再入門 »

2006年8月11日 (金)

AVRのためのPIC再入門

PICでAVRライタを作る9

お盆休みに入る前に、ある程度仕事を片付けなければいけない
ので、ちょっとだけ今週は忙しかった。

前回作ったPIC12F683で動くAVRISP互換ライタで、90S1200Aに
書き込む事が出来なかった事が少し悔しかったので、
PIC16F648Aを使ってまたAVRライタを作ってみた。
16F648Aを使ったのは、たまたま余り物があった事と、12F683の
コードを移植すれば簡単に作れるだろうと思ったからだ。

16F648AはSRAMを256バイト積んでいるので、AVRStudioから
128バイト+のメッセージを送られて来ても、受け取る事が出来る
プログラムが書ける。

が、やはりPICなのでSRAMは複数のバンクに分かれているし、
アクセスするためのポインタ周りもかなり貧弱。
それと、12F683は8MHzで駆動する内部クロックを持っていたの
だが、16F648Aの内部クロックは4MHz。処理能力が足りない。
やっぱり簡単にはいかない。

Picavr05  

 

 

 

 

 

発振源は20MHzのセラロックを付けた。あと、I/Oピンが増えた
ので、SPIアクセス表示用にLEDを付けて見た。これで手持ちの
Tiny26, Mega48/88/168, 90S1200 のすべてに書き込む事が
出来る。

ソースとHEXファイル ダウンロード

|

« AVR入門 | トップページ | AVRのためのPIC再入門 »

コメント

はじめまして、senshuです。

16F648AによるAVRISPはシンプルな回路構成で
気に入りました。早速作ってみたいと思います。
(AVRで作ることも可能なのですが、この回路の
方が、ずっと簡単ですね。AVRの導入時はAVRライタ
が無い場合もあるので、このアプローチは貴重です)

投稿: senshu | 2006年8月27日 (日) 08時15分

AVRISP互換ライタの追試報告です。
公開資料を元に、ほぼ同一の基板を作ってみました。

手元にある AVRボードで試しましたが、

S4433, S2313, tiny26Lで使えることを確認しました。
ただ、ISP clock 1/4 関係の警告が出ることが有り
ました。色々使っていると出なくなるのですが、
利用上の注意点などがあれば、アドバイスいただけると
幸いです。

しかし、このライタは今まで作ったライタ中、もっとも
シンプルなものです。これでメーカ純正の開発環境に
統合できるとは感激です。

今後もよろしくお願いいたします。

投稿: senshu | 2006年8月28日 (月) 14時10分

でんし研のTADです、お役に立ててうれしいです。
クロック1/4でアドレスが飛んでいるPICでAVR-ISPを作られているのに驚きです。
MorosanSoftさんの文章は作っている楽しさが伝わってくる感じがいいですね。読むのが楽しいです。
私のホームページはこれから大したネタも無いですがたまには見てくれたなぁと思います。
それでは

投稿: TAD | 2006年8月29日 (火) 00時39分

senshuさんこんにちは。

盆休み明けで少し本業が忙しかったので、コメントに気付く
のが遅れて本当に御免なさい。当ブログ初のコメントです。
公開はしてみたものの、本当に作られる方がいると思っては
いなかったので、とても嬉しいです。

"ISP Mode Error"の件ですが、どの様な状態で起きるか、
その状態がこちらで再現できれば対処方も検討出来るの
ですが、再現性に乏しければ、ISPコネクタ周りの接続の
確認をして下さい(もちろんしているとは思いますが)ぐらい
しか言うことはなく、お力になれず残念です。
あとはご存知とは思いますが、シリアルプログラミングで
ヒューズビットの読み書きが出来ないデバイスでは、
ヒューズタブを開くとエラーが出るという事ぐらいです。

S4433/S2313/tiny26Lの動作報告ありがとうございます。
付属ドキュメントの動作確認AVRに記載させてもらっても
いいでしょうか。

こちらこそ、今後ともよろしくお願い致します。

投稿: Morosan | 2006年8月29日 (火) 01時38分

TAD師匠(すみません勝手に師匠と思っとります。)
MORことMorosanです。

PICで電子工作を始め、AVRに興味を持った頃、師匠の
RS方式を見つけ酷く感動しDUALライタを作成しました。
AVR関係は、先人の皆さんが優れた情報を公開して下さって
いるのが素晴らしいです。

師匠直々のコメントありがとうございます。
もちろん、でんし研は見にいかせて頂いております。

投稿: Morosan | 2006年8月29日 (火) 02時12分

Morosan、コメントをありがとうございます。

動作報告はぜひ載せてください。
なお、警告のダイアログは Fuseのタグで発生した
のかもしれません。私は STK500のユーザなのですが、
使い込んでいない(ちょっと前まではAVR910)ので、
何が正常なのかを十分に理解できていないのです。

今後は 18F2550なども入手性が良くなったので、これを
使えば USB対応のAVRISPの実現も可能になるかな、、
と妄想しています。

AVRの世界は、なんといってもアットホームな感じが
いいですね!

投稿: senshu | 2006年8月29日 (火) 18時06分

私が追試した回路は、一箇所だけ追加部品があった
のを書き忘れていました。

以前、類似の回路でAVR910互換ライタを作成した
時、書き込み後にRS232のコネクタを外し、AVRに
書き込んだプログラムを実行中、AVRライタが誤動作
し、フラッシュの内容が書き換わってしまったことが
ありました。AVRISPではもう少し複雑なやり取りを
必要とするようなので問題は起きにくいとは思いますが、
47kΩとRS232の接続部分に47kΩでプルダウンして
います。回路の開放時の誤動作を避けるためです。
幸い、この抵抗器はちょうど良い場所があるので
ジャンパー線無しで取り付けることができました。

投稿: senshu | 2006年8月29日 (火) 22時19分

このライタを作らせていただきました。とても素晴らしいライタで、感謝しています。Mac OS X上からはまだ使えてないのですが。
しかし、申し訳ないです。「Mac OS X上にAVR-GCC環境を構築する@2006」という記事からトラックバックしたものの、出来たhexを焼いてみたらちゃんと動かなかったので、公開を保留したのです……。(同じソースをWinAVRでコンパイルすると動くのに)動作が確認できたらまたトラックバックしますね。

投稿: moyashi | 2006年9月 9日 (土) 15時45分

moyashiさん、コメントありがとうございます。

このライタは「使う」事より、ライタを「作る」事が
目的で作られたライタなので、大した機能はないので
すが、それでも作って貰えると嬉しいです。

実は、非公開になる前に記事を見させて貰いました。
様々な情報が整理して記載されていて、非公開にする
のは一寸勿体ないですね。

uispで接続が出来ない件ですが、
現在のAVRStudioでは、ライタと通信する際に
コミュニケーションプロトコルVer.2を使用します。
従来の方法は、コマンド識別子とそれに必要なパラメータを
送受信するだけの単純なプロトコルでしたが、ver.2では
送受信するデータをメッセージパケットにまとめ、これを
交換しあう事でコミュニケーションが成り立っています。
これは、フラッシュメモリ読み/書き等の複数のデータを
送受信する際のオーバーヘッドを劇的に改善します。
また、これらのバージョンに互換性はありません。
16F648A-AVRライタではver.2プロトコルに則して
各機能を実装しています。

uispなのですが(moyashiさんの記事からリンクを辿り
ダウンロードして見ました)幸いソースコードが公開され
ていて、このコードを読む限り古いプロトコルを使用して
AVRISP/STK500と通信を試みる作りになっていました。

以上の理由で、uispで16F648A-AVRライタを使用する
事は残念ながら出来ません。

また何かありましたら、ご意見ください。

投稿: Morosan | 2006年9月10日 (日) 10時08分

コメントありがとうございます。
なるほど。uispからは使えないのですね。気持ち悪い思いをしていたので、スッキリしました。
お手を取らせてしまい、恐縮です。
それならそれで、STK500を買おうと思っていたので、そっちで試してみます。

書いた記事なんですけど、手順的には問題無いはずなのですが、出来たhexが動かないのでは有害な情報に違い無いのでしょうがありません。

プリビルトされたAVR-GCCでコンパイルしたらそれは動いたので、どこが悪いのだか……。
環境構築ばっかりに時間を使っていてもしょうがないので、プログラムの習得の方をがんばりたいと思います。

こちらもお手数ですが、トラックバックの削除をお願いします。
ライタの記事を書いたら、再度トラックバックしますので。
よろしくお願いします。

投稿: moyashi | 2006年9月10日 (日) 10時59分

moyashiさん
遅くなって申し訳ありませんでした。
トラックバックを削除しました。

実はSTK500が新旧2つのバージョンの
コミュニケーションプロトコルに同時対応
しているのかどうか痛く興味があったので、
ぜひとも結果を教えてください。

宜しくお願い致します。

投稿: Morosan | 2006年9月12日 (火) 13時34分

9/18 に更新されたファームウェアに書き換え、avrdude で動作確認
を行ってみました。

・RS232C(COM1)直結
・IOデータ USB-RSAQ2経由

の二つで S2313, Tiny26L でテストを行いましたが、問題なく使え
ました。avrdude は winavr 付属の以下のバージョンです。

avrdude: Version 5.1cvs

使用例:

>avrdude -v -p t26 -c avrispv2 -P com1 -U flash:r:main.hex:i

使い方がわかりにくいとの指摘もある avrdude ですが、コマンドプ
ロンプトから、軽快に使えるツールの存在は大きいです。

どうも対応をありがとうございました。

投稿: senshu | 2006年9月19日 (火) 09時17分

Senshuさん、

このライタ、作る事自体が目的でなので、
完成したら終わりのはずだったんですが、
ここまで弄るとは思っていませんでした。

それはさて置き、度々の動作確認
本当にありがとうございました。

投稿: Morosan | 2006年9月20日 (水) 01時35分

Morosanさん、お世話様です。

思いのほか、お手数をお掛けしてしまったようで恐縮しております。
 実は、私も数本のフリーソフトを公開し、薄学を省みずと後悔し
たこともありますが、自分の考えもつかない使い方をしてくれるユー
ザーの希望にに対応することで完成度は格段に高まることを実感し
ています。

今後も懲りずに、よろしくお願いいたします。

投稿: senshu | 2006年9月20日 (水) 07時03分

Senshuさん

avrdudeのソースを読んだり、cygwin環境を構築したりと
いい勉強になりました。そもそも、このライタでavrdudeを
使う事自体思い付きもしなかったと思います。

avrdudeを読み解くにあたって、他のAVRライタのコードも
読ませて貰ったんですが、うまい人の書いたコードは綺麗
です。特にELMのChaNさんはウットリする様なコードを書
いてました。

この件が無ければ、これらのコードを読む事も無かったで
しょうし、本当にいい勉強になりました。

こちらこそ、今後ともよろしくお願い致します。

投稿: Morosan | 2006年9月21日 (木) 23時27分

avrdude を修正した版を用意していただいたようですが、修正内容
をみると、page_size が 256->128 になっています。
この修正は、256を超える扱いに制約がある、という漢字でしょうか。

私のところでは問題は無いのですが、セラロックなどの発振周波数
のズレなどが影響しているのかな?と考えました。

まだ、十分な判断材料は揃っていないのですが、AVRISP 互換ライタ
で安定性が確認できれば、教育現場場などでの活用が期待できると
思っています。ヒントをいただけると幸いです。

投稿: senshu | 2006年9月22日 (金) 08時41分

さすが師匠、すかさず修正箇所を見抜きましたね。

私はmoyashiさんの作ったハードウェアに問題が
あるとは考えていません。あくまでソフトウェアの
互換性の問題と思っています。理由を書かねばなら
ないところですが、現在職場(休憩時間)なので
タネ明かしは帰宅してからにさせて下さい。

投稿: Morosan | 2006年9月22日 (金) 15時11分

senshuさん

moyashiさんのところのライタに対する、私なりの考え
を書きたいと思います。

まずセラロックの精度ですが、村田製作所の資料によると
±0.5%の誤差程度の精度を確保していると解ります。
それに対し非同期シリアル通信は-プログラムの作りや
モジュールの出来によって変わるとは思いますが-
4~5%程度の誤差を許容します。現にAVRやPICのUSART
モジュールの発振源にセラロックより精度の劣る内蔵
CR発振器を使用しても、全く問題が無く通信が行われると
思います。また、SPI通信は同期通信で行われるため、
マスタデバイスのクロック変動で通信内容が失われる
事は無いと考えます。

思い出して頂きたいのが、AVRStudioからの操作では完全に
機能すると言うことです。不安定なハードウェアとするならば、
この事を説明する事は出来ません。

ご存知とは思いますが、AVRのシリアルプログラミングに
ついて少し説明させて下さい。AVRのフラッシュメモリ
にデータを書き込む際、大きく分けて「ページ書き込み」
と「ワード書き込み」の2種類の方式があります。
「ページ書き込み」はAVRの内部バッファにISPコマンドの
設定命令を使ってメモリイメージを作成してから、書き込み
命令を実行しフラッシュメモリにバッファの内容を転送しま
す。「ワード書き込み」は(実際にはバイト書き込みなんで
すが)書き込み命令を使用して、1バイトずつ直接フラッシュ
メモリに書き込みます。いずれの方式でもフラッシュメモリ
書き込み後、ライタ側ではデータを正しく書き込まれている
かの検査を行いますが、「ページ書き込み」方式の場合は
1ページを書き込んだ時に1回、「ワード書き込み」方式
の方は1バイト書き込む都度1回の検査を行います。
また、これらの方式うちどちらの方式の書き込み方法を
使用するかは、デバイスによって異なります。

STK500コミュニケーションプロトコルV2では、このどちらの
方式も柔軟に対応できる「ISPフラッシュメモリ書き込み
命令」を持っていますが、通常「ページ書き込み」に対応
したAVRへの「ISPフラッシュメモリ書き込み命令」はその
デバイスのページサイズ分のデータを1度に送ります。
このページサイズもデバイスごとに異なっていて、私の
手持ちのAVRのうち、最大の物でもmega168の128バイト
で、tiny26/Lでは16バイト程です。
それに対し「ワード書き込み」方式の場合に1度に送り
つけるデータサイズは「ページサイズ」という制限を受け
ません。

AVRStudioから発行される「ISPフラッシュメモリ書き込み
命令」の場合、1度の通信で送られる書き込みデータの
サイズは各デバイスごとのXMLファイルで定義されていて、
「ワード書き込み」方式のデバイスでは、概ね128バイト
のデータを1度に送ります。

私の作成した16F648A-AVRライタでは、SRAM-256バイトの
内160バイト分を受信バッファとして確保しています。
PICのSRAMの構造を理解頂ければ、160バイトという数値の
意味は解って頂けると思います。確かに1部の命令応答の
データ送信にバッファを使用していませんが、送信側での
バッファリングは私のプログラムミングの都合で行った
もので、必ずしも必要な行為ではありません。しかし、
どの様なタイミングで送出されるか分からないデータを受け
なければならない、受信側でのバッファリングは不可避です。

そこで、moyashiさんの件ですが、
私がavrdudeで読み書きの試験に使用したデバイスは
mega88です。mega88は「ページ書き込み」方式の
デバイスです。moyashiさんはS2313を用いましたが、
S2313は「ワード書き込み」方式のデバイスです。

最初は、moyashiさんの所で起きているチェックサム応答
エラーに注目して通信障害を疑ったのですが、この事で
AVRStudioから問題なく操作出来る事の説明が出来ません。

そこで、avrdudeのソースを読んで見る事にしました。
解ったことは、実はこのエラーが重要なのではなく、この
エラーに至る経緯に問題があるという事です。詳しく書く
と話が長くなるので詳細を省きますが、問題の発端は
avrdudeに含まれるコミュニケーションプロトコルV2を
司るstk500v2.cでは、「ワード書き込み」デバイスに対し
特別の指定がない限り、「ISPフラッシュメモリ書き込み
命令」を発行するために、256バイトのデータを含む
メッセージパケットを作成するという事でした。
この事は、対象ライタをSTK500/AVRISPとした場合納得の
いく実装です。ところが、16F684A-AVRライタでは、受信
バッファに160バイト分しか用意していない為、256+の
データを受信する事が出来ません。

stk500v2.cの変数「ページサイズ」を256から128に抑制
した理由がこれです。決して通信不良を考慮した訳では
なく、またmoyashiさんが想像するようにエラーを無視
するための変更ではありません。
(ちなみに、この改変で本来のSTK500/AVRISPの対応に
 支障をきたす事は在りません。一応言っときます。)

私の作ったライタはAVRStudio環境からAVRISPに置き換
わるライタを目指し、avrdudeのstk500v2拡張はavrdudeで
AVRISPを使うための拡張です。間に同じAVRISPが介在する
事から、一見avrdudeで16F648A-AVRライタを使用すること
が可能と想像する事も出来ますが、そもそもこの2つの
プロジェクトはAVRISPへ係わる方向が逆で、元から相互
の接続を保証しません。

あと1つ解らなかったことは、CMD_ISP_MULTIの対策を
してもエラーが出続けたことですが、moyashiさんに
お願いして幾つかファームを替えた際の通信ログを見せ
て頂いて解りました。私が提供した受信部を書き直した
ファームを更新する際、間違えて古いファームに書き戻
してしまっている様です。
これは私が全てのファームウェアに"AVRISP16F648A.hex"
という同じファイルネームを付けている事に原因がある
と思われます。これじゃ間違えるなと言う方が無理です。
今後は、せめてバージョン番号ぐらい入れる様にしたい
と思います。

以上のことで、ハードウェア側の問題ではなく、ソフト
の互換性の問題というの推測の説明が出来ると思います。

avrdudeのソースを読んで面白い事が解りました。
このプログラムは1人の人が書いたものではなく、GPLに
基づいて複数の人が自分の使っているライタを対応すべく
拡張を加えたものだと気付きました。複数の人かそれぞれ
勝手(失礼)にavurdudeを拡張しているので、ソースは
かなり楽しいものになっています。今回はstk500v2.cに
寄生することで、16F648A-AVRライタの対応を図りました
が、本来なら"-c PIC-AVR"とか独自のオプションを設定
して、独自のライタ制御モジュールを付加すべきだと
思いますが、そこまでやる必要は無いと考えます。

投稿: Morosan | 2006年9月23日 (土) 18時05分

本当にご迷惑をおかけしました。
おかげさまで、Mac OS X上で一通りができることになりました。
とても感謝しています。
ありがとうございます。

投稿: moyashi | 2006年9月23日 (土) 22時40分

http://proxy.f2.ymdb.yahoofs.jp/users/776c5010/bc/4d9b/__hr_/a1a8.jpg?bcBexwGBP2LjGdAB
PICライターとAVRライターをだぶらせた回路図を作りました。
この中に両方のプログラムを収めることは出来ますでしょうか?

投稿: ネコノコ | 2007年5月18日 (金) 00時29分

投稿: ネコノコ | 2007年5月18日 (金) 20時46分

ネコノコさん、はじめまして。

PIC/AVRの共用ライタ、楽しそうだし興味深いプロジェクトですね。技術的には可能だと思います。

ただ、PIC/AVRライタそれぞれのファームウェアとPC上での書き込みプログラムは何を使用するのか、もう少し詳しく情報を頂かないと、申し訳ありませんが答えようがありません。

私の書いたAVRライタ側のコードは、あなたの再利用を歓迎します。ただし、PICライタ側のコードは再利用可能なソースとして確保出来ているのでしょうか。また、そもそもこれらのコードを1からスクラッチする計画なのでしょうか?もう少し詳しく情報を下さい。

何れにしても、面白そうなプロジェクトなので、是非着手して見てください。

それと、回路図を見て勝手ながら意見を言わせて頂けるなら、MOSIの接続とPICライタ側のVPP1/MCLR制御がRA1を共用しているので、MOSIの接続を空いているRB4に変更したい所です。また、USB-シリアル変換チップやレベルコンバータを使用する為、私のPIC-AVRISP互換ライタとシリアル送受信の論理が反転しています。なので、USART周りのファームを変更する必要があります。(ここら辺は素直に16F648AのUSARTモジュールを使用し、出来ればPICライタ側のファームとの共用が望ましいです。)

また、PIC/AVR書き込み機能の切替はどうするのですか?それぞれのファームとPC側の書き込みプログラム間のプロトコルが分かれば、自動切換えも可能(AVR側はPIC-AVRISP互換ライタを作成する際に調べたので、少しの助言は出来ると思います。)だと思いますが、空いているRA2にスイッチを付けて機能を切り替えるのも手だと思います。

投稿: Morosan | 2007年5月19日 (土) 14時27分

こんばんは今日は時間がありませんので明日また書きます。それではまた

投稿: ネコノコ | 2007年5月19日 (土) 22時10分

Xwispのソースですが
http://www.voti.nl/xwisp/index.html
ここはなかなか探しにくいのですが
http://www.voti.nl/xwisp/xwisp_src.tar.gz
http://www.voti.nl/wisptool/index.html
http://www.voti.nl/wisptool/wisp.pas
らしいのですが良くわかりません。
少し頭の弱い浪老人なのでソフトはうまく考えられません。
(小生のスキルはハード寄りです)

<出来ればPICライタ側のファームとの共用が望ましいです>
これはUSBを主力に考えていますのでTTL側のレベルの方が都合がよいのですが・・。
また、MOSIの線はRB4に変更します(図面もUPします)

<PIC/AVR書き込み機能の切替はどうするのですか>
シリアル通信は共通で何かのコマンドによってPICかAVRして判断自動切り替え出来ればもっと良いのですが・・
さらにAVRとPICのアプリケーション側ソフトが1つになればもっと良いのですが。

投稿: ネコノコ | 2007年5月20日 (日) 12時59分

この規格がうまくいかなかった場合の保険に「PIC16F648A」にAVR書き込み用ファームウエアを
書き込みました。
WISP648A基板にISP端子を追加して、PICを取り替え、「16F648AによるAVRISPソフト」を立ち上げれば書き込める予定です。
(この場合はRB7の変更はしていません)

投稿: ネコノコ | 2007年5月21日 (月) 09時43分

ネコノコさん今晩は。

ネコノコさんの回路で私の16F648A用AVRライタのプログラムを動作させるには、プログラムを以下の様に修正する必要があります。

ソースコード"USART.asm"の13行目

;#define    MAX232

これの先頭セミコロンを削除して"MAX232"を定義します。これは、シリアルからの信号がネコノコさんの回路では正論理、私の回路では負論理で入出力されるためです。

それとMOSIの変更ですが、私の回路ではRA1に繋がれていたMOSIを空いているRB4に変更したらいかが?と言う意味です。この場合の変更は、"SPI.inc"の16,20,21行目

#define MOSI_PORT_NUM  1

#define MOSI_PORT  PORTA
#define MOSI_TRIS  TRISA

これを

#define MOSI_PORT_NUM  4

#define MOSI_PORT  PORTB
#define MOSI_TRIS  TRISB

この様に変更して、プログラムを再ビルドすればネコノコさんの回路でも、動作すると思います。

Xwispの件はSenshuさんの質問箱の方にしませんか?


投稿: Morosan | 2007年5月22日 (火) 01時45分

PIC/AVRの質問はSenshuさんの方にいたします。
ソフトのこともあちらで助けて下さいね。
それでは宜しくお願いいたします。

投稿: ネコノコ | 2007年5月22日 (火) 08時20分

PICでAVRライタですが、
クロックを12MHZにすることは可能でしょうか?
出来るので有れば換えてみたいです。

投稿: ネコノコ | 2007年9月12日 (水) 16時56分

ネコノコさん、返事が遅くなってすみません。
(もう見て無いですよね?)

AVRライタの件ですが、わたしのコードでは20MHzの発信源でUARTの送受信タイミングを測っているので、そのままでは動作しません。
12MHzの動作させるには送受信部の手直しが必要になります。
タイマ2を使ってタイミングを測っているので、この部分を適切な値に設定すれば動作するかもしれません。

重ね重ね返信が遅れた事にお詫び申し上げます。

投稿: Morosan | 2007年10月22日 (月) 00時05分

senshuさんの処を見てまた此方に来ました。
じっくりと見まして、止まっている基板をリスタートしてみます。

投稿: ネコノコ | 2008年6月27日 (金) 22時02分

ネコノコさんお久しぶりです。
返事が遅くなってすみません。コメントが付いている事に1月気付きませんでした。

投稿: Morosan | 2008年7月26日 (土) 01時39分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/180469/11392009

この記事へのトラックバック一覧です: AVRのためのPIC再入門:

» PIC []
[続きを読む]

受信: 2006年8月23日 (水) 19時54分

» Mac OS X Tiger上にAVR-GCC環境を構築する@2006 [ひとりぶろぐ]
WinAVRもいいけど、Mac OS XにもAVR-GCCの環境を構築してみよう [続きを読む]

受信: 2006年9月17日 (日) 23時16分

« AVR入門 | トップページ | AVRのためのPIC再入門 »