PIC24FJ64GB002でADKを試す(その2)

公開日: 電子工作 | , , , ,

 前回「PIC24FJ64GB002でADKを試す(その1)」では回路の説明までしたので、今回はその続きです。
ArduinoでADKを試したい方はこちらです)

PICのファームウェアプログラムのビルド方法~実際に動作するまで・・・

手順

  1. Android端末にデモアプリをインストール
  2. 回路を組み立てる
  3. PICプログラムのビルド環境
  4. PICプログラムの修正
  5. PICプログラムのビルド
  6. PICへの書き込み
  7. 実行(Androidとの接続)

なんか、順番がめちゃくちゃですが、まぁ適当に・・・

1.Android端末にデモアプリをインストール

前回説明しました通り、デモアプリは Android Market でも入手できます。
わざわざ、ビルドしなくても手っ取り早くインストールできます。

Basic Accessory Demo – Android Market

2.回路を組み立てる

前回説明しました通り、回路図をもとに回路を組み立てる。

 

3.PICプログラムのビルド環境

PICプログラムをビルドするには、

が必要になります。

MPLAB IDEは無料ですが、C30は一部機能(最適化)が有料(60日間の試用が可能)となっています。 今回のプログラムは最適化しなくてもビルドすることが可能なので、無料版でokです。

これらの環境のダウンロード・インストール方法は、どこか他の詳しいサイトを参照して下さい。

google検索 – mplab ide インストール

google検索 – mplab c30 インストール

現在C30は、Student Versionは無く、Standard-Eval Version となっているようです。 インストール途中で有料版・60日評価版・無料版を選択するよう促されます。
僕は現在 MPLAB IDE がバージョン 8.66 、C30 がバージョン 3.25 を使っています。
インストール先はデフォルト設定です。

 

4.PICプログラムの修正

一つ一つ説明するのは大変なので、修正したファイルをアップしておきます。(ついでにHEXファイルも)

PICのプログラムは前回述べた通り、PIC24FJ64GB004 PIM用の物を修正して使います。

修正するポイントは、

  • プロジェクトのターゲットデバイスの変更(project)
  • CONFIGの書き換え(main.c)
  • PLL動作の為のコード追加(main.c)
  • LED・ボタン等のPin割り当ての変更(HardwareProfile.h)

