Atmel ATmega1284P-PUへのArduino BL書込やスケッチULについて色々試行錯誤したメモ。
BL書込みに成功したのでドーパミン分泌が萎まないうちに覚書も含め記録させて頂きます
自分には以下の様な展望がありました。
- 328Pではメモリ容量的に限界がある。以下の理屈に続く
- 一つのAVRに沢山のセンサを付けたい(うち1〜2点だけはAD変換を利用したい)
- C言語に長じていないため、自分のPG技量で省メモリ的に組むには厳しい。
- RasPI+I2CのA/D変換ICとかモジュールという方法も考えうるが、消費電力、ネット上のサンプルのリソース量なども含めてRasPI自身の習得や設定に時間がかかるだろう。
そこで、ATmega1284Pや644PのDIP版に注目する。しかし調べた範囲ではこんな認識だった。
- ebayなどで大きいAVRの格安のArduino互換の開発ボードがあるが、実用にコンパクトで無く、MCが基板実装なので自由度に欠ける。
- 秋月や共立で644*や1284*のDIP版のAVRが売られている。ebayで探すと殆ど送料がかかるものだし1284のDIP版なら秋月が最安?
- SOP版の値段もそんなに変わらず安くならないようである。
- Sanguinoのブートローダー導入の情報もあり、調べて知っていたがIDEのバージョン等扱いにひと癖ある印象で試そうと思わなかった。若干敷居が高そう。
調べ物をしているうちに以下のURLの頁に行き着く。
Mighty-1284Pというブートローダーを使っているようである。そこでこの方法をまんま真似てArduino化出来ないかと計画を立てる
新たに調達したものや準備・利用したもの
- Atmel ATmega 1284P-PU / 秋月にて新たに購入
- ebayのFT232RL FTDIのUSBシリアル変換器 / この出品者のは安いし、思いのほか早く届いた。台湾の出品者は大凡早めな印象
- ブレッドボード, ジャンパワイヤ, セラコン 0.1μF×3, レジスタ 10kΩ×1, セラミックレゾネータ(水晶振動子が高額なため代用), タクトスイッチ, Arduino UNO
丸々上記のURLの作業でやってみたが、発振子は水晶の物を持っていなかったのでセラロックを利用。精度は水晶振動子より悪いらしいが、動作については低クロックのものを328Pで利用して動作に成功しているので大丈夫だろうと予想しました(これが後述の問題となる)。水晶振動子の方はebayで安価で10個セットとかで売られているので購入したが未だ届いていない。大凡以下の様なワイヤリングで行った(ブレッドボードの上下の電力ラインが2ラインづつじゃなく、実際には上+、下-づつの配線だった)。左からブートローダ書込、アップロード(※作図画像のAVRは644Pだけど、1284Pと置換えて見てください) BL書込はSPI、スケッチULはUSBシリアル変換器からクロス接続で利用する感じであろうか? コンデンサは殆どバイパス用、リセットの抵抗はプルアップ用でしょう。
〜作業の流れ 準備
- 上記のURLの掲示板にアクセスし、Atmega_Board_Programmer.zipとAtmega_Fuse_Calculator.zipをDL
- GitHubのmighty-1284pプロジェクト頁に行き、頁右側の[Download Zip]からDL
- mighty-1284p-master.zipを展開し、Arduino IDEの環境設定のスケッチ保存場所以下のhardwareフォルダ(なければ作る)に移動する。
- Arduino IDEを起動し、マイコンボードの欄に Mighty-1284p 16MHz using Optiboot等の一覧への追加の確認をする。
- FT232RLのドライバは導入に一癖あり、自己解凍形式を展開できるアーカイバで適宜のディレクトリに一旦展開し、デバイスマネージャ一覧から [ディスク使用] のボタンを押す所迄行き指定する形で、USB Serial Converter, USB Serial Portの段取でインストールする (そのままインストーラを実行するだけではドライバがインストールされず、更に何処にファイルが転送されたかわかりにくく、ディスク使用の時に指定先が不明なため)
- FT232RLの規定の電流申告量90mAでは厳しいかもしれないのでFT_Prog(ドライバと同じ配布元のUtil)で少々だけ上げたほうがいいかもしれない。自分の場合出来るだけ繋ぎっぱで動作確認可能にするため、500mAの申告に変更してみたが寿命を早めるかも?(参考:Google検索 "Arduino 消費電力")
〜作業の流れ ブートローダー書込
- 左上図のように配線し、Atmega_Board_Programmer.zipを展開(どこでも良い)、Atmega_Board_Programmer.inoをIDEに読み込む。
- COMポートの番号、マイコンボードがArduino UNOであることを確認し、スケッチ(Atmega_Board_Programmer.ino)の書込を開始。
- 書込が終了したらシリアルモニタを開き、ボーレートを115200に合わせ、UNOのリセットボタンを押す。
- 対話形式の流れに従ってBL書込を行う( GがBL書込、VがVerify)。終わったらVerifyを行い確認する。
〜作業の流れ スケッチアップロード
- 右上図のように配線しその後USBケーブルを繋げる。
- IDEを起動しマイコンボードをMighty-1284p 16MHz using Optibootに選択、シリアルポートの番号が合っているか確認
- スケッチをアップロードする。
書込みには成功したが、スケッチのアップロードがうまくいかない。この問題が解決するのに2日程かかった。FT232RLが正しく機能しているか疑うところから、いろいろ調べて試してみたが駄目だったりした。調べているうちにMCの微妙なシグネチャの違いの情報もあった。そして疑いは水晶を使用していないという点に行き着く
原因はセラロックを使用していることにあるらしく、Atmega_Board_Programmer.inoが設定するヒューズビットが水晶発信器向けらしい。
- The resonator works perfectly with lfuse 0xF7 (not 0xFF).
- Sanguinololu 1.3a - Part 3:Not Out of The Woods Yet / オンラインのfuse計算器を利用している例も見られる。異なるヒューズビットになっている
Atmega_Board_Programmer.ino ファイルを
// ATmega1284P family { { 0x1E, 0x97, 0x05 }, "ATmega1284P", 128 * kb, 1 * kb, optiboot_atmega1284p_hex, 0x1FC00, // start address sizeof optiboot_atmega1284p_hex, 256, // page size (for committing) [変更前] 0xFF, // fuse low byte: external clock, max start-up time [変更後] 0xF7, // fuse low byte: external clock, max start-up time
のように変更(コメアウトして追加するのがいいでしょう)してブートローダーの再書込作業を行ったら、無事スケッチをアップロード出来るようになった。とりあえず、A0への0-5v入力だけ動作確認しているのみなものの、予備の1284P-PUがひとつ欲しくなりました。
(14/11/12 追記事項) avrdude.confの変更
上記のスケッチがアップロード出来ていない時に、色々試行錯誤してみた中に既に含まれていたので気が付きませんでしたが、追記します。MCの微妙なシグネチャの違いの情報http://forum.arduino.cc/index.php?topic=121305.0
MCには製品種の判別の為のシグネチャというものがあるようで、Arduino ISPではそのままではMCが認識されずにスケッチが書き込めずエラーが出るようです。そこで無難に動作すればととりあえず Arduino ISPのavrdude.confを開いて編集する
desc = "ATMEGA1284P"; has_jtag = yes; stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one avr910_devcode = 0x74; # signature = 0x1e 0x97 0x06; (コメントアウト) signature = 0x1e 0x97 0x05; (追加)
2014年08月20日のツイート
@sri_vidyut: 前オーナーも含めてですが、オドメーターが30000kmを超えました
2014年06月06日のツイート
@sri_vidyut: よく知らないのでマイメロと見間違えた発言を某所でしちゃったw URL
2014年05月24日のツイート
@sri_vidyut: @nak1104 初めまして、フランス語のボーカルが入るやつですか?少し謎だったのでとてもしっくりすっきりしました。しかしExtra版の音楽も全体では結構楽しめた方であります!一面のアレンジも夕焼けの背景のスタートとマッチングしているし、スパルタカスの面とか好きです。
2014-05-24 04:17:25 via web to @nak1104
ebayにてC11P1303を入手
*Nexus7(2013)用バッテリー本体(C11P1303)の中包装等と付属の交換工具類
落札したものが http://goo.gl/53Ost7 でhttp://goo.gl/rmM1LS と同様品
ebayで出品されていて、所有しているNexus7のバッテリーの持ちは未だ大丈夫なものの、その入札額は約20002300円だった。送料含めて300円でも結構安いので、興味半分とこのデバイスの電池寿命不安の間の心境で入札してみておいたら、結構すんなりと落札出来た。エアキャップ入りの封筒の中のバッテリー本体の内袋はこんなのに入っていた。バッテリー本体の裏面などをよく見るとステンレス部分に凹みのような箇所があるので、通常価格帯の交換工具付属のキットが三千四百円程で [Buy it now] される通常のものに対して、型落ち品として競り用に安価な価格で出品されたものかもしれない。保障がつかないと不味いのと、分解に失敗する恐怖を踏まえて今のところ試しに交換してみるという予定は立てていな(かった)。でもこのバッテリーが弱くなっちゃうかもしれませんけどね。分解の仕方については、以下の頁をevernoteで保存しておいてみたが、念を押してアーカイブ化したものをGDriveなりに保存しておいた。
参考URL http://www.ifixit.com/Teardown/Nexus+7+2nd+Generation+Teardown/16072
やっぱり第二世代 N7 はこのアセンブリセットのようなバッテリーセットが微妙、ユーザーの自主交換を完全に否定な作りと思わしき、とはいえ、機能を詰め込む空間確保にも貢献しているのでしょうけどね。
[android] 実際バッテリー交換を試す
※保証が無効になりますし、別の故障時に自主分解した商品は修理対応が効かなくなる可能性があります。参考にされないことを推奨します。NCで
そして実際試しに Nexus7(2013)のバッテリー交換を試してみました。余り気持ちのよい作業じゃなかったです;
神経を使った所や嫌だった作業或いは要約
- セルのフレームの固定ネジがめっさ小さい
- 銅色のハーネスコネクタのシール剥がし
- ハーネスのコネクタの扱い
- フレームのネジが合わず、結局フレームのセルのみの移植作業をした。
- 分割した本体ケースが合わず組付けのやり直しを1回やった
- 入手した交換バッテリーが減っているか、残量0なのではという心配から作業を試したものの、実際は90%以上残っていたので、細かい充電サイクル寿命などを考えなければ保管しておくに問題なさそうだった。
ヘラの爪を入れるのは難しくないです。
結構隙間があります。半場ヘラの差し込めている場所を確保しながら、もう一つのヘラで分離していくような風の作業。タイヤレバーの作業と一部だけ似ている
ebayで入手したバッテリー
このハーネスの固定は白いプラのクランプの部分が画像で言うと手前側に倒れた状態で固定になっているので、それを起こして垂直(直立)の状態にし、開放状態にしてハーネスを抜く。右画像は白いクランプのコネクタからのハーネスの取り外しに成功
故障対応不可になるリスクを冒してシールを剥がし、銅色のハーネスのコネクタを外す。
左側の銅色のハーネス線(画像中央、作業中のコネクタ)は基板面に対して垂直方向に被せるコネクタなので、上に起こしてコネクタを外す
バッテリーのケーブルも上に起こして外す。そしてドライバーで純正のバッテリーのフレームの螺子を緩めていき、取り外す。※セルのフレーム周りのねじ類は非常に小さい。小さいのが4点 / 中位のが1点 / 大きくて皿部分に白いのが塗ってあるのが2点
- 左: ebayの入手品
- 右: 元の純正
結論として言うとセルの収納フレームが違うようです。ちょくちょくマイナーチェンジとかしているのでしょうか、それとも実は別製品用なのかな?なんとネジ穴の位置が全て合っていませんでした …全く同じじゃありません。ネジ穴の点数も違います。フレームごとそのまま入手したバッテリーを収納してみてもやっぱりネジ穴の箇所が全て合わない。試しに暫定的にでもネジ固定は諦めれば収納は出来るのではと、入手したバッテリーをフレームごと収めてみる事をまず試行してみた。交換元も交換先のセルもフレームにしっかり接着されていて、剥がそうとするとセルの形状が微妙に変わるのが不安でセルのみ交換はやりたくなかったので。あとで気がついたものの、本体を割る作業の前にSIMカードは外しておいたほうがいい。合わせるときも邪魔になるので外した状態のほうがやりやすい。
入手したバッテリーのフレームのネジ穴のところが合わなくて邪魔になるのでペンチで折り曲げて内側に反してみている。で、結論として本体カバー同士を合わせようとしたがぴったりはまりませんでした。結局両方共セルをフレームから剥がし、純正のフレームに交換するebayのセルを取付けて組付け直すことにしました・・・セルが変形してしまいそうなので、少しづつ差し込んだヘラを押し込んでフレームの両面テープをセルから剥がすという、気持ちの良くない作業だった。注意するべきは、手前側のハーネスのコネクタは、白いプラのクランプが立っている状態で開放ですが、写真で言って右に倒した状態で固定になるので、ハーネスの先端手前にある透明のビニールの取手を持ってしっかりと差しこみ部分に挿入し、白いプラのクランプを画像で右方向に倒します。奥の銅色のハーネスのコネクタははめ込んだ時にパチっとした感じの感触がしっかりありますが、コネクタがぴったり合わさっているかで慎重さが必要です。ひやひやの作業で脂汗が出まくっています;
(左画像) 形状が変化するのを気にしつつ、自分なりに少しづつ丁寧に剥がし終わった純正のほうのセル。(右画像) いきなり途中飛んでいますが、交換し終わり、完成しました。起動してみると充電状態は90%以上、保存の最適な充電状態云々を気にしなければ、試す範囲でも交換する必要は全然なかったかもしれなかったです;。バッテリーは2012年版のほうが交換しやすそうで羨ましい、2013年のほうは何度もやったらぶっ壊れそう。
閲覧してくれた方、ありがとうございました
参考にした資料
- http://www.ifixit.com/Teardown/Nexus+7+2nd+Generation+Teardown/16072
- https://www.youtube.com/watch?v=IG6A_RBX-v0
- https://www.youtube.com/watch?v=BUT6bZdITo8
- https://www.youtube.com/watch?v=hAlNuGrGDuU
- その他 "teardown" と "nexus7" と ( "next gen" とか "2013" )で検索