「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



arduinoの構成についてまとめています。
http://nekosan0.bake-neko.net/outline_composition.html
ちょっとずつ書いていこうとおもいます。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




山根さんの本を読みながら、AVRのTWI(I2C)i/f
のデータと処理の流れについて整理していました。

gccやarduino等のコンパイラを使ってしまえばそれほど
難しいものでもないのですが、アセンブラで組むとなると
状況はちょっと違ってきまして…

というのは、以前TINY2313用に作ったスプライト
表示器や背景表示器↓
http://picavr.uunyan.com/avr_m_sprite.html
http://picavr.uunyan.com/avr_m_bg.html

をMEGA48用に作り変えつつ、TWIi/f対応かつ
カラー表示にも対応しようかと思っていて…

これらはシビアなタイミングで動かさないといけないので、
NOP命令などで1クロック単位でタイミング調整しながら
動いている代物。当然フルアセンブラなんです。

USARTならダブルバッファが効いていているし、
制御は物凄く簡単に済ませられるのですが、TWI
(I2C)となると話は別。通信プロトコルを
1ビット単位で解ってないと…。

というわけで、改めて山根さんの本の解説文やサンプル
プログラムを熟読し、データと処理の流れを理解
し直してました。

とりあえず、バスマスター側(こっちは高級言語で良い)
とスレーブ側(こっちは上記のとおりフルアセンブル)と、
その間を流れるTWIバス(I2Cバス)上の電圧の状態や、
バスを更新するのがマスタなのかスレーブなのか、
それはソフト側で処理するのか、内蔵ハードが勝手に
処理してくれるのか、等など、かなり厄介なことを図に
まとめてみました。

あ、そうそうすみません。AVR専用です。さらに、
ハードウェアTWI登載機だけです。
(USIのTWIモードはクロックもマスター側が
ソフトで生成する必要があるとか、スレーブ側は
スレーブアドレスをソフトで判別しないとならない
とか…色々制約があって正直実用性に乏しい…)


マスターからスレーブに1バイトのデータを送信(書き込み)
する時のスキームです。2バイト以上続けて送る時には
色が濃くなっているところを繰り返すだけ(のはず)です。

この図だけご覧になっても「なんのこっちゃ」だと思うので、
いずれサイト上に解説付きでアップしておきたいと思います。
(①~⑦がなんなのかも書いてませんし…)

まぁ、私の頭の中はかなりすっきり整理できました。


山根さんの本だと、マスター側はマスター側だけ、
スレーブ側はスレーブ側だけで分けて描かれていたり、
解説文が「マスター」の話なのか「スレーブ」の
話なのか明示されていなかったり(主にマスター側の
処理が書かれているのですが)と、なかなかか
解読が大変だったのですが、こんな風に整理しておけば
ひとまずデータ送受信処理をプログラムする際の情報
として役に立ちそうです(アセンブラでも)。

ちなみに、エラー処理は全然考慮してません。
(ステータスが多すぎて…)
マルチバスマスターの調停なども考慮してません。
(処理の枝分かれが多すぎて…)


いずれにしても、山根さんの本に纏められている
表4-6-1~表4-6-4のステータスコード一覧
は便利。
さすが本のタイトルに「リファレンス」を謳っている
だけのことはあります。

書き込みはこんな感じで良いんですが、この逆にデータを
読み出す場合はさらにもう少し厄介な処理が必要なんですよね。


最終的には、スプライトや背景表示を、シリアルEEPROM
のICと同じようなアクセス方法で制御できるように
したいと思っています。そうすれば、gccやarduino
等からでも簡単に使えますし、シリアルEEPROM等も
スプライト表示器並行してバス上に並べて使うことも
出来ますし。

どうなることやら…



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




ここ1~2日、arduinoの公式サイトが繋がりにくく
なってましたが、回復したようです。

というわけで、シリアル版arduinoの基板などが
載っているページ↓
http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3

ここに載ってるやつを作りました。シリアル版なので
PC側には当然シリアルポートがないと繋がりませんが、
USBシリアル変換器を使えば普通にarduino-IDEと
通信できます。

ページ右の方にある白い電解コンが問題の無極性タイプ
というヤツです。10uF。
多分内部では2つの電解コンが向かい合わせ
に直列接続されているのかなと思うのですが、デバイスの
中身には詳しくないので、想像の範囲ですが。
それ以外は特に珍しい部品はありません。

そういえば、3つ穴が空いていますが、これって
何に使われるんでしょうねぇ?一応穴あけ位置に
従って空けておいたんですが、使い道あるのでしょうか?

diecimilaなどにも穴がいくつか空いているんですが、
この位置とはまた違っているみたい…
何の穴だろう???



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




週末、ブレッドボード用のアクセサリーが欲しくなり、雨で
出かけられなかったこともあり、昨日久しぶりにプリント基板
を作ることにしました。

PCBEでパターンを描いてみたら、大きさ的にカメレオン
レジストの10Kサイズ程度(10×7.5cm)に入って
しまう程度だったんですが、最近10Kは値上がりしたこと
もあり、また8月で期限切れのカメレオンレジスト12Kが
1枚あったので、12Kサイズで何か作ろうと画策。

