N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
[AVR Studio 5] "Empty AVR GCC Project" が無い!!
VR Studio 5を導入して、いきなり躓くの巻

チュートリアルでは、 new project後に まず"Empty AVR GCC Project"を選択するとなっているが、



私の環境では…

no_empty_project

"Empty AVR GCC Project"が表示されないので、その先に進めない…

対策は、こちらのブログ記事が解決させてくれました。Thanks!
秘密倉庫「AVR Studio 5」
http://ain.txt-nifty.com/storage/2011/06/avr-studio-5.html

実際は、zipファイルを1つコピーするだけ。
具体的には、 C:¥Program Files¥Atmel¥AVR Studio 5.0¥projecttemplates¥AvrGCC¥C¥1033¥Avrgcc.zip をユーザのProject Templateフォルダにコピーして、AVRStudioを再起動します。なお、このコピー先フォルダは、D:¥Common¥My Documents¥AVRStudio¥Templates¥ProjectTemplates¥AvrGCC あたりです。

すると、今度はちゃんと表示された(テンプレート名が微妙に異なってるが...)

with_empty_project

なお、別の対策として、ツールの言語設定を"日本語"じゃなく、"English"にしてもよい。
(ツール>オプション>Environment>国際対応の設定)

それにしても、いきなりプロジェクトが作るところから使えないなんて、ATMELさん、いかに他の言語環境でテストしていないかバレバレです。
こういったツールは、動作実績の高いEnglish設定で使うほうが、あとあと苦労が少ないかもしれないね。