こんな感じでしょうか・・・他にも何かあったかも・・・(ぇ

修正した付近にコメントで //futaba と明記していますので、詳しく知りたい方は、その周辺を PIC24FJ64GB004 PIM用の物と見比べて下さい。

修正後のファイル
 

ソースファイルの中には、ビルドに必要なソースファイルが一式入っています。
そして、ビルド済みのHEXファイルも用意しました。
HIDブートローダー対応のHEXファイルも同梱していますので、PIC用のプログラムライターを持っていなくても PIC24FJ64GB002マイコンボード 等で PCとUSB接続するだけで書き込むことが出来ると思います。
(誰か試せる方居たら、動作報告お願いできませんかね?)

 

5.PICプログラムのビルド

ビルド済みのHEXファイルをアップしてるので、そちらを使えばビルドは不要ですが、その方法を簡単に説明しておきます。

DLしたソースファイルの中のプロジェクトファイル

  • Basic Android Accessory Demo – C30 – PIC24FJ64GB002.mcp

を、MPLAB IDEで開きます。
そして、メニューから

Project > Build All

を実行すると、PICに書き込みができる HEXファイルが出来上がります。
ビルドはこれだけ。

mplab-buildall

出来上がったプログラムは 約5Kワードのメモリを消費しています。
ちなみに、UARTライブラリを使うと、2倍(10Kワード)程に膨れました、メモリ半分の PIC24FJ32GB002 だと、厳しいレベルかも・・・

mplab-memory-usage

 

6.PICへの書き込み

PICへプログラムを書き込むには、プログラムライターが必要です。
プログラムライターは色々市販されていますが、古いライターだと新しいPICに対応していない場合があります。
新しく購入す場合、PIC24FJ64GB002に対応するかを調べておきましょう。僕はPICKit3を使って書き込んでいます。

回路図には、PICKit3を接続する配線も示していますので、この通り接続していればMPLAB IDEからビルド→書き込みと言った操作や、PICKit付属のソフトを使ってプログラムを書き込むことが出来ます。

これらの説明も、解説をしているサイトが沢山あるので、そちらをご覧下さい。

google検索 – pickit3 使い方

 

HIDブートローダーを使う方法もあります。
PIC24FJ64GB002に1度HIDブートローダー・プログラムを書き込んでおく必要があり、新品のPICは何も書き込まれてないのでHIDブートローダー方式の書き込みは出来ません。

google検索 – pic HIDブートローダー

7.実行(Androidと接続)

電源を接続して、USBケーブルでAndroidと接続するとアプリが自動で起動します。
続きは動画で・・・

Open Accessory  to UART みたいな事もPICを使えば1チップで出来ます。
これをモジュール化できれば、既存の回路が簡単にAndroid Accessory化できますねぇ

 

最後に

PICでAndroid Open Accessoryを使おうとすると、Arduinoと比べると、プログラムや回路が難しくなります。 ですが、その代わりに、回路が小型にできたり、制作コストが安くできたりと利点は多いです。

有る程度Arduinoで作れるようになった後は、このPICに挑戦してみるのはいかがでしょうか?

 

関連記事

Raspberry Pi - Ethernet

Raspberry Pi インターネット接続

Raspberry Piをインターネットに接続してみた。 有線で接続(Ethern

記事を読む

no image

米粒AVRのEAGLEライブラリ

EAGLEを使って米粒AVR(ATtiny10)の回路図を書こうと思ったら何か様子がおかしい。

記事を読む

no image

Wimeji Client for Arduino

前回紹介したWimeji Client for WindowsXPをArduinoでやってみました。

記事を読む

秋月電子 リアルタイムクロック(RTC)モジュール

秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを買ったので、ちょっと試してみま

記事を読む

no image

Android+Arduinoでリモコン3 その1(AndroidAccessory接続)

何度か、Android+リモコンのネタを書いたことがあるのですが、今回はAndroid Access

記事を読む

no image

SoundIRModemライブラリのサンプル

 SoundIRModemライブラリは、米粒AVR(Tiny10)とAndroid端末をイ

記事を読む

Arduinoで温湿度計

Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前「パソコンで温度計」と言うもの

記事を読む

no image

Android + Bluetooth + Arduino

 以前書いた『気になる物』で紹介したBluetoothモジュールですが、本当に気になって実

記事を読む

no image

気になる物

HT-03Aで使えるのかどうかは知らないけど、Bluetooth-シリアルモジュール(BT-MOD1

記事を読む

no image

米粒AVRでLチカ

  米粒AVR(ATtiny10)でLチカしてみました。 LチカとはLEDをチカチカと

記事を読む

Comment (16件)

  1. blackmaou

    はじめまして。
    有用&魅力的な情報を提供していただき感謝です!
    早速、僕もやってみたくなり、android 2.3.4機は持ってなかったのでHT-03AをGingerYoshiで2.3.4にして公開いただいているソースで試させていただきました。
    結果は残念ながらHT-03Aではダメだったようで、近々nexusを入手して再チャレンジしてみようと思います。
    時々おじゃますると思いますが、よろしくお願いします。

    1. Futaba

      ようこそ、いらっしゃいませ^^
      こちらこそよろしくお願いします。

      2.3.4なHT03Aでは、OpenAccessoryは動かないと噂では聞いたことが有るのですが、本当なんですね・・・
      HT03Aも2年目を迎えるので、思い切ってROM載せ替えに挑戦してみようかと思ってたのですが、残念です。
      情報ありがとうございました。

  2. Cristian

    Hello,
    for me don’t work.

    If I load your hex file its seems to work fine, but if I try to compile your code it raise error:

    main.c:85: error: ‘SOSCSEL_IO’ undeclared here (not in a function)

    So I have added definition as:
    #define PLL_96MHZ_OFF 0xFFFF
    #define PLL_96MHZ_ON 0xF7FF
    + #define SOSCSEL_IO 0xFCFF

    So compilation end succesfully, but if I run it in Debug mode:

    PK3Err0040: The target device is not ready for debugging.
    Please check your configuration bit settings and program
    the device before proceeding.

    Changing PLL96MHZ_ON to PLL96MHZ_OFF it works fine!

    Your code is really good, I’m not understood why you add this code:

    {
    unsigned int pll_startup_counter = 600;
    CLKDIVbits.PLLEN = 1;
    while(pll_startup_counter–);
    }

    AD1PCFG = 0xffff;
    CLKDIV = 0×0000; // Set PLL prescaler (1:1)

    Really thank’s, your work is very very helpfull!!

    1. Futaba

      hello Cristian
      thank you for comment.

      I do not understand why SOSCSEL_IO is not defined.
      It is the one originally defined in the header file in the compiler.

      The code that I added is a code necessary to operate by 8MHz Internal oscillator.
      Internal oscillator is set to 96MHz PLL mode.
      In this circuit, external oscillator is not necessary.

      I also do not understand much.
      Because the source is made ​​of mostly copying and pasting.

      thanks :D

  3. 渡辺

    HTC Aria + 掲載回路図 で動作に成功しました。感動です!細かな情報ありがとうございました。

    その1の掲載回路図ですがUSB-AコネクタのD-とD+が入れ違っていると思います、確認してみてください。2ピンがD-信号、3ピンがD+信号が正しいかと。

    1. 渡辺

      補足です、HT03A+GingerYoshi 1.1も持ち合わせていたので同じブレッドボードで試しましたが、動作しませんでした。
      GingerYoshi 1.1のビルド番号がGRI40なのでバージョン表記のAndroid 2.3.4は誤記だと思います。正しくは2.3.3だと思います。

    2. Futaba

      ご指摘ありがとうございます。
      遅くなりましたが、USBコネクタのピン番号修正しておきました。

      HT03AではAndroidAccessoryでは無く、Microbridgeがオススメです!

  4. Pilar Bojorquez

    Hi Futaba,

    Your example works OK!!!, thank you very much for sharing with us
    If not too much to ask you, could you share the application code of of Android to Uart?

    Regards

    Pilar

    1. Futaba

      Hi, thank you for comment.
      I’m sorry.
      I have no plans to share the code.

  5. ROAD-G

    こんにちは、素晴らしい情報ありがとうございます。

    私も興味があり回路どうりやってみたのですが、うまくいかなくて悩んでおります。

    現在、MichrochipのアプリでUSBは繋がっている事になっているのですが、他が反応しません。

    端末はoptimus pad l-06cを使用してます、バージョンは3.1です。

    アドバイスの方ありましたらよろしくお願いします。

    1. Futaba

      コメントありがとうございます。
      詳細が分からないのでアドバイスは難しいですが・・・
      Michrochipのアプリが反応しているのであれば、PICの動きは正常だと思います。
      問題は「他が反応しません」の「他」の部分かと思いますので、その部分の配線等を見直されてはいかがでしょうか?。

  6. ROAD-G

    返信ありがとうございます。

    スイッチもボリュームもLEDも反応がない状態です。

    何度もばらしたりしているんですが、、、

    OSはUSBが反応しているということなので対応はしていると考えて問題はないですかね?

    1. Futaba

      こんばんは、
      optimus pad l-06cであれば、OSは問題無いと思います。
      実際に試したわけではありませんが、検索するとADKが動いたと言う記事がヒットしたので・・・

      「USBが反応」と言うのは、アプリが反応していると言うことですよね?
      もしかすると、単純に充電が始まるだけなのでしょうか?

      ちなみに、PICが正しく動作していれば、Androidに接続しただけで、自動でアプリが起動すると思います。

  7. ROAD-G

    返信ありがとうございます。

    すいません、USBを繫いだ際にアプリケーションが起動すると言う意味でした。

    OSが問題なくて、繫いだ際にアプリが起動すると言う事はPICにも問題はない、やはり考えられるのは回路ですよね?

    もう一度バラして回路を組直してみます!

    1. Futaba

      アプリが起動するのであれば、PIC~Android間での通信が成功しているので、やはりPICのプログラムは正しく動いていると思います。
      後は・・・配線くらいしか想像が付かないのですが・・・
      お役に立てずにすみません。

  8. gabriel medina

    hello i program the hex files but any work i shure that the hardware itś ok, i think tha the code is broken for the hardware picture

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