そういえば、arduinoの公式サイトに、arduinoの自作用
EAGLEパターンが公開されていることを思い出し、
見てみました。
diecimilaなどはさすがに両面プリントなのですが、
シリアル版なら片面だけのものも公開されています。
大きさを調べてみると、ブレッドボード用アクセサリの
パターンと合わせて丁度12K分の大きさくらい。

というわけで早速露光、エッチングを行った後、プラカッター
で基板を切り刻み、穴あけ、ハンダ付け…と行って、出来上
がったのがこれ。


裏面はこんな感じ。

さすがカメレオンレジスト!写真だと判り難いと思いますが、
物凄い微小なところまで忠実にプリントされています。
っていうか、このパターンをEAGLEで描いた方々、
凄い! これだけうねうねしていながら、ジャンパーが3本しか
ありません!(EAGLEの自動配線機能の賜物?)

このボード、バージョン3となっていたのですが、
2008年に入ってからモディファイされているらしく、
MEGA168を繋げば最新のファームでちゃんと
動くみたいです。

I/O端子はちゃんと公式サイズになっているので、各種
シールドが使えるはずです。
(USB無いので3.3V出力だけはNCになってますが…)
この後、ネームランドでシール貼って、ピンコネが判るように
しておきました。手作り感満点です。

LEDは4つあります。1個はいわゆるデジタル13番に
繋がっているもので、黄色のLED。
その横の緑と赤はそれぞれ送信/受信。もう一つ下のほうに
ある赤は電源用です。9Vのアダプタを繋ぐと光ります。
CPUへは7805で5Vを作って供給してます。

そうそう。作っていて判ったことが一つ。自動リセットの
こと。
このボード、自動リセットのオン/オフを切り替える
ジャンパソケットが付いていて、ジャンパーをショート
させておくと、アップロードボタンをクリックするだけで
リセットがかかります。

自動リセットはFT232RL登載品しか登載されてないと
ばかり思っていたのですが、実はシリアルコネクタの
4番ピン(DTR信号)を使っていただけなのでした。
 (FT2332RLのビットバンモード?を使って
  いるのかと思ってました)
しかも、コンデンサで直流成分を切って、立下りのパルスだけを
取り込むような、ちょっと特殊な回路構成?になっています。
(これ、電圧大丈夫なんだろうか?)

メインCPUにはMEGA168でも良いんですが、
工具箱にはMEGA8が大量に死蔵されていたので、
蘇生手術を…。一種のリサイクルか???

ブートローダーを流し込む前に、コンパイル済みの
LEDピコピコをAVRstudioから流し込んでみると、
一応無事動いて居る様子。よかった、よかった。

さてブートローダですが、ここで一悩み…。

arduino-IDEのメニューからAVR-ISPmkⅡ経由でブートローダ
を書こうと思ったんですが、IDEからAVR-ISPmkⅡがなぜか
認識されず。

仕方なく、ブートローダーもAVRstudioから直接
HEXを書き込むことに。HEXファイルを書き込みつつ、
ブートローダサイズを設定(1024ワードに)しておけば
動いちゃうだろう…と簡単に考えていたのですが、
ここでまたいくつか…

(1)速度設定

 いつもいつも失敗するのですが、新品を袋から出したばかり
 の時は内蔵RC有効、かつシステムクロックの1/8倍
 プリスケーラが有効になっています。
 また忘れていました。
 
 →クロック設定のフューズを設定して再度書き込みます。

(2)ブートローダ領域の保護と、リセット時の起動アドレス設定

 クロックのフューズ設定をしてブートローダのHEXファイル
 を一旦書き込めばブートローダが起動出来、IDEから自動
 リセットしてアップロードが出来るのですが、2回目からは
 自動リセットも効かないし、手動でリセットかけても
 アップロードできなくなってしまう事象に。

 →BOOTRSTフューズを有効に変更、BLB1ロックビット
  を「LPM and SPM prohibited in Boot Section」に設定。
  これで、上書きもされず、リセット時はブートローダから
  起動されます。

ようやくちゃんと動くようになりました。
で、今まで(MEGA168用)に作ったスケッチを片っ端から
コンパイルしてみたんですが…

ライブラリが既にMEGA8に対応していないものがあります。
動くものもありますが。ピン入力割り込みを使うライブラリは殆ど
全滅です。
「内蔵レジスタの定義タグが見つからない」的なエラー。

MEGA8は第二世代、MEGA168は第三世代。
内蔵レジスタ名称関係はMEGA168が「より拡張性と
ソースの可搬性に富んだ」かたちに変わっているため、
アセンブラソースやgccソースレベルでは結構違ってきて
しまいます。

この手の違いは各種ライブラリ内できちんとタグ切り替えを
しないとならないんですよね。