| その他 | 09:17 | - | - |
簡単!ATmega328Pにブートローダを書きこむ
ブートローダが書き込まれていないATmega328PにArduinoのブートローダを書き込む簡単な方法です。
(追記 2015/03/16 第2弾を書きました http://blog-yama.a-quest.com/?eid=970164 )

用意するもの
  1. Arduino Uno
  2. ブレッドボード
  3. ATmega328P
  4. ArduinoIDE
  5. 書き込み用のスケッチ(後述)

作業
ブレッドボードとArduino Unoを配線します。

(画像はarduino.ccより)

書き込み用のスケッチをUnoに書く
スケッチは、下記からダウンロードして、Unoにアップロードします。
ちなみに、これを書いた人はUnoのブートローダを作成された方のようです。

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295516707
の 最初の記事内にあるリンク optifix.zip

スケッチのビルドやアップロード方法は基本事項なので省略。
OptifixスケッチのUpload直後に、Serial Monitor(ArduinoIDEの tool>serial monitor)を起動すると、以下のように表示され、これでブートローダが書きこまれました。
ね、簡単でしょ!
※ブートローダを書き込んだ後は外部クロック設定になりますので、2度目からは書き込めません!
OptiFix Bootstrap programmer.
2011 by Bill Westfield (WestfW)

Starting Program Mode [OK]

Reading signature:950F
Searching for image...
  Found "optiboot_atmega328.hex" for atmega328
  Start address at 7E00
  Total bytes read: 508

Setting fuses for programming
  Lock: 3F FFE000  Low: FF FFA000  High: DE FFA800  Ext: 5 FFA400

Programming bootloader: 512 bytes at 0x3F00
  Commit Page: 3F00:3F00
  Commit Page: 3F40:3F40
  Commit Page: 3F80:3F80
  Commit Page: 3FC0:3FC0

Restoring normal fuses
  Lock: F FFE000

Type 'G' or hit RESET for next chip


ブートローダのバージョン
UnoのATmega328PにはOptibootと呼ばれる512バイト以下の小さなブートローダが入っています。
今回の方法で書き込んだブートローダ(以下、Optifix)と、Arduino Uno(R2)のものと比較したところ、微妙に異なっています。Optifixのほうが新しいようです(2011/09)。
Unoのブートローダは、28672byte以上の大きなスケッチを書こうとすると、次のエラーが出てたのですが、Optifixではちゃんと書き込めるようになっています。
 
 avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64
 avrdude: failed to write flash memory, rc=-4
 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

フューズの違い
フューズの設定はUnoとOptifixでは微妙に違います。EESAVEだけですので、EEPROM使う人はちょっと気をつけてください。
 
 Uno:     Low:FF HI:D6 Ext:FD
 Optifix: Low:FF HI:DE Ext:FD

あとがき
この簡単な方法を見つけるのに、相当な時間と結局 AVRISPも購入することになるなど、かなり苦労しました。もっとも躓いたところが、クロック関連です。ATmega328Pは工場出荷時には、内臓の 8MHz(内部でさらに分周)のオシレータを使うように初期設定されていますが、ブートローダを書く途中で失敗すると、フューズの設定が外部クロックに変わってしまい、それ以降、ターゲットのATmegaが動かなくなってしまいます。これは、今回の方法でブートローダの書き込みもできなくなることを意味します。
Arduino IDEのBurn Bootloader コマンドで途中失敗した場合も、フューズの値が書き換わってしまったので要注意です。
ブートローダの上書きや、ほかの方法を試してみて失敗してる場合などは、面倒がらずに、最初からターゲットにも8MHzや16MHzの水晶発振子やセラミック発振子をつけておくと良いですね。うまくいかないときは、まずはコレからです。

参考にしたサイト

Using an Arduino as an AVR ISP (In-System Programmer)
http://arduino.cc/en/Tutorial/ArduinoISP

Arduino を AVR  プログラマ(ISP: In-System Programmer)として使う
http://n.mtng.org/ele/arduino/ArduinoISP.html


 
| その他 | 18:17 | - | - |
【Android開発】UnsatisfiedLinkError
 Android 環境でJNIを使ったプログラミングにおいて、

実行時に"UnsatisfiedLinkError"の例外を吐く。
LogCat上には、 "No implementation found for native ..." のエラーメッセージ。

あれこれ試した結果、
メソッド名にアンダーバーを使うのはダメなようだ。

    public native String hello();        // OK
    public native String hello_hoge();    // NG

同様に、パッケージ名にもアンダーバーを含めるのはNGっぽい。
CやC++ではドットが名前に使えないから、Javaのクラス階層をドットの代わりにアンダーバーを使っている?


| その他 | 11:37 | - | - |
[Android開発]不明なエラー
Eclipse上でAndroid開発中、下記のエラー発生。
不明なエラー, java.lang.NullPointerException, <proj name>, 不明, Android Packageing Problem
エラー場所が特定されていないので原因もよくわからず。
ネットで調べたら、”キーストアの有効期限切れ”ってのもありましたが、私の場合は他のプロジェクトは問題なかったのでこれは原因ではないようで・・・
いろいろ時間をかけてしまったけど、次の方法であっさり解決!

menu>プロジェクト>クリーン で対象プロジェクトのClean

| その他 | 10:02 | - | - |
Excel デフォルトのセルの書式を"文字列"に設定する
Excelのセルの書式は、デフォルトでは"標準"ってものになるが、
この書式がクセモノで、まれに予期しない変換を勝手に加えて、トラブルの原因となったことが幾度とある。

そこで、エクセルで新規文書を作ったとき、すべてのセルを”文字列”になるようにした。
これで、データを読み込んだときなどにも、余計な変換をしなくなる。
書式を、数値とか日付で表現したいときは、あとから自分で設定すればよいだけ。


  1. Excelを起動し、空白のブックを新規作成。
  2. Ctrl+Aですべてのセルを選択し(少し時間がかかる)、
  3. 書式>セル>表示形式/分類で、文字列を選択。
  4. A1セルを選択して、すべての選択を解除。
  5. ファイル>名前を付けて保存で、ファイルの種類を「テンプレート(xlt)」、ファイル名を「book.xlt」とし、「C:¥Program Files¥Microsoft Office¥Office11¥XLStart」フォルダに保存。

これで、次にExcelを起動したり、新規Bookを作ったとき、すべてのセルの書式が文字列になっているはず。

検証環境:Excel2003
エクセルのバージョンによっては、XLStartのパスが異なる模様。

XLStartをつかえば、セルの書式意外にも、いろいろデフォルトとして設定できるね。




| その他 | 09:49 | - | - |
「誰だっけ?」をリリース(iPhone App.)
JUGEMテーマ:コンピュータ
 
iPhoneアプリ「誰だっけ?」をリリースしました。
簡単にいえば、著名人の名前を思い出すためのツールです。

最近、人の名前が出てこないことが増えてきたような気がします。
そもそも芸能人の名前などは、覚える気力自体が無くなっているのかも。
でも、たまに「あの人、誰だっけ?」ってことがあるわけで、
名前が出てこない・・・話が先に進まない!・・・イライラ
そんなわけで作成したアプリケーションです。

その人に関連するキーワード、例えば、出ているドラマやCMの名前など、思いつく単語を入力して検索をかけると、人名候補が出力されます。

関連キーワードはネット上の情報から拾ってくる仕組みですので、最新の話題の言葉でも検索できるようになっています。
ただし、検索候補は、予め登録されている約27,000人から抽出しますので、例えば、あなたの友人の名前は出てこないです。たぶん。

この約27,000人のリストに、個別に人名を追加する機能もありますが、これはあまり使い道が無いかな。でも、同時にその名前をこちらにリクエストできますので、これを今後のデータ更新の参考にさせていただきたいと考えています。


「誰だっけ?」紹介ページ
iTunes Previewへのリンク

| その他 | 10:37 | comments(0) | - |
メールが送信できない!
メールが、受信はできるのだけど、送信ができなくなった。
ちなみに、こちらで使用しているメールサーバーは、
インターネットのプロバイダとは異なるところ。

今回、光回線とプロバイダを変更したので、それが原因と思い、
検索してみれば、「Outbound Port25 Blocking」って、
SMTPでポート番号25が使えなくなるのが原因らしいというのが判った。

そこで、メーラのSMTPポートを25番から587番に変更してみたのだが、
相変わらず送信できない。
状況は、SMTPサーバーにアクセスしようとすると、数秒してから
「421 cannot connect to smtp server」
とエラーが返る。

認証設定を変えたりと、色々やってみたけれど、SMTPサーバに接続できない。

あれこれ、半日悩んだ結果・・・

なんと、原因は、avast! だった。

avastのメールシールドを停止すると、ちゃんと送信できた。

これに気づいたら、あとは簡単。

avastのコントロールパネルから、
リアルタイムシールド/メールシールド/[詳細な設定]ボタン押下
SSLアカウントの、SMTPのポートを25から587に変更して[OK]ボタン。
以上。

もし、使っているホストの名前が見当たらなかったら、
ホスト名:xxx.jp プロトコル:SMTP ポート:587 暗号:無し 
行を追加すればよいだろう。

ご参考まで
| その他 | 21:10 | comments(5) | - |
gcc 4.2.1 最適化オプションのバグ?
iPhone用のライブラリを作ってて、結果がおかしいので原因を探っていたのだが、どうもコンパイラ(のOptimizer)のバグかも知れない。
下記のソースをgcc 4.2.1 で -Os オプションを付けてビルド実行すると、
本来は0が返るはずなのに、終了コードが255になる。
gStrがunsigned でなく、signedになっているようだ。


const unsigned char gStr[3]="¥x82¥xAC"; // NG
//const unsigned char *gStr="¥x82¥xAC"; // OK
int main(int ac, char **av)
{
//const unsigned char gStr[3]="¥x82¥xAC"; // OK
 const unsigned char cc=0x82;
 if(gStr[0]==cc)
  return 0;
 else
  return 0xff;
}


ちなみに、終了コードの確認は、実行後に次のコマンドで。
$ echo $?


なお、gcc 4.2.1 で、-Osの他に-O2 -O3でも255を返す。
また、最適化無しや-O1で、最適化レベルをかなり下げると、0を返すようになる。
また、gcc 4.0.1, gcc 4.3.4 では、この問題が発生しない模様。

さて、Xcodeのコンパイラを4.3に変更するか、それとも、4.0で作るか…

関連リンクおしえてgoo
| その他 | 18:47 | comments(0) | - |
twitterはじめました
twitter始めてみました。
ユーザー名は、nyaqu です。
フォーローはご自由にどうぞ。
| その他 | 19:10 | comments(0) | - |
iPod shuffleのイヤホンを取り替える(PHILIPS SHE9700編)
第3世代のiPod shuffle 、純正のイヤホンのケーブル途中についているコントローラでしか操作できないんですよね。
3rdパーティのイヤホンが使えないってこと!?
というわけで、スピーカードライバー部分を、お気に入りのPHILIPS SHE9700に付け替えてみました。

今回の交換(改造)作業のきっかけとなった動画です。まずはこれを観てイメージをつかみます。



上の動画では、iPodのイヤホンの分解を、簡単に手で行ってましたが、私の場合はそうはいかず、ラバーとの境に円周状にカッターをあててはずしました。こちらは、もう使わないのでかなり乱暴に作業できます。

SHE9700側は丁寧に分解します。
まずは、ケーブル根元側のL/Rが印刷されていた部品をはずします。
接着しているだけですので、カッターで丁寧にこじ開けます。下側(イヤホンジャック側)から開けていくと良いようです。


こじ開けるとケーブルが見える。
千枚通しなど先のとがったもので接着剤を丁寧に取り除き、ケーブルが抜けるように。

次に、ドライバー部分を2つに分割。ここも接着してあるだけなので、円周状の切れ目にそって軽く数箇所カッターの刃をあてていく。刃を深く差し込まなくてもOK!


ドライバー部分が2つに分かれた。


根元側からコードを引いてから・・・


スピーカ(?)側に引き抜く。


半田こてで配線を外す。あとで極性が逆にならないように、コードの色とユニット側の色を記録しておくこと。
ちなみに、配線コードの色は iPodとSHE9700で同じでした。
 Green: Left
 Red:  Right
 Clear:Common



コードの先端部分で切断。この金属部品は再利用します。



ニッパーで軽くおさえながら、コードを引き抜く。接着剤がついているので簡単ではありません。途中でコードが切れてしまっても、精密ドライバー等でこじりながらなんとか再利用できるようにします。


分解したiPhoneのコードの先端に金属部品を装着。
おっと、その前に!!!
ケースにコードを通しておくことを忘れないこと。
コードと金属部品は瞬間接着剤で固定します(先端側のみ)。


ユニットとコードを半田付けします。クリア色のコードは、ユニットの緑側です。
あとは、組み立てるだけ。


2つに分割したドライバー部を接着剤で再度くっつけます。
下側に切れ込みが一箇所ありますので、向きはこれにあわせればOK。

コードが切断されないように、コードが顔をだしている部分にも接着剤を詰めておきます。こちらは柔軟性のある接着剤を使用しました。
同時に最初に外したL/Rの印刷された部品を接着。

はみ出した接着剤をシンナーでかるく拭き取って・・・
PHILIPSのロゴが消えかかってしまいました。
ちゃんと前もってマスキングしておけば良かった。

もう一方も同じように作業して・・・
ドライバーは左右で形状が異なりますので、片方づつ作業したほうが間違いがないです。

Shuffleイヤホン交換改造
はい、完成。
ケーブルとドライバーの色が合っていませんが、気にしない。

お約束:リスクがありますので、もしチャレンジされる場合は自己責任で。
| その他 | 17:03 | comments(0) | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND