投稿

3月, 2012の投稿を表示しています

Deltangのモジュールのテスト(その2)

送信モジュールが不良品ぽい。 バインドはされているけどジョイスティックを操作しても受信モジュールのサーボ出力もESCも変化しない。 送信モジュールが2個あったので交換してみたが今度はバインドもされない。 モジュールに同封されていたペラ紙を見比べてみると、書かれているソフトバージョンが違う。 一応バインドしてくれる物は V1.1.3 バインドもされない物は V1.1.2 サイトを調べてみると、送信モジュールの最新バージョンは1.1.5らしい。 2世代も古いじゃん! 状況をメールすると速攻で返答有り。 (サポートは早い・・・) 昨夜に続いてメールのやりとりの結果は、 So I think Rx31 is working correctly and the problem is with Tx1. Perhaps the joystick is faulty. 仕方ない。ジョイスティックは諦めてPPM信号を突っ込んでみるか・・・

Deltangのモジュールのテスト

イメージ
マイコンから送信モジュールへPPM信号を送り込む前に、モジュール単体での通信テストを実施。 TX1-Jというジョイスティック付きモジュールと、Rx31という受信モジュールの組み合わせ。 PCオシロでジョイスティックを上下左右動かしながら、Rx31のサーボ出力を観測。 LEDの点灯状態からするとバインドはできている。 ところが、ジョイスティックでCH1とCH2の信号が変化するはずが、うんともすんとも変化しない。 もしかしてCH3やCH4が変化してるのか?と観測したが同じ。 ジョイスティック操作の前におまじないでも必要なのか? モジュールのソフトバージョンの組み合わせが悪い? 良く判らんので、deltangへメールで問い合わせ・・・ --- 寝ようと思ったら早速返事が飛んできた。(UKってまだPM3時か~) やりとりの結果によると、飛行機用なのでディフォルト設定では出力変化が非常に遅いからじゃないか?と。 明日、スピード設定を変更してみる事にします。 Good Night!

2.4GHz版プロポ作製-PPM信号制御編

イメージ
プロポ用のPPM信号出力が可能になりました。 1.動作仕様 ボリューム1の値をAN0で読み出してCH1のパルス幅に反映。 ボリューム2の値をAN1で読み出してCH2のパルス幅に反映。 USB経由でPCへAN0、AN1の読み出し値と、CH1、CH2のパルス幅値を送信。 PPM信号仕様   チャンネル数 7チャンネル   フレーム周期 22msec   各チャンネルのスタートパルス幅 300usec          2.動作波形 下波形はTimer割り込みで生成しているフレーム周期出力 上波形はCCPモジュールのコンペア割り込みで生成してるPPM信号出力 3.プログラムの概要 PICに搭載されていたCCPモジュールのコンペア機能のおかげでフローは非常にシンプルです。(プログラムはSimple is Best!) 1)PPMのフレーム周期でTimer1割り込みをグルグル回しておく。 2)PIC18シリーズの割り込みは2レベルしか無い(買ってから判ったので仕方ない・・・)ので、Timer1割り込みとはズレたタイミングから、PPM信号のフレーム開始位置を定義。 3)Timer1のカウント値とCCP1のコンペア値がマッチしたら割り込みを発生させる様にする。 4)CCP1割り込みの度に、ポート出力と次のCCP1割り込みの発生タイミングを書き換える。 これだけ! メインループ PPM信号のシンク期間中に処理時間が食われるADC変換とUSBへの送信を済ませるようにしています。 我ながら良く出来ました(笑)     while(1)     {         #if defined(USB_INTERRUPT) // See HardwareProfile.h             if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))             {                 USBDeviceAttach();             }         #endif     if(adc_flag == TRUE) { adc

2.4GHz版プロポ作製-ADCテスト編

イメージ
アクセルとステアリング用のVRの読み出しに使うADCのテストを実施。 マイコンの電源(USBパワー)-GND間にVRを2個繋いで、AN0とAN1に入力しました。 1.概要 2つのVR値(電圧)をAD変換を通して読み出しては、USBを通じてPCへ送り続けるアプリです。 PIC18F4550は、AD入力は10チャンネルほどありますが、変換は1チャンネルずつしかできないので、AN0とAN1の入力を切り替えては変換して読み出すという手順となります。 2.メインルーチン部 void main(void) { int ADread0,ADread1;     InitializeSystem();     while(1)     {         #if defined(USB_INTERRUPT) // See HardwareProfile.h             if(USB_BUS_SENSE && (USBGetDeviceState() == DETACHED_STATE))             {                 USBDeviceAttach();             }         #endif     SetChanADC(ADC_CH0); ConvertADC(); //AD変換開始         while( BusyADC());          //AD変換待ち         ADread0 = ReadADC();      //AD読込み SetChanADC(ADC_CH1); ConvertADC(); //AD変換開始         while( BusyADC());          //AD変換待ち         ADread1 = ReadADC();      //AD読込み PrintADC(ADread0,ADread1); //USBへAD値を出力する処理     }//end while }//end main 2.ADC初期化部   ※adc.hをインクルードしておく必要があります。

2.4GHz版プロポ作製-USBブートローダ編

イメージ
Microchip Solutions内にブートローダを発見したので動作を確認 1.マイコンにブートローダを書き込む。 所在:C:\Microchip Solutions v2011-12-05\USB\Device - Bootloaders ブートローダは2種類ありましたが、推奨のHID Bootloaderを使用しました。 使用しているマイコン(PIC18F4550)用のhexファイルをライターで書き込みます。 これで、以降はUSBケーブル経由でプログラムの書き込みが可能になります。 注)ブートローダーが約1KB消費するので、プログラムは残容量に制限されます。 2.アプリをブートローダ対応にする。 ベクター類のアドレスを変更する必要がありますが、BasicDemoのmain.c内「VECTOR REMAPPING」に定義が記述済みです。 注)下記の様に、ブートローダの種類、使用/未使用の定義がusb_config.h内に有る様に書かれていますが、これはガセで、HardwareProfile.h内に記述されていました。   //the USB bootloader.  If no bootloader is used, edit the //usb_config.h file and comment out the following defines:   //#define PROGRAMMABLE_WITH_USB_HID_BOOTLOADER   //#define PROGRAMMABLE_WITH_USB_LEGACY_CUSTOM_CLASS_BOOTLOADER アプリをビルドしてhexファイルが作成されれば完了です。 3.USB経由でアプリを書き込む。 PC用のローダーを実行します。 Vistaマシンでは正常動作しました。 VC++のプロジェクトファイルも入っていたので必要ならカスタマイズも可能です。 実行すると、 マイコンボードの電源ON又はUSBケーブルを繋ぐ(バスパワー時)と、 フォルダアイコ