(例えば、USARTが1個しか登載されていなくても関係する
 内蔵レジスタのタグ名称には通番が振られていたりとか。
 詳しくはMEGA8、MEGA168の各データシートを
 ご参照ください。この件は山根さんの講座で習っていたので、
 知識としては知っていたのですが、今ついに現実の壁に…)

まぁ、arduino用に今からMEGA8を好んで使う人も
居ないでしょうから、これから自作する方は是非
MEGA168を使いましょう。
わたし的には実験材料の一つなので、トラブルは大歓迎
なのですが(≧v≦)σ (トラブルメーカーとも言う)

そうそう。同じ割り込み関係でも、タイマー2を使う
「ミリ秒割り込み」機能は使えました。MsTimer2です。
時計と見比べてみましたが、ピッタリ一致。(あたりまえ)

あとアナログ出力(PWM)は使えることは使えるんですが、
ピンによってはMEGA168とはちょっと違った動作します。

蛍ポワンポワンを各ピンでうごかしてみたところ、
デジタル9、10、11ピンはちゃんとポワンポワン
するんですが、デジタル3、5、6は単なる点滅
(デジタル出力?)になっちゃいます。
MEGA8とMEGA168って、PWMの造りって
何か違ってましたっけ?原因不明。

サーボ関係もことごとくコンパイルエラーになったような記憶。
まぁ、回路自体の問題ではなくライブラリ関係の
問題なので、「自分もこの片面arduino自作したいぞ!」と
いう方は是非MEGA168で作ってください。

部品代だけなら、なんだかんだで1500円くらいでしょうか。
(工具やケミカル含まず)

ブートローダとフューズビットを書き込む何らかのツール
(AVR-ISPmkⅡ以外でも)を持っていて、カメレオンレジスト
の扱いにもなれている人なら、数時間でサクッと作れちゃう
と思います。

そうそう。作る上での留意点を3つばかり。

(1)トランジスタの足

 回路図に指定されているNPN、PNPの各トランジスタは、
 普通日本でよく使われている2SA1015、2SC1815とは
 ピン配置が異なります。
 なので、こんな風に足を捻じって使う必要があります。


 面倒です。

(2)インダクタ

 買い置きがあるとばかり思っていた100uHの
 インダクタ。どうしても見つからなかったので、
 ジャンパー線に置き換えちゃいました。
 AVCCに繋がっていて、AD変換の参照電圧を安定化
 させるためのものなんですが、一応横にパスコンは
 付いてるし、この間買ったreduino-nanoもオプション品
 扱いで付いてないのですが、普通にAD変換できている
 ので。
 なので、無ければジャンパーで代用ってことで…

(3)10uFのコンデンサ

 回路図中に出てくる10uFのコンデンサ。公式サイトの
 写真では普通の電解コンっぽくみえるんですが、実はこれ
 無極性タイプだそうです。シリアルケーブルの無接続状態時
 の逆電圧保護のためだそうです。
 って、そんな急に言われても困っちゃいます!
 工具箱を漁ったら、積層セラコンの10uFが出てきた
 ので、これを使うことにしました。

 工具箱にそんなモン入ってない!という方は、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1111539821
 ここなどご参照の上、電解コン2つで無極性化してみて
 下さい。
 ただ、立体配線になっちゃうのと、容量計算の問題がありますが…
 (直列つなぎだから、20uFを2つかな?)

それ以外の部品は、型番が異なっていても似たようなものを
適当に取り付けておけば何とかなります。(≧v≦)σ

ちなみに、ブレッドボード用アクセサリっていうのは
CPLD用具、PS2端子(キーボード、マウス)用具など
ですが、その件はまた今度。


(追記)
ブートローダーの件などについて纏めたページを
作りました。↓
http://nekosan0.bake-neko.net/outline_composition.html
ページの下のほうをご覧ください。



コメント ( 4 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




XILINXのダウンロードケーブルを作ってみました。
超時間かかったー!


部品数がそれほどでもなかったので、久々にユニバーサル基板でモノを作ったんですが、こんなに大変なんでしたっけ?半日がかりでした…
しかも汚い仕上がり!立体実装です!

しかも、ノイズ対策用のコンデンサがえらく離れちゃってて意味無いし。

裏面も配線がこってり。

UEWで配線すればもっと楽なのかもしれませんが、基本的に箱に入れず使うものなので、ウレタンコートが剥がれてショートしちゃうと嫌だなぁと。

PLCC44だけでなく、本当はPLCC84ピンのボードも載せてしまおうとスペースを空けてあるのですが…

こんな風に。(注:84ピンの方はのっけてるだけ)
でももう面倒だし、JTAGケーブルも引き出せるようにしたので、このまま使う予感。

ちなみに、XILINXのISEからXC9536XLに3.3Vで書き込みしてみたところ、ちゃんと書き込みできました。74HC125じゃなく、74AC125を使ってます。

74AC125は秋葉原でも売っているところが多くないのですが、ラジオデパートのサンエレクトロで買ってきました。
74AC125じゃないと、3.3V時の動作速度が遅くなり、上手く書き込めないことがあるようです。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« 前ページ 次ページ »