#ファームウェア作成
Android Open Accessoryとして動作させるためのファームウェアを準備し、作成した回路の動作確認を行います。
##ダウンロードファイル
-
Microchipアプリケーション用ライブラリ v2016-11-07(2016/12/30現在)
[最新MLA]タブ内にリンクがあります
##インストール
Microchipアプリケーション用ライブラリをインストールします。
インストール中にコンポーネントを選択する画面が表示されますが、「Smartphone Demo Projects」が必須となります。(その他は任意です)
##プロジェクトの設定
- PICKit3をPCと接続します
- MPLAB X IDEを起動します
- メニューバーの「File」-「Open Project」を実行します
- Microchipアプリケーション用ライブラリインストールフォルダ内の「mla\v2016_11_07\apps\smartphone\android\aoa_basic_io\firmware\MPLAB.X」を開きます。
(デフォルトでは「c:\microchip\mla\v2016_11_07\apps\smartphone\android\aoa_basic_io\firmware\MPLAB.X」となります) - プロジェクト「Basic Android Accessory Demo」がデフォルトプロジェクトになっていない場合(プロジェクト名がボールドになっていない)、プロジェクト「Basic Android Accessory Demo」を右クリックしてコンテキストメニューを開き、Set as Main Projectを実行します
- プロジェクト「Basic Android Accessory Demo」を右クリックしてコンテキストメニューを開き、Propertiesを実行します
- Project Propertiesダイアログが開かれますので、以下の作業を順に行います
- リボンバーにあるドロップダウンリストから「PIC24FJ64GB004_PIM」を選択します
##ファームウェアの構築
現状ではPIC24FJ64GB004用のソースとなっているため、今回使用する環境に合わせてソースを修正していきます。
本来は各ボタン、各LEDをそれぞれのピンに割り当てますが、今回はボタン(IR入力)、LEDともに1つずつしか使用しないため、ボタン、LEDをそれぞれ1つのピンにまとめて割り当てています。
- Source Files - app - main.c 抜粋
int main(void)
{
// 追記
CLKDIV = 0x0000; // System Clock Freq. = 32MHz
SYSTEM_Initialize(SYSTEM_STATE_DEFAULT);
APP_AndroidBasicIOInitialize();
USBHostInit(0);
while(1)
{
//Keep the USB stack running
USBHostTasks();
AndroidTasks();
APP_AndroidBasicIOTasks();
}
}
- Source Files - app - system_config - exp16 - pic24fj64gb004_pim - system.c 抜粋
/** CONFIGURATION Bits **********************************************/
#pragma config WDTPS = PS1
#pragma config FWPSA = PR32
#pragma config WINDIS = OFF
#pragma config FWDTEN = OFF
#pragma config ICS = PGx1
#pragma config GWRP = OFF
#pragma config GCP = OFF
#pragma config JTAGEN = OFF
//#pragma config POSCMOD = HS //下記に修正
#pragma config POSCMOD = NONE
#pragma config I2C1SEL = PRI
#pragma config IOL1WAY = OFF
#pragma config OSCIOFNC = ON
//#pragma config FCKSM = CSDCMD //下記に修正
#pragma config FCKSM = CSECME
//#pragma config FNOSC = PRIPLL //下記に修正
#pragma config FNOSC = FRCPLL
#pragma config PLL96MHZ = ON
#pragma config PLLDIV = DIV2
#pragma config IESO = OFF
#pragma config WPFP = WPFP0
//#pragma config SOSCSEL = SOSC //下記に修正
#pragma config SOSCSEL = IO
#pragma config WUTSEL = LEG
#pragma config WPDIS = WPDIS
#pragma config WPCFG = WPCFGDIS
#pragma config WPEND = WPENDMEM
#pragma config DSWDTPS = DSWDTPS3
#pragma config DSWDTOSC = LPRC
//#pragma config RTCOSC = SOSC //下記に修正
#pragma config RTCOSC = LPRC
#pragma config DSBOREN = OFF
#pragma config DSWDTEN = OFF
- Source Files - bsp - exp16 - pic24fj64gb004_pim - buttons.c 抜粋
/*** Button Definitions *********************************************/
// S1 is MCLR button
//#define S3_PORT PORTAbits.RA10 //下記に修正
#define S3_PORT PORTBbits.RB5 //Overlaps with D3
//#define S6_PORT PORTAbits.RA9 //下記に修正
#define S6_PORT PORTBbits.RB5 //Overlaps with D7
//#define S5_PORT PORTCbits.RC6 //下記に修正
#define S5_PORT PORTBbits.RB5 //Overlaps with D10
//#define S4_PORT PORTAbits.RA7 //下記に修正
#define S4_PORT PORTBbits.RB5 //Overlaps with D4
//#define S3_TRIS TRISAbits.TRISA10 //下記に修正
#define S3_TRIS TRISBbits.TRISB5
//#define S6_TRIS TRISAbits.TRISA9 //下記に修正
#define S6_TRIS TRISBbits.TRISB5
//#define S5_TRIS TRISCbits.TRISC6 //下記に修正
#define S5_TRIS TRISBbits.TRISB5
//#define S4_TRIS TRISAbits.TRISA7 //下記に修正
#define S4_TRIS TRISBbits.TRISB5
- Source Files - bsp - exp16 - pic24fj64gb004_pim - leds.c 抜粋
//#define LED_D3_LAT LATAbits.LATA10 //下記に修正
#define LED_D3_LAT LATBbits.LATB15 //Overlaps with S3
//#define LED_D4_LAT LATAbits.LATA7 //下記に修正
#define LED_D4_LAT LATBbits.LATB15 //Overlaps with S4
//#define LED_D5_LAT LATBbits.LATB3 //下記に修正
#define LED_D5_LAT LATBbits.LATB15
//#define LED_D6_LAT LATBbits.LATB2 //下記に修正
#define LED_D6_LAT LATBbits.LATB15
//#define LED_D7_LAT LATAbits.LATA9 //下記に修正
#define LED_D7_LAT LATBbits.LATB15 //Overlaps with S6
//#define LED_D8_LAT LATAbits.LATA8 //下記に修正
#define LED_D8_LAT LATBbits.LATB15
//#define LED_D9_LAT LATCbits.LATC5 //下記に修正
#define LED_D9_LAT LATBbits.LATB15
//#define LED_D10_LAT LATCbits.LATC6 //下記に修正
#define LED_D10_LAT LATBbits.LATB15 //Overlaps with S5
//#define LED_D3_TRIS TRISAbits.TRISA10 //下記に修正
#define LED_D3_TRIS TRISBbits.TRISB15
//#define LED_D4_TRIS TRISAbits.TRISA7 //下記に修正
#define LED_D4_TRIS TRISBbits.TRISB15
//#define LED_D5_TRIS TRISBbits.TRISB3 //下記に修正
#define LED_D5_TRIS TRISBbits.TRISB15
//#define LED_D6_TRIS TRISBbits.TRISB2 //下記に修正
#define LED_D6_TRIS TRISBbits.TRISB15
//#define LED_D7_TRIS TRISAbits.TRISA9 //下記に修正
#define LED_D7_TRIS TRISBbits.TRISB15
//#define LED_D8_TRIS TRISAbits.TRISA8 //下記に修正
#define LED_D8_TRIS TRISBbits.TRISB15
//#define LED_D9_TRIS TRISCbits.TRISC5 //下記に修正
#define LED_D9_TRIS TRISBbits.TRISB15
//#define LED_D10_TRIS TRISCbits.TRISC6 //下記に修正
#define LED_D10_TRIS TRISBbits.TRISB15
-
PICでAndroid Open Accessoryをつくる:02で作成したブレッドボードにPICKit3を接続します
-
リボンバーから「Make and Program Device Main Project」を実行し、PICにプログラムを書き込みます
##動作確認
- 上記の作業で準備した、ファームウェアの書き込まれたPICをPICでAndroid Open Accessoryをつくる:03で作成したブレッドボードに設置します
- 電源用マイクロUSBコネクタにACアダプタを接続したうえで、USBコネクタをAndroidに接続します
- Anrdoid上に下記のようなメッセージが表示されますので、Android Playを開きます
- Microchip社の「基本的なアクセサリデモ(Basic Accessory Demo」が開くので、インストールします
- インストール後、アプリケーションを開くと下記のようなメッセージが表示されるので、OKとします(チェックボックスはチェックしません)
- LED制御の左端をクリックし、下記のような状態にすると、LEDが点灯します
- IR受信機に向け赤外線リモコンを操作すると、操作している間プッシュボタン状態が「Not pressed」と「Pressed」が点滅します
##今後
これで作成した回路の検証は終了です。
次回は、赤外線リモコン受信アプリケーション用にファームウェアの微調整を行います。
##参考にさせていただいたサイトについて
- main.c及びsystem.cの修正内容
MicrochipのUSB内蔵PICマイコンで楽々USB機器開発 2014年版